markosss Temat założony przez niniejszego użytkownika |
Stuktura testu c++ » 2017-06-06 22:41:50 Witam, to ponownie ja. Tym razem dokończyłem swój program(poprzedni temat został wyrzucony, za niedokończony program) Czy może ktoś aktualnie ocenić mój kod, czy jednak są jakieś błędy? Program niby się normalnie kompiluje. Wcześniej odpowiedzi trzymałem w 5 stringach, lecz kazano mi je wrzucić do tablicy/wektora więc stworzyłem string answers[5], a w konstruktorze przypisałem do tablicy odpowiedzi, mam nadzieje że tak jest dobrze. #include <iostream> #include <string> #include <vector> using namespace std;
struct Task { char guess; int total; string Question_Text; string answers[ 5 ]; char correct_answer; int Question_Score; Task( string q, string a1, string a2, string a3, string a4, string a5, char ca, int qs ) { Question_Text = q; answers[ 0 ] = a1; answers[ 1 ] = a2; answers[ 2 ] = a3; answers[ 3 ] = a4; answers[ 4 ] = a5; correct_answer = ca; Question_Score = qs; } void showQuestion(); void askQuestion(); };
void Task::showQuestion() { cout << "\n"; cout << Question_Text << "\n"; for( int i = 0; i < 5; i++ ) { cout << answers[ i ]; cout << endl; } } void Task::askQuestion() { showQuestion(); cout << "Twoja odpowiedz to?" << "\n"; cin >> guess; if( guess == correct_answer ) { cout << "\n"; cout << "Dobrze!" << "\n"; total = total + Question_Score; cout << "\n"; cout << "Nacisnij enter aby kontynuować" << "\n"; cin.get(); cin.ignore(); } else { cout << "\n"; cout << "Niestety, zla odpowiedz" << "\n"; cout << "Prawidlowa odpowiedź to: " << correct_answer << "." << "\n"; cout << "\n"; cout << "Nacisnij enter aby kontynuować" << "\n"; cin.get(); cin.ignore(); } }
int main() { Task t1( "1. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdansk", "e. Torun", 'a', 5 ); Task t2( "2. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdansk", "e. Torun", 'a', 5 ); Task t3( "3. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdansk", "e. Torun", 'a', 5 ); t1.askQuestion(); t2.askQuestion(); t3.askQuestion(); return 0; }
|
|
czaffik |
» 2017-06-06 23:03:22 Wygląda dobrze, ale jak już dodałeś vectora to mogłeś go wykorzystać: #include <iostream> #include <string> #include <vector> using namespace std;
struct Task { vector < string > answers; Task( string q, vector < string > _answers, char ca, int qs ) { } };
void Task::showQuestion() { for( int i = 0; i < answers.size(); i++ ) { } }
int main() { vector < string > answers; answers.push_back( "a. Warszawa" ); answers.push_back( "b. Bydgoszcz" ); answers.push_back( "c. Torun" ); answers.push_back( "d. Gdansk" ); answers.push_back( "e. Gdynia" ); Task t1( "1. Stolica Polski to:", answers, 'a', 5 ); t1.askQuestion(); return 0; }
łatwiej będzie kontrolować ilość odpowiedzi, tak jest ograniczenie tylko do pięciu. |
|
markosss Temat założony przez niniejszego użytkownika |
» 2017-06-06 23:26:01 Dzięki wielkie!! |
|
markosss Temat założony przez niniejszego użytkownika |
» 2017-06-07 13:27:26 Po rozmowie z nauczycielką, pokazałem jej obie wersje, kazała zostać przy 1 aby robić "słowo w słowo" tak jak jest w projekcie, druga część będzie dopiero opierała się na vektorach. Mam takie pytanko teraz, chciałem strukturę Task zdefiniować w klasie Test, zrobiłem to tak: #include <iostream> #include <string> #include <vector> using namespace std;
class Test { vector < string > questions; };
struct Question : public Test { reszta kodu struct, podany w 1 po ś cie. }
Czy to jest poprawne? Chodzi mi dokładnie o to, że teraz pytania stworzone w strukturze Test, będę za pomocą funkcji push.back, wkładał do wektora stworzonego w klasie Test. Czy taka deklaracja mi to umożliwi? |
|
karambaHZP |
» 2017-06-07 14:30:41 Nie wiem czy doborze zrozumiałem. Masz strukturę zawierającą pytanie z proponowanymi odpowiedziami i prawidłową odpowiedzią. W tej sytuacji najwygodniej będzie trzymać w klasie Test tablicę obiektów klasy Task. std::vector < Task > questions; |
|
markosss Temat założony przez niniejszego użytkownika |
» 2017-06-07 14:48:31 W sumie można i tak. Czyli teraz rozumiem że jak utworzę obiekt Task, to zostanie on dodany i całe pytanie wraz z odpowiedziami będzie przechowywane w wektorze stworzonym w klasie Test? Świetny pomysł, dziękuje.
Ale wciąż mam ten sam problem, moje dziedziczenie/zagnieżdżenie niestety jakoś nie działa. Kiedy swój vektor zastąpiłem Twoim, to podczas próby kompilacji wyskakuje mi błąd że moja klasa nie wie co to Task.
[Error] 'Task' was not declared in this scope [Error] template argument 1 is invalid [Error] template argument 2 is invalid
|
|
markosss Temat założony przez niniejszego użytkownika |
» 2017-06-07 16:20:18 #include <iostream> #include <string> #include <vector> using namespace std; struct Task { string question; string answers[ 5 ]; char correct_answer; int question_score; Task( string q, string a1, string a2, string a3, string a4, string a5, char ca, int qs ) { question = q; answers[ 0 ] = a1; answers[ 1 ] = a2; answers[ 2 ] = a3; answers[ 3 ] = a4; answers[ 4 ] = a5; correct_answer = ca; question_score = qs; } void showTask() { cout << "\n"; cout << question << "\n"; for( int i = 0; i < 5; i++ ) { cout << answers[ i ]; cout << endl; } } }; class TestContent { char guess; int total; vector<Task> tasks; void askQuestion(); public: void addTask( const Task& t ) { tasks.push_back(t); } void showQuestion(int it) { tasks[it].showTask(); } }; int main() { Task t1( "1. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdansk", "e. Torun", 'a', 5 ); Task t2( "2. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdewqansk", "e. Torun", 'a', 5 ); Task t3( "3. Stolica Polski to:", "a. Warszawa", "b. Poznan", "c. Krakow", "d. Gdansk", "e. Torewqun", 'a', 5 ); TestContent test; test.addTask(t1); test.addTask(t2); test.addTask(t3); test.showQuestion(0); test.showQuestion(1); test.showQuestion(2); return 0; }
rozwiązałem problem, chyba |
|
« 1 » |