Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2013, 14:48   #1
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию Делфи.Консоль.Матрица заполняется нолями при случайном генерировании

Когда случайными числами заполняется матрица,то большая часть нули.Это как-то подозрительно. Что не так,не могу понять.
Код:
const Nmax=20;
type mass=array[1..Nmax] of integer;
Код:
procedure gMass1( var m:mass;  
                  var n:integer);
var i:integer;
begin
      randomize;
      n:=random(20);
      randomize;
      for i:=1 to n do
      m[i]:=10+random(21);
end;
Код:
procedure outMass(const m:mass;n:integer);    
var i:integer;
begin
  for i:=1 to n do begin
                      write(m[i]);
                      writeln;
                   end;
end;
Jane_Air вне форума Ответить с цитированием
Старый 04.11.2013, 15:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не подтверждаю. У меня отработала без нулей.
Безымянный.jpg
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2013, 15:35   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Цитата:
Сообщение от Jane_Air Посмотреть сообщение
... большая часть нули.Это как-то подозрительно. Что не так,не могу понять.
А я не могу понять, что же надо конкретно. Не только элементы матрицы случайные, но и количество элементов тоже случайное ?
Вот это const Nmax=20;
type mass=array[1..Nmax]

вот с этим n:=random(20); for i:=1 to n
означает, что из 20 элементов будут заполнены не все 20 а какое-то случайное количество, например 12, апоследние 8 - не определены, обычно 0.

PS Не надо randomize много раз вызывать, достаточно 1 раз на всю программу. И будет random сколько угодно раз случайно работать.
Кстати, random(20) возвращает от 0 до 19.

Последний раз редактировалось type_Oleg; 04.11.2013 в 15:38.
type_Oleg вне форума Ответить с цитированием
Старый 04.11.2013, 15:49   #4
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Вот весь код:
Код:
program Project4;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const Nmax=10;
type Matrix=array[1..Nmax,1..Nmax] of integer;

function obrob(x:integer):integer;
  begin
      writeln('vuberit sposib zapovnen masuvy: vupadkovi chusla - vvedit 1');
      writeln('                                z klaviatyru - 2');
      writeln('                                z faily - 3');
      writeln('                                zakin4utu roboty - 9');
      readln(x);
      obrob:=x;
  end;



procedure gMatr1( var m:matrix; var rd,st:integer);     {заповнення випадковими числами}
var i,j:integer;
begin
      randomize;
      rd:=random(10);st:=random(10);
      for i:=1 to rd do
        for j:=i to st do m[i,j]:=random(20);

end;





procedure gMatr2( var m:matrix;             {заповнення з клавіатури}
                  var st,rd:integer);
                  var i,j:integer;
begin
      writeln('vvedit kilkist stovp4ukiv i ryadkiv');
      readln(st,rd);
      for i:=1 to rd do
          for j:=1 to st do  begin
                              writeln('vvedit element z indexom',i,', ',j,' ' );
                              readln(m[i,j]);
                             end;
end;







procedure outMatr(const m:matrix;st,rd:integer);    {виведення на екран}
var i,j:integer;
begin
  for i:=1 to rd do begin
    for j:=1 to st do begin
                      write(m[i,j]:5);
                      end;
    writeln;
                    end;
end;




var st,rd,k,x:integer;
          m:matrix;
          f:text;
begin
k:=obrob(x);
if k=1 then gMatr1(m,st,rd);
if k=2 then gMatr2(m,st,rd);
if k=3 then begin
               assign(f,'inform.txt');
               reset(f);
            end;
if k=9 then exit;
outMatr(m,st,rd);
readln;

end.

Вот..одни нули...
Да...количество элементов тоже случайное..
Jane_Air вне форума Ответить с цитированием
Старый 04.11.2013, 16:07   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Если внимательно приглядеться, то можно заметить, что нули у вас занимают нижнюю левую половину, отсекаемую диоганалью. Это происходит потому, что именно так вы и написали в коде

Код:
for i:=1 to rd do
        for j:=i to st do m[i,j]:=random(20);
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 04.11.2013, 17:00   #6
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Ну а какой тогда должен быть код? Я уже не знаю..
Jane_Air вне форума Ответить с цитированием
Старый 04.11.2013, 17:01   #7
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Ну наверное присваивать переменной j не значение переменной i, а единицу?
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 04.11.2013, 17:08   #8
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

аааааааааа..
я вообще не заметила...ахаха
спасибо большое!
Jane_Air вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи.Консоль. Jane_Air Помощь студентам 4 04.11.2013 22:39
из паскаля в консоль делфи Андрей.12 Помощь студентам 3 23.05.2010 15:05
Делфи, Консоль, Таймер. Chudo4258 Помощь студентам 2 18.03.2010 21:19
Граф в Делфи консоль LLIypLLIyH Помощь студентам 6 12.06.2008 18:20
Делфи Консоль ПОмогите пожалуйста LLIypLLIyH Помощь студентам 8 10.06.2008 21:10