Двунаправленный динамический список - реферат

Листинг программного изделия на языке программирования “С”.

#include

#include

#include

#include

typedef

struct inform

{char name[15],fam[15],fanem[15],b_day[3],b_manth[10],b_year[5],zodiak[8];

struct inform *next,*prev;};

struct inform *first,*cut,*temp;


int n,i;

char s1[10],s2[10];

/*************************************************************/

void Dobav ( )

{

clrscr();

if ((temp=(struct inform*)malloc(sizeof(struct inform)))==NULL)exit(1);

printf("Введите Двунаправленный динамический список - реферат фамилию: ");

scanf("%s",(*temp).fam);

printf("Введите имя: ");

scanf("%s",(*temp).name);

printf("Введите отчество: ");

scanf("%s",(*temp).fanem);

printf("Введите денек рождения: ");

scanf("%s",(*temp).b_day);

printf("Введите месяц рождения: ");

scanf("%s",(*temp).b_manth);

printf("Введите год рождения: ");

scanf("%s",(*temp).b_year);

strcpy(s2,(*temp).b Двунаправленный динамический список - реферат_day);

strncpy(s1,(*temp).b_manth,3);

strcpy((*temp).zodiak," ");

if (strcmp(s1,"апр")==0)

if (strcmp(s2,"21")<0) strcpy((*temp).zodiak,"овен");

else strcpy((*temp).zodiak,"телец");

if (strcmp(s1,"мая")==0)

if (strcmp(s2,"21")<0) strcpy((*temp).zodiak,"телец");

else strcpy((*temp).zodiak,"близнецы");

if (strcmp(s1,"июн")==0)

if (strcmp(s Двунаправленный динамический список - реферат2,"22")<0) strcpy((*temp).zodiak,"близнецы");

else strcpy((*temp).zodiak,"рак");

if (strcmp(s1,"июл")==0)

if (strcmp(s2,"23")<0) strcpy((*temp).zodiak,"рак");

else strcpy((*temp).zodiak,"лев");

if (strcmp(s1,"авг")==0)

if (strcmp(s2,"24")<0) strcpy((*temp).zodiak,"лев");

else strcpy((*temp).zodiak,"дева");

if (strcmp(s1,"сен")==0)

if (strcmp(s2,"24")<0) strcpy Двунаправленный динамический список - реферат((*temp).zodiak,"дева");

else strcpy((*temp).zodiak,"весы");

if (strcmp(s1,"окт")==0)

if (strcmp(s2,"24")<0) strcpy((*temp).zodiak,"весы");

else strcpy((*temp).zodiak,"скорпион");

if (strcmp(s1,"ноя")==0)

if (strcmp(s2,"23")<0) strcpy((*temp).zodiak,"скорпион");

else strcpy((*temp).zodiak,"стрелец");

if (strcmp(s1,"дек")==0)

if (strcmp(s Двунаправленный динамический список - реферат2,"22")<0) strcpy((*temp).zodiak,"стрелец");

else strcpy((*temp).zodiak,"козерог");

if (strcmp(s1,"янв")==0)

if (strcmp(s2,"21")<0) strcpy((*temp).zodiak,"козерог");

else strcpy((*temp).zodiak,"водолей");

if (strcmp(s1,"фев")==0)

if (strcmp(s2,"21")<0) strcpy((*temp).zodiak,"водолей");

else strcpy((*temp).zodiak,"рыбы");

if (strcmp(s1,"мар")==0)

if (strcmp(s2,"21")<0) strcpy((*temp).zodiak,"рыбы Двунаправленный динамический список - реферат");

else strcpy((*temp).zodiak,"овен");

if (first==NULL)

{

(*temp).next=NULL;

(*temp).prev=NULL;

first=temp;

cut=temp;

}

else

{

(*temp).next=NULL;

(*temp).prev=cut;

(*cut).next=temp;

cut=temp;

}

}

/*************************************************************/

void Udal ( )

