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

Описание функции ydal

Назначение: функция удаляет элемент из списка.

Прототип: SP*ydal(SP*,int), где тип возвращаемого значенияSP*- адрес первого элемента списка, первый тип параметраSP* - адрес первого элемента списка, второй тип параметраint– размер исходного списка.

Пример вызова: h1=ydal(h1, k), гдеh1 - адрес первого элемента списка,k- размер исходного списка.

Описание переменных: описание локальных переменных функцииydalприведено в таблице 9.

Таблица 9. Описание переменных функции ydal

Имя переменной

Тип переменной

Назначение

d, z

int

Вспомогательные переменные

q, r

SP *

Вспомогательные переменные

Описание функции vivod2

Назначение: функция выводит информационные поля элементов, расположенных справа и слева от заданного.

Прототип: voidvivod2(SP*,int), где первый тип параметраSP* - адрес первого элемента списка, второй тип параметраint– размер исходного списка.

Пример вызова: vivod2(h1, k), гдеh1 - адрес первого элемента списка,k- размер исходного списка.

Описание переменных: описание локальных переменных функцииvivod2 приведено в таблице 10.

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

Имя переменной

Тип переменной

Назначение

d, z, s

int

Вспомогательные переменные

r, p, h2, r2

SP *

Вспомогательные переменные

Описание функции f_s

Назначение: определяет, является ли символ знаком препинания, пробелом и т.д.

Прототип: int f_s(char ),где тип параметраchar– символ, который нужно проверить, тип возвращаемого значенияint– переменная, которой присваивается 1 , если данный символ знак препинания, пробел и т.д.

Пример вызова: f_s(*(stroka+j)), где*(stroka+j) -символ, который нужно проверить.

Описание переменных: jписание локальных переменных функцииf_sприведено в таблице 11.

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

Имя переменной

Тип переменной

Назначение

I

int

Вспомогательная переменная

Simvol

char*

Адрес первого элемента массива знаков препинания

Описание функции The_end

Назначение: функция для завершения программы и освобождения динамической памяти.

Прототип: charThe_end(NT*,NT*), гдеchar– тип возвращаемого значения, тип первого параметраST* - адрес первого элемента последовательности структур, второй тип параметраNT* - адрес первого элемента последовательности структур – результата.

Пример вызова: c = The_end(players, rez).

Описание переменных: описание локальных переменных функцииThe_endприведено в таблице 12.

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

Имя переменной

Тип переменной

Назначение

c

char

Переменная для управления циклом

Иерархическая структура программы

vvod()

f_s()

obrabotka()

ydal()

dobav()

vivod2 ()

vivod()

The_end()

sortirovka()

main()

Рис. 1. Иерархическая структура программы

Код программы на языке c

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <tchar.h>

#include <string.h>

typedef struct football

{

char name[12]; // Имя, фамилия футболиста

int age; // Возраст футболиста

int goals; // Кол-во голов

} NT;

typedef struct list

{

NT info;

struct list *next;

}SP;

SP *vvod(SP *);

void vivod(SP *, char *, int k); // вывод данных

SP *obrabotka(SP *, int , int *);

SP *sortirovka(SP *);

SP *dobav(SP *, int);

SP *ydal(SP *, int);

void vivod2(SP *, int );

SP *fre(SP *);

char The_end(void);

int _tmain(void)

{

SP *h1=NULL, *rez=NULL;

int pm, pm2; // переменные для выбора пунктов меню

char c=NULL, ch=NULL;

int k=0, z=0; // переменные, показывающие кол-во элементов в списке

int q; // переменная для управления меню

do

{

clrscr();

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

puts("1 - Vvod dannih\n");

puts("2 - Vivod spiska\n");

puts("3 - Formirovanie novogo spiska\n");

puts("4 - Dobovlenie elementa v spisok\n");

puts("5 - Ydalenie elementa iz spiska\n");

puts("6 - Sortirovka\n");

puts("7 - Vivod sleva i sprava ot zadannogo\n");

puts("0 - Vihod\n");

puts("Choose a point of menu.\n");

fflush(stdin);

scanf("%d", &pm);

switch (pm)

{

case 1:

if(q!=1)

{

while(h1!=NULL)

h1=fre(h1);

k=0;

while(ch!='y')

{

h1=vvod(h1);

puts("\nZakonchit vvod dannyh(y/n)?\n");

ch=getch();

k++;

}

q=1;

}

else

puts("Vi yge vvodili dannii!\n");

getch();

break;

case 2:

if(q!=0)

{

if(h1!=NULL)

vivod(h1, "Polychuvshiisy spisok:", k);

else

puts("Spisok pust!\n");

getch();

}

else

puts("Vi ne vipolnili 1 pynkt menu!\n");

break;

case 3:

if(h1!=NULL)

{

while(rez!=NULL)

rez=fre(rez);

rez=obrabotka(h1, k, &z);

if(rez!=NULL)

vivod(rez, "", z);

else

puts("V spiske net elementov c zadannim usloviem.\n");

getch();

}

else

puts("Obrabotka ne vozmogna-spisok pust.\n");

getch();

break;

case 4:

if(h1!=NULL)

{

h1=dobav(h1, k);

k++;

}

else

puts("Dobavlenie elementov ne vozmogno-spisok pust.\n");

getch();

break;

case 5:

if(h1!=NULL)

{

h1=ydal(h1, k);

k=k-1;

}

else

puts("Ydalenie elementov ne vozmogno-spisok pust.\n");

getch();

break;

case 6:

if(h1!=NULL)

h1=sortirovka(h1);

else

puts("Sortirovka ne vozmogna-spisok pust.\n");

getch();

break;

case 7:

if(h1!=NULL)

vivod2(h1, k);

else

puts("Spisok pust.\n");

getch();

break;

case 0:

while(h1!=NULL)

h1=fre(h1);

while(rez!=NULL)

rez=fre(rez);

c=The_end();

break;

default:

puts("You are wrong! Try again!");

getch();

break;

}

}

while(c != 'y');

return 0;

}

