Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 4_Лебедев.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
47.68 Кб
Скачать

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;

}