Wypisanie wyniku funkcji.

0

Okay, to muszę zrobić program okienkowy w Delphi. Ogólnie to chodzi o to, aby pokazywał liczby doskonałe z pewnego podanego przedziału. No i jako program konsolowy to zrobiłem, ale z okienkowym mam problem, bo nie wiem jak zrobić. Tutaj jest kod: http://pastebin.com/XFx8kvt5

Bo ja chcę zrobić tak żeby można było wpisać krańce przedziału w pola TEdit i potem po kliknięciu przycisku wykonało funkcję i wypisało wynik. ?. Bo np. InttoStr nie działa na funkcjach i sobie myślałem żeby zmienić tą funkcję żeby sama nie wypisywałaby tych liczb, ale nie mam pomysłu jak to zrobić i też nie wiem czy w ogóle Tlabel jest dobre do pokazania końcowego wyniku. Co robić?

0

Wykorzystaj TMemo.

Poza tym tego nie rozumiem:

for krok := A to B do
begin
Label2.Caption := InttoStr(funkcja(A));
A := A + 1;
end;

Dlaczego IntToStr(Funkcja(A)) i A := A+1; zamiast IntToStr(Funkcja(Krok))?

Oraz to: x/2 - to jest operator dzielenia liczb zmiennoprzecinkowych, a nie całkowitych.

0
Label2.Caption := InttoStr(funkcja(A));

mozesz sprobowac

Label2.Caption := Label2.Caption + #13#10 + IntToStr(Funkcja(a));
0
Patryk27 napisał(a):

Dlaczego IntToStr(Funkcja(A)) i A := A+1; zamiast IntToStr(Funkcja(Krok))?
.

W sumie to nie wiem, ale na to samo wyszło, nie?

Ogólnie mam taki problem, że po kliknięciu przycisku wyskakuje mi w TMemo losowa liczba i błąd: I/O Error 105.

mca64 napisał(a):

mozesz sprobowac

Label2.Caption := Label2.Caption + #13#10 + IntToStr(Funkcja(a));

Tutaj jakby działa, bo wypisuje kilka wyników(losowych, ale nadal).

Żeby komenda IntToStr zadziałała musiałem zmienić tą procedurę na funkcję i może dlatego zwraca jakieś dziwne wyniki, ale nie wiem.

0

Przede wszystkim język podajemy w tagach, a nie dodatkowo w temacie wątku. Kolejna rzecz, powodzenia z uzyskaniem działania Writeln w aplikacji bez konsoli. Najpewniej skończy się wyjątkiem.

Poza tym nie dziwota, że nie działa IntToStr(...), skoro funkcja o nazwie funkcja, funkcją w Twoim kodzie nie jest. Bo deklarujesz ją jako procedurę. Także ogarnij najpierw kurs z podstawami, może być kompemdium na 4p, dopiero wtedy bierz się za programowanie.

0

Przecież ten temat jest w dziale Newbie? I przecież właśnie napisałem, że zmieniłem tą procedurę na funkcję, to tych zarzutów też nie rozumiem. Kod z linka w pierwszym poście jest trochę nieaktualny.

0

po kliknięciu przycisku wyskakuje mi w TMemo losowa liczba i błąd: I/O Error 105.

Wrzuć aktualny kod.
Choć zgaduję, że masz w nim wciąż Writeln, którego nie może być w aplikacji okienkowej (chyba że dodasz {$APPTYPE CONSOLE}, ale nie do tego dążymy).

0

http://pastebin.com/eLn0z4tx

Ogólnie to mi się prawie udało. Wypisuje liczby ok, ale między nimi pojawiają się losowe liczby, czyli np. Dla [1;6] mam:

16788492
16994708
16935708
16964524
16634492
6

Ma ktoś jakiś pomysł?

0

Masz funkcję, lecz nie zwracasz z niej wyniku.

0

Tak, tak, naprawiłem to. Ale pojawia się problem, że wypisuje mi wszystko. Mam taki kod w pętli: if(x = a) then result := x; . Liczby, które są dobre dobrze wypisuje, ale też wypisuje liczby losowe, bo nie wie co zrobić w przypadku kiedy x =! a. Wypisuje wszystko dla Funkcja(1), funkcja(2) itd.

1

Formatuj kod. Jeśli nie umiesz sam to używaj olesio.eu/jcf oraz czytaj ostrzeżenie kompilatora. Twoja funkcja nie zawsze ma zwracany rezultat. Także gdy nie zajdzie warunek po pętli while do, funkcja zwraca losowe "smieci". Przeczytał byś jakieś podstawy to byś to ogarniał.

