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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Вычислить сумму элементов главной диагонали..., Задача на матрицы
kvadrat
сообщение 17.05.2008 17:56
Сообщение #1


Пионер
**

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

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


Условие:
Прикрепленное изображение
Проверьте плиз, правильно ли я решил?
program qwesadf;
uses crt;
var p:array[1..7,1..7] of real;i,j:integer;s1,s2:real;
begin
clrscr;
s1:=0;
s2:=0;
writeln('vvedite elementi matrici');
for i:=1 to 7 do
for j:=1 to 7 do
begin
readln(p[i,j]);
s1:=p[1,1]+p[2,2]+p[3,3]+p[4,4]+p[5,5]+p[6,6]+p[7,7];
s2:=p[1,7]+p[2,6]+p[3,5]+p[4,4]+p[5,3]+p[6,2]+p[7,1];
end;
writeln('summa elementov glavnoi diagonali ',s1:2:2);
writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bo2nik
сообщение 17.05.2008 19:12
Сообщение #2


Новичок
*

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

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


У тебя если семь элементов в матрице. А если n? Тогда условие меняется на:


readln(n); {у тебя n=7}
for i:=1 to n do
for j:=1 to n do begin
if i=j then s1:=s1+p[i,j]; {это для главной диагонали}



P.S. Ты решил правильно, но как-то всё это просто.

Сообщение отредактировано: Bo2nik - 17.05.2008 19:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 17.05.2008 19:46
Сообщение #3


Профи
****

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

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


Ну тогда проще так
s:=0;
For i:=1 To n Do s:=s+a[i,i];
kvadrat почитай FAQ - поможет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kvadrat
сообщение 17.05.2008 21:40
Сообщение #4


Пионер
**

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

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


Кстати да, FAQ отличная вещь, тока что читал, вот получилось такое решение, но оно выводит неправельный результат. Например в матрице 2х2 с элементами 1,1,1,1 основная диагональ должна быть равна 2, и побочная тоже 2. А это решение утверждает что и то и то равно 3. Помогите исправить ошибки плиз?.
program qwesadf;
uses crt;
var p:array[1..10,1..10] of real;i,n,j:integer;s1,s2:real;
begin
clrscr;
writeln('vvedite razmer matrici');
readln(n);
writeln('vvedite elementi matrici');
s1:=0;
s2:=0;
for i:=1 to n do
for j:=1 to n do
begin
readln(p[i,j]);
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;
writeln('summa elementov glavnoi diagonali ',s1:2:2);
writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 17.05.2008 21:47
Сообщение #5


Профи
****

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

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


Цитата
тока что читал
Плохо читал... Сделай отладку программы, может поймешь где ошибка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kvadrat
сообщение 17.05.2008 21:53
Сообщение #6


Пионер
**

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

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


Что такое отладка?? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.05.2008 22:09
Сообщение #7


Гость






Отладка программ
 К началу страницы 
+ Ответить 
kvadrat
сообщение 17.05.2008 22:31
Сообщение #8


Пионер
**

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

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


Круто, поотлаживал всё и заметил что после строчек с for он пропрыгивает begin, пробовал ставить 2 бегина и энда всё равно также, также пропобал после первой фор ставить бегин и после второй, но всё равно внаглую просткакивает их. И разультат попрежнему неверен. Незнаю чё делать. =(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 17.05.2008 22:42
Сообщение #9


Гуру
*****

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

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


begin - это не выполняемый оператор, а операторная скобка. Ка по-твоему должна выполняться скобка?
Цитата
Незнаю чё делать. =(
Ошибку искать, а не лишних скобок наставлять.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kvadrat
сообщение 18.05.2008 14:18
Сообщение #10


Пионер
**

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

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


Сижу вот с самого утра в этой проге на F7 тычю и ваще неодупляю где ошибка, тыкните пальцем хотябы, мой мозг на гране взрыва.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2008 14:44
Сообщение #11


Профи
****

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

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


Смотри: (при n=3)
for i:=1 to n do 
for j:=1 to n do
begin
readln(p[i,j]);
s1:=s1+p[i,i]; // пока у тебя j изменится от 1 до 3-х сколько раз ты прибавишь один и тот же элемент диагонали? 3 (:
s2:=s2+p[i,n+1-i];
end;

Вот в этом и ошибка..
Сумму лучше считать отдельно..

Сообщение отредактировано: Айра - 18.05.2008 14:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2008 15:12
Сообщение #12


Профи
****

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

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


Сейчас подумала, что можно и в этом цикле, но несколько в другом месте.. попробуй переделать))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kvadrat
сообщение 18.05.2008 18:17
Сообщение #13


Пионер
**

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

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


Ееее получилось, вот так работает правильно:
for i := 1 to n do
begin
for j := 1 to n do
begin
readln(p[i,j]);
end;
s1:=s1+p[i,i];
s2:=s2+p[i,n-i+1];
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 18.05.2008 18:37
Сообщение #14


Профи
****

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

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


