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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2008, 17:42   #1
FAiver
Пользователь
 
Аватар для FAiver
 
Регистрация: 13.07.2007
Сообщений: 60
Печаль Помогите разобратся (генератор примеров)

вобщем нужно сделать генератор примеров но генерировать он должен по определённым правилам:
Q:=T или Q+T
T:= M или T/M
M:=любое число random(100)
начальные данные :=Q

я уже запарился с этим примером... уже крыша едет не пойму где я допускаю ошибку... т.к. пример генерится не правильно! вот код:
Код:
var s,s1,s2:string;
    ss:string;
    num,i:byte;

{$R *.dfm}
procedure q;
begin
randomize;
if length(s)>5 then num:=1 else num:=random(1);
if num=1 then s1:=s1+'T' else s1:=s1+'Q+T';
end;

procedure t;
begin
randomize;
if length(s)>5 then num:=1 else num:=random(1);
if num=1 then s1:=s1+'M' else s1:=s1+'T/M';
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
randomize;
s:='Q';
repeat
for i:=0 to length(s)-1 do
begin
ss:=copy(s,i,1);
s1:=copy(s,0,i-1);
if Length(s)=1 then s2:='' else s2:=copy(s,i+1,length(s)-i+1);
showmessage('s-'+s+#13+'s1-'+s1+#13+'s2-'+s2+#13+'ss-'+ss+#13+IntToStr(i));
if ss='Q' then q;
if ss='T' then t;
if ss='+' then s1:=s1+'+';
if ss='/' then s1:=s1+'/';
s:=s1+s2;

end;
until i=length(s);
Edit1.Text:=s;
end;
ПОМОГИТЕ ПОЖАЛУЙСТО!!! а то крыша уже уехала
FAiver вне форума Ответить с цитированием
Старый 14.03.2008, 18:07   #2
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

Каким критериям должен удовлетворять генератор примеров?
andrey4623 вне форума Ответить с цитированием
Старый 14.03.2008, 18:28   #3
FAiver
Пользователь
 
Аватар для FAiver
 
Регистрация: 13.07.2007
Сообщений: 60
По умолчанию

я же написал первоначальное условие это пример равен Q
далее идёт два правила
Q:=T или Q+T
T:= M или T/M
M:=random(100)
в конце дложны остаться только цифры варианты должны выбиратся рандомно... но само собой в таком варианте есть возможность что из цикла не когда не выйдеш то я ограничиваю цикл длиной примера т.е. у меня это 5 в принципе можно поставить и больше.
т.е. логика решения такая:
Q:=>Q+T=>T+T/M=>M+M/48=>89+74/48
в итоге должна получится текстовая строка приблезительно такая 89+74/48 ну или дальше можно преобразовывать T в T/M

Последний раз редактировалось FAiver; 14.03.2008 в 18:42.
FAiver вне форума Ответить с цитированием
Старый 14.03.2008, 18:49   #4
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

не знаю
andrey4623 вне форума Ответить с цитированием
Старый 14.03.2008, 18:51   #5
FAiver
Пользователь
 
Аватар для FAiver
 
Регистрация: 13.07.2007
Сообщений: 60
По умолчанию

проблема собственно в том что у меня не получается правильно скопировать вторую половину строки т.е. неполучается отпарсить строку т.е.
строка =1-я часть строки проверяемый символ 2-я часть строки
вот со второй у меня проблема не получается правильно её определить!
FAiver вне форума Ответить с цитированием
Старый 15.03.2008, 00:09   #6
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Немного странный код

Код:
if length(s)>5 then num:=1 else num:=random(1);
random(1) всегда равен нулю, т.е. никакой "случайности" тут нет.

Код:
s1:=copy(s,0,i-1);
Т.к. изначально i равно 0, то s1 первые два раза будет пустой (независимо от длины строки s), это так и должно быть? Не говоря уж о том, что в данном примере цикл вообще выполнится только 1 раз, т.е. в условии if Length(s)=1 then s2:='' else s2:=copy(s,i+1,length(s)-i+1); s2 всегда будет пустой.

Код:
until i=length(s);
Вообще-то значение переменной i после цикла неопределено - никак не гарантируется, что оно будет равняться последнему значению в цикле for, поэтому использовать его в сравнении нельзя.
Jeni вне форума Ответить с цитированием
Старый 15.03.2008, 11:51   #7
FAiver
Пользователь
 
Аватар для FAiver
 
Регистрация: 13.07.2007
Сообщений: 60
По умолчанию

БОЛЬШОЕ всем спасибо разабрался!
если кому интересно то вот код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var s,s1,s2,ss:shortstring;
    num,i:byte;

{$R *.dfm}
procedure q;
begin
randomize;
if length(s)>5 then num:=1 else num:=random(2);
if num=1 then s1:=s1+'T' else s1:=s1+'Q+T';
end;

procedure t;
begin
randomize;
if length(s)>5 then num:=1 else num:=random(2);
if num=1 then s1:=s1+'M' else s1:=s1+'T/M';
end;

procedure TForm1.Button1Click(Sender: TObject);
var r:byte;
begin          //работа с выражением
randomize;
s:='Q';
repeat
for i:=1 to length(s) do
begin
ss:=copy(s,i,1);
s1:=copy(s,0,i-1);
s2:=copy(s,i+1,length(s));
//showmessage('s-'+s+#13+'s1-'+s1+#13+'s2-'+s2+#13+'ss-'+ss+#13+IntToStr(i));
if ss='Q' then q;
if ss='T' then t;
if ss='+' then s1:=s1+'+';
if ss='/' then s1:=s1+'/';
if ss='M' then s1:=s1+IntToStr(random(100)+1);
if (ss='0')or(ss='1')or(ss='2')or(ss='3')or(ss='4')or(ss='5')or(ss='6')or(ss='7')or(ss='8')or(ss='9')then s1:=s1+ss;
s:=s1+s2;
end;
r:=0;
for i:=1 to Length(s) do      // проверка полученного выражения
begin
ss:=copy(s,i,1);
if (ss='Q')or(ss='T')or(ss='M')then r:=r+1;
end;
until r=0;
Edit1.Text:=s;
end;

end.
FAiver вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобратся с ListView Icor Win Api 3 01.05.2009 16:24
Помогите разобратся с функциями на С++ ANTI Общие вопросы C/C++ 1 04.03.2008 17:12
Помогите разобратся с макаронами Стася Microsoft Office Excel 8 15.10.2007 15:20
помогите чайнику разобратся CD ромом ruslan21 Win Api 7 21.06.2007 14:07
Помогите разобратся!!! rex2003 Свободное общение 1 18.02.2007 20:37