Курсовая: Двунаправленный динамический список - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

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

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 21 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

Казанский Государственный Тех нический Университет им . А.Н . Тупо лева Курсовая рабо та по дисциплине : Алгоритмические языки и программирование. Тема : “Двунаправленный динамический список “. Выполнил : студент гр .**** ******** *.*. Проверил : Ст . преподаватель Каф . ПМИ ******** *.*. Оценка : отлично Казань 2001 Задание Реализовать базу данных на основе двунаправленного динамическ ого списка , содержащего фамилию , имя , отчество человека , дату его рождения и знак зо диака по западному календарю. В программном изделии предусмотреть работ у со списком , которая включает в себ я : 1. Ввод данн ых ; 2. Удаление данных из списка ; 3. Вывод спи ска на дисплей ; 4. Сортировку списка по фамилии. Написать программное изделие на двух языках програм мирования : C , Pascal . Описание алгоритма программы со структурой данных Взаимодействие программы с пользователем должно быть реализо вано по следующему алгоритму : Выбор из главного меню одной из с ледующих функций : а ) Доб авить ; б ) Удалить ; в ) П росмотреть ; г ) С ортировать ; д ) Вых од. После выполнения каждой функции необходимо обеспечить возврат в главное меню и выбор любой другой функции. При выборе функции «Выход» работа про граммы завершается. При выборе ф ункции «Добавить» , выделяется память для х ранения данных , затем пользователю предла гается ввести фамилию , имя , отчество и дат у рождения человека , эти данные заносятся в память , после чего автоматически определяет ся знак зодиака по западному календарю и заносится в память. При выборе функции «Удали ть» , пров еряется наличие данных в списке . Если спис ок пуст , на дисплей выводится соответствующее сообщение ; иначе пользователю предлагается в вести фамилию , имя и отчество человека , по сле чего происходит его поиск в списке . Если данные на человека внесены в список , то происходит удаление этих данных и освобождение памяти ; иначе на дисплей выводится надпись об их отсутствии. При выборе функции «Просмотреть» , поверяе тся наличие данных в списке . Если данные отсутствуют , на дисплей выводится соответств ующее со общение ; иначе выводится таблица , содержащая фамилию , имя , отчество , дату ро ждения человека и его знак зодиака по западному гороскопу. При выборе функции «Сортировать» , происхо дит сортировка списка по фамилии . Если в списке встречаются две одинаковые фамил ии , тогда сравниваются имена ; при совп адении имён сравниваются отчества. Описание программы Для реал изации динамического списка в программе приме нён тип указателей , указывающий на запись ” Inform ” , сод ержащую фамилию ” fam ” , имя ” name ” , отчество ” fanem ” , ден ь рождения ” bethday ” , знак зодиака ” zodiak ” и указатели на следующий ” next ” и предыдущий ” prev ” элементы списка . С помощью этого типа ” Ukazat ” описаны п еременные : “ temp ” – для хранения указателя на те кущий элемент ; “ first ” – для хранения указателя на перв ый элемент в списке ; “ cut ” – для хранения на последний элемент в списке . П еременная “ ch ” используется для выбора процедуры ; “ s 1” , “ s 2” , “ n ” – для вычисления знака зодиака ; “ m ” – для проверки условия , при сортировке ; “ ffam ” , “ fname ” , “ ffanem ” – для временно го хранения фамилии , имени , отче ства , при удалении элемента из списка. Программа начинает выполняться с присвоен ия указателю на первый элемент ( first ) значения “ nil ” . После этого пользователю предлагается выбрать дейс твие : « 1-Добавить» , « 2-Удалить» , « 3-Про смотреть» , « 4-Сортировать» , «0-Выход» . В зависимости от того , какое действие выберет пользователь , начнёт выполняться та или ина я процедура , или произойдёт выход из прогр аммы . Это реализовано с помощью операции в ыбора “ case ”.После выполнения некоторой проц едур ы пользователю вновь предлагается выбрать одн о из вышеуказанных действий , пока не будет выбран выход из программы . Это реализован о с помощью цикла “ repeat until ”. Процедура добавления “ Dobav ”. Сначала выделяется память под текущий элемент ( new ( temp )), затем в этот элемент записывается фам илия , имя , отчество и дата рождения . По дате рождения вычисляется знак зодиака . Для этого в s 2 записывается число рождения , а в s 1 первые т ри буквы месяца рождения , затем , путём сра внения этих переменных с числами и час тями слов находится соответствующий знак зодиака , и заносится в текущий элемент . После ввода информации , проверяется наличие элементов в списке . Если они отсутствуют , то в текущем элементе , указателям на сл едующий ( next ) и предыдущий ( prev ) элементы присва ивается значение “ nil ” ; а указатель на сам элемент ( temp ) присваивается указателям на первый ( first ) и последний ( cut ) элементы в списке . Если список не пустой , то в текущем элементе , указателю на следующий элем ент ( next ) пр исваивается значение “ nil ” , а ук азателю на преды дущий элемент ( prev ) присваивается указатель на последний элемент ( cut ) в списке ; а указателю на следующий элемент ( next ) последнего элемента в списке и ука зателю на последний элемент ( cut ) присваивается указатель на текущий элемент ( temp ). После чего процедура добавления завершается. Процедура удаления “ Udal ”. В этой процедуре сначала п роверяется наличие элементов в списке . Если список пуст , то выводится сообщение : «Таблиц а пуста» . Если же список содержит элементы , то пользователю предлага ется ввести фамилию , имя и отчество удаляемого , записывая их в ffam , fname , ffanem соответс твенно . После происходит поиск удаляемого эле мента в списке . Это реализовано с помощью цикла , который выполняется , пока элемент не найден или не просмотрен весь спис ок . Если искомый элемент отсутствует , то выводится сообщение : «Такого нет» . Если же искомый элемент найден , то текущий ука затель ( temp ) показывает на него , и происходит его уд аление. Если указатели на первый ( first ) и последний ( cut ) элеме нты не равны , то происходит поиск ме стонахождения элемента в списке . Если внутри текущего элемента указатель на предыдущий элемент ( prev ) равен nil , тогда указателю на предыдущий элемент ( prev ) внутр и следующего за текущим элементом присваивает ся указатель на предыдущий эл емент вн утри текущего , а указателю на первый элеме нт ( first ) в списке присваивается указатель на следующий элемент . Если внутри текущего элемента ук азатель на следующий элемент ( next ) равен nil , тогда указате лю на следующий элемент ( next ) внутри предыдуще го перед текущим элементом присваивается указат ель на следующий элемент внутри текущего , а указателю на последний элемент ( cut ) в списке присваивается указатель на предыдущий элемент . Если текущий элемент оказался «внутри» спи ска , тогда указателю на следую щий элем ент ( next ) вн утри предыдущего перед текущим элементом прис ваивается указатель на следующий элемент внут ри текущего , а указателю на предыдущий эле мент ( prev ) в нутри следующего за текущим элементом присваи вается указатель на предыдущий элемент внутри текущего. Если же указатели на первый ( first ) и последний ( cut ) элеме нты равны , то указателю на первый элемент в списке ( first ) присваивается nil . После некоторых преобразований внутри спи ска происходит освобождение памяти текущего э лемента ( dispose ( temp ) ). На этом процедура удаления завершается. Процедура просмотра “ Prosm ”. Эта процедура выполняет вывод содержимого списка в виде таблицы. Сначала на дисплей выводится шапка та блицы , содержащая : «Фамилия Имя Отчество» , «Дат а рождения» и «Знак зодиака» . После вывода шапки проверяется наличие элементов в списке. Если список содержит элементы , то прои сходит их построчный вывод . Это реализовано с помощью цикла , который выполняется , пока указатель на текущий элемент ( temp ) не переберёт все элементы списка . В цикле вычисл яется длина фамилии , имени и отчества , пос ле чего они выводятся на дисплей , а за ними выводятся дата рождения и знак зодиака ; затем указателю на текущий элемент ( temp ) присваи вается указатель на следующий за ним элем ент. Если список окажется пуст , т о выводится сообщение : «Таблица пуста». После завершения цикла или вывода соо бщения , процедура просмотра завершается. Процедура сортировки “ Sortir ”. Для этой процедуры применена локальная переменная “ tmp ” типа “ ukazat ” . Здесь сначала пров еряется наличие эл ементов в списке. Если список содержит элементы , то пере менной “ m ” присваивается значение “ true ” , затем выпо лняется цикл , пока “ m = true ” . В цикле переменной “ m ” присваивается значение “ false ” , указателю на текущий элемент ( temp ) присваив ается указатель на п ервый элемент в списке ( first ), и выполняется вложенный цикл , пока указатель на следующий элемент внутри текущег о не равен “ nil ” . В этом цикле проверяется како й элемент больше . Если текущий элемент окажется больше чем следующий за ним элемент , тогда пере менной “ m ” присваивается значение “ true ” , и проверяе тся местонахождение текущего элемента в списк е . Если он окажется в начале списка , то указателю на первый элемент в списке ( first ) присваив ается указатель на следующий элемент за т екущим , а иначе указателю на следующий элемент ( next ) внутри предыдущего перед текущим элеме нтом присваивается указатель на следующий эле мент внутри текущего . Если же текущий элем ент окажется в конце списка , тогда указате лю на последний элемент в списке присваив ается указатель на текущий элемент , а локальной переменной “ tmp ” присваивается значение “ nil ” , а ин аче указателю на предыдущий элемент ( prev ) следующего эл емента после следующего за текущим элементом присваивается указатель на текущий элемент , а локальной переменной ( tmp ) пр исваивается указ атель на следующий элемент после следующего за текущим элементом . После выяснения мес тоположения и выполнения некоторых команд , ук азателю на следующий элемент после следующего за текущим элементом присваивается указатель на текущий элемент, указателю на пр едыдущий элемент следующего за текущим элемен том присваивается указатель на предыдущий эле мент перед текущим ; а внутри текущего элем ента указателю на предыдущий перед текущим присваивается указатель на следующий элемент за текущим , и указа т елю на следующий элемент за текущим присваивается ло кальная переменная “ tmp ” . Если же текущий элемент окажется не больше чем следующий за ним элемент , тогда указателю на текущий элемент ( temp ) присв аивается указатель на следующий за ним эл емент ( next ). На этом выполнение вложенного цикла за вершается. Переменной “ m ” снова присваивается значение “ false ” , а ук азателю на текущий элемент ( temp ) присваивается указатель на последний элемент в списке ( cut ), и выполняется ещё один вложенный цикл , пока указатель на п редыдущий элемент внутри текущег о не равен “ nil ” . В этом цикле проверяется како й элемент меньше. Если текущий элемент окажется меньше чем предыдущий перед ним элемент , тогда пе ременной “ m ” присваивается значение “ true ” , и проверяе тся местонахождение текущ его элемента в списке . Если он окажется в конце спис ка , то указателю на последний элемент в списке ( cut ) присваивается указатель на предыдущий элемент перед текущим , а иначе указателю н а предыдущий элемент ( prev ) внутри следующего за текущим элементом прис ваивается указатель на предыдущий элемент внутри текущего . Если же текущий элемент окажется в начале списка , тогда указателю на первый элемент в списке присваивается указатель на текущий эле мент , а локальной переменной “ tmp ” присваивается значение “ nil ” , а иначе указателю на следующи й элемент ( next ) предыдущего элемента перед предыдущим до текущего элемента присваивается указатель на текущий элемент , а локальной переменной ( tmp ) присваив ается указатель на предыдущий элемент перед предыдущим до текущего элем ента . Посл е выяснения местоположения и выполнения некот орых команд , указателю на предыдущий элемент перед предыдущим до текущего элемента пр исваивается указатель на текущий элемент , ука зателю на следующий элемент предыдущего перед текущим элементом присва и вается указатель на следующий после текущего ; а в нутри текущего элемента указателю на следующи й элемент присваивается указатель на предыдущ ий элемент , и указателю на предыдущий элем ент присваивается локальная переменная “ tmp ” . Если же текущий элемент окаже тся не меньше чем предыдущий перед ним элемент , тогда указателю на текущий элемент ( temp ) присваивается указатель на предыдущий перед ним элемент ( prev ). На этом выполнение вложенного цикла завершается. Если во время поверки наличия элемент ов в списке окаж ется , что он пуст , то выводится сообщение : «Таблица пуста». После завершения цикла или вывода соо бщения , процедура сортировки завершается. Листинг прогр аммного изделия на языке программирования “С” . #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).z odiak," телец "); else strcpy((*temp).zodiak," близнецы "); if (strcmp(s1," июн ")==0) if (strcmp(s2,"22")<0) strcpy((*temp).zodiak," близнецы "); else strcpy((*temp).zodiak," рак "); if (strcmp(s1," июл ")==0) if (strcmp(s2,"23")<0) strcpy((*temp).z odiak," рак "); 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(s2,"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; wh ile (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).ne xt).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=(*tem p).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); Листинг прогр аммного изделия на языке программирования “ Pascal ”. Program kursovik; uses crt; type Ukazat=^Inform; Inform=rec ord 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<'0') or (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 (s1<='9') then s2:=s2+s1 else s2:='0'+s2; while ((s1<' А ') or (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' t hen 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); wr ite(' Введите отчество : '); readln(ffanem); temp:=first; while ((ffam<>temp^.fam) or (fname<>temp^.name) or (ffanem<>temp^.fanem)) and (temp<>nil) do temp :=temp^.next; 2 if temp=nil then begin write(' Такого нет '); readln; end else begin else2 3 if first<>cut 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 else5 temp^.prev^.next:=temp^.next; temp^.next^.prev:=temp^.prev; end else5 e lse 3 first:=nil; dispose(temp); end; else2 end; else1 end; procedure Procedure Prosm; begin ClrScr; temp:=first; writeln(' Фамилия Имя Отчество ':27, ' Дата рождения ':27,' Знак зодиака ':20); write('__ ______________________________________________________________'); if first<>nil then begin while temp<>nil 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 first<>nil then begin m:=true; 0 while m=true do begin m:=false; temp:=first; while temp^.next<>nil 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; i f 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^.prev<>nil do begin 2.1 if (temp^.fam
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Человек, проработавший охранником более пяти лет, может разгадывать сканворд одновременно двумя руками.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

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

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru