Понедельник, 03.02.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Seqular, Pavel  

задачка на матрицы
PROTOSSДата: Понедельник, 24.11.2008, 07:57 | Сообщение # 1
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
Пусть задана квадратная целочисленная матрица А порядка 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.


Излил душу - Вытри за собой!
 
AlexanderДата: Понедельник, 24.11.2008, 08:31 | Сообщение # 2
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Внимательно читай условие:
Quote (PROTOSS)
задана квадратная целочисленная матрица А порядка 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
 
PROTOSSДата: Понедельник, 24.11.2008, 08:58 | Сообщение # 3
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
Quote (Alexander)
Матрица 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])"?
или как правильно?

Добавлено (24.11.2008, 01:58)
---------------------------------------------

Quote (Alexander)
переменные i, j, n лучше сделать типа byte. Больше 255 в них всё равно не будет и отрицательными они не бывают.

ну, ето уже верх извращения^^ компы не 100мегагерцовые, посчитают и так


Излил душу - Вытри за собой!
 
AlexanderДата: Понедельник, 24.11.2008, 17:24 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (PROTOSS)
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мегагерцовые, посчитают и так

Это оптимизация. Это всё равно, что при удалении аппендицита, вырезать ещё и почку- ведь и так жить будет, у него их всё равно две.


Скажем дружно- нафиг нужно!
 
SeqularДата: Понедельник, 24.11.2008, 20:04 | Сообщение # 5
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Quote (PROTOSS)
ну, ето уже верх извращения^^ компы не 100мегагерцовые, посчитают и так

Вот такие мысли нужно стараться искоренять в себе. Посмотрите на современные системы и компьютерные игры. Их явно делали с подобными мыслями.. "А... компы мощные.. И так сойдет".


Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 20:05 | Сообщение # 6
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
Quote (PROTOSS)
вычислить максимальный элемент матрицы A;

а эту часть как сделать?

Quote (Alexander)
Это оптимизация. Это всё равно, что при удалении аппендицита, вырезать ещё и почку- ведь и так жить будет, у него их всё равно две.

и еще один загнул happy от того, что там стоит integer непоменяется результат, или я неправ?


Излил душу - Вытри за собой!

Сообщение отредактировал PROTOSS - Понедельник, 24.11.2008, 20:07
 
SeqularДата: Понедельник, 24.11.2008, 20:08 | Сообщение # 7
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Quote (PROTOSS)
а эту часть как сделать?

Как найти максимальный элемент во всей матрице? О_О

Quote (PROTOSS)
обрезает теоритически до тогоже byte принимаемые значения переменных

Переменные нельзя обрезать. Сколько памяти выделил - столько и будет. А Integer от Byte отличается на 1 байт. В твоей матрице - на n^2 байт. Если там у тебя 100 строк, то это уже 10.000 байт ЛИШНИХ под хранение переменных.
И таких тонких мест можно найти еще много.


Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 20:19 | Сообщение # 8
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
Quote (Seqular)
Как найти максимальный элемент во всей матрице? О_О

та та я знаю что глупый вапрос!, но у меня щас из-за матана и нетакие в голове провалы, и не такое забываю happy
Quote (Seqular)
Переменные нельзя обрезать. Сколько памяти выделил - столько и будет. А Integer от Byte отличается на 1 байт. В твоей матрице - на n^2 байт. Если там у тебя 100 строк, то это уже 10.000 байт ЛИШНИХ под хранение переменных. И таких тонких мест можно найти еще много.

та божеш мой! мне нежалко! у меня жесткий диск 1/3 терабайта happy
а програмки эти, как бы много места под себя не подминали многа не весят


Излил душу - Вытри за собой!
 
SeqularДата: Понедельник, 24.11.2008, 20:46 | Сообщение # 9
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
PROTOSS, Пробеги двойным циклом по всем элементам матрицы. Сравнивай каждый из них с некой переменной (изначально равной первому элементу). Если больше нее, то переприсвой этой переменной значение этого элемента. Таким образом после того, как все элементы обойдешь - эта переменная будет хранить самый большой элемент в матрице!

Quote (PROTOSS)
у меня жесткий диск 1/3 терабайта

Не надо путать дисковое пространство и память. Это совершенно разные понятия. Уметь программировать можно и мартышку научить. А уметь программировать оптимально - вот суть искусства.


Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 20:50 | Сообщение # 10
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
точно! пасип=) или стоп, 2 циклом ет как? ет типо for i:=1 to n do begin for j:=1 to m do begin ...
Quote (Seqular)
Не надо путать дисковое пространство и память.

если ты про оперативную память то и онной не мало 2 гига, и вапще комп не на уровне 1 пентиума, неподавицо wink


Излил душу - Вытри за собой!

Сообщение отредактировал PROTOSS - Понедельник, 24.11.2008, 20:52
 
SeqularДата: Понедельник, 24.11.2008, 20:51 | Сообщение # 11
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
PROTOSS, Да мне вообще пофигу скока у кого памяти. У меня 4GB но я стараюсь не позволять себе писать неоптимальные программы.

Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 20:55 | Сообщение # 12
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
ну с оптимальностью тему можно прикрыть, ето дело личное happy

Излил душу - Вытри за собой!
 
SeqularДата: Понедельник, 24.11.2008, 21:07 | Сообщение # 13
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
PROTOSS, ну тогда и конец беседе

Поддерживаю также проект сообщество молодых сисадминов
 
PROTOSSДата: Понедельник, 24.11.2008, 21:18 | Сообщение # 14
Старый знакомый
Группа: Пользователи
Сообщений: 42
Репутация: 0
Замечания: 0%
Статус: Offline
еслиб, вот тут Alexander кусочег задачки привел, а неправильно, паскаль еще на S:=1/a[1]; кочевряжится пишит "type mismatch"
Quote (Alexander)
S:=1/a[1]; for i:=2 to n do     S:=S+1/a[i]; S:=n/S;

я попробывал ему S:=1/a[1,1]; сделать всеровно кочевряжется... чд?

Добавлено (24.11.2008, 14:18)
---------------------------------------------
слуш, мб у тебя аська есть и туда перейдем, а то тут долго ответа ждать...


Излил душу - Вытри за собой!
 
SeqularДата: Понедельник, 24.11.2008, 21:27 | Сообщение # 15
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Ася моя в профиле. Ищи там. А Type-ошибка почему? Посмотри, какого типа у тебя S. Real? Потому что в нее заносится результат деления, который является Real-ом

Поддерживаю также проект сообщество молодых сисадминов
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;