Форум «Всё о Паскале» _ Задачи _ Замена элементов матрицы
Автор: ZanakZ 17.12.2007 16:36
Нужно решить задачу :
Даны целые числа a1,..,a10 , целочисленная квадратная матрица порядка n. Заменить нулями в матрице те элементы с четной суммой индексов, для которых имеются равные среди a1,..,a10 .
Заранее спасибо.
Автор: Ozzя 17.12.2007 16:57
ZanakZ А что не понятно в этой задаче?
Автор: Гость 17.12.2007 17:22
Цитата(Ozzя @ 17.12.2007 12:57)
ZanakZ А что не понятно в этой задаче?
Непонятно, как заменить эти самые элементы и что такое 'равные среди a1,..,a10'.
Автор: Айра 17.12.2007 17:40
Цитата
Заменить нулями в матрице
a[i,j]:=0;
Цитата
'равные среди a1,..,a10'.
допусти последовательность у тебя: 1,2,3,4,5,6,7,8,9,10, а элемент матрицы 2.. он равен одному из элементов последовательноти, значит заменяем его на 0 (если еще и индексы подходящие), а если эл-т матрицы =11, то, т.к. числа 11 в пол-ти нет, оставляем его в покое))
Автор: ZanakZ 18.12.2007 1:20
Цитата(Айра @ 17.12.2007 13:40)
a[i,j]:=0;
допусти последовательность у тебя: 1,2,3,4,5,6,7,8,9,10, а элемент матрицы 2.. он равен одному из элементов последовательноти, значит заменяем его на 0 (если еще и индексы подходящие), а если эл-т матрицы =11, то, т.к. числа 11 в пол-ти нет, оставляем его в покое))
А как это выглядит на примере? Объясните, пожалуйста, хотя бы в общих словах, как это делать, а то что-то непонятно...
Автор: Айра 18.12.2007 3:01
Основной цикл должен выглядить примерно так:
var posl: array[1..n] of integer; //поcледовательность символов l: boolean; // true, если элемент матрицы не равен эл-т посл-ти, false в противном случае ... for i:=1 to n do for j:=1 to n do begin l:=true; k:=1; if not odd(i+j) then begin while (k<=n) and l do begin if m[i,j]=posl[k] then begin m[i,j]:=0; l:=false; end; inc(k); end; end; end;
А если описать последовательность как множество, то цикл будет намного проще:
for i:=1 to n do for j:=1 to n do if (not odd(i+j)) and (m[i,j] in posl) then m[i,j]:=0; //если сумма индексов четная и эл-т входит в множество, то..
Правда у меня возникла проблема с описанием множества (я их еще не проходила ) - не получается включить в него отрицательные числа.. надо покопаться в FAQ'е..
Автор: volvo 18.12.2007 3:11
Цитата
не получается включить в него отрицательные числа
Это невозможно... Множества могут хранить только значения в диапазоне 0 .. 255
Автор: Айра 18.12.2007 3:30
Цитата
Это невозможно...
Жаль.. А еще я так поняла, что вывести элементы множества тоже нельзя?
to ZanakZ: значит при использовании множества числа последовательности могут быть только в диапазоне 0..255
Автор: volvo 18.12.2007 3:46
Можно, кто мешает поэлементно проверять наличие во множестве и вывод элемента, если он там есть? Почитай вот тут: http://volvo71.narod.ru/faq_folder/set_type.htm
Автор: ZanakZ 19.12.2007 4:32
Цитата(Айра @ 17.12.2007 23:30)
Жаль.. А еще я так поняла, что вывести элементы множества тоже нельзя?
to ZanakZ: значит при использовании множества числа последовательности могут быть только в диапазоне 0..255
Понятно. У меня ещё один вопрос: а какую(ие) переменную(ые) мы выводим на экран в самом конце программы?
Автор: Айра 19.12.2007 10:46
Цитата
У меня ещё один вопрос: а какую(ие) переменную(ые) мы выводим на экран в самом конце программы?
Ну, по идее, мы выводим нашу матрицу, только уже измененную..
..если делать первым способом, когда последовательность представлена массивом, можно вывести и его, для наглядности)))
добавлено: в принципе и при использовании множества можно вывести последовательность измененных элементов, почитай ссылку volvo..
Автор: ZanakZ 19.12.2007 17:06
Цитата(Айра @ 19.12.2007 6:46)
Ну, по идее, мы выводим нашу матрицу, только уже измененную..
..если делать первым способом, когда последовательность представлена массивом, можно вывести и его, для наглядности)))
добавлено: в принципе и при использовании множества можно вывести последовательность измененных элементов, почитай ссылку volvo..
У меня почему-то всегда выводится 0. :-((
Автор: volvo 19.12.2007 17:15
Цитата
У меня почему-то всегда выводится 0.
Почему-то программы, при запуске которой "всегда выводится 0" не видно...
Автор: Айра 19.12.2007 17:17
Цитата
У меня почему-то всегда выводится 0. :-((
К сожалению мои телепатические способности сейчас на нуле.. Выложи весь свой код
Автор: ZanakZ 19.12.2007 17:37
program pr5; var posl: array[1..255] of integer; m:array [1..25,1..25] of integer; l: boolean; i,j,k,n:integer; begin writeln ('vvedite elementy'); readln (n); for i:=1 to n do begin writeln ('vvedite element posled n',i); readln (posl[i]); end; for i:=1 to n do for j:=1 to n do begin writeln ('vvedite elementy matritzy'); readln (m[i,j]); l:=true; k:=1; if not odd(i+j) then begin while (k<=n) and l do begin if m[i,j]=posl[k] then begin m[i,j]:=0; l:=false; end; inc(k); end; end; end; writeln (m[i,j],' '); end.
. Прошу строго не судить, я ещё новичок в Паскале.
Автор: volvo 19.12.2007 18:05
Ноль у тебя выводится по одной простой причине: ты распечатываешь значение m[i, j] ПОСЛЕ того, как циклы и по I и по J уже закончились (вот они, проблемы неправильного форматирования исходников... Была бы "лесенка" - увидел бы сам сразу же, или вообще не совершил бы такой ошибки), при этом значения I и J считаются неопределенными, кстати...
Выводи матрицу ПОСЛЕ цикла заполнения полностью (а не один элемент).
Еще один совет: компилируй программы с {$R+} в первой строке, это поможет тебе выявлять некоторые ошибки...