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

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

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

 
 Ответить  Открыть новую тему 
> [Pascal]Матрица
fly
сообщение 18.04.2007 17:20
Сообщение #1


Новичок
*

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

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


Хелпаните с задачкой плз...Задание такое:
Дан массив целых чисел MxM.Вводится произвольный массив чисел KxK.Известно ,что K существенно меньше, чем M.Определить,сколько раз второй массив всречается в первом.

Вот пытался кое что делать.Что я не так делаю?
Код
var k:array[1..100,1..100] of integer;
    m:array[1..100,1..100] of integer;
n,h,i,j:byte;
begin
writeln('vv kol strok');
readln(n);
writeln('vv kol stolbcov');
readln(h);
for i:=1 to h do
end;
begin
writeln('vv',h,'chisel);
for j:=1 to m do
read(a[i,j]);
end;
begin
  even:=true;
  for i:=1 to K do
  for j:=1 to K do
     if M[i+x,j+y]<>K[x,y] then begin even:=false; break;end;
end;
count,i,j:byte;
begin
  count:=0;
  for i:=0 to M-K do
  for j:=0 to M-K do
  if even(i,j) then inc(count);
  writeln(count)
end.


Сообщение отредактировано: fly - 18.04.2007 17:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 18.04.2007 18:12
Сообщение #2


Профи
****

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

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


Объясни пожалуйста поподробней, с примером, что значит
Цитата
Определить,сколько раз второй массив всречается в первом.


Сообщение отредактировано: Tan - 18.04.2007 18:12


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 18.04.2007 21:00
Сообщение #3


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

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

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


Видимо

K:

1 2
3 4


M:

1 2 5 6 7 8
3 4 4 1 2 3
0 0 0 3 4 4
5 5 2 4 1 5

Ответ: 2 раза.


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


Новичок
*

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

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


Klem4 всё верно понял.Нужно посчитать сколько раз массив K встречается в массиве M.

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


Гость






Ну, пробегай в цикле (в двух, если быть точнее) по большой матрице (строки: 1 .. M-K, столбцы: 1 .. M-K)... Если текущий элемент = элементу малой матрицы с индексами [1, 1], то пробегать по K*K соседним элементам доп. циклами...

Ты хотя бы начни, на самом деле здесь ничего сложного нет...
 К началу страницы 
+ Ответить 
Lapp
сообщение 24.04.2007 2:47
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(fly @ 18.04.2007 18:20) *

Вот пытался кое что делать.Что я не так делаю?

Ты очень многое делаешь не так, трудно перечислить.. smile.gif
Но кое-что ты делаешь все же так. Например, последний цикл, а также следы от функции Even (кстати, почему такое название?..).
Короче, я восстановил программу по твоему тексту (ответь честно - твой он или не твой? странно просто, вроде есть умные мысли, но есть и совершенно глупые ошибки..). Смотри, что получилось:
var
A:array[1..100,1..100] of integer;
B:array[1..100,1..100] of integer;
m,k,i,j:integer;
count:integer;

function Even(x,y:integer):boolean;
var
i,j:integer;
begin
even:=true;
for i:=0 to k-1 do for j:=0 to k-1 do begin
if A[i+x,j+y]<>B[x,y] then begin
even:=false;
break
end
end
end;

begin
m:=4;
k:=2;
{ ... here you input the arrrays}
count:=0;
for i:=1 to M-K+1 do for j:=1 to M-K+1 do if even(i,j) then inc(count);
writeln(count)
end.

Массив я бы либо считывал из файла, либо задавл случайным образом из узкого диапазона (скажем, 0 и 1), тогда вероятность вхождения будет не такая маленькая. Попробуй, если будут сложности - спрашивай. В моем примере матрицы (4х4 и 2х2) получается обе нулевые, так что результат - 9 вхождений, что соответствует истине, как я прикинул.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 1.05.2007 17:33
Сообщение #7


Гость






Цитата(Lapp @ 24.04.2007 2:47) *

Короче, я восстановил программу по твоему тексту (ответь честно - твой он или не твой? странно просто, вроде есть

Текст не мой а,собранный из разных текстов в один единственный.
В моём случае массив из файла считывать нельзя,мы работу с файлами ещё не изучали.
Я правильно понял что в твоём тексте m-это количество столбцов и строк в массиве "A", а k-это количество столбцов и строк в массиве "B"?


 К началу страницы 
+ Ответить 
fly
сообщение 1.05.2007 17:41
Сообщение #8


Новичок
*

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

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


Сори,забыл авторизироваться
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 2.05.2007 0:08
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Гость @ 1.05.2007 18:33) *

Я правильно понял что в твоём тексте m-это количество столбцов и строк в массиве "A", а k-это количество столбцов и строк в массиве "B"?

Дык. В соответствии с пожеланиями автора темы (тебя, то бишь) :
Цитата(fly @ 18.04.2007 18:20) *

Дан массив целых чисел MxM.Вводится произвольный массив чисел KxK.

smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
fly
сообщение 2.05.2007 12:33
Сообщение #10


Новичок
*

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

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


А как сделать так чтобы занчения массива "B" мы вводили сами?

Сообщение отредактировано: fly - 2.05.2007 12:34
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 2.05.2007 14:07
Сообщение #11


Человек
*****

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

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


Цитата(fly @ 2.05.2007 12:33) *
А как сделать так чтобы занчения массива "B" мы вводили сами?
я думаю, надо просто организовать цикл и читать элеменгты..


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
fly
сообщение 2.05.2007 15:14
Сообщение #12


Новичок
*

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

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


Хм...Ну вот допустип организовали мы цикл (Поправьте если не правильно).
Код

var
  A:array[1..100,1..100] of integer;
  B:array[1..100,1..100] of integer;
  m,k,i,j:integer;
  count:integer;

function Even(x,y:integer):boolean;
var
  i,j:integer;
begin
  even:=true;
  for i:=0 to k-1 do for j:=0 to k-1 do begin
    if A[i+x,j+y]<>B[x,y] then begin
      even:=false;
      break
    end
  end
end;

begin
  m:=4;
writeln('Вводите размер массива B');
readln(k);
for i:=1 to k do
begin
writeln('Вводите',k,'чисел');
for j:=1 to k do
read(B[i,j])
end;

А дальше что?Как чиать элементы?

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


Человек
*****

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

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


Цитата(fly @ 2.05.2007 15:14) *
А дальше что?Как чиать элементы?

for i:=0 to k-1 do begin
for j:=0 to s-1 do begin
Write('...');
ReadLn(B[i,j]);
end;
end;
вот, там под себе подделаеш, все ясно?


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
fly
сообщение 2.05.2007 19:43
Сообщение #14


Новичок
*

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

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


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

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

 



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