Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 18:55   #1
Karina89
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 67
Печаль Динамическая структура(список) в Delphi

Здравствуйте! помогите, пожалуйста, найти ошибку в программе.

Задание! Найти второй максимальный элемент.

она написанна не до конца! мне бы определить ошибку в нахождении первого.
Вот ошибка, которая возникает:

Цитата:
[Hint] Unit1.pas(103): Value assigned to 'd' never used
[Warning] Unit1.pas(146): For loop control variable must be simple local variable
[Warning] Unit1.pas(147): Variable 'k' might not have been initialized

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn4: TButton;
    XPManifest1: TXPManifest;
    Memo1: TMemo;
    btn3: TButton;
    sg: TStringGrid;
    Label1: TLabel;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  type tp = ^mys;
    mys = record
    fig: integer;
    pred: tp;
    next: tp;
  end;


var
  Form1: TForm1;
  p, pk, p1, pf, p2: tp;
  i, n, j, a, q, d, k: integer;
  s: array [1..100] of integer;
  l: string;
  h: char;
implementation

{$R *.dfm}

//процедура инициализации списка
procedure inicial(var hd: tp);
begin
hd:=nil;
end;

//процедура добавления элемента в список
procedure addet(var hd: tp; n: integer);
var p1, pk:tp;
begin
new(p1);
p1^.fig:=n;
if hd=nil then
begin
hd:=p1;
hd^.next:=hd;
hd^.pred:=hd;
end
else
begin
pk:=hd^.pred;
p1^.next:=hd;
p1^.pred:=pk;
hd.pred:=p1;
pk^.next:=p1;
hd:=p1;
end;
end;

//функция вывода списка на экран
function prints(hd: tp): string;
var p2: tp;
begin
p2:=hd;
if hd<>nil then
repeat
n:=p2^.fig;
p2:=p2^.next;
l:=l+inttostr(n)+', ';
inc(i);
inc(j);
until p2=hd;
prints:=l;
end;

//функция нахождения элемента
Function find(var hd: tp; pmax: tp; pf: tp; d: integer) :string;
begin
d:=-1000;
find:=inttostr(d);
if pf^.next^.pred<> hd^.next^.pred then
if pmax^.next^.fig> d then begin
d:=pmax^.next^.fig;
pf^.next^.pred:=pmax^.next^.pred;
pmax^.next^.fig:=pmax^.next^.next^.fig;
end;
end;


procedure TForm1.btn1Click(Sender: TObject);
begin
inicial(p);
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
j:=0;
btn2.Enabled:=false;
btn3.Enabled:=false;
btn4.Enabled:=false;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
addet(p,strtoint(Edit1.Text));
edit1.Text:='';
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
Memo1.Lines.Add(prints(p));
end;

procedure TForm1.btn4Click(Sender: TObject);
var k: integer ;
begin
for q:=1 to 2 do begin
Memo1.Lines.Add(find(p,p1,p2,k));
p1:=p1^.next;
end;
end;
end.
Karina89 вне форума Ответить с цитированием
Старый 02.04.2011, 19:44   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

поправил:
Код:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn4: TButton;
    XPManifest1: TXPManifest;
    Memo1: TMemo;
    btn3: TButton;
    sg: TStringGrid;
    Label1: TLabel;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  tp = ^mys;
  mys = record
    fig: integer;
    pred: tp;
    next: tp;
  end;

var
  Form1: TForm1;
  p, pk, p1, pf, p2: tp;
  i, n, j, a, q, d, k: integer;
  s: array[1..100] of integer;
  l: string;
  h: char;
implementation

{$R *.dfm}

//процедура инициализации списка

procedure inicial(var hd: tp);
begin
  hd := nil;
end;

//процедура добавления элемента в список

procedure addet(var hd: tp; n: integer);
var
  p1, pk: tp;
