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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

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


Ветеран Броуновского Движения
***

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

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


Возник один вопросик: нужно сделать матрицу и посчитать в ней сумму элементов каждой строки, разделить сумму этой строки на количество элементов этой строки. Но размерность матрицы должна задаваться вручную, причем произвольно, вот как взбредет в голову, так и сделать, т.е. 2х2 или 3х10, а может и 10х3 и т.д..


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вроде, динамические массивы в Дельфях никто не отменял:

Var
mx: array of array of integer;

...
SetLength(mx, 2, 3); // <--- Получаешь матрицу 2 x 3
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ветеран Броуновского Движения
***

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

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


А я пробовал так. Сделал матрицу, но она 10х10 и задается заранее, заполняется случайным образом, а как сделать, чтобы я мог сам выбрать кол-во строк и столбцов? Пробовал задавать m и n как:
Writeln(‘m’,m);
Read(m);
Writeln(‘n’,n);
Read(n);
Но консоль после этого вылетает. В чем косяк?
Код

Type TMatrix=array[1..100,1..100] of integer;
  var x:TMatrix;
    y:integer;
  procedure inputmatrix(var a:TMatrix; m,n:cardinal);
  var i,j:cardinal;
  begin
  writeln;
  i:=1; repeat
  j:=1; repeat
  a[i,j]:=random(999);
  j:=j+1;
  until
  j>m;
  i:=i+1;
  until
  i>n; end;
  procedure outputmatrix(a:TMatrix; m,n:cardinal);
  var i,j:cardinal;
  begin
  i:=1; repeat
  j:=1; repeat
  write(a[i,j]:6);
  j:=j+1; until
  j>m;
  i:=i+1; writeln;
  until i>n; end;

  begin
  randomize;
  inputmatrix(x,10,10);
  outputmatrix(x,10,10);
  readln;
  end.

Цитата
Вроде, динамические массивы в Дельфях никто не отменял:

Это как? Я могу их заменить переменными и задавать вручную?

Сообщение отредактировано: Atreides -


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
я могу их заменить переменными и задавать вручную?
Легко...

Var
mx: array of array of integer;
m, n: integer;

begin
Write('n = '); Readln(n);
Write('m = '); Readln(m);
SetLength(mx, n, m);

... // <- Работаешь с матрицей

SetLength(mx, 0, 0); // <- Освобождаешь память
end.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ветеран Броуновского Движения
***

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

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


Сделал по примеру матрицу, задаю значения i,j, а на выходе получаю матрицу из одной строки и одного значения. В чем проблема? Как сделать так, чтобы после того как задан размер матрицы, я смог задавать значения этой матрицы построчно? Random соответственно надо убрать.
Код

program Matrix;

{$APPTYPE CONSOLE}
uses
  SysUtils;

  var
     mx: array of array of integer;
     i, j: integer;
      m,n:cardinal;

  procedure inputmatrix;
  var i,j:cardinal;
     begin
  Write('i = '); Readln(i);
  Write('j = '); Readln(j);
  SetLength(mx, i, j);

  writeln;
  i:=1; repeat
  j:=1; repeat
  mx[i,j]:=random(999);
  j:=j+1;
  until
  j>m;
  i:=i+1;
  until
  i>n;
   end;

  procedure outputmatrix;
  var i,j:cardinal;
  begin
  i:=1; repeat
  j:=1; repeat
  write(mx[i,j]:6);
  j:=j+1; until
  j>m;
  i:=i+1; writeln;
  until i>n; end;

  begin
  randomize;
  inputmatrix;
  outputmatrix;
  readln;
  SetLength(mx, 0, 0);
  end.


Сообщение отредактировано: Atreides -


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ты сам себя запутываешь этим Repeat/Until, а зачем?

Вот так:
program Matrix;

{$APPTYPE CONSOLE}
uses
SysUtils;

var
mx: array of array of integer;
i, j: integer;
m,n:cardinal;

procedure inputmatrix;
var i,j:cardinal;
begin
Write('i = '); Readln(n);
Write('j = '); Readln(m);
SetLength(mx, n, m);

writeln;
for i := 0 to n - 1 do
for j := 0 to m - 1 do
mx[i,j]:=random(999);
end;

procedure outputmatrix;
var i,j:cardinal;
begin
for i := 0 to n - 1 do begin
for j := 0 to m - 1 do
write(mx[i,j]:6);
writeln;
end;
end;

begin
randomize;
inputmatrix;
outputmatrix;
readln;
SetLength(mx, 0, 0);
end.

Обрати внимание на индексацию - она начинается с 0...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ветеран Броуновского Движения
***

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

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


Сделал матрицу с возможностью выборки её размера и ввода элементов вручную, а как посчитать среднее значение каждой строки и вывести его в отдельный вектор, после сравнить значения строк вектора и вывести максимальное значение. Я там уже начал считать сумму, но чета Никам правильно в вектор выдать не могу.
Код
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
matrica=array[1..15,1..15] of real;
var
max:real;
nmax:byte;
p:array [1..15] of byte;
a:matrica;
i,j,n,m:integer;
s:real;

begin
writeln;
write('Vvedi kol-vo strok n & stolbchov m ');
readln(n,m);
for i:=1 to n do
for j:=1 to m do
begin
write ('a[',i,',',j,']=');
readln (a[i,j]);
end;
writeln;
writeln ('Base matrix');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:8:1,' ');
writeln;
readln;
end;

//Ñóììà ýëåìåíòîâ ñòðîêè
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];  //ñóììà ýë-òîâ ñòðîêè
end;
readln;
end;


end.


Сообщение отредактировано: Atreides -


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

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

 





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