ТОП 10:

Записи з фіксованою частиною.



Мета: Оволодіти практичними навичками розробки та програмування програм з використанням записів з фіксованою частиною.

 

Теоретичні відомості

Запис - структурований тип даних, що складається з фіксованого числа, компонент одного або кількох типів. Формат типу запису:

TYPE <ім'я типу>=RECORD ;

<ідентифікатор поля>:<тип компонента>;

………………………….. <ідентифікатор поля>:<тип компонеита>;

end;

VAR <ідентифікатор>:<ім'я типу>;

 

Обсяг пам'яті, що необхідний для запису, складається з довжини компонентів. Звертання до поля (компоненту) запису здійснюється за допомогою ідентифікатора змінної та ідентифікатора поля, розділених крапкою. Така комбінація зветься складеним ім'ям. Наприклад:

N.NUMBER:=1993; N.MARKA:=‘ГA3-24’;

Оператор приєднання WITH використовується для спрощення роботи з компонентами запису. Щоб не використовувати складене ім'я компонентів запису, застосовують оператор WITH, у якому вказується змінна типу запис. Після цього можна працювати з іменами компонентів, як із звичайними змінними. Формат оператора:

WITH <змінна типу запис> DO <оператор>;

WITH n DO begin {запис n має поля number, marka}

number:=1996; marka:= 'volvo';

end;

Pascal дозволяє вкладання записів один в одний, відповідно оператор WITH може бути вкладеним.

WITH Rl DO

WITH R2 DO

WITH R3 DO

Це еквівалентно записуWITH R1,R2,R3 DO ...

 

Приклад програми

program Iab_4_l;

{ Ввести масив записів, кожен з яких містить відомості про прізвище, адресу та номер телефона. Скласти програму, що сортує ці дані за алфавітом прізвищ, знаходить у масиві записів запис, що введений з клавіатури}

uses crt;

type anketa= record { Тип запису, що містить прізвище, }

FIO: string; {адресу та телефон }

adress:string;

phone:string;

end;

Var

mas:array [1..10] of anketa; { Масив записів 1 }

 

і, j,k: integer; {параметри циклів}

s:char; {змінна для закінчення вводу даних}

rec:anketa; {запис для пошуку}

procedure wod; {————————ввід масиву записів—————}

Begin

і:=0;

Repeat

і:=і+1;

with mas[i] do

Begin

write(‘FIO’); readln (FIO);

write ( 'adress '); readln(adress);

write ('tel '); readln (phone);

end;

writeln('continue? y/n');

s:=readkey; {ввід з клавіатури відповіді: y/n }

until upcase(S)='N'; {зміна малих літер на великі}

end;

procedure vyvod; {———вивід масиву записів——}

Begin

writeln(’— ——FIO——— ————— adress—————— telephone— ’);

for j:=l to і do {перегляд елементів масиву записів}

Begin

with mas[j] do {для кожного запису вивести прізвище, адресу, телефон}

Begin

write(' ',FIO );

write(' ',adress);

write(' ',phone);

end;

writeln;

end;

end;

procedure sort; {——.-сортування масиву за прізвищами— —}

var tmp:anketa; {тимчасова змінна для переміни елементів масиву}

Begin

for j:=l to i-1 do {фіксація елемента масиву}

for k:=j+l to і do {перегляд інших елементів масиву}

Begin

if mas [j].fio>mas[k].fio then {якщо елементи не впорядковані}

Begin

tmp:=mas[j]; {переставлення елементів місцями}

mas[j]:=mas[k];

mas[k]:=tmp;

end;

end;

end;

procedure search; {——— ввід запису для пошуку в масиві——}

var flag: boolean; {змінна для визначення факту відсутності даних}

Begin

writeln ('input record for search:fio,adress,tel');

readln(rec.fio);

readln(rec.adress);

readln(rec.pnone);

for j:=l to і do {пошук запису по введеному значенню}

with mas[j] do begin if(flo=rec.fio)and(adress=rec.adress)and(phone=rec.phone)

{якщо записи співпадають}

Then

Begin

flag:=true; {прапорець позначення знайденого запису}