begin
  new(p1);
  p1^.fig := n;
  if hd = nil then
  begin
    hd := p1;
    hd^.next := hd;
    hd^.pred := hd;
  end
  else
  begin
    pk := hd^.pred;
    p1^.next := hd;
    p1^.pred := pk;
    hd.pred := p1;
    pk^.next := p1;
    hd := p1;
  end;
end;

//функция вывода списка на экран

function prints(hd: tp): string;
var
  p2: tp;
begin
  p2 := hd;
  if hd <> nil then
    repeat
      n := p2^.fig;
      p2 := p2^.next;
      l := l + inttostr(n) + ', ';
      inc(i);
      inc(j);
    until p2 = hd;
  prints := l;
end;

//функция нахождения элемента

function find(var hd: tp; pmax: tp; pf: tp): string;
begin
  d := -1000;
  find := inttostr(d);
  if pf^.next^.pred <> hd^.next^.pred then
    if pmax^.next^.fig > d then
    begin
      d := pmax^.next^.fig;
      pf^.next^.pred := pmax^.next^.pred;
      pmax^.next^.fig := pmax^.next^.next^.fig;
    end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  inicial(p);
  btn2.Enabled := True;
  btn3.Enabled := True;
  btn4.Enabled := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  i := 1;
  j := 0;
  btn2.Enabled := false;
  btn3.Enabled := false;
  btn4.Enabled := false;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  addet(p, strtoint(Edit1.Text));
  edit1.Text := '';
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  Memo1.Lines.Add(prints(p));
end;

procedure TForm1.btn4Click(Sender: TObject);
var
  k: integer;
begin
  k:=0;
  for q := 1 to 2 do
  begin
    Memo1.Lines.Add(find(p, p1, p2, k));
    p1 := p1^.next;
  end;
end;

end.
Дословно:
Код:
{Переменная d обьявлена но нигде не используется}
[Hint] Unit1.pas(103): Value assigned to 'd' never used
{Переменная должна быть обьявлена локально, к таким предупреждениям лучше прислушываться}
[Warning] Unit1.pas(146): For loop control variable must be simple local variable
{Переменая k не инициализированна}
[Warning] Unit1.pas(147): Variable 'k' might not have been initialized
P.S. комментируй код, что и где там не работает мне не понятно! т.к. нет комментариев к коду.
Человек_Борща вне форума Ответить с цитированием
Старый 02.04.2011, 20:56   #3
Karina89
Пользователь
 
Регистрация: 26.03.2011
Сообщений: 67
По умолчанию

Код:
function find(var hd: tp; pmax: tp; pf: tp): string;
begin
  d := -1000;
  find := inttostr(d);  //ошибка высвечивается здесь
  if pf^.next^.pred <> hd^.next^.pred then
    if pmax^.next^.fig > d then
    begin
      d := pmax^.next^.fig;
      pf^.next^.pred := pmax^.next^.pred;
      pmax^.next^.fig := pmax^.next^.next^.fig;
    end;
end;
Karina89 вне форума Ответить с цитированием
Старый 02.04.2011, 22:05   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

что за ошибка?
Человек_Борща вне форума Ответить с цитированием
Старый 02.04.2011, 22:25   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Надо же выдумывать такие дебильные идентификаторы - fig, pred)
А потом хныкать с протянутой рукой по форумам - памагите, мол, нихрена не понимаю что я там нахреновертила
mss вне форума Ответить с цитированием
Старый 02.04.2011, 22:35   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Поддерживаю. Прокомментируйте весь свой код.

А вообще подозреваю что переменная d не обьявлена локально.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая структура данных tanjusha Паскаль, Turbo Pascal, PascalABC.NET 2 01.07.2010 18:46
Динамическая структура. triasoft Фриланс 5 02.06.2010 01:47
Динамическая структура Nitriyc Помощь студентам 0 18.12.2009 17:51
Задача: Динамическая структура данных на Си++ Клеом Помощь студентам 2 26.10.2009 17:17
динамическая структура o4arova6ka90 Помощь студентам 0 17.10.2009 14:05