IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сумма элементов матрицы
Legolas
сообщение 17.05.2005 9:14
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Всем привет!
Вот решаю такую задачу:

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

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

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;-)


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 17.05.2005 11:20
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


опять же... посмотри сюда http://forum.pascalnet.ru/index.php?showtopic=2694
тут как минимум половина, чтож за такое нежелание ничего делать <_<

Сообщение отредактировано: klem4 - 17.05.2005 11:20


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 17.05.2005 12:09
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(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];


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.05.2005 15:40
Сообщение #4


Гость






Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?
 К началу страницы 
+ Ответить 
Guest
сообщение 18.05.2005 1:16
Сообщение #5


Гость






Цитата(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 1:19
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


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

Нет, не буду дублировать я темы, буду развивать старые...;-)
А вы все-таки не поскажете как найти наибольшее из значений элементов в заштрихованной области????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 18.05.2005 8:08
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Готового решения тебе здесь никто не даст. Хау! Я все сказал.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Legolas
сообщение 19.05.2005 7:47
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Вот решенная задача, может что-нибудь не верно, или всё 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2005 8:03
Сообщение #9


Гость






Ну так прогони ее и посмотри, все ли верно... Или даже это нужно сделать ЗА ТЕБЯ?
 К началу страницы 
+ Ответить 
Legolas
сообщение 19.05.2005 9:33
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


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

А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 19.05.2005 9:40
Сообщение #11


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


Наивный ты ;)

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

ручной рассчет называется...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2005 10:02
Сообщение #12


Гость






Ну, это может и не ошибка, но недочет по крайней мере:
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 10:44
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Если программа работает - это не значит что у тебя нет ошибок!
У тебя не проинициализировано значение переменной 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];


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Legolas
сообщение 20.05.2005 3:39
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 19.05.05 18:02)
а вот если я введу n = 9? Число нечетное, все по условию, но вот тут:
a[i,j]:=random(9);
могут быть проблемы...

Это генерация случайных чисел от 0 до 9. Не буду же я вместо 9 вводить 100, на бумажке считать долго...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2005 8:04
Сообщение #15


Гость






Цитата(Legolas @ 20.05.05 3:39)
Это генерация случайных чисел от 0 до 9.

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

и обратишься к a[9, 9], что будет? Думать начни !!!
 К началу страницы 
+ Ответить 
Legolas
сообщение 20.05.2005 8:18
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


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

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

то есть лучше написать random(7)?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 20.05.2005 8:34
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


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

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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Legolas
сообщение 20.05.2005 8:38
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


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

Мне функция random нужна для ввода массива, просто самому надоедает постоянно вводить элементы, вот и пусть за меня эту работу комп выполняет smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 20.05.2005 8:44
Сообщение #19


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


По моему это издевательство! Ты перечитывать посты и думать умеешь? Да пиши что хочешь в переменной передаваемой ф-ции random. Она ВООБЩЕ ЗДЕСЬ НЕ ПРИЧЕМ!!! ОШИБКА НЕ В НЕЙ!!!


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2005 8:47
Сообщение #20


Гость






По-моему, пора закрывать тему. Человек не хочет понимать простейших вещей, ну, а о том, чтобы про массивы и матрицы прочитать - вообще речи нет.
Legolas, ты программу написал? Она работает? Тебя ее работа устраивает? В чем проблема? Придешь сдавать, все твои ошибки найдутся, чего ты волнуешься раньше времени? lol.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"