Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Приклад

/* ЗАНЯТТЯ N 15

Розробив Петров О.В.

Оголосити структури і покажчики на них, виконати ініціалізацію.

Оголосити масив покажчиків на структурний тип з виділенням

пам'яті для нього в купі, виконати його ініціалізацію.

Одержати доступ до елементів структур з використанням

покажчиків, змінити ці елементи. Вивести значення елементів

масиву структур на екран із застосуванням функції. Структура

містить прізвище і дату народження (число, місяць, рік) студента.

Ввести інформацію про студентів і знайти дані про першого

у масиві структур студента, що народився заданого числа. */

#include <stdio.h>

#include <conio.h>

#define N 3

#define M 20

struct stud

{ char name[M];

int day, month, year;

};

stud data[N]; //Глобальний масив з N структур типу stud

//Функція пошуку даних у глобальному масиві data[ і ].day = = j

int poisk( int j );

//print_st( ) - функція виведення елементів структури з глобального

//масиву, num - кількість структур для виведення

void print_st(int num);

//init_loc( ) - функція для ініціалізації структури типу stud

stud *init_ptr( void );

void print_ptr(stud *); //Функція виведення елементів структури

void main( )

{ int i = 0, j, a;

clrscr( );

stud arrloc[N]; //Масив з N структур

stud *dloc[N]; //Масив покажчиків на структурний тип stud

stud *pstr; //Покажчик на структурний тип stud

pstr = arrloc; //Аналогічно pstr = &arrloc[ 0 ];

while (a && і < N) //Введення елементів масиву структур arrloc[N]

{ printf("Введіть прізвище студента : ");

scanf("%s", pstr -> name); fflush(stdin);

printf("Введіть дату народження (чч мм рр) : ");

scanf("%d %d %d", &pstr -> day, &pstr -> month, &pstr -> year);

fflush(stdin);

// printf("%-15s - %2d.%2d. %4d\n", pstr -> name, pstr -> day,

// pstr -> month, pstr -> year); //Контроль значень при введенні

printf("t\t Продовжити введення ? y/n ");

char c = getche( ); printf("\n");

if (c = = 'n' || c = = 'N') a = 0;

pstr ++; //Перехід до наступної структурі в масиві arrloc[N]

і ++;

} //end while

printf("Виведення значень елементів масиву структур arrloc[ і ] \n ");

printf("з використанням покажчика \n ");

j = i;

pstr = &arrloc[ 0 ]; //Покажчик адресує масив структур arrloc[ ]

for(i = 0; i < j; i ++)

{ print_ptr( pstr );

dloc[ і ] = new stud; //Виділення пам'яті для структури в "купі"

dloc[ і ] = pstr; //Ініціалізація елементів локального масиву покажчиків

pstr ++;

}

printf("Введення відсутніх значень елементів масиву структур \n ");

printf("з використанням масиву покажчиків \n ");

for ( і = j; і < N; і ++)

dloc[ і ] = init_ptr( ); //Виділення пам'яті для структури у функції

printf("Виведення значень елементів масиву структур \n ");

printf("з використанням масиву покажчиків \n ");

for ( і = 0; і < N; і ++)

{ print_ptr(dloc[ і ] );

data[ і ] = *dloc[ і ]; //Ініціалізація елементів глобального

} //масиву структур

printf("Виведення (N - 2) перших значень елементів глобального \

масиву структур \n ");

print_st(N - 2);

printf("Введіть день для пошуку в масиві структур \

першого студента : ");

scanf("%d", &j); fflush(stdin);

a = poisk( j );

if (a!= - 1) print_ptr( &data[ a ] );

else printf("Немає таких студентів ");

for ( і = 0; і < N; і ++) delete dloc[ і ]; //Звільнення пам'яті в "купі"

getch( );

} //End main( )

int poisk(int j) //Функція пошуку даних (data[ і ].day = = j)

{int a = - 1; //у глобальному масиві структур data[ і ]

for (int i = 0; i < N; i ++)

if (data[ i ].day = = j) {a = i; return a;}

return a;

} //End poisk( )

//print_st( ) - функція виведення елементів структури з глобального

void print_st(int num) //масиву, num –кількість структур для виведення

{ for (int і = 0; і < num; і ++)

printf("%-15s - %2d %2d %4d \n", data[ i ].name, data[ i ].day,\

data[ i ].month, data[ i ].year);

} //End print_st( )

//init_loc( ) - функція для ініціалізації структури типу stud

stud *init_ptr( void )

{ stud *pst = new stud; //Виділення пам'яті в "купі"

printf("Введіть прізвище студента : ");

scanf("%s", &pst -> name);

printf("Введіть дату народження(чч мм рр) : ");

scanf("%d .%d .%d", &pst -> day, &pst -> month, &pst -> year);

return pst;

} //End init_loc( )

void print_ptr(stud *pdt) //Функція виведення елементів структури

{ printf("%-15s - %2d .%2d .%4d\n", pdt -> name, pdt -> day,\

pdt -> month, pdt -> year);

} //End print_ptr( )

/* Введіть прізвище студента : Petrov

Введіть дату народження (чч мм рр) : 12 7 1980

Продовжити введення ? y/n y

Введіть прізвище студента : Sidorov

Введіть дату народження (чч мм рр) : 24 8 1983

Продовжити введення ? y/n n

Виведення значень елементів масиву структур arrloc[ і ]

з використанням покажчика

Petrov - 12. 7. 1980

Sidorov - 24. 8. 1983

Введення відсутніх значень елементів масиву структур

з використанням масиву покажчиків

Введіть прізвище студента : Ivanov

Введіть дату народження (чч мм рр) : 24 5 1982

Виведення значень елементів масиву структур

з використанням масиву покажчиків

Petrov - 12. 7. 1980

Sidorov - 24. 8. 1983

Ivanov - 24. 5. 1982

Виведення (N - 2) перших значень елементів глобального масиву структур

Petrov - 12. 7. 1980

Sidorov - 24. 8. 1983

Введіть день для пошуку в масиві структур першого студента : 24

Sidorov - 24. 8. 1983 */