//........................................................................

SP *vvod(SP *head)

{

SP *r=NULL;

fflush(stdin);

r=(SP*)malloc(sizeof(SP));

puts("Write name of football player.\n");

gets(r->info.name);

puts("\nWrite an age.\n");

scanf("%d", &(r->info.age));

puts("\nWrite total goals.\n");

scanf("%d", &(r->info.goals));

r->next=head;

head=r;

return head;

}

//....................................................................

void vivod (SP *h1, char *s, int k)

{

int q=0;

puts(s);

puts("\n Name Age Goals\n");

while(q<k)

{

printf(" ");

puts(h1->info.name);

printf(" %d %d", h1->info.age, h1->info.goals);

printf("\n");

fflush(stdin);

h1=h1->next;

q++;

}

}

//....................................................................

SP *obrabotka(SP *h1, int k, int *z)

{

int t=0, d;

SP *r=NULL, *h2=NULL, *p=NULL, *r2=NULL;

puts("VVedite kolichestvo golov.\n");

scanf("%d", &d);

h2=h1;

while(h2!=NULL)

{

if((h2->info.goals)>d)

{

r=(SP*)malloc(sizeof(SP));

if(t==0)

{

r->info=h2->info;

p=r;

r2=r;

}

else

{

r->info=h2->info;

p->next=r;

p=r;

}

t++;

}

else

return NULL;

if(t==(k-1))

p->next=NULL;

h2=h2->next;

}

*z=t;

puts("Obrabotka zavershena.\n");

return r2;

}

//.....................................................................

SP *sortirovka(SP *h1)

{

int pm2=0, pm3=0, pm4=0; // Переменные выбора меню

SP *h2=NULL, *r=NULL;

NT b;

int h=0;

puts("Vibirete tip sortirovki:\n");

puts("1 - Sortirovka po vozrastu.\n");

puts("2 - Sortirovka po kolichestvu golov.\n");

puts("3 - Vihod v nadmenu\n");

scanf("%d", &pm2);

h2=h1;

do

{

switch(pm2)

{

case 1:

puts("Vibirete tip sortirovki.\n");

puts("1 - Sortirovka po ybivaniu.\n");

puts("2 - Sortirovka po vozrastaniu.\n");

puts("3 - Vihod v nadmenu\n");

getch();

scanf("%d", &pm3);

switch(pm3)

{

case 1:

while((h2->next)!=NULL)

{

r=h2->next;

while(r!=NULL)

{

if(h2->info.age<r->info.age)

{

b=r->info;

r->info=h2->info;

h2->info=b;

}

r=r->next;

}

h2=h2->next;

}

puts("Sortirovka zavershina.\n");

getch();

h=1;

break;

case 2:

while((h2->next)!=NULL)

{

r=h2->next;

while(r!=NULL)

{

if(h2->info.age>r->info.age)

{

b=r->info;

r->info=h2->info;

h2->info=b;

}

r=r->next;

}

h2=h2->next;

}

puts("Sortirovka zavershina.\n");

getch();

h=1;

break;

case 3:

break;

default:

puts("You are wrong! Try again!");

getch();

break;

}

break;

case 2:

puts("Vibirete tip sortirovki.\n");

puts("1 - Sortirovka po ybivaniu.\n");

puts("2 - Sortirovka po vozrastaniu.\n");

getch();

scanf("%d", &pm4);

switch(pm4)

{

case 1:

while((h2->next)!=NULL)

{

r=h2->next;

while(r!=NULL)

{

if(h2->info.goals<r->info.goals)

{

b=r->info;

r->info=h2->info;

h2->info=b;

}

r=r->next;

}

h2=h2->next;

}

puts("Sortirovka zavershina.\n");

getch();

h=1;

break;

case 2:

while((h2->next)!=NULL)

{

r=h2->next;

while(r!=NULL)

{

if(h2->info.goals>r->info.goals)

{

b=r->info;

r->info=h2->info;

h2->info=b;

}

r=r->next;

}

h2=h2->next;

}

puts("Sortirovka zavershina.\n");

getch();

h=1;

break;

case 3:

break;

default:

puts("You are wrong! Try again!");

getch();

break;

}

break;

case 3:

break;

default:

puts("You are wrong! Try again!");

getch();

break;

}

}

while(h==0);

return h1;

}

