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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Вычислить сумму элементов главной диагонали..., Задача на матрицы
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

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

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


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


Профи
****

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

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


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


Пионер
**

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

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


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


Гость






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


Пионер
**

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

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


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


Гуру
*****

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

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


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


Пионер
**

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

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


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

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

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


Профи
****

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

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


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


Если первый индекс меняется быстрее второго - значит, матрица заполняется по столбцам (пока номер строки меняется, номер столбца остается неизменным)... У тебя этого не происходит, у тебя второй индекс меняется быстрее первого, значит, пока номер строки стоит на месте, меняется номер столбца => заполнение идет построчно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
Так как вводится матрица?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

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

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


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

Цитата
vvedite elementi matrici
1 1 1 {первая строка}
2 2 2 {вторая строка}
3 3 3 {третья строка}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





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