Показать полную графическую версию : [решено] Массивы. Ввод параметра для строк и столбцов с клавиатуры,а заполнение матрицы random
lenaustkz84
17-01-2012, 17:27
Здравствуйте!
Нужно сделать так, чтобы параметры для строк и столбцов вводились с клавиатуры,
а сама матрица заполнялась случайным образом. При чем реализация ввода матрицы
должна быть в одной процедуре. А вывод матрицы на экран в другой процедуре.
Делаю пока что для ввода матрицы. Но не совсем получается.
Ошибка: "Error 20: Variable identifier expected".
И указывает на переменную a в процедуре.
Так понимаю, что и для переменной b будет та же ситуация.
Думаю, что const нужно убрать, потому что это все таки константы, а мне нужно переменное значение. Но тогда выходит ошибка в строке
type mass = array [1..a,1..b] of integer;
Потому что a и b не определены.
Подскажите, пожалуйста, что нужно сделать. Как правильно написать?
Буду ОЧЕНЬ благодарна, если напишите пример:)
Вот, что получилось у меня.
const a=10;
b=10;
type mass = array [1..a,1..b] of integer;
var matr : mass;
procedure zapolnenie_matricij;
begin
var i,j:integer;
writeln('Введите параметр для строк: ');
readln(a);
writeln('Введите параметр для столбцов: ');
readln(b);
randomize;
for i:=1 to a do
begin
for j:=1 to b do
begin
matr[i,j]=random(15);
end;
end;
end;
Если пробую прописать a и b как переменные в процедуре, то появляется ошибка "Error 113: Error in statement".
Если просто переменные a и b записываю как:
var a : integer;
b : integer;
то появляется другая ошибка "Error 133: Cannot evaluate this expression".
Tonny_Bennet
17-01-2012, 18:01
Нужно сделать так, чтобы параметры для строк и столбцов вводились с клавиатуры, »
Судя по коду это называется размерностью массива.
Судя по синтаксису вы пишете на Pascal или Delphi. И по моему ни там ни там то, что вы пытаетесь сделать, сделать не получится.
P.S. В C# это реализуется точно:
int [,] mass;
Readln(a);
Readln(b)
mass = new int[a,b];
lenaustkz84
17-01-2012, 18:12
Судя по синтаксису вы пишете на Pascal или Delphi. »
Да, Tonny_Bennet, это Pascal.
Еще мне не совсем понятно, что Вы хотели показать этим кодом.
Объясните, пожалуйста.
здесь ошибка
matr[i,j]=random(15);
надо
matr[i,j]:=random(15);
и пишите
var a : integer;
b : integer;
lenaustkz84
17-01-2012, 19:40
ferget, эту ошибку
matr[i,j]:=random(15); »
я сделала здесь на форуме. В программе проверила - без ошибки.
type Matrix = array of array of integer;
function CreateMatrix(m,n: integer): Matrix;
begin
SetLength(Result,m);
for var i:=0 to m-1 do
SetLength(Result[i],n);
end;
procedure FillMatrByRandom(matr: Matrix);
begin
for var i:=0 to matr.Length-1 do
for var j:=0 to matr[0].Length-1 do
matr[i][j] := Random(100);
end;
var matr: Matrix;
begin
var a :integer;
var b :integer;
writeln('Введите параметр для строк: ');
readln(a);
writeln('Введите параметр для столбцов: ');
readln(b);
matr := CreateMatrix(a,b);
FillMatrByRandom(matr);
end.
lenaustkz84
17-01-2012, 22:03
ferget, здорово!
Еще бы теперь в коде разобраться:)
lenaustkz84, Вы же учитесь, значит должны разбираться, иначе глупо учить программирование.
lenaustkz84
18-01-2012, 06:21
Вы же учитесь, значит должны разбираться, иначе глупо учить программирование. »
Drongo, да я учусь, но учусь недавно. Есть в коде ferget то, что я вижу в первый раз. Все когда-то начинали. И никто не обязан быть семи пядей во лбу.
lenaustkz84
18-01-2012, 06:38
Вот я сделала. Правда не так виртуозно, как у ferget:) Но работает:)
Как бы теперь сделать, чтобы матрица заполнялась не только положительными,
но и отрицательными числами?
Что нужно изменить?
program zadanie_30;
uses crt;
const a = 10; {dlya zadaniya strok matricij}
b = 10; {dlya zadaniya stolbcov matricij}
type mass = array [1..a, 1..b] of integer;
var matr : mass; {dlya obsheij matricij}
a1,b1 : integer; {dlya opredeleniya parametrov matricij}
{*********************************************************************}
procedure vvod_matricij; {procedyra dlya vivoda matricij na ekran}
var i,j:integer;
begin
writeln('Vvedite a: ');
readln(a1);
writeln('Vvedite b: ');
readln(b1);
randomize;
for i:=1 to a do
begin
for j:=1 to b do
begin
matr[i,j]:=random(10);
end;
end;
end;
{*********************************************************************}
procedure matrica_na_ekrane;
var i,j : integer;
begin
for i:=1 to a1 do
begin
for j:=1 to b1 do
begin
write(matr[i,j]:5);
end;
writeln;writeln;
end;
end;
{*********************************************************************}
BEGIN
clrscr;
vvod_matricij;
matrica_na_ekrane;
readln;
END.
Как бы теперь сделать, чтобы матрица заполнялась не только положительными,
но и отрицательными числами? »
например от -10 до 10
matr[i,j]:=random(20)-10;
Tonny_Bennet
18-01-2012, 09:17
SetLength(Result,m); »
Если честно то думал, что паскаль этого не умеет делать :)....
Еще мне не совсем понятно, что Вы хотели показать этим кодом.
Объясните, пожалуйста. »
Вот оказалось, что паскаль умеет работать с динамическими массивами. И когда вы пишете на паскале то видите всю "кухню" этого (да и впрочем любого) действия. Я считаю данный факт основополагающим в развитии навыков программирования и алгоритмизации в целом. Языки которые используют API (http://ru.wikipedia.org/wiki/Windows_API) позволяют сократить многие манипуляции. Это удобно когда вы понимаете и знаете как это работает. Это удобно в больших проектах. Код из 30 строк может быть заменён на код из 3 строк.
Я считаю, что языки использующие API могут быть не удобны лишь в том случае, когда для работы программы с кодом 3 КБ требуется набор библиотек в 300 МБ ... и некоторые проблемы кросплатформенности...
Если честно то думал, что паскаль этого не умеет делать »
А Паскаль этого и не умеет :)
Это умеет Дельфи, начиная с 5 версии.
На паскале надо делать как то так (массив из 100):
type
arr: array[1,1] of Integer;
var
a : arr;
pa:^a;
begin
getmem(pa,sizeof(integer)*100);
pa^[80]:=100;
и т.д. и т.п.
freemem(pa,sizeof(integer)*100);
end.
Tonny_Bennet
19-01-2012, 09:03
AlexVol,
Судя по синтаксису вы пишете на Pascal или Delphi. »
Да, Tonny_Bennet, это Pascal. »
Вот я сделала. Правда не так виртуозно, как у ferget Но работает »
в коде видно что массив не динамический...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.