Zapętlenie programu wykonującego obliczenia

Odpowiedz Nowy wątek
2018-12-10 20:42
0

Witam,
chciał bym zapętlić program, ale żeby wykonał się tyle razy ile zostanie wciśnięty przycisk Button. Ma to wyglądać tak, że wyświetla się formularz z paroma Editami i po kliknięciu przycisku param sczytuje zmienne(typu int), wpisuje je do tablicy, następnie mamy możliwość zmiany zmiennych na inne i po kolejnym kliknięciu w przycisk program znowu sczyta zmienne i dopisze(doda) je do już istniejących w tablicy. Program ma się wykonać 10 i wszystko mam, cały program tylko nie wiem jak go zapętlić.
Proszę o pomoc.

edytowany 1x, ostatnio: furious programming, 2018-12-11 18:18

Pozostało 580 znaków

2018-12-10 20:58
1

Zadeklaruj sobie dodatkową zmienną liczbową z indeksem iteracji i inkrementuj ją w pętli po każdym pobraniu danych od użytkownika (czyli po otwarciu okna dialogowego, wpisaniu danych i zaakceptowaniu).


Pozostało 580 znaków

2018-12-10 21:11
0

No tak, tak zrobiłem i program po kliknięciu przycisku wykonuje się 10 razy z rzędu z tymi samymi zmiennymi

int i:=0;
for m:= 1 to 10 do
       begin 

       [...]

       i++;
end;
edytowany 2x, ostatnio: damianmajor987, 2018-12-10 21:13

Pozostało 580 znaków

2018-12-10 21:34
1

A okno z tymi polami edycyjnymi ma być cały czas widoczne?


Pozostało 580 znaków

2018-12-10 21:40
1

https://4programmers.net/Forum/1546077 - @damianmajor987 czemu duplikujesz wątki i pytasz o coś, co było omówione w Twoim poprzednim wpisie?


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 1x, ostatnio: cerrato, 2018-12-10 21:41

Pozostało 580 znaków

2018-12-10 21:53
0

@cerrato no tak tylko tu chodzi mi o to czy idzie to zrobić jednym przyciskiem, a nie pięcioma czy dziesięcioma. Bo jak nie to zostaje przy tamtym sposobie.

@furious programming tak, żeby dało się zmieniać wartości w editach

Pozostało 580 znaków

2018-12-10 22:15
1

wydawało mi się, że w tamtym poście napisałem też, jak można to rozwiązać jednym przyciskiem. Zresztą temat był w toku, a Ty zamiast napisać coś dalej w odpowiedzi na to, co ja napisałem, po paru dniach założyłeś nowy wątek....


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say

Pozostało 580 znaków

2018-12-10 22:45
0

@cerrato o to kod i ss działania programu który po prostu mnoży wartości razy 10, a powinien dodawać 10 różnych wartości (zdefiniowane przez użytkownika)

unit unit6;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit10: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;
var
  Tablica : array[0..9] of integer;
var a, b, c, d, e, f, g, h, i, j :integer;

implementation

{$R *.lfm}

procedure TForm1.Button1Click(Sender: TObject);
           var n,o,s,r,p,w,u,x,y,z:real;
           var m : integer;
