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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Сумма элементов матрицы
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Legolas, ты долго будешь темы дублировать? Или по-хорошему ты не понимаешь?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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];


О, чёрт не внимательно задачу прочитал, а всё-таки как найти наибольший элемент из заштрихованной области???
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


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

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


Профи
****

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

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


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


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






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


Новичок
*

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

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


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

А зачем мне ее прогонять, я ее сам сделал, и не вижу никаких ошибок smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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);
могут быть проблемы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


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

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


Гость






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

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

и обратишься к a[9, 9], что будет? Думать начни !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

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

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


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

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


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


Новичок
*

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

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


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

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


Профи
****

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

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


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


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


Гость






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

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

 





- Текстовая версия 20.04.2024 22:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name