Хелпаните с задачкой плз...Задание такое: Дан массив целых чисел 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.
Автор: Tan 18.04.2007 22:12
Объясни пожалуйста поподробней, с примером, что значит
Цитата
Определить,сколько раз второй массив всречается в первом.
Автор: klem4 19.04.2007 1:00
Видимо
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 раза.
Автор: fly 23.04.2007 23:28
Klem4 всё верно понял.Нужно посчитать сколько раз массив K встречается в массиве M.
Автор: volvo 23.04.2007 23:49
Ну, пробегай в цикле (в двух, если быть точнее) по большой матрице (строки: 1 .. M-K, столбцы: 1 .. M-K)... Если текущий элемент = элементу малой матрицы с индексами [1, 1], то пробегать по K*K соседним элементам доп. циклами...
Ты хотя бы начни, на самом деле здесь ничего сложного нет...
Автор: Lapp 24.04.2007 6:47
Цитата(fly @ 18.04.2007 18:20)
Вот пытался кое что делать.Что я не так делаю?
Ты очень многое делаешь не так, трудно перечислить.. Но кое-что ты делаешь все же так. Например, последний цикл, а также следы от функции 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 вхождений, что соответствует истине, как я прикинул.
Автор: Гость 1.05.2007 21:33
Цитата(Lapp @ 24.04.2007 2:47)
Короче, я восстановил программу по твоему тексту (ответь честно - твой он или не твой? странно просто, вроде есть
Текст не мой а,собранный из разных текстов в один единственный. В моём случае массив из файла считывать нельзя,мы работу с файлами ещё не изучали. Я правильно понял что в твоём тексте m-это количество столбцов и строк в массиве "A", а k-это количество столбцов и строк в массиве "B"?
Автор: fly 1.05.2007 21:41
Сори,забыл авторизироваться
Автор: Lapp 2.05.2007 4:08
Цитата(Гость @ 1.05.2007 18:33)
Я правильно понял что в твоём тексте m-это количество столбцов и строк в массиве "A", а k-это количество столбцов и строк в массиве "B"?
Дык. В соответствии с пожеланиями автора темы (тебя, то бишь) :
Цитата(fly @ 18.04.2007 18:20)
Дан массив целых чисел MxM.Вводится произвольный массив чисел KxK.
Автор: fly 2.05.2007 16:33
А как сделать так чтобы занчения массива "B" мы вводили сами?
Автор: compiler 2.05.2007 18:07
Цитата(fly @ 2.05.2007 12:33)
А как сделать так чтобы занчения массива "B" мы вводили сами?
я думаю, надо просто организовать цикл и читать элеменгты..
Автор: fly 2.05.2007 19:14
Хм...Ну вот допустип организовали мы цикл (Поправьте если не правильно).
Код
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;
А дальше что?Как чиать элементы?
Автор: compiler 2.05.2007 19:56
Цитата(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;