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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2014, 18:36   #1
лололо
 
Регистрация: 06.02.2014
Сообщений: 8
Лампочка массив указателей. Паскаль

Задан массив указателей на действительные числа. Описать логическую функцию, которая проверяет, есть ли хотя бы две ссылки на один элемент(число). Для проверки вывести массив указателей. Помогите пожалуйста

Последний раз редактировалось лололо; 07.02.2014 в 12:19.
лололо вне форума Ответить с цитированием
Старый 06.02.2014, 22:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

услышали условие задачи издалека? Но все было слышно отчётливо?
Или Вам одногруппник условия по телефону диктовал?


Короче, подозреваю, что вместо "показателей" имеются в виду УКАЗАТЕЛИ (ссылочный тип данных, хранящий в себе указатели на другие переменные).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2014, 12:24   #3
лололо
 
Регистрация: 06.02.2014
Сообщений: 8
По умолчанию часть программы

Код:
uses crt;
type p=^real;
     ar=array[1..100] of p;
     par=^ar;
var pa:par;
    el:p;
    n,i:byte;
    c:char;
begin
     write('number of elements-');
     readln(n);
     getmem(pa,n*4);
     writeln('random or keyboard? R/else');
     readln(c); randomize;
     if upcase(c)='R' then
     for i:=1 to n do begin
     new(pa^[i]);
     pa^[i]^:=random(1000)+random(1000)*0.001;
     write(pa^[i]^:6:1);
     end
     else
     for i:=1 to n do begin
     new(pa^[i]);
     write('input ',i,' th element: ');
     readln(pa^[i]^);
     end;
     for i:=1 to n do begin
     write(pa^[i]^:6:1);
     end;
     writeln;
вот кусочек программы, я вот только не знаю, как сделать проверку



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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.02.2014 в 13:34.
лололо вне форума Ответить с цитированием
Старый 08.02.2014, 15:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ага. значит, всё таки, массив УКАЗАТЕЛЕЙ!

Поясните, что означает:
Цитата:
две ссылки на один элемент(число).
если речь идёт о том, что ссылки равны друг другу (т.е. ссылаются на одну и ту же переменную памяти), то это одно.
А если ссылки ссылаются на разные адреса памяти, но и в одной ячейке и в другой ячейке находится одно и то же число (хоть ячейки и разные), то это другое.

короче,
надо сравнивать pa^[i] c pa^[j]
или нужно сравнивать значения pa^[i]^ с pa^[j]^ ??
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2014, 17:07   #5
лололо
 
Регистрация: 06.02.2014
Сообщений: 8
По умолчанию

Ссылки ссылаются на разные адреса памяти, но и в одной ячейке и в другой ячейке находится одно и то же число (хоть ячейки и разные), тогда как должна выглядеть функция?
Код:
for i:=1 to n do
     begin
     for j:=1 to n do
     if (pa^[i]^=pa^[j]^) and (pa^[i]<>pa^[j])
     then a:=a+1; # - тут неправильно считает
Для проверки вывести массив указателей - это как и где писать?
Код:
program laba11;
uses crt;
type p=^real;
     ar=array[1..100] of p;
     par=^ar;
var pa:par;
    a:real;
    el:p;
    n,i,j:byte;
    c:char;
function fun(a:real):real;
     begin
     for i:=1 to n do
     begin
     for j:=1 to n do
     if (pa^[i]^=pa^[j]^) and (pa^[i]<>pa^[j])
     then a:=a+1;
     end; if a>=2 then writeln('yes');
     if a<2  then writeln('no');
     end;
begin
     write('number of elements-');
     readln(n);
     getmem(pa,n*4);
     writeln('random or keyboard? R/else');
     readln(c); randomize;
     if upcase(c)='R' then
     for i:=1 to n do begin
     new(pa^[i]);
     pa^[i]^:=random(1000)+random(1000)*0.001;
     end
     else
     for i:=1 to n do begin
     new(pa^[i]);
     write('input ',i,' th element: ');
     readln(pa^[i]^);
     end;
     for i:=1 to n do begin
     write(pa^[i]^:6:1);
     end;
     writeln;
     fun(0);
     readln;
     end.
так???

Последний раз редактировалось Stilet; 08.02.2014 в 19:14.
лололо вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив указателей на строки (паскаль) Даша Даша Паскаль, Turbo Pascal, PascalABC.NET 3 17.12.2012 07:37
Массив указателей nattaella Компоненты Delphi 2 11.06.2011 16:40
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
Массив указателей askar Общие вопросы C/C++ 5 07.09.2010 23:11
Массив указателей (паскаль) diliana Помощь студентам 19 14.11.2009 11:53