//......................................................................

SP *dobav(SP *h1, int k)

{

SP *q=NULL, *r=NULL;

int pm2;

int d=0, z=0;

r=h1;

q=vvod(q);

puts("Kuda vi hotite dobavit element?\n");

puts("1 - v nachalo\n");

puts("2 - v konez\n");

puts("3 - posle zadannogo\n");

scanf("%d", &pm2);

switch(pm2)

{

case 1:

q->next=h1;

h1=q;

break;

case 2:

while((r->next)!=NULL)

r=r->next;

r->next=q;

q->next=NULL;

break;

case 3:

puts("Posle kakogo elementa dobavit?\n");

scanf("%d", &d);

if(d<=k)

{

for(z=1; z<d; z++)

r=r->next;

if(d<k)

{

q->next=r->next;

r->next=q;

}

else

{

r->next=q;

q->next=NULL;

}

}

else

printf("Posle %d nelzy dobavit - v spiske %d element(-ov)!\n", d, k);

break;

default:

puts("You are wrong! Try again!");

getch();

break;

}

puts("Dobavlenieelementa uspeshno zavershino\n");

getch();

return h1;

}

//.....................................................................

SP *ydal(SP *h1, int k)

{

SP *r=NULL, *p=NULL;

int d, z;

r=h1;

puts("Vvedite nomer elementa, kotoriy nugno ydalit.\n");

scanf("%d", &d);

if(d<=k)

{

for(z=1; z<(d-1); z++)

r=r->next;

if(d<(k-1))

{

p=r->next;

r->next=r->next->next;

}

else

{

if(d!=1)

{

p=r->next;

r->next=r->next->next;

}

else

{

h1=r->next;

p=r;

if(h1==NULL)

puts("Spisok teper pust!\n");

}

}

free(p);

}

else

printf("Ydalit %d nelzy - v spiske %d elementov!\n", d, k);

free(p);

puts("Ydalenie zavershino.\n");

return h1;

}

//.....................................................................

void vivod2(SP *h1, int k)

{

SP *r=NULL, *p=NULL, *h2=NULL, *r2=NULL;

int d, z, s;

h2=h1;

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

{

r=(SP*)malloc(sizeof(SP));

if(s==0)

{

r->info=h2->info;

p=r;

r2=r;

}

else

{

r->info=h2->info;

p->next=r;

p=r;

}

if(s==(k-1))

p->next=NULL;

h2=h2->next;

}

p=NULL;

puts("Sleva i sprava ot kakogo elemena vivesti?\n");

scanf("%d", &d);

if(d<=k)

{

for(z=1; z<(d-1); z++)

r2=r2->next;

if(d<k)

{

if(d==1) //выбран 1 элемент

{

p=r2->next;

p->next=NULL;

vivod(p, "Elementa sleva net", 1);

}

else //выбран элемент слева и справа от которого существуют элементы

{

p=r2;

p->next=r2->next->next;

vivod(p, "", 2);

}

}

else

{

if(d==1) // если элемент один и d=1

puts("Elementov sprava i sleva net.\n");

else // елемента справа нет

{

p=r2;

p->next=NULL;

vivod(p, "Elementa sprava net", 1);

}

}

}

else

printf("V spiske vsego %d elementov!\n", k);

getch();

while(r!=NULL)

r=fre(r);

}

//.....................................................................

int f_s(char c)

{

int i, n;

char *simvol=" ;:,-_)(+=\/><`~|^.?!@#$&";

n = strlen(simvol);

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

if(c==simvol[i])

return 1;

return 0;

}

//...................................................................

SP *fre(SP *h1)

{

if((h1->next)!=NULL)

free(h1);

return NULL;

}

//.......................................................................

char The_end(void)

{

char c;

c = 'y';

printf("\nGoodbye!");

return c;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]