Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Richard
Прошу помощи в решение простой задачи. Раньше вообще не имел дел с матрицами и масивами.
Задача: Задана матрица S(25,8). Вывести исходные данные в первые 24 строки и первые 7 столбцов. Вычислить среднее арифметческое значение элементов каждой строки и записать его в 8-ой столбец, а также среднее среденее арифметическое каждого столбца и записать его в 25-ю строку.
Артемий
Показывай код, который пробовал..
Richard
Вот у меня есть та часть программы которая отвечает за вывод исходных данных в первые 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
нужно сначала заполнить матрицу этими самыми средними арифметичискими, а потом уже и выводить.
Заполнить можно вот так:
 

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
Правильно ли я понимаю что если не использовать вещественный тип то средний арифметический будет усреднятся до целого, а то при вещественном такие ужасные цифры получаются.
Еще вопрос как их вывести, а то у меня ничего не выводится, да и с самой 24 строчкой тоже проблема выводится максимум только 23.
мисс_граффити
Цитата
то при вещественном такие ужасные цифры получаются.

просто пользуйся форматным выводом.
например:
writeln(a:0:2) выведет а с двумя знаками после запятой.
Richard
Остается проблема как вывести средние арифмктические и почему не выводится рандомом заданые 24 строчки, а выводится только 23 я уж и не говорю про 25
Richard
Вот полная версия задачи, но что то она неработает и не могу понять в чем дело.

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

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

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
вот это (в самом конце)

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;



и всё.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.