Пусть задана квадратная целочисленная матрица А порядка n. - либо вычислить А', A'- обозначает транспонирование матрицы A; - если на побочной диагонали матрицы A есть хотя бы один четный элемент, то вычислить среднее гармоническое элементов той строки, в которой обнаружен четный элемент (среднее гармоническое S элементов a[1], a[2],...,a[n] равно: S =n/(1/a[1] + 1/a[2] + ... + 1/a[n]) ) в противном случае, вычислить максимальный элемент матрицы A; - либо напечатать матрицу, выделив цветом ее верхнюю треугольную часть; - либо прервать программу без выполнения операций.
Добавлено (24.11.2008, 00:57) --------------------------------------------- вот 1 с транспонацией: program TPAHC uses crt; type ctpoka=array [1..100] of integer; ta6=array [1..100] of ctpoka; var a,b: ta6; i,j,n,m:integer; begin writeln('BBEDUTE 4UCLO CTPOK'); readln(n); writeln('BBEDUTE 4UCLO CTOL6II,OB'); readln(m); writeln('BOT BAIIIA MATPUII,A'); RANDOMIZE; for i:= 1 to n do begin for j:= 1 to m do begin a[i,j] := random(20); write(a[i,j]:3,' '); b[j,i]:=a[i,j]; end; writeln; end; writeln(PE3yLbTAT TPAHCIIOHUPOBAHU9'); for i:= 1 to n do begin for j:= 1 to m do begin write(b[i,j]:3,' '); end; writeln; end; readkey; end.
задана квадратная целочисленная матрица А порядка n.
Так зачем запрашивать число столбцов и строк? Достаточно узнать порядок, это и будет число столбцов и строк. Побочная диагональ, это которая идёт из левого нижнего угла в правый верхний, т.е. в цикле их можно пройти так:
Code
for i:=1 to n do if not Odd(a[i][n+1-i]) then...
переменные i, j, n лучше сделать типа byte. Больше 255 в них всё равно не будет и отрицательными они не бывают. Матрица b не нужна, просто a выводи в другом порядке:
Code
for i:= 1 to n do begin for j:= 1 to n do write(a[j,i]:3); writeln; end;
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Понедельник, 24.11.2008, 08:32
Матрица b не нужна, просто a выводи в другом порядке
да знаю, что развернуть можно, но заставили сделать матрицу б...
Quote (Alexander)
Так зачем запрашивать число столбцов и строк? Достаточно узнать порядок, это и будет число столбцов и строк.
ну там у меня дольшой шмат шаблона, поредактировал тока переменые, а ету часть решил нетрогать с мыслью написаной в твоей цитате^^ глу нпый вопрос, но всеже, после then в
Quote (Alexander)
if not Odd(a[i][n+1-i]) then...
do ставить можно, чтоб получить примерно так: "if not Odd(a[i][n+1-i]) then do begin S:=n/(1/a[1] + 1/a[2] + ... + 1/a[n])"? или как правильно?
do ставить можно, чтоб получить примерно так: "if not Odd(a[i][n+1-i]) then do begin S:=n/(1/a[1] + 1/a[2] + ... + 1/a[n])"? или как правильно?
Конечно нельзя! После then должен сразу идти оператор, а такие суммы считают в цикле:
Code
S:=1/a[1]; for i:=2 to n do S:=S+1/a[i]; S:=n/S;
Quote (PROTOSS)
ну, ето уже верх извращения^^ компы не 100мегагерцовые, посчитают и так
Это оптимизация. Это всё равно, что при удалении аппендицита, вырезать ещё и почку- ведь и так жить будет, у него их всё равно две. Скажем дружно- нафиг нужно!
ну, ето уже верх извращения^^ компы не 100мегагерцовые, посчитают и так
Вот такие мысли нужно стараться искоренять в себе. Посмотрите на современные системы и компьютерные игры. Их явно делали с подобными мыслями.. "А... компы мощные.. И так сойдет". Поддерживаю также проект сообщество молодых сисадминов
Как найти максимальный элемент во всей матрице? О_О
Quote (PROTOSS)
обрезает теоритически до тогоже byte принимаемые значения переменных
Переменные нельзя обрезать. Сколько памяти выделил - столько и будет. А Integer от Byte отличается на 1 байт. В твоей матрице - на n^2 байт. Если там у тебя 100 строк, то это уже 10.000 байт ЛИШНИХ под хранение переменных. И таких тонких мест можно найти еще много. Поддерживаю также проект сообщество молодых сисадминов
Как найти максимальный элемент во всей матрице? О_О
та та я знаю что глупый вапрос!, но у меня щас из-за матана и нетакие в голове провалы, и не такое забываю
Quote (Seqular)
Переменные нельзя обрезать. Сколько памяти выделил - столько и будет. А Integer от Byte отличается на 1 байт. В твоей матрице - на n^2 байт. Если там у тебя 100 строк, то это уже 10.000 байт ЛИШНИХ под хранение переменных. И таких тонких мест можно найти еще много.
та божеш мой! мне нежалко! у меня жесткий диск 1/3 терабайта а програмки эти, как бы много места под себя не подминали многа не весят Излил душу - Вытри за собой!
PROTOSS, Пробеги двойным циклом по всем элементам матрицы. Сравнивай каждый из них с некой переменной (изначально равной первому элементу). Если больше нее, то переприсвой этой переменной значение этого элемента. Таким образом после того, как все элементы обойдешь - эта переменная будет хранить самый большой элемент в матрице!
Quote (PROTOSS)
у меня жесткий диск 1/3 терабайта
Не надо путать дисковое пространство и память. Это совершенно разные понятия. Уметь программировать можно и мартышку научить. А уметь программировать оптимально - вот суть искусства. Поддерживаю также проект сообщество молодых сисадминов
PROTOSS, Да мне вообще пофигу скока у кого памяти. У меня 4GB но я стараюсь не позволять себе писать неоптимальные программы. Поддерживаю также проект сообщество молодых сисадминов
Ася моя в профиле. Ищи там. А Type-ошибка почему? Посмотри, какого типа у тебя S. Real? Потому что в нее заносится результат деления, который является Real-ом Поддерживаю также проект сообщество молодых сисадминов