Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 5
1

Создание одномерного массива средних арифметических столбцов матрицы

11.11.2017, 23:15. Показов 861. Ответов 5
Метки нет (Все метки)

Здравствуйте. На форуме новичок.. У меня возникла проблема при написании программы.
Задание такое: Даны два одномерных массива A и G . Сформировать матрицу B по формуле B[i,j] = exp(A[i]*G[j]);
Сформировать массив средних арифметических столбцов.
Прилагаю код того, что уже смог сделать. Проблема возникла именно в подсчете этого ср.арифметического.. Подскажите, как это можно сделать. Читал на форуме что-то подобное, но к сожалению ничего не вышло.
PS: Делфи только осваиваю, поэтому могут быть неточности, уж не ругайтесь на меня.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
program LAB_4_17;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
TYPE
tA=array[1..16]of integer;
tG=array[1..16]of integer;
tB=array[1..16,1..16]of real;
tR=array[1..16]of real;
VAR
A:tA;G:tG;B:tB;R:tR;
m,n:integer;
flag:string;
 
{Процедура ввода количества элементов массива A}
procedure InPutNumberA(var a:integer);
Begin
Write('Enter number of elements in array A = ');
Readln(a);
 
End;
 
{Процедура ввода количества элементов массива G}
procedure InPutNumberG(var b:integer);
Begin
Write('Enter number of elements in array G = ');;
Readln(b);
 
End;
 
{Процедура заполнения двух одномерных массивов A,G и формирование матрицы}
procedure InPutAG(a,b:integer; var q:tA; s:tG;r:tB);
Var i,j:integer;
Begin
writeln('Enter ',a,' elements of array A = ');
 for i:=1 to a do
 begin
 read(q[i]);
 end;
writeln('Enter ',b,' elements of array G = ');
 for j:=1 to b do
 begin
 read(s[j]);
 end;
writeln;
writeln('       Matrix B     ');
writeln;
for i:=1 to a do
  begin
   for j:=1 to b do
    begin
    r[i,j]:=exp(q[i]*s[j]);
    write(r[i,j]:1:1,'      ');
    end;
    writeln;
 end;
writeln;
readln;
End;
{Процедура заполнения двух одномерных массивов A,G и формирование матрицы}
function SrArifmStb (const r:tB;a,b:integer;var q:tR):tR;
Var i,j:integer; SrArifm:Real;
Begin
repeat
SrArifm:=0;
for j:=b to b do
begin
 for i:=1 to b do
 r[i,j]:=r[i,j]+SrArifm;
end;
b:=b+1;
SrArifm:=SrArifm/b;
until j<>b;
End;
{Процедура вывода сформированного массива средних арифметических}
procedure OutPutSrArifm(a:integer;var q:tR);
Var i:integer;
Begin
writeln('Array R of medial arifmetics of colons B');
writeln;
 for i:=1 to a do
 begin
 write(q[i]:5:2,'  ');
 end;
readln;
End;
 
BEGIN
repeat
InPutNumberA(m);
InPutNumberG(n);
InPutAG(m,n,A,G,B);
{SrArifmStb(B,m,n,R);}
{OutPutSrArifm(n,R); }
writeln;
writeln('Do you want to continue? Enter YES to continue , NO - to exit');
readln(flag);
until flag<>'YES';
END.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2017, 23:15
Ответы с готовыми решениями:

Найти максимальное из средних арифметических столбцов матрицы
дана матрица цел чисел найти мах сред ореф в каждом столбце #include &lt;stdio.h&gt; #include...

