Ĺadny brzuch
Hej, mam zrobic program w Pascalu na zaliczenie i mam taki o to problem:
chodzi o to ze wprowadzam jakies tam przykladowe pytania i odpowiedzi, po czym ma nastapic cos w rodzaju egzaminu - dostaje sie pytania i oczekiwane sa jakies odpowiedzi. osoba egzaminowana podaje liczbe pytan ktore chce otrzymac, ktore sa losowo wybierane z wprowadzonej bazy danych. problem jest: jak zrobic zeby te losowane pytania w ramach jednego egzaminu sie nie powtarzaly?
Bylabym baaardzo wdzieczna za jakiekolwiek wskazowki:-))
Z gory dzieki!
Magda
Moja propozycja:
Każdą liczbę dodawać do tablicy. Później można sprawdzać, czy taka liczba już się nie pojawiła :D
----
m@il: ali88@tlen.pl
GG: 2083160
cytat:Ali240 powiedział:
Każdą liczbę dodawać do tablicy. Później można sprawdzać, czy taka liczba już się nie pojawiłaPytań jest 1500100900, chcemy wylosować 1500100899 - ostatnie pytania będą losowane po kilku minutach może nawet :P
:: Moja propozycja ::
Pytania zapisac w pliku tekstowym i usuwać to, któro się wylosowało :) Następnym razem znowu losujemy z tylu pytań; ile jest linijek w pliku. Po zakończeniu testu, plik ten (tymczasowy) jest usuwany :)
GG 2370024 | Tlen blackmesa | Skype! blackmesa47 | ICQ 343895232
⇒ NIE dla Internet Explorera ⇐
Nowy komputer? NIE daj go sobie popsuć!
Po pierwsze: ograniczenie tablicy w Pascalu do 64kb.
Można np utworzyć:
var i,nr_pytania:word;
jest:array[1..maxpyt]of byte;{maxpyt to ilość pytań w bazie}
{ na wszelki wypadek "zerujemy" tablicę:}
for i:=1 to maxpyt do jest[i]:=0;
{ teraz dokonujemy losowania nr_pytania }
if jest[nr_pytania]=1 then .... { nowe losowanie }
else begin
jest[nr_pytania]:=1;
{oznacza to że tego pytania jeszcze nie było, ale teraz oznaczamy
ze jest przez wstawienie do tablicy "1"
i dalszy ciąg programu}
end;
edeek
dzieki za odpowiedzi!! wlasnie probuje ta ostatnia propozycje wdrozyc, cos innego mi zaczelo nawalac ale mam nadzieje w koncu zadziala:-))
Pozdrawiam!!
pomysl ze sprawdzaniem ,czy pytanie bylo juz wylosowane i jak tak to losowanie jescze raz nie jest za dobry, bo moze doprowadzic do ogromnej liczby zbednych losowan.
Ja mam taka propozycje
var i,k:integer;
nr_pyt:array[1..maxpyt]of integer;{maxpyt to ilość pytań w bazie}
{w tablicy znajduja sie numery pytan
begin
randomize;
for i:=1 to maxpyt do nr_pyt[i]:=i;
for i:=0 to licz_pyt_ktore_masz_wylosowac-1 do
begin
k:=random(maxpyt-i)+1;
rob:=nr_pyt[k];
nr_pyt[k]:=nr_pyt[maxpyt-i];
nr_put[maxtyp-i]:=rob;
end;
Po tej petli, w ktorej wystapi dokladnie tyle losowan ile ma byc pytan
numery pytan beda sie z najdowaly w tablicy od indeksu
[maxpyt - licz_pyt_ktore_masz_wylosowac +1] do [maxtyp]
end;
GG: 4596137
tak ale wszystko bieże w leb jesli zrobi sie przerwe i zakonczy procedure losowan
mozna wtedy sobie losowac od poczatku
ja bym zrobil to na bazie jakiejkolwiek gdzie w jednej kolumnie pytania a w drugiej znacznik czy wystapilo. i + procedurka do wyczyszczenia kolumny 2.
Wtedy egzamin moz etrwac pare dni i pytanie sie nie powtorzy
czyli procedura sprawdza czy dla odszukanego nr pytania w kolumnie pierwszej (petelka od eof do bottom z +1) czy to putanie wystepuje a jesli tak to czy w kolumnie drugiej dla tego samego wiersza jest jakis znacznik np.1 jesli jest to message takie pytanie juz bylo
jesli nie to wstaw jedeen do kolumny drugiej
cytat:antikiusz napisał:
tak ale wszystko bieże w leb jesli zrobi sie przerwe i zakonczy procedure losowan
mozna wtedy sobie losowac od poczatku(...)
Procedura losowania jest wykonana na początku programu i dotyczy tylko numeru pytania, a nie samego pytania. Dopiero później należy wyświetlić (wydrukować) pytania. Przecież numery pytań...
cytat:komando napisał:
Po tej petli, w ktorej wystapi dokladnie tyle losowan ile ma byc pytan
numery pytan beda sie z najdowaly w tablicy od indeksu
[maxpyt - licz_pyt_ktore_masz_wylosowac +1] do [maxtyp]
...są w tablicy. Oczywiście musi to być tablica wielowymiarowa, pytania, ewentualne odpowiedzi do nich, a także ich poprawność.
Podobne procedury losujące stosowane są w grach. Na przykład przy rozdawaniu iluś tam kart z całej talii. Zwróć uwagę, że rozdanie kart następuje na początku gry, a nie w trakcie jej trwania. Uruchom sobie dowolny pasjans lub pokerka i poobserwuj.
Delphi is the BesT
Leszek GG:3633885
cytat:leszek1959 napisał:
Oczywiście musi to być tablica wielowymiarowa
Oczywisnie nie musi:)
GG: 4596137
cytat:komando napisał:
Oczywisnie nie musi:)
Oczywiście, że nie musi, ale powinna być, aby program był czytelny i uniwersalny. Wyobraź sobie, że tablice wielowymiarowe należy traktować jak szufladki w katalogu alfatetycznym biblioteki. Na przykład: pierwsza szuflada - litera A, w niej alfabetycznie autorzy, tytuły książek - też alfabetycznie. :ok:. Podobnie z pytaniami, indeks pytania i jego treść, następnie odpowiedzi i poprawność odpowiedzi (nie musi być jedna poprawna może być więcej) przecież procedura losowania jest wykonana na początku programu i dotyczy tylko numeru pytania, a nie samego pytania. Sortowanie i wyszukiwanie pytania, opiera sie na liczbie (numerze indeksu). Będzie to rodzaj bazy danych lub programu testującego z dowolnej dziedziny wiedzy.
Delphi is the BesT
Leszek GG:3633885
dzieki za rady, baardzo sie przydaly:-)) oddalam program i mam 5tke:)
Pozdrawiam!
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
chodzi o to ze wprowadzam jakies tam przykladowe pytania i odpowiedzi, po czym ma nastapic cos w rodzaju egzaminu - dostaje sie pytania i oczekiwane sa jakies odpowiedzi. osoba egzaminowana podaje liczbe pytan ktore chce otrzymac, ktore sa losowo wybierane z wprowadzonej bazy danych. problem jest: jak zrobic zeby te losowane pytania w ramach jednego egzaminu sie nie powtarzaly?
Bylabym baaardzo wdzieczna za jakiekolwiek wskazowki:-))
Z gory dzieki!
Magda
Moja propozycja:
Każdą liczbę dodawać do tablicy. Później można sprawdzać, czy taka liczba już się nie pojawiła :D
----
m@il: ali88@tlen.pl
GG: 2083160
cytat:Ali240 powiedział:
Każdą liczbę dodawać do tablicy. Później można sprawdzać, czy taka liczba już się nie pojawiłaPytań jest 1500100900, chcemy wylosować 1500100899 - ostatnie pytania będą losowane po kilku minutach może nawet :P
:: Moja propozycja ::
Pytania zapisac w pliku tekstowym i usuwać to, któro się wylosowało :) Następnym razem znowu losujemy z tylu pytań; ile jest linijek w pliku. Po zakończeniu testu, plik ten (tymczasowy) jest usuwany :)
GG 2370024 | Tlen blackmesa | Skype! blackmesa47 | ICQ 343895232
⇒ NIE dla Internet Explorera ⇐
Nowy komputer? NIE daj go sobie popsuć!
Po pierwsze: ograniczenie tablicy w Pascalu do 64kb.
Można np utworzyć:
var i,nr_pytania:word;
jest:array[1..maxpyt]of byte;{maxpyt to ilość pytań w bazie}
{ na wszelki wypadek "zerujemy" tablicę:}
for i:=1 to maxpyt do jest[i]:=0;
{ teraz dokonujemy losowania nr_pytania }
if jest[nr_pytania]=1 then .... { nowe losowanie }
else begin
jest[nr_pytania]:=1;
{oznacza to że tego pytania jeszcze nie było, ale teraz oznaczamy
ze jest przez wstawienie do tablicy "1"
i dalszy ciąg programu}
end;
edeek
dzieki za odpowiedzi!! wlasnie probuje ta ostatnia propozycje wdrozyc, cos innego mi zaczelo nawalac ale mam nadzieje w koncu zadziala:-))
Pozdrawiam!!
pomysl ze sprawdzaniem ,czy pytanie bylo juz wylosowane i jak tak to losowanie jescze raz nie jest za dobry, bo moze doprowadzic do ogromnej liczby zbednych losowan.
Ja mam taka propozycje
var i,k:integer;
nr_pyt:array[1..maxpyt]of integer;{maxpyt to ilość pytań w bazie}
{w tablicy znajduja sie numery pytan
begin
randomize;
for i:=1 to maxpyt do nr_pyt[i]:=i;
for i:=0 to licz_pyt_ktore_masz_wylosowac-1 do
begin
k:=random(maxpyt-i)+1;
rob:=nr_pyt[k];
nr_pyt[k]:=nr_pyt[maxpyt-i];
nr_put[maxtyp-i]:=rob;
end;
Po tej petli, w ktorej wystapi dokladnie tyle losowan ile ma byc pytan
numery pytan beda sie z najdowaly w tablicy od indeksu
[maxpyt - licz_pyt_ktore_masz_wylosowac +1] do [maxtyp]
end;
GG: 4596137
tak ale wszystko bieże w leb jesli zrobi sie przerwe i zakonczy procedure losowan
mozna wtedy sobie losowac od poczatku
ja bym zrobil to na bazie jakiejkolwiek gdzie w jednej kolumnie pytania a w drugiej znacznik czy wystapilo. i + procedurka do wyczyszczenia kolumny 2.
Wtedy egzamin moz etrwac pare dni i pytanie sie nie powtorzy
czyli procedura sprawdza czy dla odszukanego nr pytania w kolumnie pierwszej (petelka od eof do bottom z +1) czy to putanie wystepuje a jesli tak to czy w kolumnie drugiej dla tego samego wiersza jest jakis znacznik np.1 jesli jest to message takie pytanie juz bylo
jesli nie to wstaw jedeen do kolumny drugiej
cytat:antikiusz napisał:
tak ale wszystko bieże w leb jesli zrobi sie przerwe i zakonczy procedure losowan
mozna wtedy sobie losowac od poczatku(...)
Procedura losowania jest wykonana na początku programu i dotyczy tylko numeru pytania, a nie samego pytania. Dopiero później należy wyświetlić (wydrukować) pytania. Przecież numery pytań...
cytat:komando napisał:
Po tej petli, w ktorej wystapi dokladnie tyle losowan ile ma byc pytan
numery pytan beda sie z najdowaly w tablicy od indeksu
[maxpyt - licz_pyt_ktore_masz_wylosowac +1] do [maxtyp]
...są w tablicy. Oczywiście musi to być tablica wielowymiarowa, pytania, ewentualne odpowiedzi do nich, a także ich poprawność.
Podobne procedury losujące stosowane są w grach. Na przykład przy rozdawaniu iluś tam kart z całej talii. Zwróć uwagę, że rozdanie kart następuje na początku gry, a nie w trakcie jej trwania. Uruchom sobie dowolny pasjans lub pokerka i poobserwuj.
Delphi is the BesT
Leszek GG:3633885
cytat:leszek1959 napisał:
Oczywiście musi to być tablica wielowymiarowa
Oczywisnie nie musi:)
GG: 4596137
cytat:komando napisał:
Oczywisnie nie musi:)
Oczywiście, że nie musi, ale powinna być, aby program był czytelny i uniwersalny. Wyobraź sobie, że tablice wielowymiarowe należy traktować jak szufladki w katalogu alfatetycznym biblioteki. Na przykład: pierwsza szuflada - litera A, w niej alfabetycznie autorzy, tytuły książek - też alfabetycznie. :ok:. Podobnie z pytaniami, indeks pytania i jego treść, następnie odpowiedzi i poprawność odpowiedzi (nie musi być jedna poprawna może być więcej) przecież procedura losowania jest wykonana na początku programu i dotyczy tylko numeru pytania, a nie samego pytania. Sortowanie i wyszukiwanie pytania, opiera sie na liczbie (numerze indeksu). Będzie to rodzaj bazy danych lub programu testującego z dowolnej dziedziny wiedzy.
Delphi is the BesT
Leszek GG:3633885
dzieki za rady, baardzo sie przydaly:-)) oddalam program i mam 5tke:)
Pozdrawiam!