Помощь - Поиск - Пользователи - Календарь
Полная версия: Сумма элементов матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Legolas
Всем привет!
Вот решаю такую задачу:

Дана действительная квадратная матрица порядка п. найти наибольшее из значений элементов, расположенных в заштрихованной области матрицы.
(см. присоединенное изображение)

Вот что я сделал:
Код

program matrix;
uses crt;
var a: array[1..10,1..10] of integer;
s,r: integer;
i,j,n: integer;
begin clrscr; textcolor(lightgreen);  randomize;
write(' Input razmer matrix> ');
readln(n);
for i:=1 to n do
begin
for j:=1 to n do begin
a[i,j]:=random(10);
write(a[i,j]:5,' ');
end;
writeln;

end;
write(' A: ');
s:=0;
for i:=1 to n do
for j:=1 to n do s:=s+a[i,j];
writeln(s);

write(' B: ');
s:=0;
for i:=1 to n do
for j:=1 to i do s:=s+a[i,j];
writeln(s);

write(' V: ');
s:=0;
for i:=1 to n div 2 + n mod 2 do
for j:=1 to n-i+1 do s:=s+a[i,j];
writeln(s);

write(' G: ');
s:=0;
for i:=n mod 2 + n div 2 to n do
for j:=n-i+1 to i do s:=s+a[i,j];
writeln(s);

write(' D: ');

write(' E:');

write(' J:');
s:=0;
for i:=1 to n div 2 + n mod 2 do
for j:=i to n-j+1 do s:=s+a[i,j];
writeln(s);

write(' Z: ');
s:=0;
for i:=1 to n div 2 + n mod 2 do
for j:=1 to n-j+1 do s:=s+a[i,j];
writeln(s);

write(' I: ');
s:=0;
for i:=1 to n do
for j:=1 to n-i+1 do s:=s+a[i,j];
writeln(s);

write(' K: ');
s:=0;
for i:=1 to n do
for i:=n-i+1 to n do s:=s+a[i,j];
writeln(s);

readln;
end.



У меня тут работает только B, G и I, в остальном баги….Помогите пожалуйста их исправить, а также дописать D и E.
Всем заранее благодарен. Goodbye;-)
klem4
опять же... посмотри сюда http://forum.pascal.net.ru/index.php?showtopic=2694
тут как минимум половина, чтож за такое нежелание ничего делать <_<
hiv
Цитата(Legolas @ 17.05.05 9:14)
найти наибольшее из значений элементов, расположенных в заштрихованной области матрицы.

А зачем вы суммируете элементы массива в программе?
s:=0;
for i:=1 to n do
for j:=1 to n do s:=s+a[i,j];

Максимальный элемент в матрице находится так:

max:=a[1,1];
for i:=1 to n do
for j:=1 to n do
if a[i,j]>max then max:=a[i,j];
volvo
Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?
Guest
Цитата(hiv @ 17.05.05 12:09)
А зачем вы суммируете элементы массива в программе?
s:=0;
for i:=1 to n do
for j:=1 to n do s:=s+a[i,j];

Максимальный элемент в матрице находится так:

max:=a[1,1];
for i:=1 to n do
  for j:=1 to n do
    if a[i,j]>max then max:=a[i,j];


О, чёрт не внимательно задачу прочитал, а всё-таки как найти наибольший элемент из заштрихованной области???
Legolas
Цитата(volvo @ 17.05.05 23:40)
Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?

Нет, не буду дублировать я темы, буду развивать старые...;-)
А вы все-таки не поскажете как найти наибольшее из значений элементов в заштрихованной области????
hiv
Готового решения тебе здесь никто не даст. Хау! Я все сказал.
Legolas
Вот решенная задача, может что-нибудь не верно, или всё o'key? smile.gif
Код

program z19;
uses crt;
var n,i,j,max:integer;
a:array [1..7,1..7] of integer;
z:byte;
begin
clrscr; textcolor(lightgreen); randomize;
repeat
write(' Vvedite razmernost(nechetnoe chislo)> ');
readln(n)
until odd(n)=true;
{writeln('vvedite elementi');}
for i:=1 to n do begin
for j:=1 to n do begin{read(a[i,j]);}
a[i,j]:=random(9);
write(a[i,j]:3,' ');
end;
writeln;
end;

writeln(' Menu (vibor cifry):');
repeat
writeln('1-a, 2-b, 3-c, 4-d, 5-e, 6-f, 7-g, 8-h, 9-i, 10-j');
readln(z);
case z of
1:begin
 for i:=1 to n do
 for j:=i to n do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
2:begin
 for i:=1 to n do
 for j:=1 to i do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
3:begin
 for i:=1 to ((n div 2)+1) do
 for j:=i to (n-i+1) do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
4:begin
 for i:=n downto ((n div 2)+1) do
 for j:=(n-i+1) to i do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
5:begin
 for i:=1 to ((n div 2)+1) do
 for j:=i to (n-i+1) do if a[i,j]>max then max:=a[i,j];
 for i:=n downto ((n div 2)+1) do
 for j:=(n-i+1) to i do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
6:begin
 for j:=1 to ((n div 2)+1) do
 for i:=j to (n-j+1) do if a[i,j]>max then max:=a[i,j];
 for j:=n downto ((n div 2)+1) do
 for i:=(n-j+1) to j do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
7:begin
 for j:=1 to ((n div 2)+1) do
 for i:=j to (n-j+1) do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
