IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Двумерныйе масиивы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Помогите разобраься с задачкой.Условие такое:
Вводиться массив чисел 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.
Что неправильно в моём тексте?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну, во-первых, ты считаешь и диагональные пары.
во-вторых, пары считаются по 2 раза.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Когда вводишь такой массив:
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.

Где у меня ошибка?

Сообщение отредактировано: fly -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Никак не пойму где ошибка
При вводе данных... Почему ты записываешь информацию с 0-го индекса, хотя выше написано, что матрица индексируется с 1? Вот эти нули (в последнем столбце и последней строке) и делают тебе проблему...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


volvo Если записывать информацию с 1 индекса то получается вот что:

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

1 2 3 4
1 3 4 5
5 2 2 3
Но после ввода третьей строки прога пишёт ответ 19.Тоесть до ввода последней строки дело не доходит.
Кто нибуть знает в чём может быть проблема?

Сообщение отредактировано: fly -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


for i:=1 to n do begin
for j:=1 to n do begin

а не до n-1


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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

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.

(У тебя были неправильно вложенные циклы. Турбо-Паскаль на это внимания не обращает, но это есть ошибка...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


volvo Всёравно прога работает неправильно.
Если указываешь размер массива 4x4 то после ввода четвёртой строки ввод не прекращается,приходится вводить ещё 12 строк .Если указать размер массива 2x2,то приходится вводить не 2 строки а 4.

Сообщение отредактировано: fly -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


ввод не по строкам а по элементам, сделай подсказку в цикле и все будет тебе понятно

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;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






fly, я перед тем как запостить - проверил на твоем примере... Так что в следующий раз - уточняй, что "прога у меня работает неправильно."

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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской

Репутация: -  0  +


Ну дык я вначале и спросил про неправыльный ответ,а потом про ввод данных.
С здачкой разобрался)))
Спасибо за помощь)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.09.2020 10:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name