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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 09:06   #1
tina22222
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 34
Смущение указатели

Добрый день, помогите пожалуйста разобраться с задачей)))

Код:
procedure Fil(var Y : Vector);
var
  i : integer;
begin
  for i := low(Vector) to High(Vector) do begin           \\ Не могу понять смысл этой строки(((
    New(Y[i]);
    Y[i]^ := random 
end;
и не могу нигде найти инфу о Vector
tina22222 вне форума Ответить с цитированием
Старый 28.01.2014, 09:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ее нужно искать в твоей программе. В данном случае это какой-то массив описанный типа:
Код:
type 
 preal = ^real;
 Vector = array of preal;
Ну или похоже.

А смысл этой строки:
low(Vector) - получить номер первого элемента массива
High(Vector) - получить номер последнего элемента массива.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2014, 09:42   #3
tina22222
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 34
По умолчанию

Большое спасибо)))
tina22222 вне форума Ответить с цитированием
Старый 28.01.2014, 12:25   #4
tina22222
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 34
По умолчанию

Помогите пожалуйста найти ошибку в программе:
функцию, которая бы возвращала первый из элементов вектора х, ссылающихся на отрицательные числа или nil

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Ref = ^Real;
  Vector = Array[1..100] of Ref;

procedure FillVectorRandom(var Y : Vector);
var
  i : integer;
begin
  for i := low(Vector) to High(Vector) do begin
    New(Y[i]);
    Y[i]^ := random * random(11);
    Write(Y[i]^:1:2,' ') ;
  end;
end;

function neql(Y : Vector) : Ref;
var i : integer;
begin
  neql:= nil;
 for i := low(Y) to High(Y) do
   if Y[i]^<0 then begin
     neql := Y[i];
     Exit;
   end;
end;
var
  X : Vector;
begin
  Randomize;
  FillVectorRandom(X);
  WriteLn('Mamimum = ', neql(x));
  ReadLn;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.01.2014 в 12:38.
tina22222 вне форума Ответить с цитированием
Старый 28.01.2014, 12:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

О. узнаю свой код...
отсюда: делфи указатели

А какое отношение Вы имеете к христик ?!

пробуйте
Код:
function FindFirstNegative(Y : Vector) : RtrRe;
var i : integer;
begin
 FindFirstNegative := nil;
 for i := low(Y) to High(Y) do
   if Y[i]^<0 then begin
     FindFirstNegative := Y[i];
     Exit;
   end;
end;

var
  X : Vector;
  pNeg : RtrRe;
begin
  Randomize;
  FillVectorRandom(X);
  pNeg := FindFirstNegative(x);
  if pNeg = nil then
    WriteLn('Нет отрицательных элементов в векторе!')
  else
    WriteLn('Первый отрицательный элемент = ', pNeg^:2:7);
  ReadLn;
end.

Последний раз редактировалось Serge_Bliznykov; 28.01.2014 в 12:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2014, 12:42   #6
tina22222
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 34
По умолчанию

да мы однокурсники))))

только я немного ее код переделываю))

ошибка здесь:
Код:
 WriteLn('Mamimum = ', neql(x));

Последний раз редактировалось Serge_Bliznykov; 28.01.2014 в 13:16.
tina22222 вне форума Ответить с цитированием
Старый 28.01.2014, 13:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от tina22222 Посмотреть сообщение
Ошибка здесь:
Код:
 WriteLn('Mamimum = ', neql(x));
смотрите мой пост выше. там исправленный код.
только замените везде в моём коде RtrRe на Ref
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2014, 13:20   #8
tina22222
Пользователь
 
Регистрация: 28.01.2014
Сообщений: 34
По умолчанию

и последнюю задачку).
Дано описание: type RtrRe = ^Real; Vector = Array [1..100] of RtrRe;
Считая, что все элементы вектора X отличны от Nil, построить логическую функцию Same (X), которая проверяет, есть ли в векторе X хотя бы две одинаковые ссылки.

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type RtrRe = ^Real;
       Vector = Array[1..100] of RtrRe;

function same(a : Vector; m:integer): boolean;
var  i,j:integer;
     f:boolean;
begin
 f := false;
 i := 1;
 while(i<m)and not f do
   begin
    j:=i+1;
    while(j<=m)and not f do
    if a[j]^=a[i]^ then f:=true
    else j:=j+1;
   end;
 if not f then i:=i+1;
same:=f;
end;
var
 X : Vector;
 m,i : integer;
BEGIN
 randomize;

 if (same(X,m))
 then
 WriteLn('Vector soderzhit odinakovie silki')
 else
 WriteLn('Vector ne soderzhit odinakovie silki');
 ReadLn;
END.
ошибок не выдает, но и не работает(
tina22222 вне форума Ответить с цитированием
Старый 28.01.2014, 13:51   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что значит - не работает?!
а Вы исходный массив (Vector) заполнить не забыли?!!
да и переменная m будет содержать мусор (ну или ноль, в лучшем случае, если об этом сам компилятор позаботится!).

Запомните. Прежде чем читать из ЛЮБОЙ переменной, нужно в неё предварительно что-то записать!! Всегда!


кроме того, насколько я корректно понял условие задания - Вам надо найти одинаковые ссылки.
А Вы ищете одинаковые значения. Это далеко не одно и то же!

Да и ещё, сразу предупреждаю.
Если будете заполнять через new() в цикле, то для каждого элемента выделится своя память, соответственно все указатели будут отличаться (т.е. same) всегда будет false )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели в с++ Юлия Набиева Помощь студентам 2 06.03.2013 13:03
указатели datgen Общие вопросы C/C++ 8 15.12.2011 14:29
Указатели Алиса Ростова C++ Builder 2 04.12.2011 21:09
Указатели. Leshii Паскаль, Turbo Pascal, PascalABC.NET 6 03.12.2011 17:37
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39