- •Описание переменных главной функции
- •Краткое описание алгоритма
- •9. Описание функций
- •9.1. Описание функции f_vvod
- •9.2. Описание функции vivod
- •9.3. Описание функции func_dobavka_nach
- •9.4. Описание функции func_dobavka_kon
- •9.5. Описание функции func_sort
- •Int dist; //Дистанция
- •Результаты выполнения программы
9.5. Описание функции func_sort
Назначение
Используется для сортировки элементов списка по алфавиту
Прототип
NT* func_sort(NT*)
,где параметр NT* - указатель на начало списка. NT* - .тип возвращаемого значения.
Пример вызова
spisok=fumc_sort(spisok),
где spisok-указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 11.
Таблица 11. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
a,b,c,e,tmp |
NT* |
Вспомогательные переменные |
Текст исходной программы на языке C/C++.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
typedef struct swimmers
{char name[20]; //Имя пловца
char surname[20]; //Фамилия
Int dist; //Дистанция
char country[20]; //Страна
struct swimmers *next;
}NT;
NT* f_vvod(NT*); //Ввод списка
void vivod(NT*); //Вывод списка
NT* func_dobavka_nach(NT*); //Добавление элемента в начало списка
NT* func_dobavka_kon(NT*); //Добавление элемента в конец списка
NT* func_sort(NT*); //Сортировка списка по алфавиту
void main(void)
{
NT *spisok=NULL,*popitka=NULL;
int c,fl1,fl2=0,fl3,fl4;
char y;
do
{
system("cls");
puts("-----------Menu--------\n");
puts("1.Zapolnenie spiska \n");
puts("2.Vivod spiska \n");
puts("3.Dobavlenie elementa v spisok\n");
//puts("3.Obrabotka spiska \n");
puts("4.dobavka v konets\n");
puts("5.Sortirovka\n");
puts("6.Zaverchenie programmi\n");
puts("-----------------------");
puts("Viberite punkt\n");
scanf("%d",&c);
switch(c)
{
case 1:
do
{
spisok=f_vvod(popitka);
popitka=spisok;
puts("prodolgit?\n");
fflush (stdin);
scanf("%c",&y);
}
while(y!='n');
fl1=1;
break;
case 2:
if (fl1==1)
{
vivod(spisok);
fl2=1;
}
else puts("Oshibka! Vi ne vipolnili punkt 1");
break;
case 3:
if (fl1==1)
{
if (fl2==1)
{
spisok=func_dobavka_nach(spisok);
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)
{
spisok=func_dobavka_kon(spisok);
fl4=1;
}
else puts("Oshibka! Vi ne vipolnili punkt 2");
}
else puts("Oshibka! Vi ne vipolnili punkt 1");
break;
case 5:
spisok=func_sort(spisok);
break;
}
}
while(c!=6);
}
NT* f_vvod(NT* spisok)
{
NT *r;
char y,d[20];
int i;
puts("Vvedite imya plovca\n");
scanf("%s",d);
r=(NT*)malloc(sizeof(NT));
strcpy(r->name,d);
puts("Vvedite familiy plovca\n");
scanf("%s",d);
strcpy(r->surname,d);
puts("Vvedite distanciu\n");
scanf("%d",&i);
r->dist=i;
puts("Vvedite strany\n");
scanf("%s",d);
strcpy(r->country,d);
r->next=spisok;
spisok=r;
return spisok;
}
void vivod(NT* lst)
{
NT *r;
puts("vivod spisochka\n");
getch();
r=lst;
puts ("|-----------------------------------------------|");
printf("|Name |Surname |Country |Distance|\n");
puts("|-----------------------------------------------|");
while(r!=NULL)
{
printf("|%-14s",r->name);
printf("|%-12s",r->surname);
printf("|%-10s",r->country);
printf("|%-8d|",r->dist);
printf("\n");
r=r->next;
}
puts("|-----------------------------------------------|");
getch();
}
NT* func_dobavka_nach(NT* old)
{
NT *q;
q=(NT*)malloc(sizeof(NT));
q=f_vvod(q);
q->next=old;
old=q;
return old;
}
NT* func_dobavka_kon(NT* old)
{
NT *m,*k;
m=(NT*)malloc(sizeof(NT));
m=f_vvod(m);
k=old;
while(old->next!=NULL)
old=old->next;
old->next=m;
m->next=NULL;
return k;
}
NT* func_sort(NT* spisok)
{
NT *a = NULL;
NT *b = NULL;
NT*c = NULL;
NT *e = NULL;
NT *tmp = NULL;
while(e!= spisok->next)
{
c = a = spisok;
b = a->next;
while(a != e)
{
if(strcmp(a->name, b->name)<0)
{
if(a == spisok)
{
tmp = b -> next;
b->next = a;
a->next = tmp;
spisok = b;
c = b;
puts("Sluchai 1");
}
else
{
tmp = b->next;
b->next = a;
a->next = tmp;
c->next = b;
c = b;
puts("Sluchai 2");
}
}
else
{
c = a;
a = a->next;
puts("sluchai 3");
}
b = a->next;
getch();
if(b == e)
e = a;
}
}
return spisok;
}
