Ezt a feladatot kaptuk suliban, tud segíteni vki?
Részben megoldottam a feladatot,de aztán megállt a tudomány.Az info tanár kitalálta,hogy írjunk egy olyan programot,hogyha egy textboxba kiadjuk ezt az utasítást,hogy "for valami = x to y do",akkor listázza ki egy valódi for utasításban megadottak értékeit. Sajnos csak minden 1 helyi értékkel működik és azt kellene megoldani,hogyha valaki ezt a parancsot adja ki, hogy
for kutyagumi=65342 to 896322, vagy ha ezt hogy
for z= 1 to 332 do
akkor is is működjön és listázza ki az értékeket egy másik szövegdobozba.Annyi kevés fogalmam van,hogy valami pozicionáló és beszúró függvényekkel lehet,hogy meg lehetne oldani,bár ebben sem vagyok biztos,de azokhoz viszont végképp nem konyítok semmit.Nem is nagyon értem ezt,hogy minek kér ilyen nehéz feladatot tőlünk.Elég makacs és goromba is ez a tanár sajnos. Sok mindent el sem mond az órán és olyan feladatokat ad fel,amihez még nekünk kell hozzátanulnunk néha.
Eddig jutottam,segítsetek kiegészíteni,mert időm az nincs sok rá,hétfőre le kellene adnom. Ha nagyon durva a feladat megoldása és a kérés,akkor hagyjátok inkább a fenébe,max kapok rá egy 2-est,vagy karót.Vitatkozni nincs kedvem és időm sincs rá. Csupán egy gyors segítséget kérek,ha nem túl nagy kérés.
Előre is köszi!
most ügy működik legalább, hogyha beírod,hogy
for u=0 to 9 do akkor kiírja az értékeket,vagy ha
for i=2 to 7 do akkor is, de sajna több helyi értékkel nem szuperál.
procedure TForm1.Button1Click(Sender: TObject);
const egyenlo='=';
{const to2='to';}
{const do2='do';}
var s,s1,s2,s3:string;
var x,y,i:integer;
var valtozo:string;
begin
x:=strtoint(memo1.text[7]);
y:=strtoint(memo1.text[12]);
valtozo:=memo1.Text[5];
s1:='to';
s:=memo1.seltext;
insert(s1,s,memo1.SelStart);
s3:='do';
s2:=memo1.seltext;
insert(s3,s2,memo1.SelStart);
if memo1.text='for '+valtozo+egyenlo+inttostr(x)+' '+s+' '+inttostr(y)+ ' '+s2 then begin
for i:=x to y do begin memo2.lines.Add(inttostr(i));
end;
end;
end;
end.
Ez így zsír legalább is D7-nél:
Javítva az eredeti képen, ez a sor,mert erre hibát dobott:
"command:=copy(command,pos(' ',command)+1);"
*Igazmodó helyes megoldása:*
procedure TForm1.Button1Click(Sender: TObject);
var
command:string;
i,si,ei:word;
begin
command:=memo1.text;
command:=copy(command,pos('=',command)+1,length(command));
si:=strtoint(copy(command,1,pos(' ',command)-1));
command:=copy(command,pos(' ',command)+1,length(command));
command:=copy(command,pos(' ',command)+1,length(command));
ei:=Strtoint(Copy(command,1,pos(' ',command)-1));
for i:=si to ei do begin memo2.Lines.Add(inttostr(i));
end;
end;
Zsírok vagytok,mivel tartozom?
és végül SimkoL teljes megoldása:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type myVar = record
env: string;
first, last: string;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
implementation
{$R *.dfm}
function Enviroment(s: string): myVar;
begin
{kidobjuk a szóközöket}
s := StringReplace(s, ' ', '', [rfReplaceAll]);
{megkeressük a változó nevét}
Result.env := Copy(s,4, Pos('=', s) - 4);
{megkeressük a kezdo értéket}
Result.first := Copy(s, (Pos('=', s) + 1), Pos('to', LowerCase(s)) - Pos('=', s) - 1);
{megkeressük a végzo értéket}
Result.last := Copy(s, Pos('to', LowerCase(s))+2, Pos('do', LowerCase(s)) - Pos('to', LowerCase(s))-2);
{ha nem lenne do akkor is megkeressük a végzo értéket}
if Result.last = '' then
Result.last := Copy(s, Pos('to', LowerCase(s))+2, High(byte));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{Form1.Caption := Enviroment(Edit1.Text).env + ' ' + Enviroment(Edit1.Text).first + ' ' + Enviroment(Edit1.Text).last;}
for i:=strtoint(Enviroment(Edit1.Text).first) to strtoint(Enviroment(Edit1.Text).last) do
form1.Memo1.Lines.Add(inttostr(i));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := 'for i = 1234 to 5678 do';
end;
end.
Talán még ajánlanám figyelmedbe ezt: [link] az 'strtoint' miatt :)
Szépen:
for i := StrToInt(Enviroment(Edit1.Text).first) to StrToInt(Enviroment(Edit1.Text).last) do
Form1.Memo1.Lines.Add(IntToStr(i));
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!