{

char ffam[10],fname[10],ffanem[10];

clrscr();

if (first==NULL) printf("Таблица пуста\n");

else

{

printf("Введите фамилию: ");

scanf("%s",ffam Двунаправленный динамический список - реферат);

printf("Введите имя: ");

scanf("%s",fname);

printf("Введите отчество: ");

scanf("%s",ffanem);

temp=first;

while((strcmp(ffam, (*temp).fam) || strcmp(fname,(*temp).name) ||

strcmp(ffanem,(*temp).fanem)) && temp!=NULL)

temp=(*temp).next;

if (temp==NULL) printf("Нет такового");

else

{

if (first!=cut)

if ((*temp).prev==NULL)

{

(*(*temp).next Двунаправленный динамический список - реферат).prev=(*temp).prev;

first=(*temp).prev;

}

else

if ((*temp).next==NULL)

{

(*(*temp).prev).next=(*temp).next;

cut=(*temp).prev;

}

else

{

(*(*temp).prev).next=(*temp).next;

(*(*temp).next).prev=(*temp).prev;

}

else first=NULL;

free(temp);

}

}

scanf("%s");

}

/*************************************************************/

void Prosm ( )

{

clrscr();

if (first==NULL) printf("Таблица пуста");

else

{

printf("Фамилия Имя Отчество Дата рождения Двунаправленный динамический список - реферат");

printf(" ‡Символ зодиака");

printf("\n--------------------------------------------------------------------------------");

temp=first;

do

{

n=strlen((*temp).fam)+strlen((*temp).name)+strlen((*temp).fanem);

printf("\n%s %s %s ",(*temp).fam,(*temp).name,(*temp).fanem);

i=1;

while (i<39-n)

{

printf(" ");

i++;

}

printf("%s ",(*temp).b_day);

printf("%s ",(*temp).b_manth);

printf("%s ",(*temp).b_year);

n=n Двунаправленный динамический список - реферат+i+strlen((*temp).b_day)+strlen((*temp).b_manth)+strlen((*temp).b_year);

i=1;

while (i<61-n)

{

printf(" ");

i++;

}

printf("%s",(*temp).zodiak);

temp=(*temp).next;

}

while (temp!=NULL);

}

scanf("%s");

}

/*************************************************************/

void Sortir ( )

{

struct inform *tmp;

int m;

clrscr();

if (first!=NULL)

{

m=1;

while(m==1)

{

m=0;

temp Двунаправленный динамический список - реферат=first;

while((*temp).next!=NULL)

{

if((strcmp((*temp).fam,(*(*temp).next).fam)>0) ||

(strcmp((*temp).fam,(*(*temp).next).fam)==0) &&

(strcmp((*temp).name,(*(*temp).next).name)>0) ||

(strcmp((*temp).fam,(*(*temp).next).fam)==0) &&

(strcmp((*temp).name,(*(*temp).next).name)==0) &&

(strcmp((*temp).fanem,(*(*temp).next).fanem)>0))

{

m=1;

if (temp==first) first=(*temp).next;

else (*(*temp).prev Двунаправленный динамический список - реферат).next=(*temp).next;

if ((*temp).next==cut)

{

cut=temp;

tmp=NULL;

}

else

{

(*(*(*temp).next).next).prev=temp;

tmp=(*(*temp).next).next;

}

(*(*temp).next).next=temp;

(*(*temp).next).prev=(*temp).prev;

(*temp).prev=(*temp).next;

(*temp).next=tmp;

}

else temp=(*temp).next;

}

m=0;

temp=cut;

while((*temp).prev!=NULL)

{

if((strcmp Двунаправленный динамический список - реферат((*temp).fam,(*(*temp).prev).fam)<0) ||

(strcmp((*temp).fam,(*(*temp).prev).fam)==0) &&

(strcmp((*temp).name,(*(*temp).prev).name)<0) ||

(strcmp((*temp).fam,(*(*temp).prev).fam)==0) &&

(strcmp((*temp).name,(*(*temp).prev).name)==0) &&

(strcmp((*temp).fanem,(*(*temp).prev).fanem)<0))

{

m=1;

if (temp==cut) cut=(*temp).prev;

else (*(*temp).next).prev Двунаправленный динамический список - реферат=(*temp).prev;

if ((*temp).prev==first)

{

first=temp;

tmp=NULL;

}

else

{

(*(*(*temp).prev).prev).next=temp;

tmp=(*(*temp).prev).prev;

}

(*(*temp).prev).prev=temp;

(*(*temp).prev).next=(*temp).next;

(*temp).next=(*temp).prev;

(*temp).prev=tmp;

}

else temp=(*temp).prev;

}

}

}

else printf("Таблица пуста");

scanf("%s");

}