Вывести значения средних арифметических элементов всех столбцов матрицы
Задача № 1. Задана матрица А(i,j). (Причем задать ее надо самому с помощью генератора случайных...

Сделать два одномерных массива из средних арифметических значений на каждой диагонали матрицы, параллельных главной диагонали
Задачка по процедурам.. Из двумерных массивах A и В сделать два одномерных массива из средних...

Из матрицы получить массив, состоящий из средних арифметических строк матрицы
Добрый день! Помогите найти ошибку в коде. Задание: Из заданной пользователем матрицы получить...

5
3769 / 3212 / 846
Регистрация: 29.08.2013
Сообщений: 21,190
Записей в блоге: 2
12.11.2017, 08:06 2
Цитата Сообщение от nikitaorel1999 Посмотреть сообщение
Проблема возникла именно в подсчете этого ср.арифметического
какая проблема?
0
Модератор
64059 / 47474 / 32728
Регистрация: 18.05.2008
Сообщений: 115,185
12.11.2017, 09:08 3
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Примерно так, перепишешь по своему.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  Windows;
 
type mas=array[1..10] of real;
     mtr=array[1..10,1..10] of real;
procedure massiv(var a:mas;var n:byte;c:char);
var i:byte;
begin
repeat
write('Введите размер массива ',c,' от 2 до 10 n=');
readln(n);
until n in [2..10];
writeln('Массив ',c);
for i:=1 to n do
 begin
  a[i]:=2*random;
  write(a[i]:6:2);
 end;
writeln;
end;
procedure matrix(a,g:mas;m,n:byte;var b:mtr);
var i,j:byte;
begin
writeln('Матрица В');
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    b[i,j]:=exp(a[i]*g[j]);
    write(b[i,j]:6:2);
   end;
  writeln;
 end;
end;
procedure sred(b:mtr;m,n:byte;var s:mas);
var i,j:byte;
begin
writeln('Массив средних значений столбцов');
for j:=1 to n do
 begin
  s[j]:=0;
  for i:=1 to m do
  s[j]:=s[j]+b[i,j];
  s[j]:=s[j]/m;
  write(s[j]:6:2);
 end;
end;
var a,g,s:mas;
    b:mtr;
    m,n:byte;
begin
SetConsoleCP(1251);
SetConsoleOutPutCp(1251);
randomize;
massiv(a,m,'A');
massiv(g,n,'G');
matrix(a,g,m,n,b);
sred(b,m,n,s);
readln
 
end.
0
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 5
12.11.2017, 14:19  [ТС] 4
Спасибо Вам огромное!

Добавлено через 3 часа 40 минут
Вот есть ещё один вопрос по поводу программы.
Например, мне нужно создать массив количеств элементов столбцов меньших ср.арифметических столбцов.
Т.е. мы идём по столбцу матрицы и каждый элемент сравниваем со средним арифметическим столбца матрицы.
Если он меньше этого значения, то заносим в счётчик количеств
Т.е. в результате у меня должен получиться массив , в котором указаны количество элементов столбцов < ср.арифм столбцов
Для реализации этого я использую динамический массив.. Вот возникла проблема именно с динамическим массивом.. Я не очень понимаю как это реализовать, путаница вызывается с SetLength, и т.д. Код тот же.

Пример: вот у меня программа создала матрицу по формуле и посчитала ср.арифм столбцов:
0,368 7,389
0,368 7,389
0,050 403,429
0,368 7,389
0,135 54.598

Массив ср.арифм:
0,258 96,039
Вот массив с количествами, который должен получиться..
2 4
0
Модератор
64059 / 47474 / 32728
Регистрация: 18.05.2008
Сообщений: 115,185
12.11.2017, 14:51 5
Цитата Сообщение от nikitaorel1999 Посмотреть сообщение
Для реализации этого я использую динамический массив..
Так тогда проще и исходные массивы и матрицу тоже объявить как динамические.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  Windows;
 
type mas=array of real;
     mtr=array of array of real;
     mbyte=array of byte;
procedure massiv(var a:mas;var n:byte;c:char);
var i:byte;
begin
repeat
write('Введите размер массива ',c,' от 2 до 10 n=');
readln(n);
until n in [2..10];
setlength(a,n);
writeln('Массив ',c);
for i:=0 to n-1 do
 begin
  a[i]:=2*random;
  write(a[i]:6:2);
 end;
writeln;
end;
procedure matrix(a,g:mas;m,n:byte;var b:mtr);
var i,j:byte;
begin
setlength(b,m,n);
writeln('Матрица В');
for i:=0 to m-1 do
 begin
  for j:=0 to n-1 do
   begin
    b[i,j]:=exp(a[i]*g[j]);
    write(b[i,j]:6:2);
   end;
  writeln;
 end;
end;
procedure sred(b:mtr;m,n:byte;var s:mas);
var i,j:byte;
begin
setlength(s,n);
writeln('Массив средних значений столбцов');
for j:=0 to n-1 do
 begin
  s[j]:=0;
  for i:=0 to m-1 do
  s[j]:=s[j]+b[i,j];
  s[j]:=s[j]/m;
  write(s[j]:6:2);
 end;
writeln; 
end;
procedure kol(b:mtr;s:mas;m,n:byte;var k:mbyte);
var i,j:byte;
begin
setlength(k,n);
for j:=0 to n-1 do
 begin
   k[j]:=0;
   for i:=0 to m-1 do
   if b[i,j]<s[j] then inc(k[j]);
 end;
writeln('Массив количеств элементов меньше среднего в столбцах');
for i:=0 to n-1 do
write(k[i]:3);
end;
var a,g,s:mas;
    b:mtr;
    k:mbyte;
    m,n:byte;
begin
SetConsoleCP(1251);
SetConsoleOutPutCp(1251);
randomize;
massiv(a,m,'A');
massiv(g,n,'G');
matrix(a,g,m,n,b);
sred(b,m,n,s);
kol(b,s,m,n,k);
readln
 
end.
1
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 5
12.11.2017, 15:01  [ТС] 6
Большое Вам спасибо!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2017, 15:01

Вычислить сумму средних арифметических элементов каждого столбца массив С, содержащего m столбцов по n чисел в каждом
Вычислить сумму средних арифметических элементов каждого столбца массив С, содержащего m столбцов...

Дана вещественная матрица размером NxM.Определить числа B1..Bm,равные значениям средних арифметических элементов столбцов.
Дана вещественная матрица размером NxM.Определить числа B1..Bm,равные значениям средних...

Упорядочить столбцы матрицы по убыванию их средних арифметических
Добрый день! Задание звучит следующим образом: Дана матрица целых чисел X(n, т). Упорядочить ее...

Сформировать массив из средних арифметических соответствующих строк матрицы
Ввести двумерный массив A={aij}, i=\overline{1,m}, j=\overline{1,n}, m, n=20. Вывести на экран...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.