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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2016, 23:00   #1
artedub
Новичок
Джуниор
 
Регистрация: 14.01.2016
Сообщений: 4
Восклицание delphi variable might not have been initialized

Здравствуйте, пишу программу в delphi по теме "Динамические переменные", но постоянно выходит ошибка "variable (pv) might not have been initialized", не могу понять в чем именно она заключается. Пожалуйста объясните.
Суть задания:
• запись с минимальным значением произведения полей x*y среди записей с чётными значениями индекса;
• запись с минимальным значением произведения полей x*y среди записей с нечётными значениями индекса;
• сумму полей x записей с чётными значениями индекса;
• произведение полей y записей с нечётными значениями индекса;

Код:
const
  n = 10;
//--------------------------------------------------------------
type
//--------------------------------------------------------------
  Rec = record
    x,y: real;
  end;
//--------------------------------------------------------------
  RecPtr = ^Rec;
//--------------------------------------------------------------
  T = array[0..n-1] of RecPtr;
  TPtr = ^T;

procedure Input(c: TPtr);
var

i: integer;
begin
WriteLn('Вводите пары x, y разделяя переменные пробелами, а пары новой строкой:');
for i := 1 to 10 do begin
Write('x[',i,'] = ');
Readln(c^[i].x);
Write('y[',i,'] = ');
ReadLn(c^[i].y);
end;
end;

procedure Output(c: TPtr);
var
i: integer;
begin
WriteLn;
for i := 1 to n do
begin
Write('x[',i,'] = ', c^[i].x);
Writeln('y[',i,'] = ', c^[i].y);
end;
end;

procedure Test1(c: TPtr);
var i: integer; cp: real; min: real; mini: integer;
begin
min:= c^[0].x * c^[0].y;
mini:= low(i);
for i:= 1 to n do
if not odd(i) then begin
cp:= c^[i].x * c^[i].y ;
if cp< min then
begin
min:= cp;
mini:= i;
end;
end;
Write('Запись (чётный индекс) с минимальным значением x * y = ');
writeln( c^[mini].x, c^[mini].y);
end;

procedure Test2(c: TPtr);
var
i: integer;
tu: Real;
min: Real;
mini: integer;
begin
i:=0;
min:= c^[i+1].x * c^[i+1].y;
mini := Low(i) + 1;
for i := mini to n do
if Odd(i) then begin
tu := c^[i].x * c^[i].y;
if tu < min then begin
min := tu;
mini := i;
end;
end;
Write('Запись (нечётный индекс) с минимальным значением x * y = ');
writeln(c^[mini].x, c^[mini].y);
end;


procedure Test3(c: TPtr);
var
i: integer;
sum: Real;
begin
sum := 0;
for i := 1 to n do
if not Odd(i) then
sum := sum + c^[i].x;
WriteLn('Сумма полей x записей с чётными значениями индекса равна ', sum);
end;

procedure Test4(c: TPtr);
var
i: integer;
p: Real;

begin
p := 1;
for i := 1 to n do
if Odd(i) then
p := p * c^[i].y;
WriteLn('Произведение полей y записей с нечётными значениями индекса равна ', p);
end;

var

  pv: TPtr;
begin
input(pv);
output(pv);
test1 (pv);
test2 (pv);
test3 (pv);
test4 (pv);
end.

Последний раз редактировалось BDA; 14.01.2016 в 23:13.
artedub вне форума Ответить с цитированием
Старый 15.01.2016, 00:00   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Так где же вы инициализируете pv? Или вы даже сообщение об ошибке не перевели?
p51x вне форума Ответить с цитированием
Старый 15.01.2016, 00:29   #3
artedub
Новичок
Джуниор
 
Регистрация: 14.01.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так где же вы инициализируете pv? Или вы даже сообщение об ошибке не перевели?
Сообщение я понимаю, что данный параметр у меня не представлен в основной части. Но я указала pv как переменную с ссылочным типом. Я не могу понять, как ввести параметр, чтобы у меня работали процедуры с ссылочным типом.

Ошибку выдает, на строку
Код:
input(pv);

Последний раз редактировалось artedub; 15.01.2016 в 00:31.
artedub вне форума Ответить с цитированием
Старый 15.01.2016, 07:43   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Память нужно выделять под данные, на которые нацелен указатель
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.01.2016, 08:28   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А кусок памяти под содержимое, на которое должен показывать указатель, ты где клянчишь? Я, чот, не нашёл. Мож плохо искал?
GetMem() где? Или malloc() там, или что-то ещё типа того?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 13:46   #6
artedub
Новичок
Джуниор
 
Регистрация: 14.01.2016
Сообщений: 4
Сообщение

Цитата:
Сообщение от Аватар Посмотреть сообщение
Память нужно выделять под данные, на которые нацелен указатель
То есть как я понимаю, нужно в основной части написать :
Код:
pv := nil;
New(pv);
или это не то?
artedub вне форума Ответить с цитированием
Старый 15.01.2016, 13:53   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

что-то навроде мавроди. типа того.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 13:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

по-моему, перед new(pv) присваивать pv nil не нужно, всё равно new изменит указатель.
Но, конечно, хуже от этой строчки не будет!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.01.2016, 14:04   #9
artedub
Новичок
Джуниор
 
Регистрация: 14.01.2016
Сообщений: 4
Сообщение

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
по-моему, перед new(pv) присваивать pv nil не нужно, всё равно new изменит указатель.
Но, конечно, хуже от этой строчки не будет!
Хорошо... попробуем))))
artedub вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: might not have been initialized MisterON Помощь студентам 5 27.03.2014 09:12
Инициализация структуры: W1036 Variable 'LpAdapterAddresses' might not have been initialized malor Общие вопросы Delphi 5 28.04.2013 12:13
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
variable 'ch' is being used without being initialized (С++) DarkAltair Помощь студентам 6 06.10.2011 15:18
Variable <Имя> might not have been initialized Anchut@ Общие вопросы Delphi 5 21.06.2010 11:01