Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Stuktura testu c++

Ostatnio zmodyfikowano 2017-06-07 16:20
Autor Wiadomość
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.

C/C++
#include <iostream>
#include <string>
#include <vector>
using namespace std;


struct Task
{
    char guess; //będzie przyjmowało odpowiedź z klawiatury(a,b,c,d lub e)
    int total; //będzie sumowało liczbę pkt z testu
    string Question_Text; //pytanie
    string answers[ 5 ];
    char correct_answer; //wskazana prawidłowa odp w pytaniu
    int Question_Score; //liczba pkt za prawidłową odpowiedź
   
    Task( string q, string a1, string a2, string a3, string a4, string a5, char ca, int qs ) //konstruktor do dodawania pytań
    {
        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(); //deklaracja metody wyswietlajacej pytanie
    void askQuestion(); //deklaracja metody zadającej pytanie
};


void Task::showQuestion() //metoda wyswietlajaca pytanie
{
    cout << "\n";
    cout << Question_Text << "\n";
    for( int i = 0; i < 5; i++ ) {
        cout << answers[ i ];
        cout << endl;
    }
}
void Task::askQuestion() //metoda wyswietlajaca pytanie + sprawdzanie odpowiedzi
{
    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;
}
P-162163
czaffik
» 2017-06-06 23:03:22
Wygląda dobrze, ale jak już dodałeś vectora to mogłeś go wykorzystać:

C/C++
#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.
P-162167
markosss
Temat założony przez niniejszego użytkownika
» 2017-06-06 23:26:01
Dzięki wielkie!!
P-162168
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:

C/C++
#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?



P-162189
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;
P-162191
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
P-162192
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
P-162195
« 1 »
  Strona 1 z 1