Pomoc z programem

0

Witam ,potrzebuje pomocy kogoś to pomoże mi napisać program w postaci quizu matematycznego a raczej tylko pokażę tą głowną funkcjie jak ma działać ,a ja już ją dopracuje
Nie chce 100 czy 200 wierszy pisania ,wystarczy mi kilka linijek które po uruchomieniu programu bedą odczytywać pytanie odpowiedzi i prawidłową odpowiedz .
Nie można uzywać jaichkolwiek tablic.Najlepiej jakby pytania były losowe ale to jest najmniej wazne ,Najbardziej zalezy mi na tym aby odczytywało plik txt i zebym mogł przeczytac pytanie wybra odpowiedz i mogł przejsc do nastepnego pytania .Z tego co slyszałem najlepiej uzyc string i petli ale dopiero zaczynam programowac i ten program nie musi byc najjwyzszych lotów tylko z podstaw.
Dziekuje za pomoc

0

Czy chcesz nauczyć się pisać, czy chcesz gotowca?

Nie napisałeś nic jak wygląda plik.
Brak tablicy oznacza, np. użycie listy, lub przechowywanie danych POD i liczenie losowych rekordów (chyba że pytania nie muszą być losowe, to wystarczy sama umiejętność odczytania danych z pliku).

int main() {
    while(true) {
        printQuestion(readQuesionFromFile());
        if(checkAnswer(yourAnswer()){
            cout << "Pass\n";
        }
        else{
            cout << "Fail\n";
        }
    // tutaj jakiś warunek przerwania pętli (koniec zabawy)
    }
}
0
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
	string pytanie,odpowiedz,poprawna;//zmienne string do zapisu pytania odpowiedzi i poprawnej odpowiedzi
fstream plik;//zmienna fstream
plik.open("test.txt",ios::in);//tak otwieramy plik podany w cudzysłowie o nazwie test.txt WAŻNE należy utworazyć taki plik w ścieszce dostępu kompilatora
while(plik)//warunek jeżeli plik ma dane to będzie to wykonywał pentlę
{
	getline(plik,pytanie);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
	cout<<pytanie;//czytamy pytanie
	cin>>odpowiedz;//podawanie odpowiedzi
	getline(plik,poprawna);//zapisanie następnych słów w następnej linijce 
	if(poprawna==odpowiedz)//to raczej wiadomo
	{
		cout<<"brawo"<<endl;
	}
	else{
		cout<<":("<<endl;
	}
	
}
plik.close();//Pliki zamykamy bo jak nie to... raczej nic się nie stanie :) ale może
//PS należy utworzyć w ścieżce dostępu kompilatora (tam gdzie zapisują się programy w nim skompilowane) plik o nazwie test.txt i wpisać tam pytania w stylu
//ile to dwa dodać dwa (enter) 4 (enter) ile to 3 dodać 3 (enter) 6 (enter)
}
0

Plik wygląda tak
numer pytania
Pytanie
odpa
odpb
odpc
odpd
poprawna odpowiedz (a,b,c,d)

Pytanie
odpa
odpb
odpc
odpd
poprawna odpowiedz (a,b,c,d)

I tak 10 pytań.
Dorn dałoby się zrobić tak ze podczas włączeniu programu wyświetlało sie Od razu numer pytania,odpowiedz a,odp b odp c odp d i wtedy wpisuje sie swoją odpowiedz po czym pokazuje brawo albo niestety i pokazuje nastepne pytanie ? To byłoby super :)

0

Ten pierwszy kod nie działa pytanie
Natomiast ten drugi jest ok ale mogłbym prosic o forme typu pytanie:odp a
odp b
odp c
odp d
twoja odpowiedz to:

                                                                                                       kolejne pytanie

Sam próbuje do tego dojść ale nie wychodzi,nie wiem jak wczytywac kolejne linie tekstu jeden po drugim i po podaniu odpowiedzi wczytywało kolejne pytanie az do ostatniego .
na razie plik txt wygląda tak :
Pyatnie Nr1:
Iloraz to :
Wynik dzielenia
Wynik mnozenia
Wynik pierwiastkowania
Wynik potegowania
a

Pyatnie Nr:2
A^2 to inaczej:
A-A
A+A
A*A
A+A+A
c

0

