Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2008, 07:38   #1
VANOLORD
Пользователь
 
Регистрация: 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;
VANOLORD вне форума Ответить с цитированием
Старый 19.05.2008, 08:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Списками тут и не пахнет.
Добавь:
Код:
var w:arr;
.....
begin
 {Вводим данные в массив - сам это сделаешь}
 invers(w,1,10);
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2008, 19:50   #3
VANOLORD
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 22
По умолчанию

Если тут не пахнет списками помогите сделать так чтоб запахло, пожалуйста.
Если не сложно, может кто-нибудь сможет написать программу полностью, чтоб заработала на Паскале, пожалуйста. Я с этой темой пока не дружу, но задача очень нужна. Заранее спасибо, кто откликнется.
VANOLORD вне форума Ответить с цитированием
Старый 19.05.2008, 23:15   #4
VANOLORD
Пользователь
 
Регистрация: 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.
VANOLORD вне форума Ответить с цитированием
Старый 20.05.2008, 17:09   #5
VANOLORD
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 22
По умолчанию

Спасибо большое всем, уже все получилось.
VANOLORD вне форума Ответить с цитированием
Старый 21.05.2008, 18:30   #6
VANOLORD
Пользователь
 
Регистрация: 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.
VANOLORD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите доделать програмку 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