Описание переменных

 

Описание локальных переменных приведено в таблице 4

 

Таблица 4. Описание локальных переменных функции func_vivod

 

Имя переменной Тип переменной Назначение
i Int Вспомогательная переменная
Блок-схема функции func_vivod

Рис.3 Блок-схема функции vivod

 

Описание функции func _ obrab

Назначение

Используется для обработки исходной после, формирования новой матрицы.

Прототип

NT* func_obrab(NT *,int,int *),где NT*-указатель на структуру, int - количество элементов исходной структуры, int*-указатель на количество элементов новой структуры,NT*-тип возвращаемого значения.

 

Пример вызова

y=func_obrab(people,m,&n);

 

Описание переменных

 

Описание локальных переменных приведено в таблице 5

 

Таблица 5. Описание локальных переменных функции func_obrab

 

Имя переменной Тип переменной Назначение
i.j Int Вспомогательные переменные
y *NT Указатель на структуру swimmers

 

 

Блок-схема главной функции.

 

 

 

 

Текст исходной программы на языке C/C++.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

typedef struct swimmers {char name[20]; //Имя пловца

char surname[20]; //Фамилия

int dist; //Дистанция

char country[81]; //Страна

} NT;

NT* func_vvod (int *m);

void func_vivod(NT *,int);

NT* func_obrab(NT *,int,int *);

int main(void)

{

int m=0,n=0,c;

int fl1=0,fl2=0,fl3=0;

char d;

NT *people,*y;

do

{

system("cls");

puts("-----------Menu--------\n");

puts("1.Zapolnenie stryktyri \n");

puts("2.Vivod structuri \n");

puts("3.Obrabotka structuri \n");

puts("4.Vivod novoi structuri\n");

puts("5.Zaverchenie programmi\n");

puts("-----------------------");

puts("Viberite punkt");

scanf("%d",&c);

switch(c)

{

case 1:

people=func_vvod(&m);

fl1=1;

break;

case 2:

if (fl1==1)

{

func_vivod(people,m);

fl2=1;

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 3:

if (fl1==1)

{

if (fl2==1)

{

y=func_obrab(people,m,&n);

puts("Obrabotka zaverchena.Najmite Enter");

fl3=1;

}

else puts("Oshibka! Vi ne vipolnili punkt 2");

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 4:

if (fl1==1)

{

if (fl2==1)

{

if (fl3=1)

{

func_vivod(y,n);

puts("Prodolgit?(Y/N)");

scanf("%c",&d);

getch();

if (d=='y'||'Y')

{

fl1=fl2=fl3=0;

free(people);

free(y);

}

}

else puts("Oshibka! Vi ne vipolnili punkt 3");

}

else puts("Oshibka! Vi ne vipolnili punkt 2");

}

else puts("Oshibka! Vi ne vipolnili punkt 1");

break;

case 5:

puts("Programma zaverchena.Najmite Enter");

default:

puts("Nevernui punkt menu.Poprobyite snova");

break;

}

getch();

}

while(c!=5);

return 0;

}

 

NT* func_vvod (int *m)

{

NT *x=NULL;

int i=0;

char p=EOF;

puts("Zapolnite strukturu\n");

do

{

x=(NT*)realloc(x,(i+1)*sizeof(NT));

puts("Vvedite imya plovca\n");

scanf("%s",x[i].name);

puts("\n");

puts("Vvedite familiiyu\n");

scanf("%s",x[i].surname);

puts("\n");

puts("Vvedite distanciu\n");

scanf("%d",&x[i].dist);

puts("\n");

puts("Vvedite strany\n");

scanf("%s",x[i].country);

puts("\n");

printf("stroka %d zapolnena\n",i+1);

i++;

puts("\n");

puts("Prodoljit (Y/N?)\n");

p=getch();

printf("%c\n",p);

}

while(p!='n');

*m=i;

return x;

}

 

void func_vivod (NT *x,int k)

{

int i;

system("cls");

puts("--------------------------------------------------|");

printf("|Name |Surname |Country |Distance|\n");

puts("|-------------------------------------------------|");

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

{

printf("|%2d. %-12s",i+1,x[i].name);

printf("|%-12s",x[i].surname);

printf("|%-10s",x[i].country);

printf("|%-8d|",x[i].dist);

printf("\n");

puts("--------------------------------------------------|");

}

}

 

NT* func_obrab(NT *x,int m,int *k)

{

NT *y=NULL;

int i,j=0;

puts("obrabotka");

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

{

if((x+i)->dist >= 400)

{

y=(NT*)realloc(y,(j+1)*sizeof(NT));

*(y+j)=*(x+i);

j++;

}

}

*k=j;

return y;

}

do

{

x=(NT*)realloc(x,(i+1)*sizeof(NT)

 

void func_vivod (NT *x,int k)

{

int i;

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

{

printf("%d. %-15s",i+1,x[i].name);

printf("%d. %-15s",i+1,x[i].surname);

printf("%-15s",x[i].country);

printf("%-7d",x[i].date);

printf("\n");

}

}

 

NT* func_obrab(NT *x,int m,int *k)

{

NT *y=NULL;

int i,j=0;

puts("obrabotka");

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

{

if((x+i)->date > 16)

{

y=(NT*)realloc(y,(j+1)*sizeof(NT));

*(y+j)=*(x+i);

j++;

}

}

*k=j;

return y;

}

 

Результаты выполнения программы

При выполнении программы полученные результаты совпадают с приведенными в таблице 1 "Контрольные примеры". Ошибок не обнаружено.

Выводы

При выполнении лабораторной работы были получены практические навыки в структур на языке С/С++.