/*************************************************************/

void main()

{

char ch Двунаправленный динамический список - реферат;

first=NULL;

do

{

clrscr();

printf("Выберте действие\n1-Добавить\n2-Удалить\n");

printf("3-Просмотреть\n4-Сортировать\n0-Выход");

scanf("%d",&ch);

switch(ch)

{

case 1:Dobav();break;

case 2:Udal();break;

case 3:Prosm();break;

case 4:Sortir();break;

}

}

while(ch);

}


Задание

Воплотить базу данных на базе двунаправленного динамического перечня, содержащего фамилию, имя, отчество человека, дату Двунаправленный динамический список - реферат его рождения и символ зодиака по западному календарю.

В программном изделии предугадать работу со перечнем, которая содержит в себе:

  1. Ввод данных;

  2. Удаление данных из перечня;

  3. Вывод перечня на экран;

  4. Сортировку перечня по фамилии.

Написать программное изделие на 2-ух языках программирования: C, Pascal.

Описание метода программки со структурой данных

Взаимодействие программки Двунаправленный динамический список - реферат с юзером должно быть реализовано по последующему методу:

Выбор из головного меню одной из последующих функций:

а) Добавить;

б) Удалить;

в) Просмотреть;

г) Сортировать;

д) Выход.

После выполнения каждой функции нужно обеспечить возврат в главное меню и выбор хоть какой другой функции.

При выборе функции «Выход» работа программки Двунаправленный динамический список - реферат заканчивается.

При выборе функции «Добавить», выделяется память для хранения данных, потом юзеру предлагается ввести фамилию, имя, отчество и дату рождения человека, эти данные заносятся в память, после этого автоматом определяется символ зодиака по западному календарю и заносится в память.

При выборе функции «Удалить», проверяется наличие данных в перечне. Если Двунаправленный динамический список - реферат перечень пуст, на экран выводится соответственное сообщение; по другому юзеру предлагается ввести фамилию, имя и отчество человека, после этого происходит его поиск в перечне. Если данные на человека внесены в перечень, то происходит удаление этих данных и освобождение памяти; по другому на экран выводится надпись об их отсутствии.

При выборе функции Двунаправленный динамический список - реферат «Просмотреть», поверяется наличие данных в перечне. Если данные отсутствуют, на экран выводится соответственное сообщение; по другому выводится таблица, содержащая фамилию, имя, отчество, дату рождения человека и его символ зодиака по западному гороскопу.

При выборе функции «Сортировать», происходит сортировка перечня по фамилии. Если в перечне встречаются две однообразные Двунаправленный динамический список - реферат фамилии, тогда сравниваются имена; при совпадении имён сравниваются отчества.

Описание программки

Для реализации динамического перечня в программке применён тип указателей, указывающий на запись ”Inform”, содержащую фамилию ”fam”, имя ”name”, отчество ”fanem”, денек рождения ”bethday”, символ зодиака ”zodiak” и указатели Двунаправленный динамический список - реферат на последующий ”next” и предшествующий ”prev” элементы перечня.

При помощи этого типа ”Ukazat” описаны переменные: “temp” – для хранения указателя на текущий элемент; “first” – для хранения указателя на 1-ый элемент в перечне; “cut” – для хранения на Двунаправленный динамический список - реферат последний элемент в перечне. Переменная “ch” употребляется для выбора процедуры; “s1”, “s2”, “n” – для вычисления знака зодиака; “m” – для проверки условия, при сортировке; “ffam”, “fname”, “ffanem” – для временного хранения фамилии, имени, отчества, при удалении элемента Двунаправленный динамический список - реферат из перечня.

Программка начинает производиться с присвоения указателю на 1-ый элемент (first) значения “nil”. После чего юзеру предлагается избрать действие: «1-Добавить», «2-Удалить», «3-Просмотреть», «4-Сортировать», «0-Выход». Зависимо от того, какое действие изберет юзер, начнёт производиться та либо другая процедура, либо произойдёт выход из программки. Это реализовано при Двунаправленный динамический список - реферат помощи операции выбора “case”.После выполнения некой процедуры юзеру вновь предлагается избрать одно из вышеуказанных действий, пока не будет избран выход из программки. Это реализовано при помощи цикла “repeat until”.

Процедура прибавления “Dobav”.