begin
     a:=0;b:=0;c:=0;d:=0;e:=0;f:=0;g:=0;h:=0;i:=0;j:=0;
     Tablica[0] := a;
     Tablica[1] := b;
     Tablica[2] := c;
     Tablica[3] := d;
     Tablica[4] := e;
     Tablica[5] := f;
     Tablica[6] := g;
     Tablica[7] := h;
     Tablica[8] := i;
     Tablica[9] := j;
     n:=StrToFloat(Edit1.text);
     o:=StrToFloat(Edit2.text);
     s:=StrToFloat(Edit3.text);
     r:=StrToFloat(Edit4.text);
     p:=StrToFloat(Edit5.text);
     w:=StrToFloat(Edit6.text);
     u:=StrToFloat(Edit7.text);
     x:=StrToFloat(Edit8.text);
     y:=StrToFloat(Edit9.text);
     z:=StrToFloat(Edit10.text);
     for m:= 1 to 10 do
       begin
       if n = 1 then a:=a+25;
       if n = 2 then a:=a+18;
       if n = 3 then a:=a+15;
       if n = 4 then a:=a+12;
       if n = 5 then a:=a+10;
       if n = 6 then a:=a+8;
       if n = 7 then a:=a+6;
       if n = 8 then a:=a+4;
       if n = 9 then a:=a+2;
       if n = 10 then a:=a+1;

       if o = 1 then b:=b+25;
       if o = 2 then b:=b+18;
       if o = 3 then b:=b+15;
       if o = 4 then b:=b+12;
       if o = 5 then b:=b+10;
       if o = 6 then b:=b+8;
       if o = 7 then b:=b+6;
       if o = 8 then b:=b+4;
       if o = 9 then b:=b+2;
       if o = 10 then b:=b+1;

       if s = 1 then c:=c+25;
       if s = 2 then c:=c+18;
       if s = 3 then c:=c+15;
       if s = 4 then c:=c+12;
       if s = 5 then c:=c+10;
       if s = 6 then c:=c+8;
       if s = 7 then c:=c+6;
       if s = 8 then c:=c+4;
       if s = 9 then c:=c+2;
       if s = 10 then c:=c+1;

       if r = 1 then d:=d+25;
       if r = 2 then d:=d+18;
       if r = 3 then d:=d+15;
       if r = 4 then d:=d+12;
       if r = 5 then d:=d+10;
       if r = 6 then d:=d+8;
       if r = 7 then d:=d+6;
       if r = 8 then d:=d+4;
       if r = 9 then d:=d+2;
       if r = 10 then d:=d+1;

       if p = 1 then e:=e+25;
       if p = 2 then e:=e+18;
       if p = 3 then e:=e+15;
       if p = 4 then e:=e+12;
       if p = 5 then e:=e+10;
       if p = 6 then e:=e+8;
       if p = 7 then e:=e+6;
       if p = 8 then e:=e+4;
       if p = 9 then e:=e+2;
       if p = 10 then e:=e+1;

       if w = 1 then f:=f+25;
       if w = 2 then f:=f+18;
       if w = 3 then f:=f+15;
       if w = 4 then f:=f+12;
       if w = 5 then f:=f+10;
       if w = 6 then f:=f+8;
       if w = 7 then f:=f+6;
       if w = 8 then f:=f+4;
       if w = 9 then f:=f+2;
       if w = 10 then f:=f+1;

       if u = 1 then g:=g+25;
       if u = 2 then g:=g+18;
       if u = 3 then g:=g+15;
       if u = 4 then g:=g+12;
       if u = 5 then g:=g+10;
       if u = 6 then g:=g+8;
       if u = 7 then g:=g+6;
       if u = 8 then g:=g+4;
       if u = 9 then g:=g+2;
       if u = 10 then g:=g+1;

       if x = 1 then h:=h+25;
       if x = 2 then h:=h+18;
       if x = 3 then h:=h+15;
       if x = 4 then h:=h+12;
       if x = 5 then h:=h+10;
       if x = 6 then h:=h+8;
       if x = 7 then h:=h+6;
       if x = 8 then h:=h+4;
       if x = 9 then h:=h+2;
       if x = 10 then h:=h+1;

       if y = 1 then i:=i+25;
       if y = 2 then i:=i+18;
       if y = 3 then i:=i+15;
       if y = 4 then i:=i+12;
       if y = 5 then i:=i+10;
       if y = 6 then i:=i+8;
       if y = 7 then i:=i+6;
       if y = 8 then i:=i+4;
       if y = 9 then i:=i+2;
       if y = 10 then i:=i+1;

       if z = 1 then j:=j+25;
       if z = 2 then j:=j+18;
       if z = 3 then j:=j+15;
       if z = 4 then j:=j+12;
       if z = 5 then j:=j+10;
       if z = 6 then j:=j+8;
       if z = 7 then j:=j+6;
       if z = 8 then j:=j+4;
       if z = 9 then j:=j+2;
       if z = 10 then j:=j+1;

       end;
    ShowMessage('Ferrari   '+inttostr(a)+#13#10+'Renault   '+inttostr(b)+#13#10+'McLaren   '+inttostr(c)+#13#10+'RedBull   '+inttostr(d)+#13#10+'Alfa Romeo   '+inttostr(e)+#13#10+'Honda   '+inttostr(f)+#13#10+'Mercedes   '+inttostr(g)+#13#10+'Williams Martini   '+inttostr(h)+#13#10+'Haas   '+inttostr(i)+#13#10+'Sahara Force India   '+inttostr(j)+#13#10);

end;

end.

P.S. wiem, że kod zostawia wiele do życzenia, ale na razie nie umiem inaczej, więc proszę o wyrozumiałość

edytowany 1x, ostatnio: damianmajor987, 2018-12-10 22:46

Pozostało 580 znaków

2018-12-10 22:51
2

Muszę przyznać, że masz rację - ten kod dość mocno odbiega od tzw. "dobrych standardów".
Pytanie - czy chcesz się pobawić (z nasza pomocą oczywiście) w napisanie tego tak, żeby było porządnie, czytelnie i 10x krócej, czy masz to gdzieś, nie chcesz poprawiać, a jedynie zrobić tak, żeby działało?

Zastanów się ze spokojem, ja idę spać, do tematu wrócimy jutro (chyba, że w międzyczasie ktoś inny przejmie pałeczkę ;))

