Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра
Інформаційних
систем та мереж
Лабораторна робота №3
на тему
Інтегровані структури даних, запису.
Мета роботи: придбання і закріплення навиків у роботі із записами, в інтеграції даних, в модульному програмуванні.
Постановка завдання
Для заданої прикладної області розробити опис об'єктів цієї області. Розробити процедури, що реалізують базові операції над цими об'єктами, зокрема:
-текстове введення-виведення (консольний і файловий);
-присвоювання;
-задання константних значень;
-порівняння (не менше 2-х типів).
Підготувати файл початкових даних, що містять не менше 10 значень конкретних об'єктів.
Використовуючи процедури і описи модуля типу даних, розробити програму, що забезпечує введення початкових даних з першого файлу даних в пам'ять і зберігання їх в масиві, сортування масиву по алфавітному і по числовому параметру.
Варіанти індивідуальних завдань
Для кожної області перераховані параметри об'єкту. Серед параметрів обов'язково є ключове алфавітне поле (наприклад, прізвище), яке ідентифікує об'єкт, у кожного об'єкту є також одне або декілька числових полів, по яким вірогідні звернення до об'єкту. Набір характеристик може бути розширений і ускладнений по розсуду виконавця.
Індивідуальні завдання:
8
Текстові редактори
найменування, фірма-виготівник, кількість вікон, кількість шрифтів, вартість
Текст програми:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 5
struct TST
{
char name[20];
char firm[20];
int nwind;
int nfont;
int price;
};
from_file(TST *St);
from_keyb(TST *St);
to_scr(TST *St);
to_file(TST *St);
sort(TST *St, int k);
void main()
{ TST St[n]; char c;
clrscr();
printf("Виберiть дiю:\n");
printf("[1] Ввести данi з клавiатури.\n");
printf("[2] Зчитати данi з файлу.\n");
z:c=getch();
switch (c)
{
case '1': {clrscr(); from_keyb(St); break; }
case '2': { from_file(St); break; }
default: goto z;
}
clrscr();
printf("Виберiть дiю:\n");
printf("[1] Сортувати за назвою.\n");
printf("[2] Сортувати за фiрма-виготiвником\n");
printf("[3] Сортувати за кiлькiстю вiкон\n");
printf("[4] Сортувати за кiлькiстю шрифтiв\n");
printf("[5] Сортувати за вартiстю\n");
printf("[6] Не сортувати.\n");
z1:c=getch();
switch (c)
{
case '1': {sort(St,1); break; }
case '2': {sort(St,2); break; }
case '3': {sort(St,3); break; }
case '4': {sort(St,4); break; }
case '5': {sort(St,5); break; }
case '6': break;
default: goto z1;
}
clrscr();
printf("Виберiть дiю:\n");
printf("[1] Ввести данi на екран.\n");
printf("[2] Зчитати данi в файл.\n");
printf("[3] На екран i в файл.\n");
zz:c=getch();
switch (c)
{
case '1': {clrscr(); printf("Введенi/Зчитанi данi:\n"); printf("--------------------------------------------------------------------------------");
to_scr(St); break;}
case '2': {clrscr(); printf("\Данi записано в файл.\n"); to_file(St); break;}
case '3': {clrscr(); printf("\nВведенi/Зчитанi данi:\n"); to_scr(St); to_file(St); break;}
default: goto zz;
}
getch();
}
// ========= FUNCTIONS ============
int from_file(TST *st)
{
FILE *f; int i=0; TST p;
f=fopen("C:\\DATA.BIN","rb");
while(fread(&p,sizeof(p),1,f),(!feof(f)))
{st[i]=p; i++;}
fclose(f);
printf("Данi зчитано.\n");
return 0;
}
from_keyb(TST *St)
{int i; TST p;
printf("Введiть iнформацiю про текстові редактори:\n");
for(i=0; i<n; i++)
{fflush(stdin);
printf("\n№ %d:\n---------------\n",i+1);
printf("Назва: "); gets(St[i].name);
printf("Фiрма-виготiвник: "); gets(St[i].firm);
printf("Кiлькiсть вiкон: "); scanf("%d",&St[i].nwind);
printf("Кiлькiсть шрифтiв: "); scanf("%d",&St[i].nfont);
printf("Вартiсть: "); scanf("%d",&St[i].price);
}
return 0;
}
to_file(TST *St)
{FILE *f; int i; TST p;
f=fopen("C:\\DATA.BIN","wb");
for (i=0; i<n; i++)
{
p=St[i];
fwrite(&p,sizeof(p),1,f);
}
return 0;
}
to_scr(TST *St)
{int i;
printf("№ Назва Фiрма-вигот. К-сть вiкон К-сть. шрифтiв Вартiсть\n");
printf("--------------------------------------------------------------------------------");
for (i=0; i<n; i++)
{
printf("%-3d %-18s %-15s %-12d %-15d %-d\n",i+1,St[i].name,St[i].firm,St[i].nwind,St[i].nfont,St[i].price);
}
printf("--------------------------------------------------------------------------------");
return 0;
}
sort(TST *St, int k)
{int i,j; TST p;
for (j=0; j<n; j++)
for (i=0; i<n-1; i++)
{
switch(k)
{
case 1: {if(strcmp(St[i].name,St[i+1].name)>0) goto true; else goto false; }
case 2: {if(strcmp(St[i].firm,St[i+1].firm)>0) goto true; else goto false; }
case 3: {if(St[i].nwind>St[i+1].nwind) goto true; else goto false; }
case 4: {if(St[i].nfont>St[i+1].nfont) goto true; else goto false;}
case 5: {if(St[i].price>St[i+1].price) goto true; else goto false;}
}
true:
{
p=St[i];
St[i]=St[i+1];
St[i+1]=p;
}
false: // go to continue
}
return 0;
}
Результати виконання програми:
Висновки:
При виконанні даної роботи я закріпив навики в роботі із записами, в інтеграції даних та в модульному програмуванні.