Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерныйе масиивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
fly
Помогите разобраься с задачкой.Условие такое:
Вводиться массив чисел MxM.Определить,сколько в нём пар одинаковых соседних элементов.
Пример:
Вводим массив размером 4x4
1 2 3 4
1 3 4 5
5 2 2 3
9 2 6 5

Ответ:3

Вот коешто написал:
Код

var
     A:array[1..100,1..100] of integer;
     n,b,i,j:integer;
begin
writeln('vv razmer massiva');
readln(n);
for i:=1 to n do
writeln('vvodite',n,'chisel');
for i:=0 to n-1 do begin
    for j:=0 to n-1 do begin
        Write('...');
    Readln(a[i,j]);
    end;
b:=0;
for i:=1 to n-1 do
begin
if a[i,1]=a[i,2] then b:=b+1;
if a[i,1]=a[i+1,2] then b:=b+1;
if a[i,1]=a[i+1,1] then b:=b+1;
for j:=2 to n-1 do
  begin
  if a[i,j]=a[i,j+1] then b:=b+1;
  if a[i,j]=a[i+1,j] then b:=b+1;
  if a[i,j]=a[i+1,j+1] then b:=b+1;
  if a[i,j]=a[i+1,j-1] then b:=b+1;
  end;
if a[i,n]=a[i+1,n] then b:=b+1;
if a[i,n]=a[i+1,n-1] then b:=b+1;
end;
for i:=1 to n-1 do
if a[n,i]=a[n,i+1] then b:=b+1
end;
writeln(b);
readln;
end.


Но почемуто когда вводишь такой массив:
1 2 3 4
1 3 4 5
5 2 2 3
9 2 6 5

Ответ получается 42,а должно быть 3.
Что неправильно в моём тексте?
klem4
count := 0;
for i := 1 to m do
for j := 1 to m do begin
if (succ(j) <= m) and (x[i, j] = x[i, succ(j)]) then inc(count);
if (succ(i) <= m) and (x[i, j] = x[succ(i), j]) then inc(count);
end;
мисс_граффити
ну, во-первых, ты считаешь и диагональные пары.
во-вторых, пары считаются по 2 раза.
fly
Когда вводишь такой массив:
1 2 3 4
1 3 4 5
5 2 2 3
9 2 6 5

Ответ получается 24,я должно быть 3.Никак не пойму где ошибка.Вот мой текст

Код

var
     A:array[1..100,1..100] of integer;
     n,i,j:integer;
     count:integer;
begin
writeln('vv razmer massiva');
readln(n);
for i:=1 to n do
writeln('vvodite',n,'chisel');
for i:=0 to n-1 do begin
    for j:=0 to n-1 do begin
        Write('...');
    Readln(a[i,j]);
    end;
count := 0;
  for i := 1 to n do
   for j := 1 to n do begin
     if (succ(j) <= n) and (a[i, j] = a[i, succ(j)]) then inc(count);
     if (succ(i) <= n) and (a[i, j] = a[succ(i), j]) then inc(count);
   end;
   writeln(count);
   readln;
   end;
end.

Где у меня ошибка?
volvo
Цитата
Никак не пойму где ошибка
При вводе данных... Почему ты записываешь информацию с 0-го индекса, хотя выше написано, что матрица индексируется с 1? Вот эти нули (в последнем столбце и последней строке) и делают тебе проблему...
fly
volvo Если записывать информацию с 1 индекса то получается вот что:

Указываем размер массива 4x4
Начинаем ввод значений массива:

1 2 3 4
1 3 4 5
5 2 2 3
Но после ввода третьей строки прога пишёт ответ 19.Тоесть до ввода последней строки дело не доходит.
Кто нибуть знает в чём может быть проблема?
мисс_граффити
for i:=1 to n do begin
for j:=1 to n do begin

а не до n-1
volvo
Ха... Так у тебя структура программы нарушена... Смотри внимательно, что я поменял...

var
A:array[1..100,1..100] of integer;
n,i,j:integer;
count:integer;
begin
writeln('vv razmer massiva');
readln(n);
for i:=1 to n do
writeln('vvodite',n,'chisel');
for i:=1 to n do begin { <--- !!! }
for j:=1 to n do begin
Write('...');
Readln(a[i,j]);
end;
end; { <--- End переносится сюда }

count := 0;
for i := 1 to n do
for j := 1 to n do begin
if (succ(j) <= n) and (a[i, j] = a[i, succ(j)]) then inc(count);
if (succ(i) <= n) and (a[i, j] = a[succ(i), j]) then inc(count);
end;
writeln(count);
readln;
end.

(У тебя были неправильно вложенные циклы. Турбо-Паскаль на это внимания не обращает, но это есть ошибка...)
fly
volvo Всёравно прога работает неправильно.
Если указываешь размер массива 4x4 то после ввода четвёртой строки ввод не прекращается,приходится вводить ещё 12 строк .Если указать размер массива 2x2,то приходится вводить не 2 строки а 4.
klem4
ввод не по строкам а по элементам, сделай подсказку в цикле и все будет тебе понятно

or i:=1 to n do
writeln('vvodite',n,'chisel');
for i:=1 to n do begin { <--- !!! }
for j:=1 to n do begin
write('x[', i, ',', j, '] = '); { <---------------------------------------- }
Readln(a[i,j]);
end;
end;
volvo
fly, я перед тем как запостить - проверил на твоем примере... Так что в следующий раз - уточняй, что "прога у меня работает неправильно."

А вводишь 16 строк - потому что ReadLN ... И потом... Ты изначально спрашивал что? Почему выдается неправильный ответ? Тебе не кажется, что проблема организации ВВОДА данных - это уже другая проблема?
fly
Ну дык я вначале и спросил про неправыльный ответ,а потом про ввод данных.
С здачкой разобрался)))
Спасибо за помощь)))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.