МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра інформаційних
систем та мереж
Лабораторна робота №9
на тему:
Робота з масивами структур.
Львів-2008р.
Назва роботи:
Робота з масивами структур
Мета роботи:
Здобути практичні навички використання масивів структур для опрацювання таблиць різнотипних даних мови Сі.
Завдання лабораторної роботи:
У завданнях першої частини необхідно:
Кількість елементів масиву оголосити за допомогою макроконстант, визначених директивою #define. Верхню межу індексів масиву у циклах задавати за допомогою макроконстант;
Введення масивів структур з клавіатури та їх виведення на екран здійснювати у вигляді таблиць.
Введення вхідних даних та виведення результатів супроводжувати відповідними до умови задачі текстовими повідомленнями.
Після введення вхідних даних виконувати ехо-виведення їх значень на екран;
Для звернення до елементів масивів використати індекси;
У завданнях другої частини необхідно:
Кількість елементів масиву ввести з клавіатури, після чого виділити необхідний об’єм динамічної пам’яті для розміщення масиву структур;
Занести у динамічну пам’ять введені з клавіатури дані; для звернення до елементів масиву перевагу надати використанню вказівників замість індексів;
Введення та виведення масивів структур здійснювати у вигляді таблиць.
Після введення вхідних даних виконувати ехо-виведення їх значень на екран.
Введення вхідних даних та виведення результатів супроводжувати відповідними до умови задачі текстовими повідомленнями.
Перед виходом з програми звільнити зайняту динамічну пам’ять.
Текст програми:
Програма 1
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define n 3
struct Tvlasn
{
char imja[15];
char prizv[15];
};
struct TCar
{
char marka[15],kolir[15];
long int nomer; int rik;
Tvlasn vl;
};
int RZ(TCar a[n]);
void main()
{ TCar car[n],temp; int i,j;
clrscr();
for (i=0; i<n; i++)
{
printf("Введiть марку авто %d => ",i+1); scanf("%s",&car[i].marka);
printf("Введiть колiр авто %d => ",i+1); scanf("%s",&car[i].kolir);
printf("Введiть номер авто %d => ",i+1); scanf("%ld",&car[i].nomer);
printf("Введiть рiк випуску авто %d => ",i+1); scanf("%d",&car[i].rik);
printf("\nВведiть iнформацiю про власника авто %d:\n",i+1);
printf("Введiть iм'я власника авто %d =>",i+1); scanf("%s",&car[i].vl.imja);
printf("Введiть прiзвище власника авто %d =>",i+1); scanf("%s",&car[i].vl.prizv);
strcat(car[i].vl.prizv," ");
puts("--------------------------------------------------------------------------");
}
for (j=0; j<n-1; j++)
for (i=0; i<(n-1)-j; i++);
if ((car[i].marka)<(car[i+1].marka))
{
temp=car[i+1];
car[i+1]=car[i];
car[i]=temp;
}
puts("№ Марка Колiр Номер Рiк Данi про власника");
puts("--------------------------------------------------------------------------");
for (i=0; i<n; i++)
printf("%-6d %-13s %-10s %-11ld %-11d %-s\n",i+1,car[i].marka,car[i].kolir,car[i].nomer,car[i].rik,strcat
(car[i].vl.prizv,
car[i].vl.imja));
puts("--------------------------------------------------------------------------");
//printf("Кiлькiсть рiзних кольрiв кожної марки=%d\n",RZ(car));
getch();
}
int RZ(TCar a[n])
{int z=0,k=1,i,j;
for (j=0; j<n; j++)
{
for (i=0; i<j; i++)
if(i!=j)
if(strcmpi(a[j].kolir,a[i].kolir)) z=1; else {z=0; break;}
k+=z;
}
return k;}
Програма 2
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Tdata
{
int mis,den,rik;
};
struct TKl
{
char *pr[];
Tdata *data;
long int nom;
int botr,bper,gotr,gper,zl;
};
void main()
{TKl *kl; int i,n,d1,d2,m1,m2,r1,g; char *st;
clrscr();
printf("Введiть кiлькiсть клiєнтiв банку: "); scanf("%d",&n);
clrscr();
kl=(TKl*)malloc(n*sizeof(TKl));
for (i=0;i<n; i++)
{
clrscr();
printf("Введiть iнформацiю про клiєнта %d: \n\n",i+1);
gets(st);
printf("Прiзвище та iнiцiали клiєнта: ");gets(*(kl+i)->pr);
printf("№ рахунку: "); scanf("%ld",&(kl+i)->nom);
printf("Сума безготiвкового отримання: "); scanf("%d",&(kl+i)->botr);
printf("Сума безготiвкового переведення: "); scanf("%d",&(kl+i)->bper);
printf("Сума отримана готiвкою: "); scanf("%d",&(kl+i)->gotr);
printf("Сума видана готiвкою: "); scanf("%d",&(kl+i)->gper); puts("--------------------------");
printf("\nДата проведення операцiї:\n");
printf("День: "); scanf("%d",&(kl+i)->data->den);
printf("Мiсяць: "); scanf("%d",&(kl+i)->data->mis);
printf("Рiк: "); scanf("%d",&(kl+i)->data->rik);
}
clrscr();
printf("Введiть критерiї вiдбору:\n");
printf("День: (вiд/до) "); scanf("%d/%d",&d1,&d2);
printf("Мiсяць: (вiд/до) "); scanf("%d/%d",&m1,&m2);
printf("Рiк: "); scanf("%d",&r1);
printf("Граничне значення: "); scanf("%d",&g);
for(i=0; i<n; i++)
{
(kl+i)->zl=(rand()*100)+(kl+i)->botr+(kl+i)->gotr-(kl+i)->bper-(kl+i)->gper;
}
puts("\n№ рахунку Безгот. отр. Безгот. пер. Отр. гот. Вид. гот. Залишок");
puts("-----------------------------------------------------------------------------");
for(i=0; i<n; i++){
if (((kl+i)->data->den<=d2)&&((kl+i)->data->den>=d1&&(kl+i)->data->mis<=m2)&&(((kl+i)->bper+(kl+i)->gper)>=g)&&(kl+i)->data->mis>=m1&&(kl+i)->data->rik==r1)//&&kl[i].bper>1000)
printf("%-13ld %-15d %-14d %-11d %-10d %d \n",(kl+i)->nom,(kl+i)->botr,(kl+i)->bper,(kl+i)->gotr,(kl+i)->gper,(kl+i)->zl);
}
getch();
}
Результати виконання програми:
Програма 1
Програма 2
Висновки:
Я здобув практичні навички використання масивів структур для опрацювання таблиць різнотипних даних мови Сі.
Блок-схеми:
Програма 1
Програма 2