Poprzedni temat «» Następny temat
c++ stworzenie testu
Autor Wiadomość
bestb 
Nowy na forum


Dołączył: 28 Gru 2009
Posty: 49
Skąd: UK, Poznan
Wysłany: 2010-04-04, 18:45   c++ stworzenie testu

Mam taki problem chce napisać cos co będzie służyło jako test
musi mieć 5 pytań z możliwością rozszerzenia...
i np. mamy pytanie czy 2+2 to:
i tutaj mamy 4 możliwe odpowiedzi i oczywiście jedna poprawna
program ma działać pod DOS
i tutaj prośba do Was ponieważ nie mam zielonego pojęcia, znalazłem cos takiego i pomyślałem ze można to jakoś przerobić, jednak po probie kompilacji mam błędy czy mogę prosić o pomoc...?

Kod:

#include <iostream>

#include <conio>

 

using namespace std;

 

int main()

{

    string pytanie, odpowiedz = "4";

 

    cout << "Czy 2+2 to: ";

    getline(cin, pytanie);

    if (pytanie == odpowiedz)

        cout << "Brawo! Dobrze";

    else

        cout << "Blad !.";

 

    getch();

    return 0;

}


[ Dodano: 2010-04-04, 21:09 ]
ok mam cos takiego
Kod:
#include <iostream>
using namespace std;

int main()
{
 short x;
 cout << "Podaj cyfrę od 0 do 5" << endl;
 cin >> x;
 switch(x)
 {
  case 0: cout << "Wybrano 0" << endl;
   break;
 case 1: cout << "Wybrano 1" << endl;
   break;
 case 2: cout << "Wybrano 2" << endl;
   break;
  case 3:
 case 4:
 case 5: cout << "Wybrano 3, 4 lub 5" << endl;
   break;
 default: cout << "Wybrana liczba nie zawiera się w [0,5]" << endl;
 }
 return 0;
}


ale ja zrobić żeby program przechodził do następnego pytania?
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2010-04-05, 09:35   

W szkole za moich czasów taki program do testów był właśnie na DOSa, napisał go któryś z uczniów. Ogólnie to bez obsługi plików nie da rady zrobić dobrego programu do testów. Choć można, taki lichy napisać, nawet było to jedno z zadań na zaliczenie. Ale to dosyć skomplikowany mechanizm aby go w paru słowach opisać, chyba że umiesz odczytywać i zapisywać pliki w C, no to wtedy można naszkicować ogólną idę działania.
 
 
     
c4r0 
[usunięty]



Wiek: 30
Dołączył: 13 Kwi 2004
Posty: 1956
Skąd: z lasu
Wysłany: 2010-04-05, 10:26   

Ja nie wiem czy słusznie, ale użył bym stdio zamiast iostream (mógłby ktoś kto się zna powiedzieć co jest lepsze i dlaczego?). Czyli zamiast cin i cout użyłbym printf i scanf. Do obsługi pliku użyłbym fopen. Właściwie nic więcej specjalnego nie trzeba, dalej to parę pętli i gotowe. Plik można by zorganizować tak
Kod:

pierwsze pytanie
odp. A
odp. B
odp. C
odp. D
poprawna odp.
drugie pytanie
...
 
     
bestb 
Nowy na forum


Dołączył: 28 Gru 2009
Posty: 49
Skąd: UK, Poznan
Wysłany: 2010-04-05, 11:55   

no to mam cos takiego ale jak zrobic zeby program przechodził do następnego pytania?

ps dla mnie jest nie istotne czy bedzie A B C D ważne jest to żeby była forma testu, czyli program musi pokazywać możliwe odpowiedzi...
Kod:

#include <iostream>

using namespace std;

 
int main()

{

    string pytanie, odpowiedz = "KBps";
    cout << "KiloBytes Per Second is:" << endl;
    cout << "KBps" << endl;
    cout << "kbps " << endl;
    cout << "bits per 10 second" << endl;
    cout << "bytes per 100 second" << endl;
 

   
    getline(cin, pytanie);

    if (pytanie == odpowiedz)

        cout << "Good! ";

    else

        cout << "Sorry mate but no !.";

    return 1;

}
 
     
c4r0 
[usunięty]



Wiek: 30
Dołączył: 13 Kwi 2004
Posty: 1956
Skąd: z lasu
Wysłany: 2010-04-05, 13:02   

Jeśli masz zrobione tak, to wystarczy że skopiujesz ten fragment więcej razy i pozmieniasz pytania i odpowiedzi. Ale jeśli ma być "możliwość rozszerzenia" to lepiej było by, żeby pytania były w jakiejś bazie danych a program tylko je pobierał i wyświetlał w pętli, dopóki się nie skończą.
 
     
Luminofor 



