Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 30.03.2010
Сообщений: 19
1

система компьютерного обучения

01.05.2010, 17:56. Просмотров 541. Ответов 4
Метки нет (Все метки)

Уважаемые гуру! Написал прогу САБЖ. Юзер вводит ответ на пример, который задает программа. Если ответ true - выводит рандомно реплики по типу "Хорошо" или "Молодец" и так далее и задает следующий пример. Если ответ false - выводит рандомно реплики по типу "Нет!" или "ЕЩЕ РАЗ!" и так далее и задает тот же вопрос(до получения правильного ответа). Просмотрите пжлст код, если не сложно, и подскажите как оптимизировать его, и какие ошибки обнаружили. Заранее спасибо! Программа работает!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//Образовательная программа
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
 
int numbers(void);
int comments(int);
 
 
main()
{
    int res, out, num1, num2, com;
 
//--Бесконечный цикл
    while(1)
    {
        num1 = numbers();   //Случ. 1-е число
        num2 = numbers();   //Случ. 2-е число
 
        res = num1 * num2;
 
        cout<< "Skolko budet " << num1 << " * " << num2 << "? ";
 
        while(1)    //2-й бесконечный цикл
        {
            cin >> out;
 
            if(res == out)  //Если введен верный рез.
            {
                cout << setw(36);
                com = 1 + rand() % 4;   //Генерирует случайное число от 1 - 4
                
                comments(com);  //функция случ. полож. комента
                
                break;  //и выходим из 2-го цикла в 1-й
            }
 
              com = 5 + rand() % 8; //Генерирует случайное число от 5 - 8
              
              comments(com);    //функция случ. отриц. комента
              
              cout << "Ny otvet? ";
        }
    }
 
getch();
return 0;
}
 
//--Ф-я-генератор случайных чисел
int numbers(void)
{
    int a;
 
    a = 1 + rand() % 9; //Ген. случ чисел от 1 до 9
 
    return a;
}
 
//--Ф-я-генератор ответов
int comments(int com1)
{
    switch(com1)
    {
        case 1:
            cout << "O4en Horowo!" << endl;
            break;
        case 2:
            cout << "Otli4no!" << endl;;
            break;
        case 3:
            cout << "4ydesnaya Rabota!" << endl;;
            break;
        case 4:
            cout << "Davai ewe!" << endl;
            break;
        case 5:
            cout << "HET! Poputaites, ewe, plz." << endl;
            break;
        case 6:
            cout << "Heverno. Tak skolko?" << endl;
            break;
        case 7:
            cout << "He opuskaite ryki!" << endl;
            break;
        case 8:
            cout << "HET! Prodoljaite dalwe." << endl;
            break;
    break;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2010, 17:56
Ответы с готовыми решениями:

Система обучения С++
Здравствуйте, товарищи! У меня есть вопрос проффесиональным разработчикам С++ практиков. Я решил...

Система обучения
Ребят стал такой вопрос, как дальше учить программирование, занимаюсь полтора года, но чего то...

Php: Система обучения
Приветствую всех. В чем суть сабжа. Я собираюсь учиться веб-программированию - backend, php....

Ищу людей для совместного обучения в области машинного обучения
Пишу на питоне посредством библиотеки keras. Было бы неплохо, например, работать над одним...

4
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
01.05.2010, 19:21 2
Не предусмотрено самое главное - "Выход" из программы
А по коду - неудобно добавлять ответы, код в main зависит от содежимого ф-ций comments, т.е. от кол-ва ответов
int comments(...) ничего не возвращает

Вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
int numbers(void);
void comments(bool);
 
main()
{
    int res, out, num1, num2;
 
    //--Бесконечный цикл
    while(1)
    {
        num1 = numbers();       //Случ. 1-е число
        num2 = numbers();       //Случ. 2-е число
 
        res = num1 * num2;
        cout << "Skolko budet " << num1 << " * " << num2 << "? ";
 
        while(1)        //2-й бесконечный цикл
        {
            cin >> out;
 
            if (res == out)  //Если введен верный рез.
            {
                cout << setw(36);
 
                comments(true);  //функция случ. полож. комента
                break;  //и выходим из 2-го цикла в 1-й
            }
            comments(false);    //функция случ. отриц. комента
            cout << "Ny otvet? ";
        }
    }
 
    getch();
    return 0;
}
 
//--Ф-я-генератор случайных чисел
int numbers(void)
{
    return (1 + rand() % 9);     //Ген. случ чисел от 1 до 9
}
 
//--Ф-я-генератор ответов
int comments(bool good)
{
    if (good)
    {
        const int n_good = 4;
        char *s_good[n_good] = {"O4en Horowo!", "Otli4no!", "4ydesnaya Rabota!",
                               "Davai ewe!"};
        int com = rand() % (n_good - 1);
        cout << static_cast<char *>(s_good[com]) << endl;
    }
    else
    {
        const int n_bad = 4;
        char *s_bad[n_bad] = {"HET! Poputaites, ewe, plz.", "Heverno. Tak skolko?",
                              "He opuskaite ryki!", "HET! Prodoljaite dalwe."};
        int com = rand() % (n_bad - 1);
        cout << static_cast<char *>(s_bad[com]) << endl;
    }
}
1
0 / 0 / 1
Регистрация: 30.03.2010
Сообщений: 19
01.05.2010, 20:03  [ТС] 3
Roma_F спасибо большое) Но в твоем коде много того, чего я еще не учил! Учу самостоятельно и сам понимаешь тяжело. Немного подкорректирую код. Забыл сказать, что реплики нужно выводить с помощью свич! =) И еще подскажи если знаешь как выводить русский шрифт в консоль(тему про шрифты я почитал, но там не то, что нужно). Например в борланд с++ было просто поставить пару галочек для соответственной кодировки, а в борланд билдер уже не так
Эту часть понял не совсем, если не сложно поясни. Про bool почитал немного.Выход из проги с помощью крестика, тут не существенно это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int comments(bool good)
{
    if (good)
    {
        const int n_good = 4;
        char *s_good[n_good] = {"O4en Horowo!", "Otli4no!", "4ydesnaya Rabota!",
                               "Davai ewe!"};
        int com = rand() % (n_good - 1);
        cout << static_cast<char *>(s_good[com]) << endl;
    }
    else
    {
        const int n_bad = 4;
        char *s_bad[n_bad] = {"HET! Poputaites, ewe, plz.", "Heverno. Tak skolko?",
                              "He opuskaite ryki!", "HET! Prodoljaite dalwe."};
        int com = rand() % (n_bad - 1);
        cout << static_cast<char *>(s_bad[com]) << endl;
    }
}
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
01.05.2010, 21:59 4
Насчёт выхода я пошутил, а реализовать просто - например выходить при вводе "-1", ну и добавить соответствующую надпись "Для выхода введите -1"

