![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 и что бы елементы масивва не повторялись.. как такое сделать? ) |