![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Zas |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Юрий Репутация: ![]() ![]() ![]() |
Добрый вечер.
немного модифицировал данную на форуме программу по работе с односторонними списками, перевел на нужный язык..., добывил несколько процедур. Нужно написать аналогичную программу в Си. В си программировал очень редко, поэтому незнаю пунктуации, и некоторых вещей, кому не сложно, помогите пожалуйста, вот код программы в паскале( все что написано в write не нужно писать... дополню): Код program 1; uses CRT; type pt = ^elem; elem = record info : byte; next : pt; end; //****************************************************************************** function getprelastel (list:pt):pt; var nextel:pt; begin if (list<>NIL) then begin nextel:=list; repeat list:=nextel; if (list^.next<>NIL) then nextel:=list^.next; until (nextel^.next=NIL); getprelastel:=list; end else getprelastel:=NIL; end; //______________________________________________________________________________ //****************************************************************************** function getlastel (list:pt):pt; begin if (list<>NIL) then begin while (list^.next<>NIL) do list:=list^.next; getlastel:=list; end else getlastel:=NIL; end; //______________________________________________________________________________ //****************************************************************************** function searchel (list:pt;info:byte):pt; begin if (list<>NIL) then begin while ((list^.next<>NIL) and (list^.info<>info)) do list:=list^.next; if (list^.info<>info) then searchel:=NIL else searchel:=list; end else begin searchel:=NIL; end; end; //______________________________________________________________________________ //****************************************************************************** function searchpreel (list:pt;info:byte):pt; var nextel:pt; begin if (list<>NIL) then begin nextel:=list; repeat list:=nextel; if (list^.next<>NIL) then nextel:=list^.next; until ((nextel^.next=NIL) or (nextel^.info=info)); if (nextel^.info<>info) or (nextel=list) then searchpreel:=NIL else searchpreel:=list; end else begin searchpreel:=NIL; end; end; //______________________________________________________________________________ //****************************************************************************** function getelem(elname:string):byte; var ret:byte; begin write('Iveskite ',elname,' : '); readln(ret); getelem:=ret; end; //______________________________________________________________________________ //****************************************************************************** procedure addtobegin (var list:pt;info:byte); var newelem:pt; begin new(newelem); newelem^.info:=info; newelem^.next:=list; list:=newelem; end; //______________________________________________________________________________ //****************************************************************************** procedure addafter (listel:pt;info:byte); var newelem,temp:pt; begin temp:=searchel(listel, getelem('Ieskomo elemento reiksme')); if ((listel<>NIL) and (temp<>NIL)) then begin new(newelem); newelem^.info:=info; newelem^.next:=temp^.next; temp^.next:=newelem; end; end; //______________________________________________________________________________ //****************************************************************************** procedure addtoend (var list:pt;info:byte); begin if (list=NIL) then addtobegin(list,info) else addafter(getlastel(list),info); end; //______________________________________________________________________________ //****************************************************************************** procedure addbefore (listel:pt;info:byte); var newelem, temp:pt; begin temp:=searchel(listel, getelem('Ieskomo elemento reiksme')); if ((listel<>NIL) and (temp<>NIL)) then begin new(newelem); newelem^.info:=temp^.info; temp ^.info:=info; newelem^.next:=temp^.next; temp^.next:=newelem; end; end; //______________________________________________________________________________ //****************************************************************************** procedure delfirstel(var list:pt); var temp:pt; begin if (list<>NIL) then begin temp:=list; list:=list^.next; dispose(temp); end; end; //______________________________________________________________________________ //****************************************************************************** procedure dellastel(var list:pt); var temp:pt; begin if (list<>NIL) then if (list^.next=NIL) then delfirstel(list) else begin temp:=getprelastel(list); dispose(temp^.next); temp^.next:=NIL; end; end; //______________________________________________________________________________ //****************************************************************************** procedure delel(var list:pt;el:pt); var temp,temp1 :pt; begin temp1:=searchel(list, getelem('Pasalinamo elemento reikshme')); if ((list<>NIL) and (el<>NIL) and (temp1<>NIL)) then begin if (temp1^.next=NIL) then if (list^.next=NIL) then delfirstel(list) else dellastel(list) else begin temp:=temp1^.next; temp1^.info:=temp^.info; temp1^.next:=temp^.next; dispose(temp); end; end; end; //______________________________________________________________________________ //****************************************************************************** procedure delbefore(var list:pt;info:byte); var temp:pt; begin if (list<>NIL) then begin temp:=searchpreel(list,info); delel(list,temp); end; end; procedure delafter(var list:pt;info:byte); var temp:pt; begin if (list<>NIL) then begin temp:=searchel(list,info); temp:=temp^.next; delel(list,temp) end; end; //______________________________________________________________________________ //****************************************************************************** procedure printlist (list:pt); begin clrscr; if (list=NIL) then writeln('Sarasas Tuscias!') else while (list<>NIL) do begin write(list^.info); list:=list^.next; if (list<>NIL) then write(',') else write('.'); end; readkey; end; //______________________________________________________________________________ //****************************************************************************** procedure checkel(list:pt;info:byte); begin if (searchel(list,info)<>NIL) then writeln('Elementas ',info,' egzistuoja.') else writeln('Elemento ',info,' nera.'); readkey; end; //_____________________________________________________________________________ procedure listclear ( var list: pt ); var templist: pt; begin while list <> nil do begin templist :=list; list:=list^.Next; dispose(templist); end; end; procedure showmenu; begin clrscr; Writeln('1) Irasyti elementa i saraso pradzia'); Writeln('2) Irasyti elementa i saraso pabaiga'); Writeln('3) Pasalinti pirma elementa is saraso'); Writeln('4) Pasalinti paskutini elementa is saraso'); Writeln('5) Patinkrinti ar egzistuoja nurodytas elementas'); Writeln('6) Pasalinti nurodyta elementa'); Writeln('7) Iterpti elementa po nurodyto'); Writeln('8) Iterpti elementa pries nurodyta'); Writeln('9) Pasalinti elementa po nurodyto'); Writeln('10) Pasalinti elementa pries nurodyta'); Writeln('11) Isspausdinti sarasa'); Writeln('12) Istrinti sarasa'); Writeln('13) Iseiti is programos'); Writeln; Write(' Jusu pasirinkimas : '); end; var root: pt; selection : byte; begin root:=NIL; repeat showmenu; readln(selection); writeln; case selection of 1: addtobegin(root,getelem('elemento reiksme')); 2: addtoend(root,getelem('elemento reiksme')); 3: delfirstel(root); 4: dellastel(root); 5: checkel(root,getelem('Ieskomo elemento reiksme')); 6: delel(root,root); 7: addafter(root,getelem('Iterpiamo elemento reiksme')); 8: addbefore(root,getelem('Iterpiamo elemento reiksme')); 9: delafter(root,getelem('Ieskomo elemento reiksme')); 10: delbefore(root,getelem('Ieskomo elemento reiksme')); 11: printlist(root); 12: listclear(root); 13: clrscr; end; until selection=13; end. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Дословно - так:
![]() Если работало в Паскале, должно работать и в С... |
Zas |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Юрий Репутация: ![]() ![]() ![]() |
Огромное спасибо, буду сейчас разбираться. Еще такой вопрос к какому пакету относятся clrcsr и getch? conio.h?
И еще вопрос при выполнении функции listclear выдает ошибку.... компилирую в Borland C++ Thread stop Access violation at 0x401460 Сообщение отредактировано: Zas - 25.02.2007 0:30 |
Zas |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Юрий Репутация: ![]() ![]() ![]() |
Вопрос всё еще актуален, процедура listclear в Си из вышенаписанной программы не работает, скажите пожалуйста в чем ошибка.
Сообщение отредактировано: Zas - 24.03.2007 21:48 |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата процедура listclear в Си из вышенаписанной программы не работает Возможно, вот из-за этого: void listclear(pt *list) {(проверить не могу, языком, на который была переведена программа не владею. Вот кстати еще одна причина, по которой СНАЧАЛА отлаживается логика, и только когда она работает безукоризненно - делается интерфейс... Я устал это повторять, не хотите понимать - мучайтесь теперь...) |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 8:37 |