Dołączył: 27 Lis 2007
Posty: 1144
Skąd: Polska
Wysłany: 2010-04-05, 13:08   

Nie trzeba żadnej obsługi plików. Pytania i odpowiedzi jako zmienne typu const string w kodzie.
Mieszanie kolejności odpowiedzi funkcją (rand). Do każdej odpowiedzi przypisana zmienna boolowska która mówi, czy dana odpowiedź jest prawidłowa czy też nie. Licznik punktów jako globalna (bądź lokalna) zmienna int. Program banalny. Oczywiście można kombinować i stworzyć np. listę pytań (listę w sensie kontenera - lista jednokierunkowa), gdzie poprawna odpowiedź na jedno pytanie wybiera następne pytanie (znowu dobrze jest wprowadzić pewną losowość).

Ja bym to zrobił obiektowo. Mamy klasę baza_pytan i klase pytanie. Obiekt klasy baza_pytan jest listą jednokierunkową obiektów klasy pytanie. Tworzymy bazę pytań (nowy obiekt klasy baza_pytan), losując zdefiniowane uprzednio const stringi i przypisując je losowo do "wagoników" czyli obiektów klasy pytanie. Do tego dorobił bym metody klasy baza_pytan i klasy pytanie, czyli obsługa sytuacji typu zaznaczenie odpowiedzi, reakcja na dobrą odpowiedź, reakcja na złą odpowiedź, ogólnie - cała interakcja z userem. Metody klasy baza_pytan - przechodzenie do następnego pytania, odznaczanie pytania jako odwiedzonego itp - to, czego user nie widzi.

Czyli obiektowa "baza danych" w postaci listy (jedno- lub dwu-kierunkowej, jak kto woli) pytań. Chcesz dodać nowe pytanie - nie ma problemu. Jak to zrobisz nieobiektowo to już z dodaniem nowego pytania będą większe problemy.
 
     
bestb 
Nowy na forum


Dołączył: 28 Gru 2009
Posty: 49
Skąd: UK, Poznan
Wysłany: 2010-04-05, 14:37   

to ma byc najprościej jak sie tylko da, max do 10 pytań

ponieważ nie mam kompletnie zielonego pojęcia o programowaniu i mam juz działający program z jednym pytaniem pozostałbym przy pomyśle kolegi c4r0, kopiowałem to dalej i były błędy nie wiem od którego fragmentu mam to skopiować?
chciałbym dodać jeszcze na końcu takiego testu jakieś podsumowanie czyli odpowiedzi poprawne oraz błędne. czy da sie to zrobić w ten sposób?
 
     
Luminofor 



Dołączył: 27 Lis 2007
Posty: 1144
Skąd: Polska
Wysłany: 2010-04-05, 14:40   

NO to strukturalnie z góry na dół:
Zrób sobie tablicę, w komórkach której przechowujesz poprawne odpowiedzi dla pytań 1-10. I funkcję, do której przesyłasz const stringi z pytaniami i odpowiedziami. Potem kilka if-ów które wykrywają poprawną odpowiedź i kilka innych rzeczy i już.
 
     
c4r0 
[usunięty]



Wiek: 30
Dołączył: 13 Kwi 2004
Posty: 1956
Skąd: z lasu
Wysłany: 2010-04-05, 15:08   

bestb napisał/a:
kopiowałem to dalej i były błędy nie wiem od którego fragmentu mam to skopiować
Ten fragment:
Kod:
odpowiedz = "KBps";
    cout << "KiloBytes Per Second is:" << endl;
    cout << "KBps" << endl;
    cout << "kbps " << endl;
    cout << "bits per 10 second" << endl;
    cout << "bytes per 100 second" << endl;
 

   
    getline(cin, pytanie);

    if (pytanie == odpowiedz)

        cout << "Good! ";

    else

        cout << "Sorry mate but no !.";
Powtórz tyle razy ile trzeba. Po ostatnim ma być return 0; i klamerka (nie wiem czemu w tym programie co dałeś jest return 1; :roll: )
 
     
bestb 
Nowy na forum


Dołączył: 28 Gru 2009
Posty: 49
Skąd: UK, Poznan
Wysłany: 2010-04-05, 15:18   

dzięki będę testować...

[ Dodano: 2010-04-06, 17:57 ]
ok mam ale mam jeszcze maly problem w jaki sposób uzyskać odstęp pomiędzy linijkami tekstu?
oraz jak stworzyć coś w rodzaju podsumowania czyli ilość błędnych i poprawnych odpowiedzi?
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,03 sekundy. Zapytań do SQL: 11