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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 20:46   #1
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
Печаль Динамические массивы

Ребят..помогите написать задачу. Язык программирования - Pascal. Нужно создать два одномерных массива А и В (фиксированного размера...например 5 элементов), и сравнить их. Если массивы не равны, то сформировать новый массив где Сi =Аi + Вi. Если массивы равны, то переписать массив А в массив С. Просто это сделать могу...но дело в том, что нужно сделать используя указатели на элементы массива (^) и функции GetMem и FreeMem.
Kazik вне форума Ответить с цитированием
Старый 09.09.2011, 06:59   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Kazik Посмотреть сообщение
Ребят..помогите написать задачу. Язык программирования - Pascal. Нужно создать два одномерных массива А и В (фиксированного размера...например 5 элементов), и сравнить их. Если массивы не равны, то сформировать новый массив где Сi =Аi + Вi. Если массивы равны, то переписать массив А в массив С. Просто это сделать могу...но дело в том, что нужно сделать используя указатели на элементы массива (^) и функции GetMem и FreeMem.
Полагаю, ты запутался в терминах.
Динамические массивы - это концепция, которая как раз позволяет избежать явного использования таких функций, как Getmem и FreeMem. А если тебе нужно использовать именно эти функции, то речь идет об организации массивов в динамической памяти.

Как-то вот так.. Пишу прямо тут, ошибки могут быть ))
Код:
const
  n = 5;

type
  tA = array[1..n] of integer;

var
  a,b,c: ^tA;
  i: integer;
  yes: boolean;

begin
  GetMem(a,SizeOf(a));  // можно так
  GetMem(b,SizeOf(tA));   // и можно так
  GetMem(c,n*SizeOf(integer));  // или даже так
  for i:=1 to n do begin
    a^[i]:= Random(n);
    b^[i]:= Random(n)
  end;
  yes:= true;
  for i:=1 to n do yes:= yes and (a^[i]=b^[i]);
  for i:=1 to n do
    if yes then c^[i]:= a^[i] else c^[i]:= a^[i]+b^[i];
  ...  // тут вывод массива c^
  FreeMem(a);
  FreeMem(b);
  FreeMem(c);
end.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 09.09.2011, 14:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
  GetMem(a,SizeOf(a));  // можно так
Нет! Категорически нет!!

переменная a - указатель (pointer), её размер 4 байта:
Код:
const  n = 5;
type
  tA = array[1..n] of integer;

var
  a,b,c: ^tA;
  i: integer;
  yes: boolean;

begin
  WriteLn('sizeof a = ',SizeOf(a)); 
  WriteLn('size of tA = ',SizeOf(tA));
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2011, 10:04   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Извиняюсь, бес попутал (все же надо отлаживать код)).
Спаибо за исправление, +1 (когда смогу))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамические массивы Dimarik Visual C++ 10 27.05.2011 12:25
ДИНАМИЧЕСКИЕ массивы Nvd Помощь студентам 1 13.03.2011 17:55
Динамические массивы Цветик Общие вопросы C/C++ 5 07.11.2010 20:35
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09