Jak już przeanalizujesz przykład @dorn111 zauważysz, że program będzie czytał po kolei pytania z pliku (zawsze w tej samej kolejności).
Jeśli ma to być losowo, to jednak trzeba będzie losować nr pytania i przechodzić na piechotę przez plik, w poszukiwaniu odpowiedniego zestawu (z każdym obiegiem pętli od początku pliku).
Można jak już wspomniałem korzystać z POD i przesuwać wskaźnik plikowy na odpowiednią pozycję (wtedy wygodnie trzymać zestaw pytania w strukturze, co ułatwia pobranie pakietu danych).

dałoby się zrobić tak ze podczas włączeniu programu wyświetlało sie Od razu numer pytania,odpowiedz a,odp b odp c odp d i wtedy wpisuje sie swoją odpowiedz po czym pokazuje brawo albo niestety i pokazuje nastepne pytanie ?

Bo odczyt danych trzeba dopasować do zestawu danych w pliku.

odczyt pytania
odczyt odp a
odczyt odp b
odczyt odp c
odczyt odp d
odpytanie usera
sprawdzenie odp

edit:

Ten pierwszy kod nie działa

Bo to jest tylko szkielet. Trzeba pomyśleć i uzupełnić.

Polecam http://cpp0x.pl/kursy/ żeby ogarnąć podstawy.

0

Ale możesz mi przerobić ten przykład na szybko,potrzebne jest mi to na jutro a ja nie wiem czy sam do tego dojdę.Wiem ze powinienem sam do tego dojść bo wiecej sie naczue ale czas mnie goni ,obiecuję ze nadrobie zaległości tylko prosze o szybką pomoc.

0

Jeżeli znasz liczbę pytań to wstaw w while zamiast plik ten warunek co napisałem tam nadole po prawej przy while

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
	int numer=1;
	string pytanie,odpowiedz,poprawna;//zmienne string do zapisu pytania odpowiedzi i poprawnej odpowiedzi
fstream plik;//zmienna fstream
plik.open("test.txt",ios::in);//tak otwieramy plik podany w cudzysłowie o nazwie test.txt WAŻNE należy utworazyć taki plik w ścieszce dostępu kompilatora
while(plik)//warunek jeżeli plik ma dane to będzie to wykonywał pentlę!!!!!!!!Jeśli znasz ilość pytań to w miejsce plik lepiej wpisać (numer<=(liczba pytań)
{
	cout<<numer<<". ";
	for(int i=0;i<5;i++)
	{
	getline(plik,pytanie);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
	cout<<pytanie<<endl;//czytamy pytanie
   } 
	cin>>odpowiedz;//podawanie odpowiedzi
	getline(plik,poprawna);//zapisanie następnych słów w następnej linijce 
	if(poprawna==odpowiedz)//to raczej wiadomo
	{
		cout<<"twoja odpowiedz to"<<odpowiedz<<"brawo dobrze"<<endl;
	}
	else{
		cout<<"twoja odpowiedz to"<<odpowiedz<<"Niestety zle"<<endl;
	}
	numer++;
}
plik.close();//Pliki zamykamy bo jak nie to... raczej nic się nie stanie :) ale może
//PS należy utworzyć w ścieżce dostępu kompilatora (tam gdzie zapisują się programy w nim skompilowane) plik o nazwie test.txt i wpisać tam pytania w stylu
//ile to dwa dodać dwa (enter) 4 (enter) ile to 3 dodać 3 (enter) 6 (enter)
}
0

Metoda kopiego pejsta:

while(plik)//warunek jeżeli plik ma dane to będzie to wykonywał pentlę
{
    getline(plik,pytanie);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
    cout<<pytanie;//czytamy pytanie
    getline(plik,odpA);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
    cout<<odpA<<'\n';
    getline(plik,odpB);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
    cout<<odpB<<'\n';
    getline(plik,odpC);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
    cout<<odpC<<'\n';
    getline(plik,odpD);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
    cout<<odpD<<'\n';
    getline(plik,poprawna);//zapisanie następnych słów w następnej linijce 
    if(poprawna==odpowiedz)//to raczej wiadomo
    {
        cout<<"brawo"<<endl;
    }
    else{
        cout<<":("<<endl;
    }

}

@dorn111 ładnie zamknął odczyt linii w pętli, bo zawsze jest ich tyle samo (uprzedził mnie).

0

