|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Загрузка рандомно в лейбл.
Загружаются строки из текстового файла. Нужно рандомно добавить в лейбл 1,4,7,10.....34,37 (1+3).. (пока делаю хотя бы с 3 строками 1,4,7)
код Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; var f1:TextFile; i,n,j,k:integer; chislo:String; vop:array[1..9] of String; a:array[1..9] of integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin n:=1; randomize; assignfile(f1,'Test.txt'); reset(f1); for i:=1 to 9 do begin readln(f1,chislo); vop[i]:=chislo; for j:=1 to 3 do begin a[j]:=a[j]+n; n:=n+3; begin k:=RandomRange(1, 3); Label1.Caption:=vop[a[k]]; end; CloseFile(F1); end; end; end; Помогите разобраться где проблема. при запуске высвечивается окошко с еррором но программа все равно через раз запускается и выдает один и тот же ответ. Последний раз редактировалось malekskv, 24.12.2009 в 23:20. |
#2
|
|||
|
|||
с end-ами напутал, по твоему вариант CloseFile(F1) - у тебя отыгрывается большое кол-во раз, на нем скроее всего и вылетает ошибка..,
скорее всего должно было быть: Код:
... for j:=1 to 3 do begin a[j]:=a[j]+n; n:=n+3; end; ... |
#3
|
|||
|
|||
Код:
procedure massiv; begin a[1]:=1; n:=0; for j:=1 to 3 do begin a[j]:=a[1]+n; n:=n+3; end; end; procedure randomnoe; begin randomize; k:=RandomRange(1, 4); end; procedure TForm1.FormCreate(Sender: TObject); begin assignfile(f1,'Test.txt'); reset(f1); for i:=1 to 9 do begin readln(f1,chislo); vop[i]:=chislo; Massiv; Randomnoe; Label1.Caption:=vop[a[k]]; end; CloseFile(F1); end; end. Сделал не много по другому. все отлично работает ) Возможно ли как то упростить код? |
#4
|
|||
|
|||
Куда уж проще)
|
#5
|
|||
|
|||
Цитата:
Конечно, можно проще. Собственно, если не ошибаюсь, ты грузишь некоторый список строк, потом просто выводишь в лабел случайную строку с 1 через 3. Код:
procedure Form1.LoadLabel; var S :TStringList; K : Integer; begin Randomize; S := TStringList.Create; S.LoadFromFile('file.txt'); K := Round(Random(S.Count / 3)); Label1.Caption := S[K * 3]; S.Free; end; Все. 1. Инициализируем генератор случайных чисел. 2. Создаем экземпляр класса списка строк. 3. Загружаем в него содержимое файла. 4. Вычисляем случайную строку, где максимальный номер = кол-во / 3 (у нас выдаются строки через 3). 5. Загружаем в метку нужную строку (строки через 3, начинаем с первой, нулквой в списке). 6. "Убиваем" созданный объект. |
#6
|
|||
|
|||
Помогите еще кое-чем.
Нужно в массив a:array[1..10] присвоить числа рандомно от 1 до 10 и что бы елементы масивва не повторялись.. как такое сделать? ) |
#7
|
|||
|
|||
Код:
const N = 10; var A: array [1..N] of Integer; function Exists(X: Integer): Boolean; var I: Integer; begin Result := False; for I := 1 to N do if A[i] = X then begin Result := True; Exit; end; end; procedure BuildArray; var I, T: Integer; begin for I := 1 to N do A[i] := 0; for I := 1 to N do begin repeat T := Random(N) + 1 until not Exists(T); A[i] := T; end; end; |