c++ stworzenie testu

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
bestb
-
Posty: 49
Rejestracja: 28 gru 2009, 14:58
Lokalizacja: UK, Poznan

c++ stworzenie testu

Post autor: bestb » 04 kwie 2010, 18:45

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: Zaznacz cały

#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: Zaznacz cały

#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?

Awatar użytkownika
kayron
Użytkownik
Posty: 2051
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 05 kwie 2010, 9: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.

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 05 kwie 2010, 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: Zaznacz cały

pierwsze pytanie
odp. A
odp. B
odp. C
odp. D
poprawna odp.
drugie pytanie
...

bestb
-
Posty: 49
Rejestracja: 28 gru 2009, 14:58
Lokalizacja: UK, Poznan

Post autor: bestb » 05 kwie 2010, 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: Zaznacz cały

#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;

}

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 05 kwie 2010, 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ą.

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1375
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 05 kwie 2010, 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
-
Posty: 49
Rejestracja: 28 gru 2009, 14:58
Lokalizacja: UK, Poznan

Post autor: bestb » 05 kwie 2010, 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?

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1375
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 05 kwie 2010, 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ż.

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 05 kwie 2010, 15:08

bestb pisze:kopiowałem to dalej i były błędy nie wiem od którego fragmentu mam to skopiować
Ten fragment:

Kod: Zaznacz cały

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
-
Posty: 49
Rejestracja: 28 gru 2009, 14:58
Lokalizacja: UK, Poznan

Post autor: bestb » 05 kwie 2010, 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?

ODPOWIEDZ