Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрица

Автор: Richard 29.04.2007 18:27

Прошу помощи в решение простой задачи. Раньше вообще не имел дел с матрицами и масивами.
Задача: Задана матрица S(25,8). Вывести исходные данные в первые 24 строки и первые 7 столбцов. Вычислить среднее арифметческое значение элементов каждой строки и записать его в 8-ой столбец, а также среднее среденее арифметическое каждого столбца и записать его в 25-ю строку.

Автор: Артемий 29.04.2007 23:44

Показывай код, который пробовал..

Автор: Richard 4.05.2007 15:10

Вот у меня есть та часть программы которая отвечает за вывод исходных данных в первые 24 строки и первые 7 столбцов.


program pr_5;
uses crt;
const n=25; m=8;
var s:array [1..n,1..m] of integer;
i,j,k:integer;
begin
clrscr;
randomize;
for i:=1 to 24 do
for j:=1 to 7 do
s[i,j]:=random (100);
for i:=1 to 24 do
begin
for j:=1 to 7 do
write (s[i,j]:5);
writeln;
end;


writeln;
readln;
end.



Во первых проблема в том что выводится только 23 строки, а не 24.
Во вторых не знаю я как вывести эти средние значения.

Автор: samec 4.05.2007 18:36

нужно сначала заполнить матрицу этими самыми средними арифметичискими, а потом уже и выводить.
Заполнить можно вот так:

 

for i:=1 to 24 do
begin
s[i,m]:=0;
for j:=1 to 7 do
s[i,m]:=s[i,m]+s[i,j];
s[i,m]:=s[i,m] div 7;
end;


for i:=1 to 7 do
begin
s[n,i]:=0;
for j:=1 to 24 do
s[n,i]:=s[n,i]+s[j,i];
s[n,i]:=s[n,i] div 24;
end;



вот только это не совсем среднее арифметическое будет получаться, в твоём примере я думаю нужно использовать матрицу вещественного типа, тогда всё будт ок. Если использовать матрицу вещественного типа, то нужно div заменить на /
вот и всё ;)

Автор: Richard 4.05.2007 19:40

Правильно ли я понимаю что если не использовать вещественный тип то средний арифметический будет усреднятся до целого, а то при вещественном такие ужасные цифры получаются.
Еще вопрос как их вывести, а то у меня ничего не выводится, да и с самой 24 строчкой тоже проблема выводится максимум только 23.

Автор: мисс_граффити 4.05.2007 19:56

Цитата
то при вещественном такие ужасные цифры получаются.

просто пользуйся форматным выводом.
например:
writeln(a:0:2) выведет а с двумя знаками после запятой.

Автор: Richard 4.05.2007 20:22

Остается проблема как вывести средние арифмктические и почему не выводится рандомом заданые 24 строчки, а выводится только 23 я уж и не говорю про 25

Автор: Richard 5.05.2007 16:40

Вот полная версия задачи, но что то она неработает и не могу понять в чем дело.


program pr_5;
uses crt;
const n=25; m=8;
var s:array [1..n,1..m] of integer;
i,j,k:integer;
begin
clrscr;
randomize;
for i:=1 to 24 do
for j:=1 to 7 do
s[i,j]:=random (100);
for i:=1 to 24 do
begin
for j:=1 to 7 do
write (s[i,j]:5);
writeln;
end;
for i:=1 to 24 do
begin
s[i,m]:=0;
for j:=1 to 7 do
s[i,m]:=s[i,m]+s[i,j];
write(s[i,m] div 7:5);
end;
for i:=1 to 7 do
begin
s[n,i]:=0;
for j:=1 to 24 do
s[n,i]:=s[n,i]+s[j,i];
write(s[n,i] div 24:5);
end;
writeln;
readln;
end.

Автор: мисс_граффити 5.05.2007 18:27

1. Сделал бы по-человечески:
1) Заполняешь ВСЮ матрицу (часть - случайными числами, часть рассчитываешь)
2) ВСЮ выводишь
а не кусками... сам же в своих write и writeln запутался. Столбец выводится не столбцом, а строчкой.

2. Возможно, строки просто не помещаются. Посмотри настройки окна...

Автор: Richard 6.05.2007 0:46

Вот новая версия программы


program proga1;

uses
crt;

var
i,k: integer;
sum: real;
mas: array[1..25,1..8] of real;

begin
clrscr;
sum := 0;
randomize;
for k := 1 to 7 do
begin
for i := 1 to 24 do
begin
mas[i,k] := random(10);
sum := sum + mas[i,k];
end;
mas[25,k] := sum/24;
sum := 0;
end;

sum := 0;

for i := 1 to 24 do
begin
for k := 1 to 7 do
begin
sum := sum + mas[i,k];
end;
mas[i,8] := sum/7;
sum := 0;
end;


for k := 1 to 8 do
begin
writeln;
for i := 1 to 25 do
write(mas[i,k]4.gif1);
end;

readln;

end.

Осталось только поменять стобцы со строками, но у меня никак не получается.

Автор: samec 7.05.2007 10:12

вот это (в самом конце)


for k := 1 to 8 do
begin
writeln;
for i := 1 to 25 do
write(mas[i,k]
1);



меняешь на следующее:

for i := 1 to 25 do
begin
writeln;
for k := 1 to 8 do
write(mas[i,k]:5:2);
end;



и всё.