C++ ponowne wykonanie programu.

0

Witam,

Jestem tutaj nowy jak i zarówno początkujący "programista" ze mnie więc proszę o wyrozumiałość. Postaram się krótko opisać problem, ale prawdopodobnie mi się ta sztuka nie uda :)

Zacznę od tego iż mój program ma być Quizem. 10 pytań wyświetlanych losowo przy każdym uruchomieniu programu, do tego każde z tych pytań ma po 3 losowo wyświetlane odpowiedzi. A na koniec program wyświetla ilość zdobytych punktów oraz ocenę. To zrobiłem - prawdopodobnie w bardzo dziwny sposób, ale działa (przynajmniej na razie).

W czym tkwi problem, a właściwie problemy? Są 2 rzeczy. Z jedną sobie nie umiem poradzić, a na drugą nie mam na razie nawet pomysłu.

  1. Program po wyświetleniu wyniku ma się zapytać użytkownika czy przerwać działanie czy powrócić do początku i wykonać quiz jeszcze raz (z nowym losowaniem).

  2. Program przy podawaniu wyniku powinien wyświetlić pytania na które udzieliło się złych odpowiedzi, a obok nich pokazać odpowiedzi poprawne.

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

int punkty=0;														// Zmienna globalna zliczajaca punkty	

void pytanie_1 ()
{
	cout << "\tIle wynosi 2+2 = ?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									// Petla ktora ma za zadanie "wymieszac" kolejnosc odpowiedzi
	   {
            int numer_odp;											// Dziala na tej samej zasadzie co petla w main-ie
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "4" << endl;
        else if (tab[1]==2)
            cout << "e=mc^2" << endl;
        else if (tab[1]==3)
		    cout << "10000000" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "4" << endl;
        else if (tab[2]==2)
            cout << "e=mc^2" << endl;
	    else if (tab[2]==3)
            cout << "10000000" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "4" << endl;
        else if (tab[3]==2)
            cout << "e=mc^2" << endl;
	    else if (tab[3]==3)
            cout << "10000000" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}

}

