Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите изменить программу!

Автор: Greck 24.06.2006 17:05

Помогите пожалуйста по образцу этой программы выполнить следующие задания :
1. Написать программу поиска максимального элемента в линейном однонаправленном списке.
2. Написать программу поиска минимального элемента в линейном однонаправленном списке

Либо если незатруднит написать с нуля новую программу!

{
Spiski
}

program list;
uses crt;
type
typeofelement = integer;
spisok = ^knot;
knot = record
data: typeofelement; { Tip dannyh }
next: spisok; { Sledujushii element }
end;
var
esim: spisok; { Pervyi element }
p: spisok; { Ukazatel }
pp: spisok; { Ukazatel dlja vnesenija elementa v centr }
pnew: spisok;
key: integer;

{ dobavljaet pervyi element }
procedure add_first;
begin
clrscr;
esim:=nil; { Ochishhaem pervyi element }
new(p); { Vydeljaem pamjat }
writeln('Vvedite element:');
readln(p^.data); { Zapolnjaem element }
p^.next:=nil; { Ochishhaem sledujushhii element }
esim:=p;
writeln('Element dobavlen!');
readln;
end;

{ vyvodit spisok na ekran }
procedure show;
begin
clrscr;
{ Esli pervyi pust, to vyvodim soobshhenie }
if esim = nil then
writeln('Spisok pust!')
else
{ Esli ne pust, to vyvodim spisok na ekran }
begin
writeln('Spisok:');
p := esim;
while p <> nil do
begin
writeln(p^.data);
p := p^.next;
end;
end;
readln;
end;

{ dobavljaet ocherednoi element v konec }
procedure add_to_end;
begin
clrscr;
new(p);
writeln('Vvedite element:');
readln(p^.data);
p^.next:=nil; { Sledujushii element - NIL }
esim^.next:=p;
writeln('Element dobavlen!');
readln;
end;

{ dobavljaet ocherednoi element v nachalo }
procedure add_to_begin;
begin
clrscr;
new(p);
writeln('Vvedite element:');
readln(p^.data);
p^.next:=esim;
esim:=p;
writeln('Element dobavlen!');
readln;
end;

{ menu }
procedure menu;
begin
writeln('1 - Dobavlenie pervogo elementa');
writeln('2 - Dobavlenie ocherednogo elementa v konec');
writeln('3 - Dobavlenie ocherednogo elementa v nachalo');
writeln('4 - Vyvod spiska na ekran');
writeln('0 - Vyhod');
end;

{ glavnaja programma }
begin
repeat
clrscr;
menu;
readln(key);
case key of
1: add_first; { Dobavit pervyi element }
2: add_to_end; { Dobavit element v konec }
3: add_to_begin; { Dobavit element v nachalo }
4: show; { Vovesti spisok na ekran }
end;
until
key = 0;
end.



Заранее спасибо!!!!!!!!!!! cool.gif

Автор: volvo 24.06.2006 18:07

Во-первых - пользуйся тегами... А во-вторых, все действия со списками производятся по образу процедуры Show...

Вот так, например, находится минимальный элемент:

function min: typeofelement;
var
min_value: typeofelement;
p: spisok;
begin
min_value := maxint;
p := esim;
while p <> nil do begin
if p^.data < min_value then min_value := p^.data;
p := p^.next;
end;
min := min_value;
end;


Добавляй в меню соответствующий пункт и вызывай функцию... Для максимума - почти так же.

Автор: Greck 24.06.2006 19:02

Огромное тебе спасидо!!! А как зделать так чтобы в меню дабовление элементта можно было добавлять несколько елементов а не один! Я так понимаю нужно использывать цыкл. Но как его сёда вписать чтоб всё работало ??

Цитата
procedure add_first;
begin
clrscr;
esim:=nil; { Ochishhaem pervyi element }
new(p); { Vydeljaem pamjat }
writeln('Vvedite element:');
readln(p^.data); { Zapolnjaem element }
p^.next:=nil; { Ochishhaem sledujushhii element }
esim:=p;
writeln('Element dobavlen!');
readln;
end;


Неужели надо по два раза напоминать - ПОЛЬЗУЙСЯ ТЕГАМИ !!!

Автор: volvo 24.06.2006 19:09

Так попробуй:

procedure add_first;
var answer: char;
begin
clrscr;
esim:=nil; { Ochishhaem pervyi element }
repeat
new(p); { Vydeljaem pamjat }
writeln('Vvedite element:');
readln(p^.data); { Zapolnjaem element }
p^.next:=nil; { Ochishhaem sledujushhii element }
esim:=p;
writeln('Element dobavlen!');

write('Добавить еще элемент? (y/n)'); readln(answer);
until upcase(answer) = 'N';
readln;
end;

Автор: Greck 25.06.2006 10:33