Ja sam rozmkniłem i do czegoś takiego doszedłem xD
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char* argv[])
{
string pytanie,odpowiedz,poprawna,odpa,odpb,odpc,odpd,numer;//zmienne string do zapisu pytania odpowiedzi i poprawnej odpowiedzi
fstream plik;//zmienna fstream
plik.open("test.txt",ios::in);//tak otwieramy plik podany w cudzysłowie o nazwie test.txt WAŻNE należy utworazyć taki plik w ścieszce dostępu kompilatora
while(plik)//warunek jeżeli plik ma dane to będzie to wykonywał pentlę
{
getline(plik,numer);
cout<<numer<<endl;
getline(plik,pytanie);
cout<<pytanie<<endl;
getline(plik,odpa);
cout<<odpa<<endl;
getline(plik,odpb);
cout<<odpb<<endl;
getline(plik,odpc);
cout<<odpc<<endl;
getline(plik,odpd);
cout<<odpd<<endl;
cin>>odpowiedz;//podawanie odpowiedzi
getline(plik,poprawna);//;//zapisanie następnych słów w następnej linijce
getline(plik,odpa);
if(poprawna==odpowiedz)//to raczej wiadomo
{
cout<<"brawo"<<endl;
}
else{
cout<<":("<<endl;
}

}
plik.close();//Pliki zamykamy bo jak nie to... raczej nic się nie stanie :) ale może
//PS należy utworzyć w ścieżce dostępu kompilatora (tam gdzie zapisują się programy w nim skompilowane) plik o nazwie test.txt i wpisać tam pytania w stylu
//ile to dwa dodać dwa (enter) 4 (enter) ile to 3 dodać 3 (enter) 6 (enter)
}

WIem wiem amatorsko ale wazne ze działa jakoś xD

0

Tu masz losowo dla 10 pytań jak chcesz mniej lub więcej to musisz zmienić w obu rand 60 na inną wartość gdzie każde pytanie to 6 np. 11 pytań to wartość 66 itd;

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(int argc,char* argv[])
{ int los,nr;
	srand( time( NULL ) );
	string pytanie,odpowiedz,poprawna;//zmienne string do zapisu pytania odpowiedzi i poprawnej odpowiedzi
fstream plik;//zmienna fstream
//tak otwieramy plik podany w cudzysłowie o nazwie test.txt WAŻNE należy utworazyć taki plik w ścieszce dostępu kompilatora
while(1==1)//warunek jeżeli plik ma dane to będzie to wykonywał pentlę!!!!!!!!Jeśli znasz ilość pytań to w miejsce plik lepiej wpisać (numer<=(liczba pytań)
{
plik.open("test.txt",ios::in);
    los=(rand() % 60 ) + 0;
   while(((los)%6)!=0)
    {
    los=(rand() % 60 ) + 0;
	}
	nr=(los/6);
	cout<<"pytanie nr "<<nr<<" "<<endl;
	for(int i=0;i<los;i++)
	{
getline(plik,pytanie);
	}
	for(int i=0;i<5;i++)
	{
	getline(plik,pytanie);// tak odczytujemy całą linie w programie i wpisujemy do zmiennej która jest po przecinku
	cout<<pytanie<<endl;//czytamy pytanie
   } 
	cin>>odpowiedz;//podawanie odpowiedzi
	getline(plik,poprawna);//zapisanie następnych słów w następnej linijce 
	if(poprawna==odpowiedz)//to raczej wiadomo
	{
		cout<<"twoja odpowiedz to"<<odpowiedz<<"brawo dobrze"<<endl;
	}
	else{
		cout<<"twoja odpowiedz to"<<odpowiedz<<"Niestety zle"<<endl;
	}
	nr++;
	plik.close();
}
plik.close();//Pliki zamykamy bo jak nie to... raczej nic się nie stanie :) ale może
//PS należy utworzyć w ścieżce dostępu kompilatora (tam gdzie zapisują się programy w nim skompilowane) plik o nazwie test.txt i wpisać tam pytania w stylu
//ile to dwa dodać dwa (enter) 4 (enter) ile to 3 dodać 3 (enter) 6 (enter)
}
0

Problemem losowości jest to ze losuje losowe linijki przez co nie da sie przeczytac pytania ,odpowiedzi.Moze to wina pliku tekstowego
Moj wyglada tak:
Numer Pytania:
Iloraz to :

a-Wynik dzielenia
b-Wynik mnozenia
c-Wynik pierwiastkowania
d-Wynik potegowania

a
Numer Pytania:
A^2 to inaczej:

a-A-A
b-A+A
c-A*A
d-A+A+A

c
itp do 10 pytan

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