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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2012, 19:44   #1
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию Списки.

Код, ниже.
Задание, Создать и заполнить список целыми числами и после подсчитать сумму квадратов парных чисел.
Но не в этом суть. Так как задание сделал. Вопрос заключается в следующем.
Скажем ввожу числа
1
2
3
4
0 - окончание ввода.
После оно мне считает сумму, сумму то оно какбэ посчитало, но вот после суммы возникает левое четырехзначное число ( 6288 ). Вопрос, откуда оно взялось? и как от него избавится при выводе на экран.


Код:
Program list;
Uses crt;

type
  listing=^N;
  N=record
  data: integer;
  next: listing;
end;
var
  current: listing;
  number: integer;
  head: listing;
  sum: integer;

begin
clrscr;
repeat
  write('Number=');readln(number);
  New(current); current^.data:=number; current^.next:=head;
  head:=current;
Until number=0;
writeln('---List---');
writeln('Summa kvadratov parnux elementov');
current:=head;

sum:=0;

while current<>nil do begin
  write(' ',current^.data);
  current:=current^.next;

writeln;
if current^.data mod 2 =0 then
  begin 
   sum:= sum+sqr(current^.data);   
   writeln('Sum:=',sum);
  end;
end;
readln;
end.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 15.01.2012, 23:39   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, вы ноль тоже записываете в цепочку (список).
Но это ещё полбеды. а вот то, что вы в цикле перебираете элементы неправильно - это намного хуже!

попробуйте такой код:
Код:
begin
  clrscr;
  repeat
    write('Number='); readln(number);
    if number <> 0 then begin
      New(current); current^.data := number; current^.next := head;
      head := current;
    end;
  until number = 0;
  writeln('---List---');
  writeln('Summa kvadratov parnux elementov');
  current := head;

  sum := 0;

  while current <> nil do begin
    write(' ', current^.data);
    if current^.data mod 2 = 0 then
    begin
      sum := sum + sqr(current^.data);
      write(' Sum:=', sum);
    end;
    current := current^.next;
  end;
  writeln;
  writeln('Itogo : summa kvadratov parnux elementov = ', sum);
  writeln;
  readln;
end.

p.s. кстати, Вы знаете, что вы таким образом добавляя элементы в список, получаете их в обратной (относительно порядка ввода) последовательности?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2012, 12:02   #3
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Да знаю, я уже просто сдавал такой же вариант, с выводом конечно не очень красиво, но прокатило =)
Благодарю.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки. С++ RomanHouse Общие вопросы C/C++ 0 29.05.2011 21:38
списки с с++ Котик Помощь студентам 1 30.05.2010 17:51
Списки sabika Помощь студентам 0 02.12.2009 18:54
Списки AnnNet Microsoft Office Excel 5 23.11.2009 20:29