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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 21:51   #1
Despot777
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 22
По умолчанию попытка разыменовать нулевой элемент

Создать однонаправленный список действительных чисел, который может вместить как положительные, так и отрицательные числа. Найти произведение и подсчитать количество отрицательных элементов списка. Удалить из списка все отрицательные элементы и вывести обновленный список. Удалить список.
Ошибка: попытка разыменовать нулевой элемент. Программа должна находить произведение отрицательных элементов и количество их. Не пойму где ошибка.
Код:
program sp;
uses CRT;
type
n=^uzel;
uzel=record
          x:real;
          next:n;
     end;
var
ukf, uku, ukn:n;
i, dob:real;
c:char;
k:integer;
begin
 clrscr;
 new(ukf);
//Vvod
 writeln('Enter element');  readln( ukf^.x);
 ukf^.next:=nil;
 writeln('Do you want to continue? y\n');
            readln(c);
            uku:=ukf;
            while c='y' do
            begin
            	new(uku^.next);
              uku:=uku^.next;
              writeln('Enter element: ');
              readln(uku^.x);
              uku^.next:=nil;
              writeln('Do you want to continue? y\n');
              readln(c);
            end;
//Poisk, otr i dob
  dob:=1;
  k:=0;
  {esli vvesti polojitelnij - zatsiklivaetsya vse}
  uku:=ukf;
while  uku<>nil  do
	begin
    		if  uku^.x<0 then
            begin
            dob:=dob*uku^.x;
		        k:=k+1;
		        uku:=uku^.next;
            writeln('otr1');
            end;
    writeln('otr2');
	end;
//vivod  rezult
	if k=0 then writeln('No negative')
	else writeln('Multiplication negative elements =', dob:10:2, ' ,number of negative elements= ', k);
//Udalenie otr el s nachala
while (ukf^.x<0)and(ukf<>nil) do
	begin  uku:=ukf;
         ukf:=uku^.next;
         dispose(uku);
  end;
 //udalenie otr iz seredini
 uku:=ukf;
while (uku<>nil) do
   begin
      if (uku^.x<0) then
                        begin  ukn:=uku^.next;
                        uku^.next:=ukn^.next;
                        dispose(ukn);
                 end
      else   uku:=uku^.next;
   end;
   //vivod spiska
writeln('New list:');
 if ukf=nil then writeln('The list is empty!')
 else
     begin uku:=ukf;
           while uku<>nil do
            begin writeln(uku^.x:8:2);
                  uku:=uku^.next;
            end;
     end;
//Udalenie vsego spiska
while  ukf<>nil  do
begin  uku:=ukf;
       ukf:=uku^.next;
       dispose(uku)
end;
readln;
end.

Последний раз редактировалось Despot777; 17.10.2013 в 23:24.
Despot777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль ABC. Программа на языке Паскаль. Helen1 Паскаль, Turbo Pascal, PascalABC.NET 6 13.01.2018 21:46
Программа Паскаль Despot777 Паскаль, Turbo Pascal, PascalABC.NET 1 15.09.2013 12:22
Паскаль-программа. Rume Помощь студентам 1 08.12.2011 00:26
Программа Паскаль KILLDAFROG Помощь студентам 6 03.02.2011 20:45
Программа на Паскаль nikepol Помощь студентам 1 16.11.2010 19:03