МІНІСТЕРCТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ICM
Лабораторна робота №10
“ Робота з масивами структур”
Мета роботи: Здобути практичні навички використання масивів структур для опрацювання таблиць різнотипних даних мови Сі.
Хід виконання роботи
Масиви структур у статичній пам'яті
Сформувати масив структур з даними про студентів: прізвище, дата народження, місце народження. Дата народження задається у вигляді ДД:ММ:РР. Відсортувати масив за зростанням дат народження та вивести його на екран у формі таблиці.
#include <stdio.h>
#include <conio.h>
#define n 40
struct dani
{
char neam[20];
char den,mis,rik;
char misce[20];
};
void main()
{
struct dani stud[n],zmin;
int k,j,i;
printf("\n\nVvedit kilkist studentiv ");
scanf("%d",&k);
for(i=0;i<k;i++)
{
printf("prizvyshe %d-go studenta - ",i+1);
scanf("%s",&stud[i].neam);
printf("data narodzenja (dd:mm:yy)");
scanf("%2d:%2d:%2d",&stud[i].den,&stud[i].mis,&stud[i].rik);
printf("misce narodzenja ");
scanf("%s",&stud[i].misce);
}
printf("\n\n| prizvyshe | data | misce narodzenja |");
printf("\n|____________________|________|____________________|");
for(i=0;i<k;i++)
printf("\n|%-20.20s|%02d:%02d:%02d|%-20.20s|", stud[i].neam,stud[i].den,stud[i].mis,stud[i].rik,stud[i].misce);
for(j=0;j<k;j++)
for(i=0;i<k-j-1;++i)
if(stud[i].rik>stud[i+1].rik){zmin=stud[i];stud[i]=stud[i+1];stud[i+1]=zmin;}
else if((stud[i].mis>stud[i+1].mis)&&(stud[i].rik==stud[i+1].rik))
{zmin=stud[i];stud[i]=stud[i+1];stud[i+1]=zmin;}
else if((stud[i].den>stud[i+1].den)
&&(stud[i].mis==stud[i+1].mis)
&&(stud[i].rik==stud[i+1].rik))
{zmin=stud[i];stud[i]=stud[i+1];stud[i+1]=zmin;}
printf("\n\n| prizvyshe | data | misce narodzenja |");
printf("\n|____________________|________|____________________|");
for(i=0;i<k;i++)
printf("\n|%-20.20s|%02d:%02d:%02d|%-20.20s|", stud[i].neam,stud[i].den,stud[i].mis,stud[i].rik,stud[i].misce);
getch();
}
Масиви структур у динамічній пам'яті
Сформувати масив структур з даними про автомобілі: марка, колір, номер, рік випуску, дані про власника. Відсортувати масив по марках автомобілів та вивести його на екран у формі таблиці. Визначити кількість різних кольорів кожної марки.
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <conio.h>
struct dani
{char marka[10],kolir[10],nomer[8],rik_v[5],dani_vla[34];};
struct mas
{char marka[10];
int kil;};
void main(void)
{ int n,i,j,m=0;
char k=1,s[34];
struct dani *a,*p,zmin;
struct mas *str;
printf("\nVveidt kilkist avto ");
scanf("%d",&n);
//vydilenja pamjati
str=(struct mas*)calloc(n,sizeof(struct mas));
a=(struct dani*)calloc(n,sizeof(struct dani));
printf("\n marka | kolir |nomer |rik | DANI\n");
for(p=a;p<a+n;p++)
scanf("%s %s %s %s %s",(*p).marka,(*p).kolir,(*p).nomer,(*p).rik_v,(*p).dani_vla);
//sortuvanja
for(i=0;i<n;i++)
for(p=a;p<a+n-i-1;p++)
if(strnicmp((char*)p,(char*)(p+1),10)>0){zmin=*p;*p=*(p+1);*(p+1)=zmin;}
else if((strnicmp(((char*)p)+10,((char*)(p+1))+10,10)>0)
&&(strnicmp((char*)p,(char*)(p+1),10)==0))
{zmin=*(p);*(p)=*(p+1);*(p+1)=zmin;}
//vyvid danyh
puts("\nvidsortovani dani po markah\n");
puts(" marka | kolir | nomer |rik | DANI");
puts("__________________________________________________________");
for(p=a;p<(a+n);p++)
{printf("\n%-10s|%-10s|%-8s|%-4.4s|%s",(*p).marka, (*p).kolir,(*p).nomer,(*p).rik_v,(*p).dani_vla);
//vyznachenja kilkosti koloriv koznoji marky
if(strnicmp((char*)p,(char*)(p+1),10)!=0)
{ strncpy( s,(char*)p,10);
strcat(str[m].marka,s);
str[m].kil=k;
k=1;m++;
}
else if(strnicmp(((char*)p)+10,((char*)(p+1))+10,10)!=0) k++;
}
puts("\n\n marky avto i kilkist riznyh koloriv\n");
for(i=0;i<m;i++)
printf("\n|%-10.10s|%d|",str[i].marka,str[i].kil);
getch();
free(str);
free(a);
}
Висновок: на даній лабораторній роботі я здобув практичні навички використання масивів структур для опрацювання таблиць різнотипних даних мови Сі.