Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Jill
Ребят, подскажите!
Условие: Задана квадратная матрица А размером N х N (N<==10), состоящая из действительных элементов.Найти среднее арифметическое элементов каждой из четных строк матри-цы.
Набросала код:

program LABA_11;
var
N,i,j:integer;
A:array[1..10,1..10] of real;
Sum,Sr:real;
begin
{Ввод размерности}
write('Введите размерность массива N = ');
readln(N);
{Ввод значений элементов матрицы}
for i:=1 to N do
for j:=1 to N do
begin write('A[',i,',',j,']',' = ');
readln(A[i,j]);
end;
{Вывод исходной матрицы}
for i:=1 to N do
for j:=1 to N do
writeln(A[i,j]:2:2); readln;
{Вычисление, вывод среднего арифметического}
for i:=1 to N do
Sum:=0;
begin if (i mod 2)=0 then
begin for j:=1 to N do
Sum:=Sum+A[i,j];
j:=j+1;
Sr:=Sum/N;
end;
writeln('Среднее арифметическое ',i,'-ой строки ->',Sr:2:2);
i:=i+1
end;
readln;
end.



Проблемы:
1. Каким макаром вывести среднее арифметическое каждой из строк? В моем коде получается только для последней, причем, если N - четное число... :-(
2. Как вывести исходную матрицу так, чтобы было более наглядно - квадратиком? ;-)
3. И последний вопрос: вечная проблема с процедурами :-( каждое действие необходимо оформить процедурой:
Процедура ввода размерности матрицы.
Процедура ввода элементов матрицы.
Процедура вывода элементов исходной матрицы.
Процедура вычисления.
Процедура вывода результатов.
...а я по жизни путаюсь с формальными/фактическими параметрами :-(

Помогите, пожалуйста!
volvo
Jill,
Внимательнее с Begin ... End :)
{ Вычисление, вывод среднего арифметического }
for i:=1 to N do
if (i mod 2) = 0 then begin
Sum:=0;
for j:=1 to N do Sum:=Sum+A[i,j];
Sr:=Sum/N;
writeln('Среднее арифметическое ',i,'-ой строки ->',Sr:2:2);
end;


P.S.
{Вывод исходной матрицы}
for i:=1 to N do begin
for j:=1 to N do
write(A[i,j]:2:2, ' ');
writeln;
end;
volvo
Ну а вот она же, но с процедурами/функциями:

program LABA_11;

Type
mx = Array[1 .. 10, 1 .. 10] Of Real;
vec = Array[1 .. 10] Of Real;

Function GetSize: Integer;
Var X: Integer;
Begin
{ Ввод размерности }
write('Введите размерность массива N = '); readln(X);
GetSize := X;
End;

Procedure InputMatrix(Var A: mx; N: Integer);
Var i, j: Integer;
Begin
{ Ввод значений элементов матрицы }
for i:=1 to N do
for j:=1 to N do begin
write('A[',i,',',j,']',' = '); readln(A[i,j]);
end;
End;

Procedure PrintMatrix(A: mx; N: Integer);
Var i, j: Integer;
Begin
{ Вывод матрицы }
for i:=1 to N do begin
for j:=1 to N do
write(A[i,j]:2:2, ' ');
writeln;
end;
End;

Function CountAverage(A: mx; Var average: vec; N: Integer): Integer;
Var
size, i, j: Integer;
Sum: Real;
Begin
{ Вычисление среднего арифметического }

size := 0;
for i:=1 to N do
if (i mod 2) = 0 then begin
Sum:=0;
for j:=1 to N do Sum:=Sum+A[i,j];
inc(size); average[size] := Sum / N;
end;
CountAverage := size;
End;

var
N, i: integer;
A: mx;
B: vec;
begin
n := GetSize;
InputMatrix(A, N);
PrintMatrix(A, N);

{
вывод среднего арифметического -
можно тоже сделать отдельной процедурой
}
For i := 1 To CountAverage(A, B, N) Do
WriteLn('Среднее арифметическое ',i,'-ой строки ->',B[i]:2:2);
readln;
end.
Jill
volvo, спасибо! :-) разобралась в том, до чего не додумалась :-)

ты меня уже который раз выручаешь good.gif

ОГРОМНОЕ ТАКОЕ СПАСИБО!!! yes2.gif
Jill
volvo, еще вопрос...мааааленький такой...
при N=3 ср.ариф. вычисляет правильно, но выдает, что это "Ср.ариф. 1-ой строки".
1-ой, а не второй.....

уууупс, так получается даже если N=3...
volvo
Упс...
My Fault rolleyes.gif

Я же сохранял только для четных строк, тогда замени вывод на такой:
Код
 For i := 1 To CountAverage(A, B, N) Do
   WriteLn('Среднее арифметическое ',2*i,'-ой строки ->',B[i]:2:2);
Jill
а я...а я ...а я уже так и сделала!!! blum.gif

а это не будет....хм...мухляжом?
volvo
Это не мухляж, ведь в массив записываются только значения сред. арифметического для четных строк, так и выводить надо только четные индексы. А четные - это как раз i*2 blum.gif
Jill
smile.gif
У меня еще один вопрос, но не по листингу, а просто "вопрос спецу"
Требуется нарисовать:
Логическую структуру программы, выполненную в Visio.
Блок – схему каждой процедуры отдельно, выполненных в Visio.
(Вопрос не про Visio)

Логическая структура - это как? Блок схема программы 1-ого варианта (без процедур)? Или абстрактное описание - что за чем делается?
klem4
Цитата
описание - что за чем делается


блоксхемы для этого и сущесвую вроде ... описывают графически логику работы программы
Jill
У меня еще возник вопрос. Описание переменных главной программы

var N, i: integer;
A: mx;
B: vec;


находятся под процедурами. Это не имеет значения, где их писать - до или после?
volvo
no1.gif Не имеет... Я тебе даже больше скажу... Я бы рекомендовал ВСЕГДА описывать переменные после процедур (если этого позволяет логика программы, а она должна это позволять blum.gif ), потому что в этом случае многие ошибки просто не возникают, или ловятся еще при компиляции программы...
Jill
Спасибо, volvo wink.gif

Просто меня смутил главный принцип нашего препода - минимум места как в памяти, так и на бумаге... Вот и задумалась...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.