I jak możesz to spakuj cały projekt do jakiegoś archiwum ZIP i prześlij jako załącznik do posta. W ten sposób będę mógł to odpalić u siebie bez konieczności tworzenia formatki z komponentami, a do tego na 100% "numerki" Edit'ów i Labeli będą u mnie i u Ciebie takie same ;)


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 1x, ostatnio: furious programming, 2018-12-11 00:12

Pozostało 580 znaków

2018-12-10 23:02
0

Tak bardzo z wielką chęcią napiszę go 10x krócej po prostu wszelkie moje próby skrócenia kodu kończyły się masą błędów dlatego zrobiłem to bardzo łopatologicznie.
P.S. projekt dołączam w załączniku

Pozostało 580 znaków

2018-12-10 23:25
3

unit unit6;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit10: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

var
  Tablica : array[0..9] of integer;
  licznik: Integer;
  sledit: TStringList;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, wartosc: Integer;
  tekst: String;
begin
  if licznik<11 then   //jeżeli jest mniej niż 11 przebiegów
  begin
    for i:=0 to sledit.Count-1 do                                  //dla każdego edita - oczywiście zadziała bez błędu jeżeli ilość editów będzie zgodna z rozmiarem tablicy
    begin
      if TryStrToInt(TEdit(sledit.Objects[i]).Text, wartosc) then  //jeżeli zawartość edita jest liczbą
      Tablica[i]:=Tablica[i]+wartosc;                              //zwiększ odpowienią wartość w tablicy
    end;
    if licznik=10 then                                             //jeżeli ostatni przebieg
    begin
      tekst:='';
      for i:=0 to sledit.Count-1 do
      tekst:=tekst+sledit[i]+': '+IntToStr(Tablica[i])+#13#10;
      ShowMessage(tekst);                                          //to wyświetl sumę
    end;
    Button1.Caption:='Przebieg '+IntToStr(licznik);
    Inc(licznik);   //zwiększ licznik
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  sledit:=TStringList.Create;   //lista editów z odpowiadającym im tekstem
  sledit.AddObject('Ferrari', Edit1);
  sledit.AddObject('Renault', Edit2);
  sledit.AddObject('McLaren', Edit3);
  sledit.AddObject('RedBull', Edit4);
  sledit.AddObject('Alfa Romeo', Edit5);
  sledit.AddObject('Honda', Edit6);
  sledit.AddObject('Mercedes', Edit7);
  sledit.AddObject('Williams Martini', Edit8);
  sledit.AddObject('Haas', Edit9);
  sledit.AddObject('Sahara Force India', Edit10);
  for i:=0 to High(Tablica) do
  Tablica[i]:=0;
  licznik:=1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  sledit.Free;
end;

end.

pozdrawiam
paweld

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0