writeln ('record found: ',rec.fio,' ',rec.adress.",rec.phone);

break; (переривання циклу ,тому що знайдений запис}

End

else flag:=false; {прапорець позначення відсутності запису}

end;

if not flag then writeln('record not found');

end;

begin {————головна програма——————}

writeln('rezults of program var 30');

writeln(¢auther student...');

wod; {ввід масиву записів}

writeln (¢array of input's records');

vyvod; {вивід масиву записів}

sort; {сортування масиву}

writeln('array of records after sort');

vyvod; {вивід відсортованого масиву}

search; {пошук потрібного запису}

End.


Структури в мові С.

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

struct <ім’я структури> {

<опис елементів>

};

Для виділення пам’яті під структуру необхідно визначити структурну змінну:

<ім’я структури> <ім’я змінної>;

 

Приклад 1.

struct lab{

int num;

char* name;

};// визначення структурного типу з іменем lab

lab Lаb_10;// опис конкретної структуриз іменем Lab_10.

Можна одночасно визначати структурний тип і описувати за допомогою нього структуру:

Приклад 2.

struct gr // ім’я структурного типу

{ char [10];// елемент структури

int year, nomer;// однотипні елементи структури

} grupa1; // ім’я структурної змінної

Елементи структури називають полями (num, name). Поля можуть бути будь-якого базового чи похідного типу, наприклад, масивом, вказівником, об’єднанням або іншою структурою.

Для звернення до полів структури використовуються уточнені імена через операцію вибору: “крапка” (“.”) при зверненні через ім’я структури і операцію непрямого доступу “->” при зверненні через вказівник.

Приклад 3.

Lab_10.num=10;

lab*ptrlab=&Lab_10;

ptrlab->name=”Структури”;

Ввід/вивід структур виконується поелементно (cin>>Lab_10.num;).

Структури одного типу можна копіювати.

Структури, пам’ять під які виділяється на етапі компіляції, можна ініціалізувати, перераховуючи значення їх елементів:

lab Lab10={10, “Структури”}.

Можна створювати масиви структур.

Приклад 4.

// структура для опису дати

struct date { int day,month,year;};

/* масив з 5-ти структур типу date , кожна з яких складається з 3-х елементів типу int, яким надаються початкові значення*/

date d[5]={ { 1,3,1980}, { 5,1,1990}, {1,1,2002}};

Приклад 5.

Програма, що демонструє використання структур для ведення обліку успішності студентів деякої академічної групи:

#include <conio.h>

#include <iostream.h>

struct Spysok {

char PIB[20];// масив для зберігання прізвищ студентів

char Grup[10];// номер групи

int Ot[3];// масив з трьох оцінок

float S_Bal;// середній бал

} *vid;// вказівник, на структуру

void Vvid(int nom, Spysok *vid)

{ printf("\n Vvedit vidomosti \n");

printf(“%d”,nom+1);

printf("\n PIB - "); scanf(%s”,vid->PIB);

printf(" Nomer Gr - "); scanf(“%s “, vid->Grup);

float s=0;

for(int i=0;i<3;i++) {

cout << "\n Otsinki - "; cin >> vid->Ot[i];

s+=vid->Ot[i]; }

vid->S_Bal=s/3;

}

void main()

{ struct Spysok Stud[50]; int i, N; char Litera;

clrscr();

cout << "\n Vvedit kilkist studentiv u grupi < 50 "; cin >> N;

for(i=0;i<N;i++) Vvid(i,&Stud[i]);

cout << "\n Spysok studentiv”;

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

cout<<"\n"<<Stud[i].PIB<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;

cout << "\n Poshuk vidomostey pro studentiv za pershoyu\ literoyu prizvyscha\n";

cin >> Litera;

if (islower(Litera))toupper(Litera);

cout << "\n Vidomosti pro Students:";

int kod_p=0;

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

if(Stud[i].PIB[0]==Litera)

{ kod_p=1;

cout<<”\n"<<Stud[i].PIB

<<endl<<Stud[i].Grup<<endl<<Stud[i].S_Bal;

}

if(kod_p==0) cout << " Takyx nemae!";

getch();

}

Варіанти завдань

1.Ввести масив записів, що містять відомості про прізвища і номери телефонів. Упорядкувати масив за прізвищами і надрукувати вхідний та впорядкований масиви.

 

2. Ввести масив записів, що містять відомості про прізвища та адреси. Масив впорядкований за прізвищами. Програма вводить новий запис і вставляє його в потрібне місце масиву.

 

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

 

4. Ввести масив записів, що містять відомості про прізвища та адресу. Записи впорядковані за адресою. Необхідно ввести новий запис і вилучити з масиву той, що містить задане прізвище

 

5. Ввести масив записів, кожен з яких містить відомості про прізвище автора та назву книги. Побудувати новий масив записів, що містить додатково відомості про рік видання. Рік видання береться з масиву записів, що містить назву книги та рік.

 

6. Ввести масив записів, що містять відомості про прізвища та відповідні їм адреси. Масив впорядкувати за прізвищами. Ввести новий запис та замінити запис, що містить вказане прізвище, на введений.

 

7. Ввести масив записів, кожен з яких містить відомості про прізвища, адресу та номер телефону. Скласти програму, яка переносить ці дані в масив записів, що не містить відомостей про номери телефонів. Впорядкувати масив за прізвищами.

 

8. Задані два масиви записів, кожен з яких містить відомості про прізвища та адресу. Складена програма повинна переносити (в будь-якому порядку) записи з двох масивів у третій, причому з двох однакових записів переноситься тільки один.

 

9. Заданий масив записів, що містить відомості про прізвища та відповідні їм адреси. Побудувати новий масив записів, який містить прізвища з початковою літерою, що вводиться з клавіатури та відповідні їм адреси.

 

 

10. Задані два масиви записів, кожен з яких містить відомості про прізвища та

адреси. Скласти програму, яка друкує однакові записи обох масивів за алфавітом.

 

11. Ввести два масиви записів, що містять відомості про прізвища та адреси. Необхідно записи, які є в першому масиві та яких нема у другому масиві, переписати до третього масиву того ж виду.

 

12. Заданий масив записів, що містять відомості про прізвища та екзаменаційну оцінку. Скласти програму, яка знаходить та друкує прізвища людей, що отримали задану оцінку.

 

 

13. Задані два масиви записів. Перший містить дані про прізвища та адреси. Другий - про прізвища та відповідні номери телефонів. Скласти програму, яка об'єднує записи обох масивів та заносить їх у третій масив.

 

14. Ввести масив записів, що містять відомості про назви та адреси інститутів. Програма вилучає записи, що містять поля. що заповнені тільки пропусками.

 

15. Заданий масив записів, що містять відомості про прізвища та відповідні їм номери телефонів. Масив впорядкувати за прізвищами. Програма повинна вставляти новий запис у відповідне місце масиву залежно від прізвища, розсовуючи інші елементи масиву.

Контрольні запитання:

1. Що таке запис та його формат.

2. Оператор приєднання та його вигляд.

3. В чому зручність використання оператору приєднання?

4. Чому тип запис називають комбінованим типом даних?

5. Як змінити значення ідентифікаторів запису?

 


Лабораторна робота №10

Файли.

 

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

 







Последнее изменение этой страницы: 2016-09-05; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.232.188.251 (0.022 с.)