Wielokrotne wyświetlanie wyniku w polu edycyjnym

Wielokrotne wyświetlanie wyniku w polu edycyjnym
NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 9
0

Cześć i czołem :)
Uczę się Pascala i napotkałem problem, którego nie mogę rozwikłać od dłuższego czasu.
Chciałbym żeby mój program podawał wynik mnożenia w polu TEdit.
W 50% przypadków ma być losowy, a w pozostałej części prawidłowy. Zanim jednak to nastąpi chciałbym, aby w polu wyniku 30 razy wyświetliła się losowa liczba.
Efekt losowości udało mi się uzyskać poprzez funkcje Randomize;
Mój problem polega na tym, że nie wiem jak przekonać program by wyświetlił 30 razy losowy wynik, a nie tylko ten ostateczny :) w tym momencie dostaje tylko odpowiedź końcową.
Będę bardzo wdzięczny za wskazówki! :)
Pracuje na Lazarusie.
Wklejam kod do podglądu:

Kopiuj
var liczba2 : integer ;
var wynik : integer ;
var losowosc : integer ;
var szansa : integer ;
  var petla : integer ;
begin
    Randomize;
    petla := 0;
    liczba1 := StrToInt(Edit1.text);
    liczba2 := StrToInt(Edit2.Text);
    szansa := random(2);
    losowosc := random(2000);
    wynik :=  liczba1 * liczba2;


    if (szansa =1) then
        begin
         for petla:=0 to 30 do               {Po kliknięciu przycisku chcialbym 30 razy zobaczyć losowy wynik w polu edit3}
            begin
            edit3.text := IntToStr(losowosc) ;
            end
        end
        else
        begin
        edit3.text := IntToStr(wynik);
        end;

end;
              
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
2

Nie wiem czy o to chodzi

Kopiuj
	     for petla:=0 to 29 do //Po kliknięciu przycisku chcialbym 30 razy zobaczyć losowy wynik w polu edit3 <- tu miałeś błąd tak jak miałeś 0 - 30 to 31 razy (może być też 1 to 30)
            begin
			  losowosc := random(2000);  //tu musisz losowac wynik
			  edit3.text := IntToStr(losowosc);
			  Application.ProcessMessages;  //przetwórz kokolejkę komunikatów (potrzebne aby nie zamrażać za długo programu no i aby program min. pokazał wynik)
			  Sleep(1000); //czekaj 1000ms = 1s		  
            end;

albo (bo nie bardzo rozumiem co chcesz) zmień całą instrukcję if na:

Kopiuj
	        for petla:=0 to 29 do //Po kliknięciu przycisku chcialbym 30 razy zobaczyć losowy wynik w polu edit3
            begin
			  losowosc := random(2000); //tu musisz losowac wynik
			  edit3.text := IntToStr(losowosc);
			  Application.ProcessMessages;  //przetwórz kokolejkę komunikatów (potrzebne aby nie zamrażać za długo programu no i aby program min. pokazał wynik)
			  Sleep(1000); //czekaj 1000ms = 1s		  
            end;
			if (szansa = 1) then //50% szans to w końcu pokaże prawidłowy (jak nie to zostanie losowy)
			  edit3.text := IntToStr(wynik);
NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 9
0

Super! Dokładnie o to mi chodziło :) i rozumiem już, gdzie był mój błąd.
Dziękuje!

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
2
Nibek napisał(a):

Mój problem polega na tym, że nie wiem jak przekonać program by wyświetlił 30 razy losowy wynik, a nie tylko ten ostateczny :) w tym momencie dostaje tylko odpowiedź końcową.

Wrzucaj te 30 wyników np. do kontrolki typu TListBox. Pole edycyjne może przechowywać jeden ciąg znaków, więc aby wyświetlić wszystkie wylosowane liczby, trzeba je dodawać na koniec obecnego ciągu.

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 9
0

@furious programming: Dzięki za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.