Поначалу выделяется память под текущий элемент (new(temp)), потом в этот элемент Двунаправленный динамический список - реферат записывается фамилия, имя, отчество и дата рождения. По дате рождения рассчитывается символ зодиака. Для этого в s2 записывается число рождения, а в s1 1-ые три буковкы месяца рождения, потом, оковём сопоставления этих переменных с числами и частями слов находится соответственный символ зодиака, и заносится в текущий элемент Двунаправленный динамический список - реферат. После ввода инфы, проверяется наличие частей в перечне. Если они отсутствуют, то в текущем элементе, указателям на последующий (next) и предшествующий (prev) элементы присваивается значение “nil”; а указатель на сам элемент (temp) присваивается указателям на 1-ый (first) и последний (cut) элементы в перечне. Если перечень не пустой Двунаправленный динамический список - реферат, то в текущем элементе, указателю на последующий элемент (next) присваивается значение “nil”, а указателю на предшествующий элемент (prev) присваивается указатель на последний элемент (cut) в перечне; а указателю на последующий элемент (next) последнего элемента в перечне и указателю на последний элемент (cut) присваивается указатель на текущий элемент (temp). После Двунаправленный динамический список - реферат этого процедура прибавления заканчивается.

Процедура удаления “Udal”.

В этой процедуре поначалу проверяется наличие частей в перечне. Если перечень пуст, то выводится сообщение: «Таблица пуста». Если же перечень содержит элементы, то юзеру предлагается ввести фамилию, имя и отчество удаляемого, записывая их в ffam, fname, ffanem соответственно Двунаправленный динамический список - реферат. После происходит поиск удаляемого элемента в перечне. Это реализовано при помощи цикла, который производится, пока элемент не найден либо не просмотрен весь перечень. Если разыскиваемый элемент отсутствует, то выводится сообщение: «Такого нет». Если же разыскиваемый элемент найден, то текущий указатель (temp) указывает на него, и происходит его удаление.

Если Двунаправленный динамический список - реферат указатели на 1-ый (first) и последний (cut) элементы не равны, то происходит поиск местопребывания элемента в перечне. Если снутри текущего элемента указатель на предшествующий элемент (prev) равен nil, тогда указателю на предшествующий элемент (prev) снутри последующего за текущим элементом присваивается указатель на предшествующий элемент снутри текущего, а указателю Двунаправленный динамический список - реферат на 1-ый элемент (first) в перечне присваивается указатель на последующий элемент. Если снутри текущего элемента указатель на последующий элемент (next) равен nil, тогда указателю на последующий элемент (next) снутри предшествующего перед текущим элементом присваивается указатель на последующий элемент снутри текущего, а указателю на последний элемент (cut) в перечне присваивается указатель Двунаправленный динамический список - реферат на предшествующий элемент. Если текущий элемент оказался «внутри» перечня, тогда указателю на последующий элемент (next) снутри предшествующего перед текущим элементом присваивается указатель на последующий элемент снутри текущего, а указателю на предшествующий элемент (prev) снутри последующего за текущим элементом присваивается указатель на предшествующий элемент снутри текущего.

Если же указатели на Двунаправленный динамический список - реферат 1-ый (first) и последний (cut) элементы равны, то указателю на 1-ый элемент в перечне (first) присваивается nil.

После неких преобразований снутри перечня происходит освобождение памяти текущего элемента (dispose(temp)). На этом процедура удаления заканчивается.

Процедура просмотра “Prosm”.

Эта процедура делает вывод содержимого перечня в виде таблицы Двунаправленный динамический список - реферат.

Поначалу на экран выводится шапка таблицы, содержащая: «Фамилия Имя Отчество», «Дата рождения» и «Знак зодиака». После вывода шапки проверяется наличие частей в перечне.

Если перечень содержит элементы, то происходит их построчный вывод. Это реализовано при помощи цикла, который производится, пока указатель на текущий элемент (temp) не переберёт все элементы перечня. В цикле Двунаправленный динамический список - реферат рассчитывается длина фамилии, имени и отчества, после этого они выводятся на экран, а за ними выводятся дата рождения и символ зодиака; потом указателю на текущий элемент (temp) присваивается указатель на последующий за ним элемент.

Если перечень окажется пуст, то выводится сообщение: «Таблица пуста».

После окончания цикла либо Двунаправленный динамический список - реферат вывода сообщения, процедура просмотра заканчивается.

