Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра інформаційних систем та мереж
Лабораторна робота №9
на тему
Робота з масивами структур
Львів 2008
Мета роботи: Здобути практичні навички використання масивів структур
для опрацювання таблиць різнотипних даних мови Сі.
1. Написати програму, яка перевiряє чи заданий масив структур (автор, назва
книги, рiк видання) є впорядкованим по одному із полів. Вивести масив на
екран у формі таблиці.
2. Сформувати масив структур з даними про успішність групи
студентів:прізвище та ін., № залікової книжки, оцінки з п’яти предметів.
Впорядкувати масив у порядку зростання кількості задовільних та
незадовільних оцінок і вивести його на екран у формі таблиці. Визначити
відсоток студентів, що мають задовільні або незадовільні оцінки.
Тексти програм:
1)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 2
void main()
{
struct tbook
{
char autor[20];
char nazva[20];
int rik;
};
int ch,i,j;
struct tbook a[n];
printf("vvedit\' %d elementiv tupy : autor nazva rik\n",n);
for(i=0;i<n;i++)
{
gets(a[i].autor);
gets(a[i].nazva);
scanf("%d",&(a[i].rik));
getchar();
}
clrscr();
printf("%-20s%-20s%s\n\n","AVTOR","NAZVA","RIK");
for(i=0;i<n;i++)
{
printf("%-20s%-20s%d\n",a[i].autor,a[i].nazva,a[i].rik);
}
getch();
printf("\n\nvuberit\' po 4omy shykatu\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
{
for(i=0;i<n-1;i++)
if(strcmp(a[i].autor,a[i+1].autor)>0)
{
puts("ne vporiadkovan");
getch();
exit(1);
}
puts("vporiadkovan");
getch();
exit(1);
}
case 2:
{
for(i=0;i<n-1;i++)
if(strcmp(a[i].nazva,a[i+1].nazva)>0)
{
puts("ne vporiadkovan");
getch();
exit(1);
}
puts("vporiadkovan");
getch();
exit(1);
}
case 3:
{
for(i=0;i<n-1;i++)
if(a[i].rik>a[i+1].rik)
{
puts("ne vporiadkovan");
getch();
exit(1);
}
puts("vporiadkovan");
getch();
exit(1);
}
}
getch();
}
2)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#define n 3
void main()
{
struct tstudent
{
char pib[30];
int nzk;
int mova, mat, ist, fiz, oit;
int z,nez;
};
struct tstudent *kn[n],*tmp;
int i,j,h;
for(i=0;i<n;i++)
kn[i]=(struct tstudent *)malloc(sizeof(struct tstudent));
puts(" pib[30]; int nzk, mova, mat, ist, fiz, oit;");
for(i=0;i<n;i++)
{
printf("Student %d :\n",i+1);
gets(kn[i]->pib);
scanf("%d%d%d%d%d%d",&kn[i]->nzk, &kn[i]->mova, &kn[i]->mat, &kn[i]->ist, &kn[i]->fiz, &kn[i]->oit);
getchar();
}
for(i=0;i<n;i++)
{
kn[i]->nez=kn[i]->z=0;
if(kn[i]->mova>2)kn[i]->z++;
else kn[i]->nez++;
if(kn[i]->mat>2)kn[i]->z++;
else kn[i]->nez++;
if(kn[i]->ist>2)kn[i]->z++;
else kn[i]->nez++;
if(kn[i]->fiz>2)kn[i]->z++;
else kn[i]->nez++;
if(kn[i]->oit>2)kn[i]->z++;
else kn[i]->nez++;
}
clrscr();
puts("uporiadkovatu za:");
puts(" 1. zadov.");
puts(" 2. nezadov.");
scanf("%d",&h);
getchar();
if(h==1)
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(kn[i]->z>kn[j]->z)
{
tmp=kn[i];
kn[i]=kn[j];
kn[j]=tmp;
}
if(h==2)
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(kn[i]->nez>kn[j]->nez)
{
tmp=kn[i];
kn[i]=kn[j];
kn[j]=tmp;
}
clrscr();
printf("\n\n%-30s%-6s%-6s%-6s%-6s%-6s%-6s\n\n","pib","# zal","mova","mat","ist","fiz","oit");
for(i=0,j=0,h=0;i<n;i++)
{
if(kn[i]->z>0)h++;
if(kn[i]->nez>0)j++;
printf("%-30s%-6d%-6d%-6d%-6d%-6d%-6d\n",kn[i]->pib,kn[i]->nzk, kn[i]->mova, kn[i]->mat, kn[i]->ist, kn[i]->fiz, kn[i]->oit);
}
h=(h*100)/n;
j=(j*100)/n;
printf("\nstydentiv jaki majiyt\' zadovil\'no - %d\nstydentiv jaki majiyt\' nezadovil\'no - %d",h,j);
getch();
}
Відлагодження програм:
1)
2)