8:begin
 for j:=n downto ((n div 2)+1) do
 for i:=(n-j+1) to j do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
9:begin
 for j:=1 to n do
 for i:=1 to (n-j+1) do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;
10:begin
 for j:=1 to n do
 for i:=n downto (n-j+1) do if a[i,j]>max then max:=a[i,j];
 writeln('max=',max);max:=0;
 end;

end;

until readkey=#13;
readkey
end.
volvo
Ну так прогони ее и посмотри, все ли верно... Или даже это нужно сделать ЗА ТЕБЯ?
Legolas
Цитата(volvo @ 19.05.05 16:03)
Ну так прогони ее и посмотри, все ли верно... Или даже это нужно сделать ЗА ТЕБЯ?

А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок smile.gif
klem4
Цитата(Legolas @ 19.05.05 9:33)
А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок smile.gif


Наивный ты ;)

Прогнать значит нарисовать матрицу на бумажке, посчетать все самому тамже, потом ввести туже матрицу в программу и сравнить результаты, ну и повторить это несколько раз =)

ручной рассчет называется...
volvo
Ну, это может и не ошибка, но недочет по крайней мере:
a:array [1..7,1..7] of integer;
...
repeat
write(' Vvedite razmernost(nechetnoe chislo)> ');
readln(n)
until odd(n)=true;

Смотри, что ты делаешь: на нечетность ты проверяешь (хотя зачем = True добавлено, я так и не пойму, вполне можно обойтись и без него), а вот если я введу n = 9? Число нечетное, все по условию, но вот тут:
a[i,j]:=random(9);
могут быть проблемы...
hiv
Если программа работает - это не значит что у тебя нет ошибок!
У тебя не проинициализировано значение переменной max!
Что это значит? - это значит, что в первой же строке
for j:=i to n do if a[i,j]>max then max:=a[i,j];
у тебя значение переменной max может быть какое угодно! Это не БЕЙСИК. В Паскале переменные не инициализируются нулями по умолчанию.
Это РАЗ.
ДВА: После нахождения максимального значения и его распечатки ты обнуляешь переменную max. Если в будущем элементы твоей матрицы будут ВСЕ отрицательными, то твоя программа по всем пунктам выдаст, что максимальный элемент равен нулую, а его в твоей матрице просто нет!!! Надо инициализировать переменную max только значением какого-либо элемента матрицы. Я уже показывал в своем 3 посте как.
max:=a[1,1];
Legolas
Цитата(volvo @ 19.05.05 18:02)
а вот если я введу n = 9? Число нечетное, все по условию, но вот тут:
a[i,j]:=random(9);
могут быть проблемы...

Это генерация случайных чисел от 0 до 9. Не буду же я вместо 9 вводить 100, на бумажке считать долго...
volvo
Цитата(Legolas @ 20.05.05 3:39)
Это генерация случайных чисел от 0 до 9.

Спасибо за информацию, я как-то этого не знал angry.gif
Неужели ты не понял смысл поста? Если ты опишешь
var a: array[1..7, 1..7] of integer;

и обратишься к a[9, 9], что будет? Думать начни !!!
Legolas
Цитата(volvo @ 20.05.05 16:04)
Спасибо за информацию, я как-то этого не знал  angry.gif
Неужели ты не понял смысл поста? Если ты опишешь
var a: array[1..7, 1..7] of integer;

и обратишься к a[9, 9], что будет? Думать начни !!!

то есть лучше написать random(7)?
hiv
Цитата(Legolas @ 20.05.05 8:18)
то есть лучше написать random(7)?

Мдаааа.... По моему твой язык работает в десятки раз быстрее, чем мозги! При чем здесь функция random? Речь идет о возможности выхода индекса массива а за рамки размерности этого массива. Раз задан массив от 1 до 7, то при обращении к его 8-му, 9-му и т.д. элементу (а также к 0-му, -1-му и т.д.) происходит ошибка на этапе исполнения программы Range error.
Legolas
Цитата(hiv @ 20.05.05 16:34)
Мдаааа.... По моему твой язык работает в десятки раз быстрее, чем мозги! При чем здесь функция random? Речь идет о возможности выхода индекса массива а за рамки  размерности этого массива. Раз задан массив от 1 до 7, то при обращении к его 8-му, 9-му и т.д. элементу (а также к 0-му, -1-му и т.д.) происходит ошибка на этапе исполнения программы Range error.

Мне функция random нужна для ввода массива, просто самому надоедает постоянно вводить элементы, вот и пусть за меня эту работу комп выполняет smile.gif
hiv
По моему это издевательство! Ты перечитывать посты и думать умеешь? Да пиши что хочешь в переменной передаваемой ф-ции random. Она ВООБЩЕ ЗДЕСЬ НЕ ПРИЧЕМ!!! ОШИБКА НЕ В НЕЙ!!!
volvo
По-моему, пора закрывать тему. Человек не хочет понимать простейших вещей, ну, а о том, чтобы про массивы и матрицы прочитать - вообще речи нет.
Legolas, ты программу написал? Она работает? Тебя ее работа устраивает? В чем проблема? Придешь сдавать, все твои ошибки найдутся, чего ты волнуешься раньше времени? lol.gif
lasix for dog without prescripti
Viagra And Dapoxetine
where to buy cialis online safel
Viagra Paypal Payment Accepted
what happens if a woman takes pr
Nemazole Without Prescription
price of viagra at shoppers drug
Venta Cialis Espana
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.