Форум «Всё о Паскале» _ Задачи _ Сумма элементов матрицы
Автор: Legolas 17.05.2005 13:14
Всем привет! Вот решаю такую задачу:
Дана действительная квадратная матрица порядка п. найти наибольшее из значений элементов, расположенных в заштрихованной области матрицы. (см. присоединенное изображение)
Вот что я сделал:
Код
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 17.05.2005 15:20
опять же... посмотри сюда http://forum.pascal.net.ru/index.php?showtopic=2694 тут как минимум половина, чтож за такое нежелание ничего делать <_<
Автор: hiv 17.05.2005 16:09
Цитата(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 17.05.2005 19:40
Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?
Автор: Guest 18.05.2005 5:16
Цитата(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 18.05.2005 5:19
Цитата(volvo @ 17.05.05 23:40)
Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?
Нет, не буду дублировать я темы, буду развивать старые...;-) А вы все-таки не поскажете как найти наибольшее из значений элементов в заштрихованной области????
Автор: hiv 18.05.2005 12:08
Готового решения тебе здесь никто не даст. Хау! Я все сказал.
Автор: Legolas 19.05.2005 11:47
Вот решенная задача, может что-нибудь не верно, или всё o'key?
Код
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 19.05.2005 12:03
Ну так прогони ее и посмотри, все ли верно... Или даже это нужно сделать ЗА ТЕБЯ?
Автор: Legolas 19.05.2005 13:33
Цитата(volvo @ 19.05.05 16:03)
Ну так прогони ее и посмотри, все ли верно... Или даже это нужно сделать ЗА ТЕБЯ?
А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок
Автор: klem4 19.05.2005 13:40
Цитата(Legolas @ 19.05.05 9:33)
А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок
Наивный ты ;)
Прогнать значит нарисовать матрицу на бумажке, посчетать все самому тамже, потом ввести туже матрицу в программу и сравнить результаты, ну и повторить это несколько раз =)
ручной рассчет называется...
Автор: volvo 19.05.2005 14:02
Ну, это может и не ошибка, но недочет по крайней мере:
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 19.05.2005 14:44
Если программа работает - это не значит что у тебя нет ошибок! У тебя не проинициализировано значение переменной 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 20.05.2005 7:39
Цитата(volvo @ 19.05.05 18:02)
а вот если я введу n = 9? Число нечетное, все по условию, но вот тут:
a[i,j]:=random(9);
могут быть проблемы...
Это генерация случайных чисел от 0 до 9. Не буду же я вместо 9 вводить 100, на бумажке считать долго...
Автор: volvo 20.05.2005 12:04
Цитата(Legolas @ 20.05.05 3:39)
Это генерация случайных чисел от 0 до 9.
Спасибо за информацию, я как-то этого не знал Неужели ты не понял смысл поста? Если ты опишешь
var a: array[1..7, 1..7] of integer;
и обратишься к a[9, 9], что будет? Думать начни !!!
Автор: Legolas 20.05.2005 12:18
Цитата(volvo @ 20.05.05 16:04)
Спасибо за информацию, я как-то этого не знал Неужели ты не понял смысл поста? Если ты опишешь
var a: array[1..7, 1..7] of integer;
и обратишься к a[9, 9], что будет? Думать начни !!!
то есть лучше написать random(7)?
Автор: hiv 20.05.2005 12:34
Цитата(Legolas @ 20.05.05 8:18)
то есть лучше написать random(7)?
Мдаааа.... По моему твой язык работает в десятки раз быстрее, чем мозги! При чем здесь функция random? Речь идет о возможности выхода индекса массива а за рамки размерности этого массива. Раз задан массив от 1 до 7, то при обращении к его 8-му, 9-му и т.д. элементу (а также к 0-му, -1-му и т.д.) происходит ошибка на этапе исполнения программы Range error.
Автор: Legolas 20.05.2005 12:38
Цитата(hiv @ 20.05.05 16:34)
Мдаааа.... По моему твой язык работает в десятки раз быстрее, чем мозги! При чем здесь функция random? Речь идет о возможности выхода индекса массива а за рамки размерности этого массива. Раз задан массив от 1 до 7, то при обращении к его 8-му, 9-му и т.д. элементу (а также к 0-му, -1-му и т.д.) происходит ошибка на этапе исполнения программы Range error.
Мне функция random нужна для ввода массива, просто самому надоедает постоянно вводить элементы, вот и пусть за меня эту работу комп выполняет
Автор: hiv 20.05.2005 12:44
По моему это издевательство! Ты перечитывать посты и думать умеешь? Да пиши что хочешь в переменной передаваемой ф-ции random. Она ВООБЩЕ ЗДЕСЬ НЕ ПРИЧЕМ!!! ОШИБКА НЕ В НЕЙ!!!
Автор: volvo 20.05.2005 12:47
По-моему, пора закрывать тему. Человек не хочет понимать простейших вещей, ну, а о том, чтобы про массивы и матрицы прочитать - вообще речи нет. Legolas, ты программу написал? Она работает? Тебя ее работа устраивает? В чем проблема? Придешь сдавать, все твои ошибки найдутся, чего ты волнуешься раньше времени?
Автор: lasix for dog without prescripti 21.09.2021 16:29
Viagra And Dapoxetine
Автор: where to buy cialis online safel 10.12.2021 8:37
Viagra Paypal Payment Accepted
Автор: what happens if a woman takes pr 19.12.2021 21:50
Nemazole Without Prescription
Автор: price of viagra at shoppers drug 21.12.2021 6:21