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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2010, 23:51   #1
Repac123456
Пользователь
 
Аватар для Repac123456
 
Регистрация: 24.10.2010
Сообщений: 27
По умолчанию рандомное заполнение массивов.

в проге, текст которой ниже, при её выполнении выполняется не совсем то, что я хотел: вместо заполнения массива увеличивается лишь число колонок.
Код:
var
  Form1: TForm1;
  x: array[1..10] of real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
n,i: integer;
begin
n:=0;
i:=1;
for i:=1 to 10 do
Randomize;
x[i]:= random(1000);
n:=n+1;
StringGrid1.ColCount:=n;
StringGrid1.Cells[i,0]:=FloatToStr(x[i]);
end;
end.
как переправить правильно код?

Последний раз редактировалось Stilet; 23.11.2010 в 08:45.
Repac123456 вне форума Ответить с цитированием
Старый 23.11.2010, 00:05   #2
Prisioner
Google user
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 27
По умолчанию

Код:
StringGrid1.Cells[i-1,0]:=FloatToStr(x[i]);
Pascal/Delphi
ICQ: 2881228
Prisioner вне форума Ответить с цитированием
Старый 23.11.2010, 00:55   #3
Repac123456
Пользователь
 
Аватар для Repac123456
 
Регистрация: 24.10.2010
Сообщений: 27
По умолчанию

не непомогает
Repac123456 вне форума Ответить с цитированием
Старый 23.11.2010, 01:31   #4
Prisioner
Google user
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 27
По умолчанию

Нашёл ещё ошибку

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:=1 to 10 do begin
Randomize;
x[i]:= random(1000);
StringGrid1.ColCount:=i;
StringGrid1.Cells[i-1,0]:=FloatToStr(x[i]);
end;
end;
так же в строке i:=1; нет смысла.
так же в переменной n в рамках данного кода нет смысла.
Pascal/Delphi
ICQ: 2881228

Последний раз редактировалось mihali4; 23.11.2010 в 15:29.
Prisioner вне форума Ответить с цитированием
Старый 23.11.2010, 01:44   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, как всё запутано.. имхо, всё неправильно....
// Prisioner - к Вам это не относится!! только randomize за цикл вынесите.
// да и i-1 не факт, что правильно. непонятно, куда TC хочет записать числа...
// хотя, может быть, Вы и правы в этом...


Repac123456
или вот, попробуйте такой код
Код:
var
  n, i: integer;
begin
  Randomize;
  n := 10;
  StringGrid1.ColCount := n;
  for i := 1 to n do begin
     x[i] := random(1000);
     StringGrid1.Cells[i-1, 0] := FloatToStr(x[i]);
  end;
end;

Последний раз редактировалось Serge_Bliznykov; 23.11.2010 в 13:46. Причина: исправил StringGrid1.Cells[i-1, 0] - добавил -1 в индексацию колонок.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2010, 02:52   #6
Prisioner
Google user
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
// да и i-1 не факт, что правильно. непонятно, куда TC хочет записать числа...
// хотя, может быть, Вы и правы в этом...
Даже в изначальном варианте кода количество столбиков совпадало с переменной i. Так как они индексируются с нуля до ColCount-1, то с довольно большой долей вероятности можно предположить, что ТС просто это не учёл и пытался писать в несуществующий столбец.

Про randomize; да, я что-то не подумал .


P.S. Оффтоп, почему в моем сообщении в тэгах CODE код не подсвечивается никак? нет выделений ключевых слов и прочего, как у Вас?
Pascal/Delphi
ICQ: 2881228
Prisioner вне форума Ответить с цитированием
Старый 23.11.2010, 12:29   #7
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Приведу пример функции рандомного заполнения массива неповторяющимися числами.
Код:
 ....
public
    { Public declarations }
  end;

TMass = array[0..14] of byte;

var
  Form1: TForm1;
  mass,mass_rez: TMass;

implementation

{$R *.dfm}

function RandomToMass : TMass;
var i: byte;
    N: byte; // случайное число
    cnt: byte; //счетчик количества случайных чисел
    flag: boolean; // флаг, что данное число уже было
begin
  cnt:= 0;
  flag:= false;
  while cnt < 15 do
  begin
    N:= Random(15) + 1; //  Выбираем рандомно число от 0 до 14
    for i:= 0 to 14 do
    begin
      if N = mass[i] then begin flag:= true; Break; end; // проверяем есть ли такое число в массиве
                                        // и если есть устанавливаем флаг и прерываем цикл проверки
    end;
    if flag = false then  // признак, что такого числа в массиве еще нет
    begin
      mass[cnt]:= N; //  заносим число в массив
      Inc(cnt);  // отмечаем в счетчике кол-во занесенных чисел в массив
    end;
    flag:= false;  // сбрасываем флаг для последующей проверки
    // отсюда возвращаемся на очередную иттерацию цикла while
  end;
  Result:= mass;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
end;


procedure TForm1.Button1Click(Sender: TObject);
var i: byte;
begin
  mass_rez:= RandomToMass; //  использование функции
  // выводим значения массива на экран
  for i:= 0 to 14 do
  begin
    Form1.Canvas.TextOut(50 + 20*i ,180,IntToStr(mass_rez[i]));
  end;
end;

end.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 23.11.2010, 13:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

DeKot, код, конечно, хороший.
Только где Вы увидели требование "заполнить массив неповторяющимися числами" ?!
Кроме того, у TC не работает вывод массива в StringGrid, чем Ваш код ему поможет?...


Цитата:
Сообщение от Prisioner
Так как они индексируются с нуля до ColCount-1, то с довольно большой долей вероятности можно предположить, что ТС просто это не учёл и пытался писать в несуществующий столбец.
угу. согласен с Вами. никаких или. Нужно обязательно отнимать единичку от i. сейчас исправлю свой пример кода.
Кстати, меня смутило идиотское поведение StringGrid... Вот уж точно его писали "альтернативно одарённые" программисты.
вот этот код выполняется абсолютно без проблем:
Код:
   StringGrid1.ColCount := 3;
 StringGrid1.Cells[99,1] := 'xxxx';
ну, разумеется, 'xxxx' не отображается, но и ошибок никаких нет! Всё отлично. Программируйте дальше!


Цитата:
Сообщение от Prisioner
Оффтоп, почему в моем сообщении в тэгах CODE код не подсвечивается никак?
я сам удивлён.. Попытаюсь разобраться и отпишусь. Большая просьба - Вы своё сообщение #4 не редактируйте пока!
С помощью администрации форума разобрались.
Форматирование не работало, потому что Вы ручками выделили (подчеркнули слова begin и end).
Это, по всей видимости, и ввело серверный плагин, который оформляет код, в заблуждение!

Последний раз редактировалось Serge_Bliznykov; 23.11.2010 в 15:25.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2010, 03:06   #9
Repac123456
Пользователь
 
Аватар для Repac123456
 
Регистрация: 24.10.2010
Сообщений: 27
По умолчанию

альтернативно одарённые" программисты.
это исчё мягко сказана, как бы из универа из-за неё не вылететь нафиг!!!
Repac123456 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандомное заполнение массива и стринггрида Repac123456 Помощь студентам 5 09.11.2010 00:29
Заполнение массивов массива случайными числами pa6kevi4 Общие вопросы .NET 1 19.05.2010 11:27
Рандомное заполнение массива ac1d_buRn Помощь студентам 15 03.05.2010 09:14
Заполнение двумерных массивов(Basic) mde Помощь студентам 1 30.05.2008 09:23