Ага yes2.gif
А еще можно убрать лишние "скобки" и получится чуть-чуть короче))
for i:=1 to n do
begin
for j:=1 to n do readln(p[i,j]);
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kvadrat
сообщение 19.05.2008 12:50
Сообщение #15


Пионер
**

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

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


Скажите как называется способ введения элементов матрицы в этом решении?

program werqwrsdfgse;
uses crt;
const n=2;
var
p:array [1..n,1..n] of real;i,j:integer;s1,s2:real;
begin
clrscr;
s1 := 0;
s2 := 0;
writeln('vvedite elementi matrici');
for i:=1 to n do
begin
for j:=1 to n do readln(p[i,j]);
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;
Writeln('summa elementov glavnoi diagonali ',s1:2:2);
Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2);
end.


Как я понял это постолбцам. Учитель сказала исправить задачу так чтоб ввод был построчным, я и исправил
readln(p[j,i]);
, но задача стала выводить неправильный ответ, она говорит мол нужно ещё begin end кудато впихнуть. Я так и непонял чё она от меня ваще хатела и чё это за способы ввода матрицы, и как надо их вводить, в строчку все элементы через пробел или через запятую? или как?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2008 13:02
Сообщение #16


Гость






Цитата
Как я понял это постолбцам. Учитель сказала исправить задачу так чтоб ввод был построчным
Это и есть по строкам... Смотри, у тебя матрица - значит, 2 индекса... Первый - номер строки, второй - номер столбца (тут уж ничего не поделаешь, так в Паскале принято, что матрица хранится построчно)... Смотрим на твой цикл:

for i:=1 to n do begin
for j:=1 to n do readln(p[i,j]); { <--- по J - внутренний цикл, J меняется быстрее, чем I !!! }
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;


Если первый индекс меняется быстрее второго - значит, матрица заполняется по столбцам (пока номер строки меняется, номер столбца остается неизменным)... У тебя этого не происходит, у тебя второй индекс меняется быстрее первого, значит, пока номер строки стоит на месте, меняется номер столбца => заполнение идет построчно...
 К началу страницы 
+ Ответить 
kvadrat
сообщение 19.05.2008 17:27
Сообщение #17


Пионер
**

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

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


Чёто я совсем запутался, если у меня ввод построчный то зачем учитель сказала мне исправить задание так чтоб ввод был построчный? Говорит 2 действия тебе надо сделать: Поменять i и j местами гдето и куда нужно вставить begin end, как выполнить её задание?

program werqwrsdfgse;
uses crt;
const n=2;
var
p:array [1..n,1..n] of real;i,j:integer;s1,s2:real;
begin
clrscr;
s1 := 0;
s2 := 0;
writeln('vvedite elementi matrici');
for i:=1 to n do
begin
for j:=1 to n do readln(p[i,j]);
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;
Writeln('summa elementov glavnoi diagonali ',s1:2:2);
Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2);
end.


Сообщение отредактировано: kvadrat - 19.05.2008 17:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.05.2008 18:07
Сообщение #18


Гость






Цитата
если у меня ввод построчный то зачем учитель сказала мне исправить задание так чтоб ввод был построчный?

Это ты у нее спрашивай, зачем она тебя "на испуг берет"... Не можешь объяснить - значит, не понимаешь, как это работает... А ты объясни... Хотя бы то, что я написал. И не надо никакие Begin/End просто так добавлять. Программа работает? Работает. Чего ей не нравится??? Ей надо, чтоб она НЕ работала, что-ли?

Кстати, я бы на твоем месте сделал вещь, которая поставит твою "учительницу" (чему она научить может - непонятно) на место:

program werqwrsdfgse;
uses crt;
const n=2;
var
p: array[1..n, 1..n] of real;
i,j:integer;
s1,s2:real;
begin
clrscr;
s1 := 0;
s2 := 0;
writeln('vvedite elementi matrici');
for i:=1 to n do begin
for j:=1 to n do readln(p[i,j]);
s1:=s1+p[i,i];
s2:=s2+p[i,n+1-i];
end;

writeln('matrix:');
for i := 1 to n do begin
for j := 1 to n do write(p[i, j]:5:2);
writeln;
end;

Writeln('summa elementov glavnoi diagonali ',s1:2:2);
Writeln('summa elementov diagonali simetrichnoi glavnoi ',s2:2:2);
end.

Результат выполнения:
Цитата(Console)
vvedite elementi matrici
1
3
4
5
matrix:
1.00 3.00
4.00 5.00
summa elementov glavnoi diagonali 6.00
summa elementov diagonali simetrichnoi glavnoi 7.00
Так как вводится матрица?
 К началу страницы 
+ Ответить 
kvadrat
сообщение 19.05.2008 19:43
Сообщение #19


Пионер
**

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

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


А возможно сделать так чтобы ввод матрицы был примерно такой:

Цитата
vvedite elementi matrici
1 1 1 {первая строка}
2 2 2 {вторая строка}
3 3 3 {третья строка}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 19.05.2008 19:56
Сообщение #20


Профи
****

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

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


Можно:
  for i := 1 to n do 
begin
for j := 1 to n do write(p[i, j]:5:2);
write(' ',i,'-я строка');
writeln;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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