0

Wystarczy dodać na samym początku tej funkcji wpisanie do Result wartości domyślnej, dlatego że późniejsze przypisania do tej ukrytej zmiennej wywoływane są po warunkach;

A jeżeli nie mozęsz ustalić wartości domyślnej, to znaczy że algorytm jest do bani i trzeba go poprawić.

0

Ja wiem, że zwraca losowe śmieci, ale nie wiem co zrobić, żeby nic nie pokazywało. Bo jak Ty mówisz to będzie zwracało wartość, którą ma domyślnie result (w przypadku złych liczb). Anyway, dziękuję za pomoc. Będę jakoś inaczej próbował, bez funkcji, jeżeli tak się nie da.

0

Jak to co masz zrobić? Napisaliśmy Tobie. Zwracać zawsze jakiś rezultat funkcji. I nikt nie napisał, że czegoś się tu nie da zrobić. Jeżeli się używa TBrain to wszystko da się zrobić :-)

0

Najmniejszą liczbą doskonałą jest 6, więc jeśli funkcja ma sprawdzać czy podana liczba jest doskonała, to zwracaj np. -1 w przypadku, gdy nie jest; Następnie przed jakimikolwiek kolejnymi operacjami sprawdź rezultat tej funkcji i jeśli wynosi -1 to nic z nią nie rób, a jeśli posiada inną wartość, to znaczy że liczba jest doskonała i rób z nią coś dalej;

Ewentualnie zrób sobie funkcję, która przyjmuje zmienną liczbową przez referencję w parametrze, a zwraca wartość logiczną - True jeśli liczba jest doskonała, albo False jeżeli nie jest;

Poza tym Ty obecnie nie masz zbytnio możliwości sprawdzenia rezultatu Twojej funkcji, bo jej rezultat pakujesz od razu do funkcji IntToStr.

0
olesio napisał(a):

Jak to co masz zrobić? Napisaliśmy Tobie. Zwracać zawsze jakiś rezultat funkcji. I nikt nie napisał, że czegoś się tu nie da zrobić. Jeżeli się używa TBrain to wszystko da się zrobić :-)

O lol, Ty chyba naprawdę nie czytasz postów, na które odpowiadasz albo czytasz je w połowie. Przecież napisałem, że nie chodzi o to, aby zwracało zawsze jakąś wartość, tylko tą wartość, o która mi chodzi, ale już przecież to napisałem w poprzednim poście. Temat może być zamknięty, bo problem rozwiązany, ale w sumie to i tak tego nie przeczytasz. To ja idę i bardzo dziękuję Tobie i innym za pomoc.

0

Przecież napisałem, że nie chodzi o to, aby zwracało zawsze jakąś wartość, tylko tą wartość, o która mi chodzi [...]

No to zrezygnuj po pierwsze ze strzelania fochów bo to nie przedszkole, a po drugie z używania do tego celu funkcji; Albo używaj sobie funkcji, ale jej rezultat najpierw sprawdź, a dopiero jeśli zawiera konkretną wartość to coś z nią rób;

Upierasz się w kółko że nie chcesz zawsze zwracać wartości i przez to właśnie kod nie będzie działał prawidłowo, bo funkcja sama z siebie zwróci śmieci; Więc najpierw zastanów się nad tym kodem, a dopiero później cokolwiek pisz; Masz kilka różnych sposobów na obsługę takiej funkcji, więc wybierz sobie jedną z tych działających prawidłowo.

0

;) Chyba bardzo niewyraźnie piszę albo niezrozumiale, bo naprawdę nie było tutaj żadnego strzelania fochów. Poprzedni kolega nie przeczytał moich postów i wyszło jakieś nieporozumienie. Wiem, że ta funkcja w takiej postaci nie będzie działała tak jak ja chcę. Ale to już jest wszystko zrobione, naprawione i nieaktualne. Jeszcze raz, dziękuję teraz Tobie i poprzedniemu koledze.

0

Wiem, że ta funkcja w takiej postaci nie będzie działała tak jak ja chcę.

Nie tylko ta, ale i każda, w której ustawianie zmiennej Result będzie opcjonalne; Pamiętaj o tym, że wartość tej zmiennej zawsze musisz ustawiać, aby wiadome było co się dzieje i dlaczego ewentualnie kod nie spełnia oczekiwań;

Jeżeli problem uważasz za rozwiązany to zakończ wątek, aby już nie przyciągał użytkowników.

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