Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ составить вектор номеров строк матрицы, элементы которых представляют симмитричную последовательность.

Автор: Fraddy 23.10.2007 19:21

Ввести размер матрицы (М и N) и значения ее элементов. Составить вектор номеров строк, элементы которых представляют симметричную последовательность.

30го уже надо здавать.. такчто нужно почти срочно.. спасибо заранее..

Автор: klem4 23.10.2007 20:08

1)
 ! 
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...


2) Все решалось. Используй поиск или показывай что пробовал делать.

Автор: Fraddy 23.10.2007 23:28

Заголовог по всем правилам сменил и тему тож) а в поиске не нашел(...

Автор: volvo 24.10.2007 0:04

Значит, придется делать самостоятельно...

Заполнение матрицы найдешь здесь:
http://forum.pascal.net.ru/index.php?s=&showtopic=2694&view=findpost&p=23245

Теперь наводящий вопрос: умеешь определять по номеру строки, является ли она симметричной? Что вообще означает симметричность? Уж не равенство ли это элементов A1 = An, A2 = An - 1 и так далее?

Автор: Fraddy 24.10.2007 0:42

Заполнить какраз я то и могу а вот симмитричность... не очень даже понимаю задания.. мозг не сильно покачто развит) ща посмотрю ссылку, можт и разберусь.. не разберусь - буду ждать решеной) спасибо за счылочку..

Автор: Айра 24.10.2007 17:25

Ну покажи хоть, что сделал, то же заполнение, а там дальше разберемся smile.gif

Автор: Fraddy 25.10.2007 22:50

Цитата(Айра @ 24.10.2007 14:25) *

Ну покажи хоть, что сделал, то же заполнение, а там дальше разберемся smile.gif

Я эту покачто не начал.. Задали около 15 задач на 1 неделю.. вот с этиой я чето с заданием не разобрался..остальные уже зделал. осталась тока эта..

Автор: Айра 26.10.2007 1:54

Эх.. ну чтож с вами такими делать.. давай разбираться smile.gif

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); //довольствуемся результатом smile.gif
end.

Вот вроде и все, если что не понятно, спрашивай))

Автор: Fraddy 26.10.2007 3:06

Цитата(Айра @ 25.10.2007 22:54) *

Эх.. ну чтож с вами такими делать.. давай разбираться smile.gif
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); //довольствуемся результатом smile.gif
end.

Вот вроде и все, если что не понятно, спрашивай))

ВАУУУУУУ!! ТЫ ГЕНИЙ? Фигасе... СПС огромное!!! готов кланяться в ноги smile.gif СПАСИБО ОГРОМНОЕ! Преблагодарен give_rose.gif


Добавлено через 11 милисек.
Умничка) А ты ничего.. good.gif ) панк? или метал?

А че рейтинг не добавляется? Или для него тож надо программу писать?))

Автор: мисс_граффити 26.10.2007 3:30

Цитата
А че рейтинг не добавляется? Или для него тож надо программу писать?))

Надо больше сообщений иметь.
Поставила +.

Автор: Fraddy 26.10.2007 3:53

Кстате вот эти строки какие операции выполняют?
inc(k);
vect[k]:=i;
именно сами команды инк и вект..

Автор: Айра 26.10.2007 4:46

inc(k) увеличивает значение k по умолчанию на единицу, если напишешь, например, inc(k,2), то будет увеличивать на 2..
vect[k]:=i; - vect.. это название массива-вектора smile.gif
Смотри, мы же не знаем заранее сколько у нас симметричных строк получится, поэтому, когда находим таковую, увеличиваем k на единицу и присваиваем элементу под номером k массива vect значение индекса (i) симметричной строки..

[offtop]

Цитата
панк? или метал?

Не классифицирую, всего намешано, но скорее металл smile.gif
[/offtop]

Автор: Fraddy 26.10.2007 16:00

Цитата(Айра @ 26.10.2007 1:46) *

inc(k) увеличивает значение k по умолчанию на единицу, если напишешь, например, inc(k,2), то будет увеличивать на 2..
vect[k]:=i; - vect.. это название массива-вектора smile.gif
Смотри, мы же не знаем заранее сколько у нас симметричных строк получится, поэтому, когда находим таковую, увеличиваем k на единицу и присваиваем элементу под номером k массива vect значение индекса (i) симметричной строки..

[offtop]
Не классифицирую, всего намешано, но скорее металл smile.gif
[/offtop]


vect[k]:=i; - vect.. это название массива-вектора
Ахахахаха.. ну я тупой..) или слепой)) я привык все названия буквами писать просто)) а тут вект))хехе


[offtop]
Металл да? )) не метаЛЛ а метаЛ! когдаж вы все поймете что метаЛЛ это чугун олово железо.. но не музыка? blum.gif lol.gif Хошь скину идеальный метал? Dethklok промо.. послушаешь)
[/offtop]

ЗЫ Спасибо, как всегда! wub.gif

Автор: Fraddy 18.12.2010 9:31

Извиняюсь за хулиганство в виде бесполезного апа, просто наткнулся на форум и решил зайти еще раз поблагодарить всех за оказанную помощ в нужный момент! Прошло 3 года, я написал свой си подобный компилятор, стажерствую в центробанке в области мэйнфреймов, в общем вроде как все идет неплохо. Хочу еще раз сказать спасибо всем за хороший "пинок"(скорей даже пинки) в области программирования, Спасибо вам всем ребята, так держать good.gif Премного благодарен!

P.S. В свою очередь обещаю, что больше никогда не буду задавать вопрос "Что делает функция inc()?" biggrin.gif
P.S.S. Не пинайте особо за бесполезный ап, еще раз извиняюсь. pardon.gif
P.S.S.S. Награда в области "Самый бесполезный пост" мне точно обеспечена.