Skocz do zawartości


Zdjęcie

[delphi]Co dopisać?


  • Zamknięty Temat jest zamknięty
1 odpowiedź w tym temacie

#1 MARCIN ADEPT

MARCIN ADEPT

    Początkujący

  • 20 postów

Napisano 27 03 2008 - 09:32

Co mam i gdzie mam dopisać w następującym programie tak aby za każdym uruchomieniem pytania były ułożone w różnej kolejności?

Kod programu w załączniku

Załączone pliki

  • Załączony plik  Milion.txt   17,71 KB   257 Ilość pobrań

  • 0

#2 Aman

Aman

    Windows 98/XP/Vista/Ubuntu

  • 955 postów

Napisano 27 03 2008 - 17:09

W załączniku dałem nowy kod programu gdze pytana są losowane. Pytania są w różnej kolejności ale sam napewno zobaczysz jakie występują tam błędy w działaniu. Nie miałem czasu na dokłdanie testowanie. Samo rozwiązanie po ogónym zapoznaniu sie z kodem zajęło mi praktycznie 2-3 minuty. Program jest dość ciekawy, skomplikowany i widać że znasz składnie pascala ale musze to powiedzieć nie potrafisz jeszcze pisać zaawansowanych programów. Nie stosujesz własnych procedur i funkcji z parametrami, a własnie w tym programie bardzo by sie one przydały, uzywaj także funkcji CASE. Potem przy małym edytowaniu kody jak np. losowe pytania mamy poważne problemy. Kod jest bardzo chaotyczny rozciagnięty na dużo linii kodu, niektóre wcięcia są złe zrobione.

No ale przejdzmy to tego co ja tam zmieniłem. Na początek dodałem troche zmiennych:
- pytanie : integer (to jest nasz numer losowanego pytania)
- tab: array[1..12] of byte; (tablica pomocnicza, pokazuje nam jake pytania zostały juz wylosowane tak by sie nie powtarzały )
- flaga : byte; (zmienna pomocnicza, ustawiana jest w petli na 1 gdy wylosowane jest pytanie, które nie było uzyte )

Przed rozpoczęciem głowej pętli repeat ustawamy całą tablicę na 0
tab[1] := 0;
tab[2] := 0;
tab[3] := 0;
tab[4] := 0;
tab[5] := 0;
tab[6] := 0;
tab[7] := 0;
tab[8] := 0;
tab[9] := 0;
tab[10] := 0;
tab[11] := 0;
tab[12] := 0;

Na początku petłi wpisujemy:
pytanie := random(11+1); (tutaj losowany jest numer pytania)
flaga := 0;

Teraz czas na edycje pytania to co jest pogrubione zostało dodane

if (pytanie=1) AND (tab[pytanie] = 0) then
begin
writeln;
flaga := 1;
poprawna:='d';
Writeln('pytanie: najszybsze zwierze?');
writeln('a-ľ˘?w');
writeln('b-s?oä');
writeln('c-zebra');
writeln('d-gepard');
writeln('Twoja odpowiedz to');
readln(odpowiedz);
end;

I tak dla każdego pytania.

I teraz tylko na końcy przed wykonaniem sie instrukcji ktore := ktore + 1; wpisujemy:

tab[pytanie] := 1; (ustawaimy numer pytania w tablicy na 1 by sie nie powtrzało)
if flaga = 0 then continue; (gdy flaga = 0 to znaczy ze pytanie w petli nie zostal wylosowanw siec petla sie powtarza ale ciągle jest ten sam numer pytania)

To by było na tyle. Program nie działa tak dokładnie jak powinien (czasami może sie bojacis błąd i program sie wyłączy) ale nie chce mi sie szukać co jeszcze należało by tak zmienic bo cięzko czyta sie twój kod.

Załączone pliki

  • Załączony plik  Milion.txt   18,68 KB   259 Ilość pobrań

  • 0

Zobacz więcej tematów z tagiem: Delphi



Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych