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


Автор: Truegirl 6.12.2009, 22:02
по заданию надо разделить список на 2. в первом четные элементы, во втором нечетные. проблема в том что в списках добавляется 0, а я не пойму почему, кто знает как  исправить помогите пожалуйста

Код

program Project1;

type  Pe=^TypElem;
      TypElem=record
        t: integer;
        p: pe;
      end;

      TypChet=record
        t: integer;
        p: pe;
      end;

      TypNeChet=record
        t2: integer;
        p2: pe;
      end;

var Elem, nach1, che, nach2, nechet, nach3: Pe;
    ch: char;

begin
  New(Elem);
  nach1:=Elem;
  Elem^.p:=elem;
  while elem <> nil do
  begin
    writeln('Vvedite chislo: ');
    readln(elem^.t);
    write('povtorit vvod? (y/n) ');
    readln(ch);
    if (ch='n')or(ch='N') then elem:=nil
    else begin
      new(elem^.p);
      elem:=elem^.p;
    end;
  end;

  writeln('dannie spiska: ');
  elem:=nach1;

  New(che);  nach2:=che;

  New(nechet);  nach3:=nechet;

  while elem<>nil do
  begin

    if (elem^.t mod 2=0) then
    begin
      che^.t:=elem^.t;
      New(che^.p);
      che:=che^.p;
    end else
    begin
      nechet^.t:=elem^.t;
      New(nechet^.p);
      nechet:=nechet^.p;
    end;

    write(Elem^.t:5);
    elem:=elem^.p;

  end;


  che:=nil;    nechet:=nil;

  writeln;
  writeln('----------------------');
  Writeln('Chetnii spisok: ');
  che:=nach2;

  repeat
    Write(che^.t:5);
    che:=che^.p;
  until che=nil;

  writeln;
  writeln('----------------------');
  writeln('ne chetnii spisok: ');
  nechet:=nach3;
  while nechet<>nil do
  begin
    Write(nechet^.t:5);
    nechet:=nechet^.p;
  end;
  

  readln;
end.


Автор: kuzyara 7.12.2009, 08:32
учись отлаживать свой код. Разбей программу на несколько основных блоков, и выводи информацию после каждого о том, какие действия этот блок сделал. С этими указателями очень легко запутаться. То есть опеделись, на каком этапе подкрадываютя нули: на вводе, на раделении или на выводе. Рекомендую сделать одну процедуру, которая выводит весь список на экран, и с помощью неё легко можно будет обнаружить, на каком этапе ошибка.

Добавлено через 11 минут и 50 секунд
Цитата(Truegirl @  7.12.2009,  03:02 Найти цитируемый пост)
    if (elem^.t mod 2=0) then
    begin
      che^.t:=elem^.t;
      New(che^.p);
      che:=che^.p;
    end else
    begin
      nechet^.t:=elem^.t;
      New(nechet^.p);
      nechet:=nechet^.p;
    end;

а вообще, по моему создавать новый элемент четного/нечетного списка нужно не после присваивания, а до него. И наче по выходу из цикла у тебя в конце останется один элемент, которому ты так и не присвоила никакого значеиня.

Автор: Grizzzli 15.12.2009, 01:51
надо исправлять

Автор: Truegirl 15.12.2009, 01:58
Все-таки все равно не пойму что не правильно и как это исправить, помогите очень надо!!!

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