IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Динамические структуры данных, Нужно переделать в стек...
CormiX
сообщение 12.05.2010 18:39
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Помогите пожалуйста переделать список в стек.
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=nil then
begin
writeln('Stek pustij.');
TopElement := nil
end
else
begin
temp := temp^.next;
TopElement := temp;
end;
end;


procedure Show;
var temp : Link;
begin
temp := TopElement;
while temp <> nil do
begin
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:=1 to n do
begin
if i=n then writeln('Dani: ', temp^.data, ' - ', temp^.NumRand);
if temp=nil then
begin
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 <> nil do
begin
if temp^.data=stext then
begin
writeln('Znajdeno: ', temp^.data, ' - ', temp^.NumRand);
isfind := true;
end;
temp:=temp^.next;
end;
if isfind <> true then writeln('Zapys (', stext ,') ne znajdeno.');
end;

begin
repeat
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 of
1: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.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.05.2010 18:54
Сообщение #2


Гость






У стека нет того функционала, который есть у списка, и который подразумевается в твоей программе. Стек умеет только запихивать в себя одно значение (Push), выталкивать последнее записанное значение (Pop), и, иногда, просматривать значение, занесенное в стек последним (функция Top). Никакого поиска, никакого удаления элемента из середины стека...

Кстати, это только я не вижу задания, или его здесь действительно нет?
 К началу страницы 
+ Ответить 
CormiX
сообщение 12.05.2010 19:07
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Ну то что стек "Посл. вошел - первый вышел, это я понимаю". Нет задания простите. Мне просто нужно переделать програмку в стек. Только я не понимаю как, и очень хотел бы чтоб мне с этим помогли.

Сообщение отредактировано: CormiX - 12.05.2010 19:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.05.2010 20:08
Сообщение #4


Гость






Что значит
Цитата
просто нужно переделать програмку в стек.
? Что программка делать должна? То же самое, что и сейчас - это невозможно со стеком. Дальше что?
 К началу страницы 
+ Ответить 
CormiX
сообщение 13.05.2010 12:19
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Ну нужно чтоб программа создавала стек, считывала с него вершину, можно было добавить елемент в стек и показать все его елементы.
Немного есть:
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 := 1 to 10 do
begin
New(x);
write ('Veditj ', i, ' 4islo '); readln(x^.chislo);
x^.next := Stack; Stack:=x;
end;
end;
Procedure OUTPUT_STACK;
begin
if Stack = nil
then writeln('Pustij stek!')
else begin
x := Stack;
while x<> nil do
begin
Write(x^.chislo,' ');
x := x^.next;
end;
end;
end;
begin
INPUT_STACK;
OUTPUT_STACK;
Repeat Until keypressed;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"