Процедура сортировки “Sortir”.

Для этой процедуры использована локальная переменная “tmp” типа “ukazat”. Тут поначалу проверяется наличие частей в перечне.

Если перечень содержит элементы, то переменной “m” присваивается значение “true”, потом производится цикл, пока “m=true Двунаправленный динамический список - реферат”. В цикле переменной “m” присваивается значение “false”, указателю на текущий элемент (temp) присваивается указатель на 1-ый элемент в перечне (first), и производится вложенный цикл, пока указатель на последующий элемент снутри текущего не равен “nil”. В этом цикле проверяется какой элемент больше.

Если Двунаправленный динамический список - реферат текущий элемент окажется больше чем последующий за ним элемент, тогда переменной “m” присваивается значение “true”, и проверяется местопребывание текущего элемента в перечне. Если он окажется сначала перечня, то указателю на 1-ый элемент в перечне (first) присваивается указатель на последующий элемент за текущим, а по другому Двунаправленный динамический список - реферат указателю на последующий элемент (next) снутри предшествующего перед текущим элементом присваивается указатель на последующий элемент снутри текущего. Если же текущий элемент окажется в конце перечня, тогда указателю на последний элемент в перечне присваивается указатель на текущий элемент, а локальной переменной “tmp” присваивается значение “nil&rdquo Двунаправленный динамический список - реферат;, а по другому указателю на предшествующий элемент (prev) последующего элемента после последующего за текущим элементом присваивается указатель на текущий элемент, а локальной переменной (tmp) присваивается указатель на последующий элемент после последующего за текущим элементом. После выяснения местоположения и выполнения неких команд, указателю на последующий элемент после последующего за Двунаправленный динамический список - реферат текущим элементом присваивается указатель на текущий элемент, указателю на предшествующий элемент последующего за текущим элементом присваивается указатель на предшествующий элемент перед текущим; а снутри текущего элемента указателю на предшествующий перед текущим присваивается указатель на последующий элемент за текущим, и указателю на последующий элемент за текущим присваивается локальная переменная “tmp Двунаправленный динамический список - реферат”. Если же текущий элемент окажется не больше чем последующий за ним элемент, тогда указателю на текущий элемент (temp) присваивается указатель на последующий за ним элемент (next). На этом выполнение вложенного цикла заканчивается.

Переменной “m” опять присваивается значение “false”, а указателю на текущий элемент (temp) присваивается Двунаправленный динамический список - реферат указатель на последний элемент в перечне (cut), и производится ещё один вложенный цикл, пока указатель на предшествующий элемент снутри текущего не равен “nil”. В этом цикле проверяется какой элемент меньше.

Если текущий элемент окажется меньше чем предшествующий перед ним элемент, тогда переменной “m&rdquo Двунаправленный динамический список - реферат; присваивается значение “true”, и проверяется местопребывание текущего элемента в перечне. Если он окажется в конце перечня, то указателю на последний элемент в перечне (cut) присваивается указатель на предшествующий элемент перед текущим, а по другому указателю на предшествующий элемент (prev) снутри последующего за текущим элементом присваивается указатель Двунаправленный динамический список - реферат на предшествующий элемент снутри текущего. Если же текущий элемент окажется сначала перечня, тогда указателю на 1-ый элемент в перечне присваивается указатель на текущий элемент, а локальной переменной “tmp” присваивается значение “nil”, а по другому указателю на последующий элемент (next) предшествующего элемента перед предшествующим до текущего элемента Двунаправленный динамический список - реферат присваивается указатель на текущий элемент, а локальной переменной (tmp) присваивается указатель на предшествующий элемент перед предшествующим до текущего элемента. После выяснения местоположения и выполнения неких команд, указателю на предшествующий элемент перед предшествующим до текущего элемента присваивается указатель на текущий элемент, указателю на последующий элемент предшествующего перед текущим элементом Двунаправленный динамический список - реферат присваивается указатель на последующий после текущего; а снутри текущего элемента указателю на последующий элемент присваивается указатель на предшествующий элемент, и указателю на предшествующий элемент присваивается локальная переменная “tmp”. Если же текущий элемент окажется не меньше чем предшествующий перед ним элемент, тогда указателю на текущий элемент (temp) присваивается указатель Двунаправленный динамический список - реферат на предшествующий перед ним элемент (prev). На этом выполнение вложенного цикла заканчивается.