Русский 1:
C++
1
2
3
4
5
6
7
void main()
{
    char s[]="Привет, мир!";
    CharToOem (s, s);
    cout << s;
    getch();
}
Русский 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char *rus(char* st)
{
    unsigned char* p = st;
    while ( *p)
    {
        if (*p >= 192)
            if ( *p <= 239)
            *p -= 64;
        else // р..я
            *p -= 16;
 
        p++;
    }
    return st;
}
 
void main()
{
    char s2[] = "Привет, мир";
    cout << rus("\nЗдесь русский текст");
 
    getch();
}
Возможно ещё есть способы, я много с консолью в Билдере не работал

Эту часть понял не совсем, если не сложно поясни.
там же всё почти как у тебя. (static_cast у меня кстати лишний - что-то я перемудрил, и int на void я исправил только сверху)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void comments(bool good)
{
    if (good) // если нужны хорошие комментарии
    {
        ...
        cout << s_good[com] << endl;
    }
    else // если нужны плохие комментарии
    {
        ...
        cout << s_bad[com] << endl;
    }
}
1
0 / 0 / 1
Регистрация: 30.03.2010
Сообщений: 19
01.05.2010, 23:12  [ТС] 5
спасибо ) На счет выхода ГГГГГ
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2010, 23:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Добавление компьютерного игрока
Подскажите пожалуйсто, что я не так и может не туда пишу)) но компьютерный ход в крестиках ноликах...

СБОРКА КОМПЬЮТЕРНОГО БЛОКА
Всем привет! Напишите пожалуйста сборку для игры в гта5 онлайн на норм. настройках, лучше без...

Тест компьютерного железа
Доброго время суток всем. Посоветуйте набор программ для теста компьютерных комплектующих типа...

Настройка компьютерного класса
Всем здравствуйте, подскажите пожалуйста. Настроил оснастку MMC (множественную групповую политику)...

Переделка компьютерного БП в лабораторный
http://**************************/download/file.php?id=19412&amp;t=1&amp;sid=d4f1fd28785d52e53a42a3aaf52e64f0...

Обновление компьютерного железа
Здравствуйте, на данный момент использую данные комплектующие: 1) процессор Ryzen 3 2200G cо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.