Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите изменить программу!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Greck
Помогите пожалуйста по образцу этой программы выполнить следующие задания :
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
Во-первых - пользуйся тегами... А во-вторых, все действия со списками производятся по образу процедуры 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
Огромное тебе спасидо!!! А как зделать так чтобы в меню дабовление элементта можно было добавлять несколько елементов а не один! Я так понимаю нужно использывать цыкл. Но как его сёда вписать чтоб всё работало ??

Цитата
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
Так попробуй:
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
Нет так неполучается вовод идёт много раз а вот запоминает он только 1 элемент который был введён последним! А мне нужно чтоб например в начале можно былло ввести данные сколько элементов будет в списке а потом все эти елементы ввести и чтоб они все сохранились и из этого списка найти наименьший елемент а потом наибольший............. Тебе несложно будет написать полностью весь код программы ??? чтоб нече лишнего там небыло.... только позаданию... мне скоро это здавать а решения нету паподаю жестоко unsure.gif
volvo
Цитата(Greck @ 25.06.2006 6:33) *
Нет так неполучается вовод идёт много раз а вот запоминает он только 1 элемент который был введён последним!
Да, придется заменить ту строчку, которая есть сейчас в процедуре add_first на вот такую:
p^.next:=esim; { Ochishhaem sledujushhii element }
... Тогда все работает.

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


И что то я непонял что ты изменил она там такаяже и есть.... p^.next:=nil;
volvo
Цитата(Greck @ 25.06.2006 9:26)
Вот как бы ты её решил ???

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

А мой пост внимательно перечитай, ибо это у тебя NIL, я же тебе говорю, что надо ПОМЕНЯТЬ, иначе не будет работать.
Greck
Извеняюсь а мне в начале показалось что ты написал тоже самое что и было в исходнике. У меня остался последний вопрос : Вы мне написали вот эту функцию :

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 () но как её написать ?? или она ненужна ??? ЕЩЁ РАЗ ИЗВЕНЯЮСЬ ЗА ТАКИЕ ГЛУПЫЕ ВОПРОСЫ!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.