Описание переменных
Описание локальных переменных приведено в таблице 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 "Контрольные примеры". Ошибок не обнаружено.
Выводы
При выполнении лабораторной работы были получены практические навыки в структур на языке С/С++.