Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Динамические списки


Автор: CyClon 21.12.2008, 11:02
Помогите, нужно написать программу, которая принимает последовательность вещественных чисел с клавиатуры в динамический список и потом меняет последний и первый элементы местами.

В какую сторону копать, где можно внятно почитать о динамических списках? Совсем не понял, как они устроены.

Автор: Dobermann 21.12.2008, 11:14
Цитата(CyClon @  21.12.2008,  11:02 Найти цитируемый пост)
В какую сторону копать, где можно внятно почитать о динамических списках?

Код

type
 pstr=^str;
 str=record
   a:real;
   next:str;
  end;
var
  p,p1:pstr;
  i:byte;
  r: real;
begin
  for i:=1 to 10 do
   begin
    read(r);
    new(p1);
    p1.next:=p;
    p:=p1;
    p.a:=r;
   end;
end.


Автор: CyClon 21.12.2008, 15:29
Спасибо, буду осмысливать smile

Но пока что:

Код
Free Pascal Compiler version 1.0.6 [2002/04/23] for i386
Copyright (c) 1993-2002 by Florian Klaempfl
Target OS: Win32 for i386
Compiling e:\etc\docs\pascal\var6\report_7_1.pas
report_7_1.pas(5,9) Error: Illegal expression
report_7_1.pas(16,8) Error: Illegal qualifier
report_7_1.pas(16,8) Hint: Maybe pointer dereference is missing
report_7_1.pas(16,8) Error: Illegal expression
report_7_1.pas(16,8) Fatal: Syntax error, ; expected but identifier NEXT found
.

Добавлено через 1 минуту и 10 секунд
Спасибо, буду осмысливать smile

Но пока что:

Код
Free Pascal Compiler version 1.0.6 [2002/04/23] for i386
Copyright (c) 1993-2002 by Florian Klaempfl
Target OS: Win32 for i386
Compiling e:\etc\docs\pascal\var6\report_7_1.pas
report_7_1.pas(5,9) Error: Illegal expression
report_7_1.pas(16,8) Error: Illegal qualifier
report_7_1.pas(16,8) Hint: Maybe pointer dereference is missing
report_7_1.pas(16,8) Error: Illegal expression
report_7_1.pas(16,8) Fatal: Syntax error, ; expected but identifier NEXT found
.

Автор: volvo877 21.12.2008, 16:01
Цитата(CyClon @  21.12.2008,  14:29 Найти цитируемый пост)
Но пока что:
Вот так:

Код
type
 pstr=^str;
 str=record
   a: real;
   next: pstr;
  end;
var
  p, p1: pstr;
  i: byte;
  r: real;
begin
  for i:=1 to 10 do
   begin
    read(r);
    new(p1);
    p1^.next:=p;
    p:=p1;
    p^.a:=r;
   end;
end.
А FPC-то обнови, 2.2.2 уже в ходу...

Автор: CyClon 24.1.2009, 00:03
volvo877, у меня IDE просто стояла, а там FPC вшит был старый.

Сдал зачеты, экзамен. Вот кстати эта задачка (только сюда препод потом еще заставил процедуру освобождения памяти написать):

Код
program task_7_1;

{ Динамические списки

Используя заданную пользователем динамическую последовательность вещественных
чисел, поменять первый и последний элементы местами

}

type
    plist = ^list;
    list = record
        data : real;
        next : plist;
    end;

var
    first, last, current : plist;
    i, n : byte;
    element, temp : real;

procedure add(element : real);
var
    pointer : plist;
begin
    new(pointer);
    pointer^.data := element;
    pointer^.next := nil;
    if first <> nil then
    begin
        current := first;
        while current^.next <> nil do
            current := current^.next;
        current^.next := pointer;
    end
    else
        first := pointer;
    current := pointer;
end;

procedure display;
begin
    if first = nil then
    begin
        writeLn('List is empty!');
        exit;
    end;
    current := first;
    write('=:');
    while current <> nil do
    begin
        write(' ', current^.data : 0 : 2);
        current := current^.next;
    end;
    writeLn;
end;

begin
    write('N: ');
    readLn(n);
    for i := 1 to n do
    begin
        write(i, ': ');
        readLn(element);
        add(element);
    end;
    last := current;
    display;
    temp := first^.data;
    first^.data := last^.data;
    last^.data := temp;
    display;
    readLn;
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)