program lab9;
uses crt;
type
Link = ^List;
List = record
next: Link;
data: string;
NumRand: integer;
end;
var
i:integer;
TopElement: Link;
tocase:byte;
doexit:boolean;
function DataAsk : string;
begin
Write('Vedit dani:');
Readln(DataAsk);
end;
procedure DataCreate(pdata:string);
begin
TopElement:=New(Link);
TopElement^.data := pdata;
TopElement^.NumRand := Random(10000);
TopElement^.next := nil;
end;
procedure DataAdd(pdata:string);
var temp: Link;
begin
temp := new(Link);
temp^.data := pdata;
temp^.NumRand := Random(10000);
temp^.next := TopElement;
TopElement := temp;
end;
procedure DataDel;
var temp: Link;
begin
temp := TopElement;
if temp^.next=nilthenbegin
writeln('Stek pustij.');
TopElement := nilendelsebegin
temp := temp^.next;
TopElement := temp;
end;
end;
procedure Show;
var temp : Link;
begin
temp := TopElement;
while temp <> nildobegin
writeln('Dani: ', temp^.data, ' - ', temp^.NumRand);
temp:=temp^.next;
end;
end;
procedure ShowNData;
var temp : Link;
n : word;
begin
write('Veditj №: ');
readln(n);
temp := TopElement;
for i:=1to n dobeginif i=n then writeln('Dani: ', temp^.data, ' - ', temp^.NumRand);
if temp=nilthenbegin
writeln('Ne znajdeno poziciji №: ', n);
break;
end;
temp:=temp^.next;
end;
end;
procedure Search;
var temp : Link;
stext: string;
isfind : boolean;
begin
write('Veditj wukanij tekst: ');
readln(stext);
temp := TopElement;
while temp <> nildobeginif temp^.data=stext thenbegin
writeln('Znajdeno: ', temp^.data, ' - ', temp^.NumRand);
isfind := true;
end;
temp:=temp^.next;
end;
if isfind <> true then writeln('Zapys (', stext ,') ne znajdeno.');
end;
beginrepeat
clrscr;
writeln('Oberitj diu');
writeln;
writeln('1.Novij zapys.');
writeln('2.Dodaty zapys.');
writeln('3.Vydalyty.');
writeln('4.Vyvesty zapys novyj.');
writeln('5.Vyvesty vsi dani.');
writeln('6.Powuk.');
writeln;
writeln('0.Vyjty.');
writeln;
write('Vykonaty diu nomer: ');
readln(tocase);
case tocase of1:DataCreate(DataAsk);
2:DataAdd(DataAsk);
3:DataDel;
4:ShowNData;
5:Show;
6:Search;
0:doexit:=true
else writeln('Pomylka!')
end;
writeln('Diu ', tocase,' vykonano. Enter - prodov*yty');
readln;
until doexit;
end.
volvo
12.05.2010 22:54
У стека нет того функционала, который есть у списка, и который подразумевается в твоей программе. Стек умеет только запихивать в себя одно значение (Push), выталкивать последнее записанное значение (Pop), и, иногда, просматривать значение, занесенное в стек последним (функция Top). Никакого поиска, никакого удаления элемента из середины стека...
Кстати, это только я не вижу задания, или его здесь действительно нет?
CormiX
12.05.2010 23:07
Ну то что стек "Посл. вошел - первый вышел, это я понимаю". Нет задания простите. Мне просто нужно переделать програмку в стек. Только я не понимаю как, и очень хотел бы чтоб мне с этим помогли.
volvo
13.05.2010 0:08
Что значит
Цитата
просто нужно переделать програмку в стек.
? Что программка делать должна? То же самое, что и сейчас - это невозможно со стеком. Дальше что?
CormiX
13.05.2010 16:19
Ну нужно чтоб программа создавала стек, считывала с него вершину, можно было добавить елемент в стек и показать все его елементы. Немного есть:
program STACK_Pr;
Uses Crt;
type
PStack = ^TStack;
TStack = record
chislo: integer;
next : PStack;
end;
var
x, Stack : PStack;
i : integer;
Procedure INPUT_STACK;
begin
ClrScr;
Stack := nil;
for i := 1to10dobegin
New(x);
write ('Veditj ', i, ' 4islo '); readln(x^.chislo);
x^.next := Stack; Stack:=x;
end;
end;
Procedure OUTPUT_STACK;
beginif Stack = nilthen writeln('Pustij stek!')
elsebegin
x := Stack;
while x<> nildobegin
Write(x^.chislo,' ');
x := x^.next;
end;
end;
end;
begin
INPUT_STACK;
OUTPUT_STACK;
RepeatUntil keypressed;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.