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

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

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

 
 Ответить  Открыть новую тему 
> Двумерныйе масиивы
fly
сообщение 3.05.2007 20:30
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 3.05.2007 21:02
Сообщение #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.05.2007 21:04
Сообщение #3


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
fly
сообщение 4.05.2007 21:27
Сообщение #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 - 4.05.2007 21:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2007 1:19
Сообщение #5


Гость






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


Новичок
*

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

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


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

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

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

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


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

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

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


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

а не до n-1


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2007 16:58
Сообщение #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.

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


Новичок
*

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

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


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

Сообщение отредактировано: fly - 5.05.2007 18:09
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 5.05.2007 18:13
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2007 18:14
Сообщение #11


Гость






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

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

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


Новичок
*

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

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


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

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

 



- Текстовая версия 20.07.2025 6:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"