Если во время поверки наличия частей в перечне окажется, что он пуст, то выводится сообщение: «Таблица пуста».

После окончания цикла либо вывода сообщения, процедура сортировки заканчивается.


Листинг программного изделия на языке программирования “Pascal”.

Program kursovik;

uses crt Двунаправленный динамический список - реферат;

type Ukazat=^Inform;

Inform=record fam:string[15];

name:string[15];

fanem:string[15];

bethday:string[21];

zodiak:string[8];

next:Ukazat;

prev:Ukazat;

end;

var temp,first,cut:Ukazat;

ch:char;

s1,s2:string;

n:integer;

m:boolean;

ffam,fname,ffanem:string[10];


Procedure Dobav;

begin

ClrScr;

new(temp);

write('Введите фамилию: ');

readln Двунаправленный динамический список - реферат(temp^.fam);

write('Введите имя: ');

readln(temp^.name);

write('Введите отчество: ');

readln(temp^.fanem);

write('Введите дату рождения: ');

readln(temp^.bethday);

n:=1;

s2:=copy(temp^.bethday,n,1);

while ((s2'9')) and (n<10) do

begin

inc(n);

s2:=copy(temp^.bethday,n,1);

end;

inc(n);

s1:=copy(temp^.bethday,n,1);

if (s1>='0') and (s Двунаправленный динамический список - реферат1<='9') then s2:=s2+s1

else s2:='0'+s2;

while ((s1'я')) and (n<10) do

begin

inc(n);

s1:=copy(temp^.bethday,n,1);

end;

s1:=copy(temp^.bethday,n,3);


temp^.zodiak:=' ';

if s1='апр' then

if s2<'21' then temp^.zodiak:='овен'

else temp^.zodiak:='телец';

if s1='мая' then

if s2<'21' then temp^.zodiak:='телец'

else temp Двунаправленный динамический список - реферат^.zodiak:='близнецы';

if s1='июн' then

if s2<'22' then temp^.zodiak:='близнецы'

else temp^.zodiak:='рак';

if s1='июл' then

if s2<'23' then temp^.zodiak:='рак'

else temp^.zodiak:='лев';

if s1='авг' then

if s2<'24' then temp^.zodiak:='лев'

else temp^.zodiak:='дева';

if s1='сен' then

if s2<'24' then temp Двунаправленный динамический список - реферат^.zodiak:='дева'

else temp^.zodiak:='весы';

if s1='окт' then

if s2<'24' then temp^.zodiak:='весы'

else temp^.zodiak:='скорпион';

if s1='ноя' then

if s2<'23' then temp^.zodiak:='скорпион'

else temp^.zodiak:='стрелец';

if s1='дек' then

if s2<'22' then temp^.zodiak:='стрелец'

else temp^.zodiak:='козерог';

if s1='янв' then

if s2<'21' then Двунаправленный динамический список - реферат temp^.zodiak:='козерог'

else temp^.zodiak:='водолей';

if s1='фев'

then if s2<'21' then temp^.zodiak:='водолей'

else temp^.zodiak:='рыбы';

if s1='мар'

then if s2<'21' then temp^.zodiak:='рыбы'

else temp^.zodiak:='овен';

if first=nil then

begin

temp^.prev:=nil;

temp^.next:=nil;

first:=temp;

cut:=temp Двунаправленный динамический список - реферат;

end

else begin

temp^.next:=nil;

temp^.prev:=cut;

cut^.next:=temp;

cut:=temp;

end;

end;{procedure}


Procedure Udal;

begin

ClrScr;

{1}if first=nil then

begin

writeln('Таблица пуста');

readln;

end

else

begin {else1}

write('Введите фамилию: ');

readln(ffam);

write('Введите имя: ');

readln(fname);

write('Введите отчество: ');

readln(ffanem);

temp:=first;

while ((ffamtemp^.fam) or Двунаправленный динамический список - реферат (fnametemp^.name) or

(ffanemtemp^.fanem)) and (tempnil) do

temp:=temp^.next;

{2}if temp=nil then

begin

write('Такового нет');

readln;

end

else

begin{else2}

{3}if firstcut then

{4}if temp^.prev=nil then

begin

temp^.next^.prev:=temp^.prev;

