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

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

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

 
 Ответить  Открыть новую тему 
> Задача. Указатели, Написание программы без использования массивов
сообщение
Сообщение #1


Гость






Подскажите пожалуйста как написать вот эту программу БЕЗ использования МАССИВОВ...
Код

program test;
uses crt;
type id_node=^node;
     node=record
     x:integer;
     next:id_node;
     end;

var
i,max,n:integer;
nach,tek,temp:id_node;
f:TEXT;
posl:array [0..1000] of integer;
begin
clrscr;

writeln('LabRab 10, variant 9');
writeln;

i:=0; write('Datum order: ');
assign(f,'input.txt'); reset(f);
repeat read(f,posl[i]); write(posl[i],' '); i:=i+1; until (posl[i-1]=0);
close(f); n:=i;

writeln; write('Numbers of greatest elements: '); max:=posl[0];
for i:=1 to n-1 do if posl[i]>max then max:=posl[i];
for i:=0 to n-1 do if posl[i]=max then write(i+1,' ');

new(nach); tek:=nach;
for i:=0 to n-1 do
    if posl[i]<>max then
       begin
            tek^.x:=posl[i];
            if posl[i]<>0 then begin new(tek^.next); tek:=tek^.next; end
        else tek^.next:=NIL;
       end;

writeln; write('One-way list without greatest elements : ');
tek:=nach;
repeat write(tek^.x,' '); tek:=tek^.next; until tek=NIL;

readkey;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ты бы задание привел, было бы проще...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Дана непустая последовательность натуральных чисел, за которой следует 0. Напечатать порядковые номера тех чисел последовательности, которые имеют наибольшую величину, и удалить эти элементы.
Сформировать односвязный список и вывести на печать полученную информацию согласно варианту
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Уважаемый Volvo, отзовитесь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ну, вот так, например:
type
  plist = ^tlist;
  tlist = record
    info: integer;
    next: plist;
  end;

var
  p, r, first, last: plist;
  X, max: integer;


begin
  first := nil; last := nil;

  repeat

    write('next number = '); readln(X);
    if X <> 0 then begin
      new(p);
      p^.info := x;
      p^.next := nil;

      if first = nil then first := p
      else last^.next := p;

      last := p
    end;

  until X = 0;

  max := 0;
  writeln('print list:');
  p := first;
  while p <> nil do begin
    write(p^.info:4);

    if p^.info > max then max := p^.info;

    p := p^.next;
  end;
  writeln;
  writeln('max = ', max);

  X := 1;
  p := first;
  while p <> nil do begin
    if p^.info = max then write('#':3, X);
    p := p^.next; inc(X);
  end;
  writeln;

  { Deleting max }
  p := first;
  while p <> nil do begin
    if p^.info = max then begin

      r := p^.next;
      p^ := r^;
      dispose( r );
      r := nil

    end;
    p := p^.next;
  end;

  writeln('print list:');
  p := first;
  while p <> nil do begin
    write(p^.info:4);
    p := p^.next;
  end;
  writeln;

end.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Спасибо Большое за помощь, Volvo.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






dispose®;
Это опечатка ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Это не я, это форум smile.gif ... Просто ( r ) без пробелов записывается как ®... Исправлено...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Я так и понял smile.gif
Еще раз спасибо за помощь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Volvo
Честное слово неловко, но кажется программа работает некорректно, при первом запуске все нормально, но потом появляются проблемы в виде ошибки 204:Invalid pointer operation и к примеру вводим последовательность 12330
порядковые номера наибольших чисел 3 и 4, но вот на печать выводится результат 123, а должно быть по идее 12...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






А вводим к примеру 1234440 - ошибка 204
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Насчет
Цитата
к примеру вводим последовательность 12330
порядковые номера наибольших чисел 3 и 4, но вот на печать выводится результат 123, а должно быть по идее 12...
- согласен, недосмотрел... А вот
Цитата
204:Invalid pointer operation
ни разу поймать не удалось... Напиши при каких входных значениях она возникает... И что значит
Цитата
при первом запуске все нормально, но потом появляются проблемы
? 2 раза подряд запускаешь НЕизмененную программу и она первый раз работает нормально, а второй раз делает проблемы?

Вот немного измененная версия:
type
  plist = ^tlist;
  tlist = record
    info: integer;
    next: plist;
  end;

var
  p, r, first, last: plist;
  X, max: integer;


begin
  first := nil; last := nil;

  repeat

    write('next number = '); readln(X);
    if X <> 0 then begin
      new(p);
      p^.info := x;
      p^.next := nil;

      if first = nil then first := p
      else last^.next := p;

      last := p
    end;

  until X = 0;

  max := 0;
  writeln('print list:');
  p := first;
  while p <> nil do begin
    write(p^.info:4);

    if p^.info > max then max := p^.info;

    p := p^.next;
  end;
  writeln;
  writeln('max = ', max);

  X := 1;
  p := first;
  while p <> nil do begin
    if p^.info = max then write('#':3, X);
    p := p^.next; inc(X);
  end;
  writeln;

  { Deleting max }
  while first^.info = max do begin
    p := first;
    first := first^.next;
    dispose(p);
  end;

  p := first;
  while p^.next <> nil do begin
    if p^.next^.info = max then begin

        r := p^.next;
        p^.next := r^.next;
        dispose( r );
        r := nil

    end
    else
    p := p^.next;
  end;

  writeln('print list:');
  p := first;
  while p <> nil do begin
    write(p^.info:4);
    p := p^.next;
  end;
  writeln;

end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Все OK
Работает без сучка и задоринки
Спасибо !
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 18.04.2025 18:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name