Помощь - Поиск - Пользователи - Календарь
Полная версия: ан двумерный массив (матрица) А размерностью...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
flashg
Вот дано
Дан двумерный массив (матрица) А размерностью 180 на 180 элементов типа integer с произвольными значениями. Сформировать из него массив В(180,180), путем замены каждого пятого элемента матрицы суммой четырех предыдущих элементов. Вывести на экран 2 фрагмента размером 10 на 10 исходной и полученной матриц, а также элементы А(5,5) и В(5,5).

а вот прога которая не запускается - в чём дело где ошибка :molitva:
volvo
Она у тебя не только не запускается, но даже не компилируется... Все дело в том, что вот это:
type a=array[1..180,1..180] of integer;
- описание типа, а что ты с ним делаешь?
a[b1,i]:=random;
, то есть работаешь как с описанием переменной...
Чтобы программа прошла компиляцию, делай так:

type
{ это - описание типов }
type_a=array[1..180,1..180] of integer;
type_b=array[1..180,1..180] of integer;
var
i,b1,p:byte;
z:integer;
a: type_a; { а вот это - описание переменных }
b: type_b;

Кстати, в строке
a[b1,i]:=random;
у тебя будет несовместимость типов: значение типа Real не может быть помещено в переменную типа Integer, так что сразу делай вот так:
a[b1,i]:=random(100);
Guest
всё равно выдаёт ошибку но уже другую
==============
Код
uses crt;
type
 { это - описание типов }
 type_a=array[1..180,1..180] of integer;
 type_b=array[1..180,1..180] of integer;
var
 i,b1,p:byte;
 z:integer;
 a: type_a; { а вот это - описание переменных }
 b: type_b;  { <--- ERROR 96 }

begin
randomize;
for i:=1 to 180 do
 for b1:=1 to 180 do
  begin
   a[b1,i]:=random({maxint}100);
   b[b1,i]:=0;
  end;

b1:=0;
repeat
 inc(b1);
 z:=1;
 for i:=1 to 180 do
  if (i mod 5 <> 0) then b[b1,i]:=a[b1,i]
  else
   begin
    for p:=z to z+3 do
     b[b1,i]:=b[b1,i]+a[b1,p];
    z:=z+5;
   end;
until b1=180;

writeln('A[5,5] = ',a[5,5],'        B[5,5]=',b[5,5]);
writeln;
writeln('A:                      B:');
for i:=10 to 19 do
 begin
  for b1:=21 to 30 do
   write(a[i,b1],' ');
  write('                 ');
  for b1:=21 to 30 do
   write(b[i,b1],' ');
  writeln;
 end;
end.


Тегами CОDE пользуйся !!!
klem4
Ошибка 96 - слишком много переменных, общий размер глобальных переменных не может превышать 64k (BP)

ЗЫ FPC компилирует нормально.
flashg
FPC компилирует нормально.

что это - опция в паскале которую надо включить ?
Malice
Цитата(flashg @ 4.08.05 10:20)
FPC компилирует нормально.
что это - опция в паскале которую надо включить ?

FPC - это другой паскаль, не 7.0
В твоем случае сразу 2 таких массива разместить нельзя, слишком большие. По-этому надо так:
Код
type
type_a=array[1..180,1..180] of integer;
ptype_a=^type_a;
var a,b:ptype_a;

потом:
Код
GetMem(a,Sizeof(type_a));GetMem(b,Sizeof(type_a));

вместо a[i,j] используешь a^[i,j],
в конце:
Код
FreeMem(a,Sizeof(type_a));FreeMem(b,Sizeof(type_a));
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.