- •Цель работы
- •Задание
- •Уточнение задания
- •5.Описание информационной структуры
- •6.Организация структуры, используемая для создания списка
- •7.Описание переменных главной функции
- •8.Краткое описание алгоритма
- •9. Описание функций
- •9.1. Описание функции f_vvod
- •9.2. Описание функции vivod
- •9.3. Описание функции func_dobavka_nach
- •9.4. Описание функции func_dobavka_kon
- •9.5. Описание функции func_sort
- •9.8. Описание функции func_zapis
- •9.9. Описание функции func_chtenie
- •Результаты выполнения программы
9.2. Описание функции vivod
Назначение
Используется для вывода списка.
Прототип
void vivod(NT* lst)
, где параметр NT* - указатель на объект параметра NT;
Пример вызова
vivod(spisok)
; где spisok- указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 6.
Таблица 6. Описание локальных переменных функции vivod
Имя переменной |
Тип переменной |
Назначение |
r |
NT* |
Вспомогательная перменная |
9.3. Описание функции func_dobavka_nach
Назначение
Используется для добавления элемента в начало списка
Прототип
NT* func_dobavka_nach(NT*)
,где параметр NT* - указатель на начало списка. NT* - .тип возвращаемого значения.
Пример вызова
spisok=fumc_dobavka_nach(spisok),
где spisok-указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 9.
Таблица 9. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
q |
NT* |
Вспомогательная переменная |
9.4. Описание функции func_dobavka_kon
Назначение
Используется для добавления элемента в конец списка
Прототип
NT* func_dobavka_kon(NT*)
,где параметр NT* - указатель на начало списка. NT* - .тип возвращаемого значения.
Пример вызова
spisok=fumc_dobavka_kon(spisok),
где spisok-указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 10.
Таблица 10. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
m,k |
NT* |
Вспомогательная переменная |
9.5. Описание функции func_sort
Назначение
Используется для сортировки элементов списка по алфавиту
Прототип
NT* func_sort(NT*)
,где параметр NT* - указатель на начало списка. NT* - .тип возвращаемого значения.
Пример вызова
spisok=fumc_sort(spisok),
где spisok-указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 11.
Таблица 11. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
a,b,c,e,tmp |
NT* |
Вспомогательные переменные |
9.8. Описание функции func_zapis
Назначение
Используется для записи данных в файл.
Прототип
void func_zapis(NT*)
,где параметр NT* - указатель на начало списка.
Пример вызова
func_zapis(spisok),
где spisok-указатель на начало списка.
Описание переменных
Описание локальных переменных приведено в таблице 12.
Таблица 12. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
fp |
FILE* |
Используется для действий с файлами |
m |
NT* |
Вспомогательная переменная |
k |
int |
Вспомогательная переменная |
9.9. Описание функции func_chtenie
Назначение
Используется для считывания данных из файла.
Прототип
NT* func_chtenie(void)
, NT* - тип возвращаемого значения.
Пример вызова
spisok =func_chtenie();
Описание переменных
Описание локальных переменных приведено в таблице 13.
Таблица 13. Описание локальных переменных функции obrabotka
Имя переменной |
Тип переменной |
Назначение |
f |
FILE* |
Используется для действий с файлами |
q,m,k |
NT* |
Вспомогательные переменная |
i,n |
int |
Вспомогательные переменная |
Текст исходной программы на языке 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]; //Страна
} QT;
typedef struct result
{
QT info; //Информационное поле
struct result *next; //Поле-указатель
}NT;
NT* f_vvod(NT*); //Ввод списка
void vivod(NT*); //Вывод списка
NT* func_dobavka_nach(NT*); //Добавление элемента в начало списка
NT* func_dobavka_kon(NT*); //Добавление элемента в конец списка
NT* func_sort(NT*); //Сортировка списка по алфавиту
NT* func_chtenie(void); //Чтение из файла
void func_zapis(NT*); //Запись в файл
NT* func_dobavlenie(NT* spisok);
void main(void)
{
NT *spisok=NULL,*popitka=NULL;
int c,fl1,fl2=0,fl3,fl4;
char y;
FILE *fp;
do
{
system("cls");
puts("-----------Menu--------\n");
puts("1.Zapolnenie spiska \n");
puts("2.Vivod spiska \n");
puts("3.Dobavlenie elementa v spisok\n");
puts("4.Sortirovka po alvafity\n");
puts("5-popitka zapis v file\n");
puts("6-Chtenie iz file\n");
puts("7.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 (spisok!=NULL)
{
vivod(spisok);
fl2=1;
}
else
puts("Danniy spisok pust");
getch();
break;
case 3:
spisok=func_dobavlenie(spisok);
break;
case 4: if(spisok==NULL)
puts("Oshibka.Spisok pust\n");
else
{
spisok=func_sort(spisok);
puts("Sortirovka zakonchena");
}
getch();
break;
case 5: if(spisok==NULL)
puts("Spisok pust");
else
func_zapis(spisok);
getch();
break;
case 6:
spisok=func_chtenie();
break;
case 7:
puts("Dlya zavercheniya programmi najmite Enter");
break;
default:
puts("Vi vibrali nevernii punkt");
break;
}
getch();
}
while(c!=7);
}
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->info.name,d);
puts("Vvedite familiy plovca\n");
scanf("%s",d);
strcpy(r->info.surname,d);
puts("Vvedite distanciu\n");
scanf("%d",&i);
r->info.dist=i;
puts("Vvedite strany\n");
scanf("%s",d);
strcpy(r->info.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->info.name);
printf("|%-12s",r->info.surname);
printf("|%-10s",r->info.country);
printf("|%-8d|",r->info.dist);
printf("\n");
r=r->next;
}
puts("|-----------------------------------------------|");
getch();
}
NT* func_dobavlenie(NT* spisok)
{
int y;
do
{
system("cls");
puts("-----------Menu--------\n");
puts("1.Dobavlenie elementa v nachalo spiska\n");
puts("2.dobavlenie elementa v konets spiska\n");
puts("3.Vihod v glavnoe menu");
puts("-----------------------");
puts("Viberite punkt\n");
scanf("%d",&y);
switch(y)
{
case 1:
spisok=func_dobavka_nach(spisok);
puts("element dobavlen");
break;
case 2:
if(spisok==NULL)
puts("Spisok pust.Element budet dobavlen v nachalo spiska\n");
spisok=func_dobavka_kon(spisok);
puts("element dobavlen");
break;
case 3:
puts("Dlya peroda najmite Enter");
break;
default:
puts("Oshibka.Vi vibrali nevernii punkt");
break;
}
}
while(y!=3);
return spisok;
}
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);
if(old==NULL)
{
m->next=NULL;
return m;
}
else
{
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->info.name, b->info.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;
}
void func_zapis(NT* spisok)
{
FILE *fp;
NT *m;
int k=0;
if(spisok==NULL)
puts("Spisok pust.\n");
else
{
if((fp=fopen("fol.txt","w"))!=NULL)
{
m=spisok;
while(m!=NULL)
{
m=m->next;
k++;
}
fprintf(fp,"%d",k);
fprintf(fp,"%c",' ');
while(spisok!=NULL)
{
fwrite(&(spisok->info),sizeof(spisok->info),1,fp);
spisok=spisok->next;
}
fclose(fp);
puts("Zapis v file zaverchena");
}
else puts("File do not open!");
}
}
NT* func_chtenie(void)
{
FILE *f;
int i,n;
NT *q,*m=NULL,*k=NULL;
if((f=fopen("fol.txt","r"))!=NULL)
{
fscanf(f,"%d",&n);
fseek(f, (long)sizeof(char),1);
for(i=0;i<n;i++)
{
q=(NT*)malloc(sizeof(NT));
fread(&(q->info),sizeof(q->info),1,f);
if(k!=NULL)
{
while(k->next!=NULL)
k=k->next;
k->next=q;
q->next=NULL;
}
else
{
k=q;
k->next=NULL;
m=k;
}
}
fclose(f);
}
else
puts("Ne udalos otktit ili zapisat file");
return m;
}