first:=temp^.next;

end

else{4}

{5}if temp^.next=nil then

begin

temp^.prev^.next:=temp^.next;

cut:=temp^.prev;

end

else begin{else Двунаправленный динамический список - реферат5}

temp^.prev^.next:=temp^.next;

temp^.next^.prev:=temp^.prev;

end{else5}

else {3} first:=nil;

dispose(temp);

end;{else2}

end;{else1}

end;{procedure}

Procedure Prosm;

begin

ClrScr;

temp:=first;

writeln('Фамилия Имя Отчество':27, 'Дата рождения':27,'Символ зодиака':20);

write('________________________________________________________________');

if firstnil then

begin

while tempnil do

begin

n:=length(temp^.fam)+length(temp^.name)+length(temp^.fanem);

writeln Двунаправленный динамический список - реферат(temp^.fam,' ',temp^.name,' ',temp^.fanem,

temp^.bethday:55-n,temp^.zodiak:15);

temp:=temp^.next;

end;

end

else writeln('Таблица пуста':40);

readln;

end;

Procedure Sortir;

var

tmp:ukazat;

begin

ClrScr;

if firstnil then

begin

m:=true;

{0}while m=true do

begin

m:=false;

temp:=first;

while temp^.nextnil do

begin{1}

if (temp^.fam>temp^.next Двунаправленный динамический список - реферат^.fam) or

(temp^.fam=temp^.next^.fam) and

(temp^.name>temp^.next^.name) or

(temp^.fam=temp^.next^.fam) and

(temp^.name=temp^.next^.name) and

(temp^.fanem=temp^.next^.fanem) then

begin{2}

m:=true;

if temp=first then

first:=temp^.next

else temp^.prev^.next:=temp^.next;

if temp^.next=cut then

begin

cut:=temp;

tmp:=nil;

end

else Двунаправленный динамический список - реферат begin{3}

temp^.next^.next^.prev:=temp;

tmp:=temp^.next^.next;

end;{3}

temp^.next^.next:=temp;

temp^.next^.prev:=temp^.prev;

temp^.prev:=temp^.next;

temp^.next:=tmp;

end{2}

else temp:=temp^.next;

end;{1}


m:=false;

temp:=cut;

while temp^.prevnil do

begin{2.1}

if (temp^.fam

(temp^.fam=temp^.prev^.fam) and

(temp Двунаправленный динамический список - реферат^.name

(temp^.fam=temp^.prev^.fam) and

(temp^.name=temp^.prev^.name) and

(temp^.fanem

begin{2.2}

m:=true;

if temp=cut then cut:=temp^.prev

else temp^.next^.prev:=temp^.prev;

if temp^.prev=first then

begin

first:=temp;

tmp:=nil;

end

else

begin{2.3}

temp^.prev^.prev^.next:=temp;

tmp Двунаправленный динамический список - реферат:=temp^.prev^.prev;

end;{2.3}

temp^.prev^.prev:=temp;

temp^.prev^.next:=temp^.next;

temp^.next:=temp^.prev;

temp^.prev:=tmp;

end{2.2}

else temp:=temp^.prev;

end;{2.1}

end;{0}

end

else begin

writeln('Таблица пуста');

readln;

end;

end;


begin

first:=nil;

repeat

ClrScr;

writeln('Изберите действие:');

writeln('1-Добавить');

writeln('2-Удалить');

writeln('3-Просмотреть');

writeln('4-Сортировать');

writeln('0-Выход');

readln Двунаправленный динамический список - реферат(ch);

case ch of

'1':Dobav;

'2':Udal;

'3':Prosm;

'4':Sortir;

end;

until ch='0';

end.


Казанский Муниципальный Технический Институт им. А.Н. Туполева


Курсовая работа по дисциплине:

Алгоритмические языки и программирование.

Тема: “Двунаправленный динамический перечень “.


Выполнил:

студент гр.****

******** *.*.

Проверил:

Ст. педагог

Каф. ПМИ

******** *.*.

Оценка:

отлично


Казань 2001


dzherard-dzh-tellis-i-piter-n-golder-volya-i-videnie-stranica-2.html
dzherela-ftoru-ta-vpliv-ftoru-na-lyudskij-organzm-referat.html
dzherom-klapka-dzherom-troe-v-lodke-ne-schitaya-sobaki-izlozhenie.html