void pytanie_2 ()
{
	cout << "\tChinska rzeka Huang he to inaczej..." << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Zolta Rzeka" << endl;
        else if (tab[1]==2)
            cout << "Tygrysia Rzeka" << endl;
        else if (tab[1]==3)
		    cout << "Boska Rzeka" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Zolta Rzeka" << endl;
        else if (tab[2]==2)
            cout << "Tygrysia Rzeka" << endl;
	    else if (tab[2]==3)
            cout << "Boska Rzeka" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Zolta Rzeka" << endl;
        else if (tab[3]==2)
            cout << "Tygrysia Rzeka" << endl;
	    else if (tab[3]==3)
            cout << "Boska Rzeka" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_3 ()
{
	cout << "\tGdzie miedzyinnymi poza Antarktyda mozna spotkac pingwiny?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Ameryka Poludniowa" << endl;
        else if (tab[1]==2)
            cout << "Grenlandia" << endl;
        else if (tab[1]==3)
		    cout << "Kanada" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Ameryka Poludniowa" << endl;
        else if (tab[2]==2)
            cout << "Grenlandia" << endl;
	    else if (tab[2]==3)
            cout << "Kanada" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Ameryka Poludniowa" << endl;
        else if (tab[3]==2)
            cout << "Grenlandia" << endl;
	    else if (tab[3]==3)
            cout << "Kanada" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_4 ()
{
	cout << "\tPrzez jakie angielskie miasto przebiega zerowy poludnik?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Greenwich" << endl;
        else if (tab[1]==2)
            cout << "Woking" << endl;
        else if (tab[1]==3)
		    cout << "Gillingham" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Greenwich" << endl;
        else if (tab[2]==2)
            cout << "Woking" << endl;
	    else if (tab[2]==3)
            cout << "Gillingham" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Greenwich" << endl;
        else if (tab[3]==2)
            cout << "Woking" << endl;
	    else if (tab[3]==3)
            cout << "Gillingham" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_5 ()
{
	cout << "\tStolica Australii to..." << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Canberra" << endl;
        else if (tab[1]==2)
            cout << "Sydney" << endl;
        else if (tab[1]==3)
		    cout << "Melbourne" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Canberra" << endl;
        else if (tab[2]==2)
            cout << "Sydney" << endl;
	    else if (tab[2]==3)
            cout << "Melbourne" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Canberra" << endl;
        else if (tab[3]==2)
            cout << "Sydney" << endl;
	    else if (tab[3]==3)
            cout << "Melbourne" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_6 ()
{
	cout << "\tOd ktorego zwierzecia pochodzi nazwa Wysp Kanaryjskich (hiszp. Islas Canarias)?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Od psa" << endl;
        else if (tab[1]==2)
            cout << "Od kanarka" << endl;
        else if (tab[1]==3)
		    cout << "Od szczura" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Od psa" << endl;
        else if (tab[2]==2)
            cout << "Od kanarka" << endl;
	    else if (tab[2]==3)
            cout << "Od szczura" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Od psa" << endl;
        else if (tab[3]==2)
            cout << "Od kanarka" << endl;
	    else if (tab[3]==3)
            cout << "Od szczura" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_7 ()
{
	cout << "\t1024 bajty to..." << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Mebibajt" << endl;
        else if (tab[1]==2)
            cout << "Megabajt" << endl;
        else if (tab[1]==3)
		    cout << "Mibibajt" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Mebibajt" << endl;
        else if (tab[2]==2)
            cout << "Megabajt" << endl;
	    else if (tab[2]==3)
            cout << "Mibibajt" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Mebibajt" << endl;
        else if (tab[3]==2)
            cout << "Megabajt" << endl;
	    else if (tab[3]==3)
            cout << "Mibibajt" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_8 ()
{
	cout << "\t10^600 to..." << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Centylion" << endl;
        else if (tab[1]==2)
            cout << "Decylion" << endl;
        else if (tab[1]==3)
		    cout << "Nonylion" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Centylion" << endl;
        else if (tab[2]==2)
            cout << "Decylion" << endl;
	    else if (tab[2]==3)
            cout << "Nonylion" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Centylion" << endl;
        else if (tab[3]==2)
            cout << "Decylion" << endl;
	    else if (tab[3]==3)
            cout << "Nonylion" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_9 ()
{
	cout << "\tOd ktorego roku internet w Poslce jest oficjalnie dostepny?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "1991" << endl;
        else if (tab[1]==2)
            cout << "1995" << endl;
        else if (tab[1]==3)
		    cout << "1987" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "1991" << endl;
        else if (tab[2]==2)
            cout << "1995" << endl;
	    else if (tab[2]==3)
            cout << "1987" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "1991" << endl;
        else if (tab[3]==2)
            cout << "1995" << endl;
	    else if (tab[3]==3)
            cout << "1987" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

void pytanie_10 ()
{
	cout << "\tJak nazywa sie najwiekszy pod wzgledem powierzchni gwiazdozbior na niebie?" << endl;

	int tab [4];
	srand(time(NULL));

	    for (int i=1; i<=3; i++)									
	   {
            int numer_odp;
            powrot:
            numer_odp = rand()%4;							
            for (int i=1; i<=3; i++)
            {
                 if (numer_odp==tab[i] || numer_odp==0)
                 goto powrot;
            }
            tab [i] = numer_odp;
       }
		cout << " [1] ";

        if (tab[1]==1)
            cout << "Hydra" << endl;
        else if (tab[1]==2)
            cout << "Wielka Niedzwiedzica" << endl;
        else if (tab[1]==3)
		    cout << "Panna" << endl;

		cout << " [2] ";

        if (tab[2]==1)
            cout << "Hydra" << endl;
        else if (tab[2]==2)
            cout << "Wielka Niedzwiedzica" << endl;
	    else if (tab[2]==3)
            cout << "Panna" << endl;

        cout << " [3] ";

        if (tab[3]==1)
            cout << "Hydra" << endl;
        else if (tab[3]==2)
            cout << "Wielka Niedzwiedzica" << endl;
	    else if (tab[3]==3)
            cout << "Panna" << endl;

	int wybor;
	cout << "Podaj odpowiedz: ";
	cin >> wybor;
	switch (wybor)
	{
		case 1:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 2:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
		case 3:
			if (tab[wybor]==1)
				punkty=punkty+1;
			break;
	}
}

	/************************************************************************************************************************/
	/*																														*/
	/*															 MAIN														*/
	/*																														*/
	/************************************************************************************************************************/

int main ()
{
	poczatek:
	cout << "Witaj! Przed Toba 10 niezwykle ciezkich, wymagajacych i zakrawajacych o ekspercka wiedze pytan." << endl;
	cout << "Mam nadzieje ze jestes na to gotowy!" << endl << endl;
	cout << "Prosze, podaj swoje imie: ";
	string imie[2];
	cin >> imie[0];
	cout << "Oraz nazwisko: ";
	cin >> imie [1];
	cout << endl;

	int tab [10];												// Utworzenie tablicy 10 elementowej
	srand(time(NULL));											// Losowanie w czasie rzeczywistym, dzieki temu kazde uruchomienie programu daje nowe losowanie (liczby pseudolosowe)
	
    for (int i=0; i<10; i++)									// Petla dzieki ktorej do kazdego elementu z tablicy zostana dopisane losowo wybrane cyfry
    {
        int numer_pytania;										// Zmienna ktora ustala kolejnosc pytan
        jeszczeraz:
        numer_pytania = rand()%10;								// Losowanie liczb. Od 0 do 9
        for (int i=0; i<10; i++)
        {
             if (numer_pytania==tab[i])
             goto jeszczeraz;									// Ponowienie losowania gdy cyfra znajduje sie juz w tablicy
        }
        tab [i] = numer_pytania;								// Przypisanie cyfry do i-tej komorki w tablicy
    }

	for (int i=0; i<10; i++)									// Wywolywanie funkcji zawierajacych pytania
	{
		if (tab [i] == 0)
			pytanie_1();
		else if (tab [i] == 1)
			pytanie_2();
		else if (tab [i] == 2)
			pytanie_3();
		else if (tab [i] == 3)
			pytanie_4();
		else if (tab [i] == 4)
			pytanie_5();
		else if (tab [i] == 5)
			pytanie_6();
		else if (tab [i] == 6)
			pytanie_7();
		else if (tab [i] == 7)
			pytanie_8();
		else if (tab [i] == 8)
			pytanie_9();
		else if (tab [i] == 9)
			pytanie_10();
	}

	if (punkty <= 4)
	{
		cout << imie [0] << " " << imie [1] << " - Uzyskales(as): " << punkty << "pkt." << endl;
		cout << "Twoja ocena to 2." << endl;
		cout << "Postaraj sie lepiej nastepnym razem!" << endl;
	}
	else if (punkty==5 || punkty ==6)
	{
		cout << imie [0] << " " << imie [1] << " - Uzyskales(as): " << punkty << "pkt." << endl;
		cout << "Twoja ocena to 3." << endl;
		cout << "Zawsze mogloby byc lepiej!" << endl;
	}
	else if (punkty==7 || punkty ==8)
	{
		cout << imie [0] << " " << imie [1] << " - Uzyskales(as): " << punkty << "pkt." << endl;
		cout << "Twoja ocena to 4." << endl;
		cout << "Dobry wynik!" << endl;
	}
	else if (punkty==9)
	{
		cout << imie [0] << " " << imie [1] << " - Uzyskales(as): " << punkty << "pkt." << endl;
		cout << "Twoja ocena to 5." << endl;
		cout << "Bardzo dobry wynik!" << endl;
	}
	else if (punkty==10)
	{
		cout << imie [0] << " " << imie [1] << " - Uzyskales(as): " << punkty << "pkt." << endl;
		cout << "Twoja ocena to 5." << endl;
		cout << "Gratuluje! Zdobyles(as) maksymalna ilosc punktow." << endl;
	}

	cout << endl << "Co chcesz teraz zrobic?" << endl;
	short opcja;
	cout << "[1] Wykonaj Quiz ponownie." << endl;
	cout << "[2] Zakoncz program." << endl;

	cin >> opcja;

	switch (opcja)
	{
		case 1:
			if (opcja == 1)
				goto poczatek;
			
		case 2:
			if (opcja == 2)
				break;
	}

	system ("cls");
	

	cout << "Do zobaczenia innym razem!" << endl;
	system ("PAUSE");
	return 0;
}

Jak widać próbowałem już coś w tym temacie zdziałać za pomocą znienawidzonego przez wszystkich goto. Niby działa, ale nie do końca. :) Kiedy jest wykonywane goto, program wraca do miejsca gdzie jest poczatek:. Wszystkie cout'y są wyświetlone na ekranie, użytkownik wprowadza imię, nazwisko i... w tym momencie program się zacina i nie idzie dalej. Domyślam się, że może to być problem związany z losowaniem liczb? Tylko nie bardzo wiem jak sobie z tym poradzić i tutaj liczę na Wasze wskazówki. Plus, proszę wziąć pod uwagę moje nie-zaawansowanie w programowaniu. ;)

2

omg.

Nie hardkoduj pytań. Najlepiej, żebyś wczytywał je z jakiegoś zewnętrznego źródła, np. pliku, ale na potrzeby prostego programu wystarczy tablica pytań. Pod żadnym pozorem pisanie osobnej funkcji do każdego pytania nie jest dobre. Potem wystarczy pętla i możesz sobie wyświetlać pytania w dowolnej kolejności i ilości.

  1. zrób sobie główną pętlę programu, która nie zostaje opuszczona dopóki użytkownik nie zdecyduje się na wyjście
  2. musisz pamiętać indeksy pytań, na które udzielona została zła odpowiedź (patrz wyżej), dodając je po zadaniu pytania.
0

Myślałem o załatwieniu całej sprawy za pomocą wczytania danych z pliku, ale nigdy tego nie robiłem więc nie mam zielonego pojęcia czy w tym się nie zakręcę i czy nie będzie to dla mnie trudniejsze do opanowania :)

Co do pętli - próbowałem cały ten "rdzeń" programu wcisnąć do pętli do while, ale efekt był ten sam co przy goto.

3

No jasne pętle oraz instrukcje warunkowe przecież od urodzenia używasz.
Zacznij od wprowadzenia struktury:

struct Query { const char *query; const char *answers[3]; } Qr[]=
  {
     {"Jak nazywa sie najwiekszy pod wzgledem powierzchni gwiazdozbior na niebie",{"Hydra","Wielka Niedzwiedzica","Panna"}},
     {"Od ktorego roku internet w Poslce jest oficjalnie dostepny",{"1991","1995","1997"}},
  };

Zauważ że przy takiej strukturze możesz losować kolejność pytań i odpowiedzi, zaś ilość funkcji drastycznie spadnie, ponieważ będzie tylko jedna - uniwersalna.

0

Jasne, że tego nie używam od urodzenia :) Sęk w tym, że chciałem to zrobić jak najbardziej (według mnie) podstawowych pętlach, funkcjach itd. z tego względu iż dopiero zaczynam studia informatyczne. A na studiach, na starcie chyba się właśnie zaczyna od if'ów, for'ów, tablic, funkcji. Zabawy z plikami i struktury są deko później jak mogę się domyślać.

Zdaję też sobie sprawę że ten kod można uszczuplić o 500 linijek jak nie lepiej - ale wolę mieć takiego tasiemca którego rozumiem niż przepisać bezmyślnie coś o czym nie mam bladego pojęcia

1

@manectric to źle bo pisząc takie cudo jak to co pokazałeś niczego sie nie uczysz. Co najwyżej złych nawyków. Drabinki ifów? Kopiowanie kodu? goto? To są wszystko bardzo złe nawyki.

To jest trochę tak jakbyś jeździł samochodem cały czas na 1 i nie przejmował sie że dymi się spod maski bo próbujesz jechać 100 na autostradzie. Albo uczysz się jak zmieniać biegi, albo nie jeździsz po autostradzie. Bo palenie silnika na 1 aboslutnie niczego cie nie nauczy...

2

Nie ma sprawy, zrób to na podstawowych tablicach:

const char *Qr[][4]=
  {
     {"Jak nazywa sie najwiekszy pod wzgledem powierzchni gwiazdozbior na niebie","Hydra","Wielka Niedzwiedzica","Panna"},
     {"Od ktorego roku internet w Poslce jest oficjalnie dostepny","1991","1995","1997"},
  };

Pierwsza kolumna - pytanie, pozostałe to odpowiedzi.
Użycie metody Kopiego Pejsta nie da się usprawiedliwić niczym.

3

zrob to samo zadanie dla N pytan (N moze byc dowola liczba, np zrob dla 10 000) jak potrzebujesz pytan z odpowiedziami to Ci przesle :)

0

Bardzo zabawne :D Ja wiem, że to komicznie wygląda, ale zrobiłem tak jak potrafiłem. A, że zadanie miało z góry ustaloną ilość pytań to kombinowałem tak jak mogłem. Nie znam się na programowaniu aż tak żeby wiedzieć które rozwiązanie będzie dla mnie najlepsze. Ba, z taką nikłą wiedzą jak moja nawet często nie wiem "czego i gdzie szukać". Ale mniejsza o to, proszę tylko o wyrozumiałość :)

Prawdopodobnie skorzystam z pomysłu _13th_Dragon, ale mimo miałbym co do niego dwa pytania:

  1. Czy wybór poprawnej odpowiedzi da się jakoś "ładniej" zapisać (na pewno się da! tylko jak?) czy od biedy ujdzie coś w stylu tego co znajduje się w moim dotychczasowym tasiemcu, czyli:
    
cin >> wybor;
    switch (wybor)
    {
        case 1:
            if (tab[wybor]==1)
                punkty=punkty+1;
            break;
        case 2:
            if (tab[wybor]==1)
                punkty=punkty+1;
            break;
        case 3:
            if (tab[wybor]==1)
                punkty=punkty+1;
            break;
    }
  1. Nie bardzo rozumiem czemu ta tablica występuje jako char, a nie jako string? Z tego co pamiętam char to są pojedyncze znaki, a string to ciąg znaków. Chyba, że tutaj to działa trochę inaczej?
0

@manectric MYŚL! Każdy twój "case" ma IDENTYCZNE ciało. Więc po co w ogóle ten cały switch? o_O Ty masz chyba jakieś zboczenie do kopiowania kodu...

0

ja nie zartowalem, ja mowilem calkowicie powaznie.

Uwierz mi w pracy jako programista nie dostaniesz 10 pytan i wio. Dostaniesz 1 000 000 pytan. I masz to jeszcze tak zrobic zeby zmiana czegokolwiek trwala mniej niz minute (co w Twoim wypadku dodanie 11 pytania juz zajmie Ci z 5 min)

wiec najpierw napisz program dla N pytan.

0

@Shalom Ja wiem - ale jest to switch skopiowany z kodu który dałem w 1 poście, a w tamtym tasiemcu działał. Wygląda jak wygląda, ale działał. Tak czy siak, chodziło mi o to czy używając tablicy dwuwymiarowej poprawną odpowiedź da radę wybrać jakoś za pomocą switcha czy trzeba inaczej kombinować.

@fasadin Wszystko doskonale rozumiem, tylko może nie wybiegajmy aż tak do przodu w przyszłość. Gdzie się ma moja ewentualna praca jako programista do mojego ledwo ponad miesięcznego, zaocznego studiowania? Chciałbym oczywiście umieć wszystko fajniej, lepiej, szybciej, dokładniej niż teraz. Ale tak hop-siup się nie da :)

0

Najpierw losujesz:

int show[3]={0,1,2};
swap(show+0,show+rand()%3); // swap wymienia wartości
swap(show+1,show+1+rand()%2); // swap wymienia wartości

wyświetlasz: printf("%c %s\n",'A'+i,Qr[n][show[i]]);
sprawdzasz: if(!show[ch-'A'])

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