Ввести размер матрицы (М и N) и значения ее элементов. Составить вектор номеров строк, элементы которых представляют симметричную последовательность.
30го уже надо здавать.. такчто нужно почти срочно.. спасибо заранее..
1)
! | 1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... |
Заголовог по всем правилам сменил и тему тож) а в поиске не нашел(...
Значит, придется делать самостоятельно...
Заполнение матрицы найдешь здесь:
http://forum.pascal.net.ru/index.php?s=&showtopic=2694&view=findpost&p=23245
Теперь наводящий вопрос: умеешь определять по номеру строки, является ли она симметричной? Что вообще означает симметричность? Уж не равенство ли это элементов A1 = An, A2 = An - 1 и так далее?
Заполнить какраз я то и могу а вот симмитричность... не очень даже понимаю задания.. мозг не сильно покачто развит) ща посмотрю ссылку, можт и разберусь.. не разберусь - буду ждать решеной) спасибо за счылочку..
Ну покажи хоть, что сделал, то же заполнение, а там дальше разберемся
Эх.. ну чтож с вами такими делать.. давай разбираться
var n,m,k,i,j: integer;
matr: array[1..50,1..50] of integer; //исходная матрица
vect: array[1..50] of integer; //массив номеров строк
f: boolean; //эта логическая переменная в нашем случае отмечает, симметричная ли строка
begin
k:=0;
write('введите количество строк: ');
readln(n);
write('введите количество столбцов: ');
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('введите элементы матрицы: ');
readln(matr[i,j]); //ну тут думаю все понятно, вводим количество строк/столбцов и заполняем массив
end;
for i:=1 to n do
begin
f:=true; //изначально принимаем, что строка симметрична
for j:=1 to m div 2 do //проходим по столбцам до середины
begin
//теперь будем искать симметричность, точнее в нашем случае ее отсутствие
//как уже сказал volvo, симм-сть это "равенство элементов A1 = An, A2 = An - 1 и так далее"
//посмотри как изменяется номер столбца в цикле 1<>m, 2<>m-1, 3<>m-2 и т.д.
if matr[i,j]<>matr[i,m+1-j] then f:=false; //если строка не симметричная, то меняем f на false
end;
if f then //если f так и осталось правдой, то накручиваем номер элемента в массиве индексов строк и
//присваиваем k-му элементу значение, равное номеру симм-ной строки
begin
inc(k);
vect[k]:=i;
end;
end;
writeln('матрица:'); //выводим исходную матрицу..
for i:=1 to n do
begin
for j:=1 to m do
write(matr[i,j]:4);
writeln;
end;
writeln('номера симметричных строк:'); //..и вектор номеров строк
for i:=1 to k do write(vect[i]:4); //довольствуемся результатом
end.
var n,m,k,i,j: integer;
matr: array[1..50,1..50] of integer; //исходная матрица
vect: array[1..50] of integer; //массив номеров строк
f: boolean; //эта логическая переменная в нашем случае отмечает, симметричная ли строка
begin
k:=0;
write('введите количество строк: ');
readln(n);
write('введите количество столбцов: ');
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('введите элементы матрицы: ');
readln(matr[i,j]); //ну тут думаю все понятно, вводим количество строк/столбцов и заполняем массив
end;
for i:=1 to n do
begin
f:=true; //изначально принимаем, что строка симметрична
for j:=1 to m div 2 do //проходим по столбцам до середины
begin
//теперь будем искать симметричность, точнее в нашем случае ее отсутствие
//как уже сказал volvo, симм-сть это "равенство элементов A1 = An, A2 = An - 1 и так далее"
//посмотри как изменяется номер столбца в цикле 1<>m, 2<>m-1, 3<>m-2 и т.д.
if matr[i,j]<>matr[i,m+1-j] then f:=false; //если строка не симметричная, то меняем f на false
end;
if f then //если f так и осталось правдой, то накручиваем номер элемента в массиве индексов строк и
//присваиваем k-му элементу значение, равное номеру симм-ной строки
begin
inc(k);
vect[k]:=i;
end;
end;
writeln('матрица:'); //выводим исходную матрицу..
for i:=1 to n do
begin
for j:=1 to m do
write(matr[i,j]:4);
writeln;
end;
writeln('номера симметричных строк:'); //..и вектор номеров строк
for i:=1 to k do write(vect[i]:4); //довольствуемся результатом
end.
Кстате вот эти строки какие операции выполняют?
inc(k);
vect[k]:=i;
именно сами команды инк и вект..
inc(k) увеличивает значение k по умолчанию на единицу, если напишешь, например, inc(k,2), то будет увеличивать на 2..
vect[k]:=i; - vect.. это название массива-вектора
Смотри, мы же не знаем заранее сколько у нас симметричных строк получится, поэтому, когда находим таковую, увеличиваем k на единицу и присваиваем элементу под номером k массива vect значение индекса (i) симметричной строки..
[offtop]
Извиняюсь за хулиганство в виде бесполезного апа, просто наткнулся на форум и решил зайти еще раз поблагодарить всех за оказанную помощ в нужный момент! Прошло 3 года, я написал свой си подобный компилятор, стажерствую в центробанке в области мэйнфреймов, в общем вроде как все идет неплохо. Хочу еще раз сказать спасибо всем за хороший "пинок"(скорей даже пинки) в области программирования, Спасибо вам всем ребята, так держать Премного благодарен!
P.S. В свою очередь обещаю, что больше никогда не буду задавать вопрос "Что делает функция inc()?"
P.S.S. Не пинайте особо за бесполезный ап, еще раз извиняюсь.
P.S.S.S. Награда в области "Самый бесполезный пост" мне точно обеспечена.