Нет так неполучается вовод идёт много раз а вот запоминает он только 1 элемент который был введён последним! А мне нужно чтоб например в начале можно былло ввести данные сколько элементов будет в списке а потом все эти елементы ввести и чтоб они все сохранились и из этого списка найти наименьший елемент а потом наибольший............. Тебе несложно будет написать полностью весь код программы ??? чтоб нече лишнего там небыло.... только позаданию... мне скоро это здавать а решения нету паподаю жестоко unsure.gif

Автор: volvo 25.06.2006 12:08

Цитата(Greck @ 25.06.2006 6:33) *
Нет так неполучается вовод идёт много раз а вот запоминает он только 1 элемент который был введён последним!
Да, придется заменить ту строчку, которая есть сейчас в процедуре add_first на вот такую:
p^.next:=esim; { Ochishhaem sledujushhii element }
... Тогда все работает.

Цитата(Greck @ 25.06.2006 6:33)
А мне нужно чтоб например в начале можно былло ввести данные сколько элементов будет в списке а потом все эти елементы ввести и чтоб они все сохранились
Значит, тебе не в списки, а в массивы... Список потому и является списком, что заранее ты не знаешь количества элементов.

Автор: Greck 25.06.2006 13:26

Вот условие
1. Написать программу поиска максимального элемента в линейном однонаправленном списке.
2. Написать программу поиска минимального элемента в линейном однонаправленном списке
Вот как бы ты её решил ???


И что то я непонял что ты изменил она там такаяже и есть.... p^.next:=nil;

Автор: volvo 25.06.2006 13:46

Цитата(Greck @ 25.06.2006 9:26)
Вот как бы ты её решил ???

Как я ее РЕШАЛ (без "бы"), ты можешь найти в поиске... Специально для тебя второй раз я ее делать не буду.

А мой пост внимательно перечитай, ибо это у тебя NIL, я же тебе говорю, что надо ПОМЕНЯТЬ, иначе не будет работать.

Автор: Greck 25.06.2006 14:14

Извеняюсь а мне в начале показалось что ты написал тоже самое что и было в исходнике. У меня остался последний вопрос : Вы мне написали вот эту функцию :

function min: typeofelement;
var
min_value: typeofelement;
p: spisok;
begin
min_value := maxint;
p := esim;
while p <> nil do begin
if p^.data < min_value then min_value := p^.data;
p := p^.next;
end;
min := min_value;
end;


Но у меня неполучается вставить её в программу!

Пытаюсь это зделать на примере процедур тоесть вот так :

{
Spiski
}

program list;
uses crt;
type
typeofelement = integer;
spisok = ^knot;
knot = record
data: typeofelement; { Tip dannyh }
next: spisok; { Sledujushii element }
end;
var
esim: spisok; { Pervyi element }
p: spisok; { Ukazatel }
pnew: spisok;
key: integer;

{ dobavljaet pervyi element }
procedure add_first;
var answer: char;
begin
clrscr;
esim:=nil; { Ochishhaem pervyi element }
repeat
new(p); { Vydeljaem pamjat }
writeln('Vvedite element:');
readln(p^.data); { Zapolnjaem element }
p^.next:=esim; { Ochishhaem sledujushhii element }
esim:=p;
writeln('Element dobavlen!');

write('Добавить еще элемент? (y/n)'); readln(answer);
until upcase(answer) = 'N';
readln;
end;

{ vyvodit spisok na ekran }
procedure show;
begin
clrscr;
{ Esli pervyi pust, to vyvodim soobshhenie }
if esim = nil then
writeln('Spisok pust!')
else
{ Esli ne pust, to vyvodim spisok na ekran }
begin
writeln('Spisok:');
p := esim;
while p <> nil do
begin
writeln(p^.data);
p := p^.next;
end;
end;
readln;
end;
{noxogdenie nininun}
function min: typeofelement;
var
min_value: typeofelement;
p: spisok;
begin
min_value := maxint;
p := esim;
while p <> nil do begin
if p^.data < min_value then min_value := p^.data;
p := p^.next;
end;
min := min_value;
end;

{ menu }
procedure menu;
begin
writeln('1 - Dobavlenie pervogo elementa');
writeln('2 - Vyvod spiska na ekran');
writeln('3 - Naxodim minimum');
writeln('0 - Vyhod');
end;

{ glavnaja programma }
begin
repeat
clrscr;
menu;
readln(key);
case key of
1: add_first; { Dobavit pervyi element }
2: show; { Vovesti spisok na ekran }
3 : min;
end;
until
key = 0;
end.



я так понимыю нажно в функцию function min: дабавить команду writeln () но как её написать ?? или она ненужна ??? ЕЩЁ РАЗ ИЗВЕНЯЮСЬ ЗА ТАКИЕ ГЛУПЫЕ ВОПРОСЫ!