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

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

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

 
 Ответить  Открыть новую тему 
> Матрица, вычисления, вывод...нюансы
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Ребят, подскажите!
Условие: Задана квадратная матрица А размером 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. И последний вопрос: вечная проблема с процедурами :-( каждое действие необходимо оформить процедурой:
Процедура ввода размерности матрицы.
Процедура ввода элементов матрицы.
Процедура вывода элементов исходной матрицы.
Процедура вычисления.
Процедура вывода результатов.
...а я по жизни путаюсь с формальными/фактическими параметрами :-(

Помогите, пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Ну а вот она же, но с процедурами/функциями:

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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


volvo, спасибо! :-) разобралась в том, до чего не додумалась :-)

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

ОГРОМНОЕ ТАКОЕ СПАСИБО!!! yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


volvo, еще вопрос...мааааленький такой...
при N=3 ср.ариф. вычисляет правильно, но выдает, что это "Ср.ариф. 1-ой строки".
1-ой, а не второй.....

уууупс, так получается даже если N=3...

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


Гость






Упс...
My Fault rolleyes.gif

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


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


а я...а я ...а я уже так и сделала!!! blum.gif

а это не будет....хм...мухляжом?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Это не мухляж, ведь в массив записываются только значения сред. арифметического для четных строк, так и выводить надо только четные индексы. А четные - это как раз i*2 blum.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


smile.gif
У меня еще один вопрос, но не по листингу, а просто "вопрос спецу"
Требуется нарисовать:
Логическую структуру программы, выполненную в Visio.
Блок – схему каждой процедуры отдельно, выполненных в Visio.
(Вопрос не про Visio)

Логическая структура - это как? Блок схема программы 1-ого варианта (без процедур)? Или абстрактное описание - что за чем делается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

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

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


Цитата
описание - что за чем делается


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


У меня еще возник вопрос. Описание переменных главной программы

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


находятся под процедурами. Это не имеет значения, где их писать - до или после?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






no1.gif Не имеет... Я тебе даже больше скажу... Я бы рекомендовал ВСЕГДА описывать переменные после процедур (если этого позволяет логика программы, а она должна это позволять blum.gif ), потому что в этом случае многие ошибки просто не возникают, или ловятся еще при компиляции программы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

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


Спасибо, volvo wink.gif

Просто меня смутил главный принцип нашего препода - минимум места как в памяти, так и на бумаге... Вот и задумалась...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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