Страница 1 из 2

Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 02:05
DOM
Помогите пожалуйста исправить задачу на Delhi. Суть задачи: Написать процедуру, которая проверяет, упорядочены ли элементы списка L по убыванию.
У меня в нижеприведенном коде неправильное условие, его нужно исправить, но я не знаю как, сколько не думал-ничего путного не выходило!! Помогите начинающему программисту.Буду благодарен любой помощи.
Вот код:

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type TE=real;
     spisok=^item;
     item=record
            v:spisok;
            g:TE
          end;
var
  L,M,C:spisok;
  i:Integer;
  q:boolean;
procedure TForm1.Button1Click(Sender: TObject);
procedure Element(var L:spisok);
begin
  q:=false;
  L:=L^.v;
  while (L<>nil) and (q=false) do
    begin
      if L^.g<M^.g then begin
      L:=L^.v;
      end
      else q:=true;
    end;
    case q of
      false:Label2.Caption:='Не упорядочены';
      true:Label2.Caption:='Упорядочены';
    end;
end;
begin
  M:=nil;
  for i:=0 to Memo1.Lines.Count-1 do
    begin
      new(L);
      L^.g:=StrToFloat(Memo1.Lines[i]);
      L^.v:=M;
      M:=L
    end;
  Element(L);
 end;
end.

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 02:10
DOM
Конкретно проблема вот с этой частью:

Код: Выделить всё

L:=L^.v;
  while (L<>nil) and (q=false) do
    begin
      if L^.g<M^.g then begin
      L:=L^.v;
      end
Еще я заменял условие на:

Код: Выделить всё


while (L<>nil) and (q=false) do
    begin
      if L^.v<L^.v^.v  then begin
      L:=L^.v;
      end
Но прога просматривает(сравнивает) не все элементы списка(числа), а только 2, а
нужно все.Как исправить, что переписать?
Заранее благодарен :cool:

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 10:47
Хыиуду
Никогда не работал с указателями в Паскале, ибо считаю сие ересью, но цикл должен быть построен так

flag:=true;
цикл по всему списку
if L<=L[i+1] //Тут, конечно, должен быть не массив, а указатели, сделаете сами
then begin
flag:=false;
break;
end;
if flag then writeln('Список упорядочен')
else writeln('Список не упорядочен');

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 10:57
BHy4ok
Почему бы не сделать через: 'TStringList' and 'Sort' ?
1) Запоминаешь значения. (Допустим "S")
2) Сортируешь.
3) Если отсортированное значение = S тогда 'Список упорядочен' иначе обратное.

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 13:03
BHy4ok
Твой код я не стал смотреть т.к. там ни массивов, ничего. Что-то в нем слишком все нагромаждено.

На форму кидаешь: батон, мемо(для ввода значений) и лейбл(выводит ответ).
Как только забъешь в мемо значения ставь курсор с новой чистой строки(в конце) т.к. там идет '#13#10';
[syntax='Delphi']
procedure TForm1.Button1Click(Sender: TObject);
var
s:TStringList;
L,K:String;
i:integer;
begin
L := '';
K := '';
s:=TStringList.Create;
S.Clear;
s.Text := memo1.Text;
L := memo1.Text;
s.Sort;
for I := s.Count - 1 downto 0 do
K := K + (s)+#13#10;
s.Free;
if L = K then
label1.Caption := 'Упорядочены' else
label1.Caption := 'Не упорядочены';
end;
[/syntax]

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 13:18
DOM
BHy4ok, Спасибо конечно, все работает просто супер.Но препод у нас сказал конкретно сделать с указателями, причем раздел type должен быть таким обязательно.
Хыиуду,
Согласен-указатели это хрень полная, вообще не нужная(не в обиду будет сказано, но Паскаль и Делфи-неудобные языки)

Re: Задача на списки и динамические переменные!!!

Добавлено: 18 апр 2008, 13:21
BHy4ok
Что в твоем понимании не удобные ? :) Какие ты считаешь удобными ?

Ну не понимаю я вашего препода и его упертость. Еще куда не шло, если бы это был паскаль, но как ты написал ранее прога на делфе, в которой сие действия относительно упрощаются. А насчет указателей (+1 "Хыиуду" ).

Re: Задача на списки и динамические переменные!!!

Добавлено: 21 апр 2008, 02:49
un4-funeral
эм...простите =( но
как, не прибегая к указателям, можно ещё организовать динамическую структуру в Паскале? ((:

Re: Задача на списки и динамические переменные!!!

Добавлено: 21 апр 2008, 11:11
Хыиуду
un4-funeral писал(а):эм...простите =( но
как, не прибегая к указателям, можно ещё организовать динамическую структуру в Паскале? ((:

Я обычно решал эту проблему двумя путями: либо не организовывал динамическую структуру в Паскале, либо организовывал динамическую структуру не в Паскале. За 12 лет не было случая, чтобы один из этих методов не сработал ;)

Re: Задача на списки и динамические переменные!!!

Добавлено: 21 апр 2008, 14:37
un4-funeral
выкрутился =)