Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.12.2009, 23:17
malekskv malekskv вне форума
Прохожий
 
Регистрация: 13.11.2009
Сообщения: 44
Репутация: 14
По умолчанию Загрузка рандомно в лейбл.

Загружаются строки из текстового файла. Нужно рандомно добавить в лейбл 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  
Старый 24.12.2009, 23:44
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

с end-ами напутал, по твоему вариант CloseFile(F1) - у тебя отыгрывается большое кол-во раз, на нем скроее всего и вылетает ошибка..,
скорее всего должно было быть:
Код:
...
  for j:=1 to 3 do 
    begin
    a[j]:=a[j]+n; 
    n:=n+3;
    end;
...
Оформляй код с отступами, и будет намного легче его читать.
Ответить с цитированием
  #3  
Старый 24.12.2009, 23:57
malekskv malekskv вне форума
Прохожий
 
Регистрация: 13.11.2009
Сообщения: 44
Репутация: 14
По умолчанию

Код:
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  
Старый 25.12.2009, 00:04
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Куда уж проще)
Ответить с цитированием
  #5  
Старый 25.12.2009, 00:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Asinkrit
Куда уж проще)

Конечно, можно проще.
Собственно, если не ошибаюсь, ты грузишь некоторый список строк, потом просто выводишь в лабел случайную строку с 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  
Старый 25.12.2009, 01:41
malekskv malekskv вне форума
Прохожий
 
Регистрация: 13.11.2009
Сообщения: 44
Репутация: 14
По умолчанию

Помогите еще кое-чем.
Нужно в массив a:array[1..10] присвоить числа рандомно от 1 до 10 и что бы елементы масивва не повторялись.. как такое сделать? )
Ответить с цитированием
  #7  
Старый 25.12.2009, 02:06
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter