Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_8_A.doc
Скачиваний:
15
Добавлен:
17.05.2015
Размер:
104.96 Кб
Скачать

Indl.Fam, indl.Im, ind1.Ot);

printf(“Рік народження - %d\n", indl. fl. year);

printf("Місяць народження - %d-й\n", ind1.f1.month);

printf(“День народження - %d-й\n", ind1.f1.day);

/* виведення відомостей про громадянина ind1*/

}

Запис типу date (дата) містить три елементи: day (день), month (місяць) з (рік). Запис типу person (людина) містить чотири елементи: fam[20](прізвище im[20] (ім'я), ot[20] (по батькові), f1 (дата народження). Останній з них (f1) – це вкладений запис типу date.

Результати роботи програми:

Вкажіть прізвище, ім'я, по батькові, день,

місяць і рік народження громадянина ind1

Сидоров

Петро

Іванович

3

5

1986

Відомості про громадянина ind1

Прізвище, ім'я, по батькові: Сидоров Петро Іванович

Рік народження – 1986

Місяць народження – 5-й

День народження – 3-й

Третя програма показує використання записів у вигляді елементів масиву pibm. Кожен такий елемент в свою чергу включає такі компоненти: mem (пам'ять), sp (швидкодія), model [20] (модель ЕОМ) :

/* Масиви записів */

#include <stdio.h>

struct computer { int mem, sp;

char model[20]; } pibm[10];

/* оголошення запису типу computer;

оголошення масиву pibm типу computer */

main()

{ int i, j, к, prix;

for(i=0; i<10; i++) {

ргintf(“Введіть відомості про ЕОМ %d і ознаку (0 – кінець;

\n інша цифра - продовження)\n", i);

ргintf(“модель ЕОМ – “);

scanf(“%s”, pibm[i].model);

рrintf("об'єм оперативної пам'яті - ");

scanf(“%d”, &pibm[i].mem);

printf("продуктивність - ");

scanf(“%d”, &pibm[i].sp);

printf(“ознака – “); scanf(“%d”, &priz); k=i;

if(!priz) break;}

/* тут !priz - операція заперечення ознаки priz; break -вихід з циклу for, якщо priz = 0 */

for(i=0; i<10; i++){

printf("\nПро яку ЕОМ ви хочете одержати відомості?\n

( введіть номер від 0 до 9)\n”);

scanf(“%d”, &j);

if ( j>k ) { printf(“Heма відомостей про цю ЕОМ\n ”); continue; }

printf(“ персональна ЕОМ %s\n", pibm[j].model);

printf("об'єм оперативної пам'яті - %d К байтів\n", pibm[j].mem);

рrintf(“продуктивність-%d млн. операцій в секунду\n",pibm[j].sp);

printf("ознака - "); scanf("%d", &priz);

if(!priz) break; }

/* введення відомостей про ЕОМ і занесення в масив pibm

записів типу computer (перший цикл for); виведення на

екран відомостей про ЕОМ (другий цикл for) */ }

Результати роботи програми:

Введіть відомості про ЕОМ 0 і ознака (0 – кінець; інша цифра- продовження)

модель ЕОМ – Zeleron

об'єм оперативної пам'яті – 512

продуктивність – 1

ознака – 1

Введіть відомості про ЕОМ 1 і ознаку (0 – кінець; інша цифра – продовження)

модель ЕОМ – ЕС2000

об'єм оперативної пам'яті – 1024

продуктивність – 1

ознака – 0

Про яку ЕОМ ви хочете одержати відомості?

(Введіть номер від 0 до 9)

2

персональна ЕОМ ЕС2000

об'єм оперативної пам'яті – 1024 До байт

продуктивність – 1 млн. операцій в секунду

ознака – 0

Використання розглянутих програм на практиці навряд чи доцільне. Проте далі, після невеликої модифікації, такі програми можуть виявитися дуже корисними. При цьому масиви записів необхідно організовувати і зберігати у файлах на диску і потім у міру потреби вибирати з них необхідну інформацію.

Унарна операція & дозволяє одержати адресу запису. Припустимо, що задане оголошення:

struct date { int d, m,y; }day;

Тут day – запис типу date, який включає три елементи: d, m і у. Рядок виду struct date *db; встановлює той факт, що db – це покажчик на запис типу date. Тепер для вибору елементів d, m, у запису необхідно використовувати конструкції: (* db).d, (*db).m, (*db).y.

Дійсно, db – адрес запису, * db — сам запис. Круглі дужки тут необхідні, оскільки крапка має вищий, ніж зірочка (*), пріоритет.

Для аналогічних цілей в мові СІ передбачена додаткова операція

-> (два символи А15 і D16). Вона теж вибирає елемент запису і дозволяє представити розглянуті вище конструкції в простішому вигляді: db- >d, db —>m, db —>y. Приклади використання покажчиків на записі і операції - >будут дані далі (див. с.151).

Соседние файлы в папке lexzii_08