|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.05.2008, 07:38 | #1 |
Пользователь
Регистрация: 06.05.2008
Сообщений: 22
|
Помогите доделать на списки
Я не понимаю, как дописать программу, чтобы она работала на Паскале. Помогите, пожалуйста, а то завтра уже зачет, очень-очень надо.
Программа, в которой процедура переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы его элементы оказались расположены в обратном порядке и подсчитывает число вхождений элемента E в список L. 1. type 2. arr=array[1..10] of integer; 3. procedure Invers(l:arr; e:integer; z:word 4. var 5. q, qual:word; 6. c:word; 7. temp:integer; 8. begin 9. q:=0; 10. qual:=z div 2 11. for c:=1 to qual do 12. begin 13. temp:=l[c]; 14. l[c]:=l[z+1-c]; 15. l[z+1-c]:=temp; 16. if l[c]=e then inc(q); 17. if l[z+1-c]=e then inc(q); 18. end; 19. for c:=1 to z do 20. Write(l[c], ' '); 21. Writeln; 22. Writeln(q); 23. end; |
19.05.2008, 08:07 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Списками тут и не пахнет.
Добавь: Код:
I'm learning to live...
|
19.05.2008, 19:50 | #3 |
Пользователь
Регистрация: 06.05.2008
Сообщений: 22
|
Если тут не пахнет списками помогите сделать так чтоб запахло, пожалуйста.
Если не сложно, может кто-нибудь сможет написать программу полностью, чтоб заработала на Паскале, пожалуйста. Я с этой темой пока не дружу, но задача очень нужна. Заранее спасибо, кто откликнется. |
19.05.2008, 23:15 | #4 |
Пользователь
Регистрация: 06.05.2008
Сообщений: 22
|
У меня получилось написать половину этой программы, но все равно на Паскале не работает. Как перевернусь список я не знаю, вот только посчитать кол-во вхождений, и то где-то ошибка. Помогите кто чем может, пожалуйста.
Type TLisp=^TNode; TNode=record info: integer; next: TLisp; end; Var p,h,q: TLisp; k,e,x: integer; begin h:=nil; writeln('vvedi x'); readln(x); if x<>0 then begin new(p); p^.info:=x; p^.next:=nil; h:=p; end; readln(x); while x<>0 do begin new(p); p^.info:=x; p^.next:=h; h:=p; readln(x); end; p:=h; while p<>nil do begin if p^.info=e then begin new(q); q^.info:=e; q^.next:=p; h:=q; end; k:=k+1; writeln(k); end. Последний раз редактировалось VANOLORD; 19.05.2008 в 23:23. |
20.05.2008, 17:09 | #5 |
Пользователь
Регистрация: 06.05.2008
Сообщений: 22
|
Спасибо большое всем, уже все получилось.
|
21.05.2008, 18:30 | #6 |
Пользователь
Регистрация: 06.05.2008
Сообщений: 22
|
У меня еще один вопросик по поводу этой задачи.
Программа, в которой процедура переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы его элементы оказались расположены в обратном порядке и подсчитывает число вхождений элемента E в список L. У меня получилось, но только выводит список в обратном порядке(т.е. прямой ход), а мне надо обратных ход(т.е. если я ввожу 1234, то должно вывести тоже 1234) Что мне надо исправить в задаче, чтобы так выводила, подскажите пожалуйста. type TLisp = ^TNode; TNode = record Prev, Next : TLisp; Info : integer; end; var p, h, q : TLisp; j, n, v, E, ecount : integer; procedure AddElem(value : integer ); var q : TLisp; begin if (p=nil) and (h=nil) then begin q:=New(TLisp); q^.Info:=value; q^.Prev:=nil; q^.Next:=nil; p:=q; h:=p; end else begin q:=New(TLisp); q^.Info:=value; q^.Prev:=h; q^.Next:=nil; h^.Next:=q; h:=q; end; end; procedure Print; var q : TLisp; begin q:=p; while q<>nil do begin Write(q^.Info, ','); q:=q^.Next; end; Writeln; end; procedure MyProc; var q, tmp1, tmp2 : TLisp; Z1, Z2 : TNode; j : integer; begin q:=p; while q<>nil do begin if q^.Info=E then Inc(ecount); q:=q^.Next; end; Writeln('E', ecount); tmp1:=p; tmp2:=h; while true do begin if tmp1=tmp2 then begin q:=p; p:=h; h:=q; exit; end; Z1:=tmp1^; Z2:=tmp2^; if tmp1^.Prev<>nil then tmp1^.Prev^.Next:=tmp2; if tmp1^.Next<>nil then tmp1^.Next^.Prev:=tmp2; if tmp2^.Prev<>nil then tmp2^.Prev^.Next:=tmp1; if tmp2^.Next<>nil then tmp2^.Next^.Prev:=tmp1; if tmp1^.Next=tmp2 then begin tmp2^.Prev:=Z1.Prev; tmp1^.Next:=Z2.Next; tmp2^.Next:=tmp1; tmp1^.Prev:=tmp2; q:=p; p:=h; h:=q; exit; end else begin tmp2^.Prev:=Z1.Prev; tmp2^.Next:=Z1.Next; tmp1^.Prev:=Z2.Prev; tmp1^.Next:=Z2.Next; end; tmp1:=Z1.Next; tmp2:=Z2.Prev; end; end; begin ecount:=0; p:=nil; h:=nil; Write('vvedite kolvo element: '); Read(n); Writeln; for j:=1 to n do begin Write('vvedite next element: '); Read(v); AddElem( v ); end; Writeln; Write('vvedite "E" element: '); Read(E); Writeln; Write('pervii spisoc: '); Print; MyProc; Write('vtoroi spisoc '); Print; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите доделать програмку | lyonya0111 | Помощь студентам | 17 | 02.07.2008 21:50 |
помогите доделать задачу | motaro | Фриланс | 3 | 09.06.2008 19:59 |
Помогите доделать | Povar | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 16.05.2008 14:43 |
Помогите доделать задачу!!!! | Vincenzo | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 11.05.2008 09:35 |