Форум программистов, компьютерный форум CyberForum.ru

Тренажёр по устному счету - C++

Восстановить пароль Регистрация
 
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
31.03.2011, 18:36     Тренажёр по устному счету #1
Написать программу, моделирующую тренажер по устному счету. Пользователь вводит разрядность операндов, тип операции (+ - * /) на множестве натуральных чисел и количество примеров. Компьютер генерирует случайным образом операнды, вычисляет результат операции и выводит пользователю серию примеров, в каждом из которых один из операндов или результат замаскирован. Пользователь вводит пропущенное число, компьютер проверяет правильность и ведет статистику ошибок.
Может кто нибудь знает или сталкивался.Скажите кто че знает плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2011, 18:36     Тренажёр по устному счету
Посмотрите здесь:

программа берет слово, к примеру Hello, и удаляет в нем какую либо букву указанную программистом по счету, C++
C++ Определить каким по счету идет в последовательности рандомных чисел число введенное пользователем
C++ Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент
C++ Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент
C++ Вывести 2е по счету слово введеное в строку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DexMipt
13 / 13 / 1
Регистрация: 13.03.2011
Сообщений: 98
31.03.2011, 19:00     Тренажёр по устному счету #2
числа можно генерировать функцией
C
1
2
srand(time(NULL));
int k=rand();
А что именно у вас не получается, на каком моменте возникли ошибки..
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
01.04.2011, 10:11     Тренажёр по устному счету #3
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
/////////////////////////////////////////////////////////////////////////////////////////
//Написать программу, моделирующую тренажер по устному счету. Пользователь вводит 
//разрядность операндов, тип операции (+ - * /) на множестве натуральных чисел 
//и количество примеров. Компьютер генерирует случайным образом операнды, 
//вычисляет результат операции и выводит пользователю серию примеров, 
//в каждом из которых один из операндов или результат замаскирован. 
//Пользователь вводит пропущенное число, компьютер проверяет правильность 
//и ведет статистику ошибок.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<int>    T_nums;
typedef std::string         T_str;
typedef std::vector<T_str>  T_nums_strings;
/////////////////////////////////////////////////////////////////////////////////////////
const char  OP_PLUS   = '+';
const char  OP_MINUS  = '-';
const char  OP_MULT   = '*';
const char  OP_DIV    = '/';
/////////////////////////////////////////////////////////////////////////////////////////
void  input_data
    (
        int&   dig_capacity,
        char&  op,
        int&   tests_total
    )
{
    const int  DIG_CAPACITY_MIN = 1;
    const int  DIG_CAPACITY_MAX = 3;
    do
    {
        std::cout << "Разрядность операндов ("
                  << DIG_CAPACITY_MIN
                  << ".."
                  << DIG_CAPACITY_MAX
                  << "): ";    
 
        std::cin >> dig_capacity;    
    }while(   dig_capacity      < DIG_CAPACITY_MIN
           || DIG_CAPACITY_MAX  < dig_capacity );
 
    std::cout << std::endl;
       
    do
    {
        std::cout << "Операция ("
                  << OP_PLUS
                  << " "
                  << OP_MINUS
                  << " "
                  << OP_MULT
                  << " "
                  << OP_DIV
                  << "): ";    
 
        std::cin >> op;        
    }while(   op != OP_PLUS
           && op != OP_MINUS
           && op != OP_MULT
           && op != OP_DIV );
 
    std::cout << std::endl;
    
    const int  TESTS_TOTAL_MIN = 1;
    const int  TESTS_TOTAL_MAX = 10;
    do
    {
        std::cout << "Количество примеров ("
                  << TESTS_TOTAL_MIN 
                  << ".."
                  << TESTS_TOTAL_MAX
                  <<"): ";    
 
        std::cin >> tests_total;        
    }while(   tests_total      < TESTS_TOTAL_MIN
           || TESTS_TOTAL_MAX  < tests_total );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  get_rand_with_dig_capacity(int  dig_capacity)
{
    int  val_min  = int( pow(10.0, dig_capacity - 1) );
    int  val_max  = int( pow(10.0, dig_capacity) ) - 1;
    int  mod      = val_max - val_min + 1;
    return  rand() % mod + val_min;
}
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_num_to_str
{
    T_str  operator() (int  n)
    {
        std::ostringstream  sout;
        sout << n;
        return  sout.str();
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
bool  good_exec_test(int  dig_capacity, char  op)
{  
    int  left_operand   = get_rand_with_dig_capacity(dig_capacity);
 
    int  right_operand  = 0;
    do
    {
        right_operand = get_rand_with_dig_capacity(dig_capacity);
    }while(   op            == OP_MINUS
           && left_operand  < right_operand );
    
    int  num_result = left_operand;
 
    switch(op)
    {
    case OP_PLUS:
        num_result += right_operand;
        break;
 
    case OP_MINUS:
        num_result -= right_operand;
        break;
 
    case OP_MULT:
    case OP_DIV:
        num_result *= right_operand;
        break;
    }
 
    T_nums  nums;
    nums.push_back(left_operand);
    nums.push_back(right_operand);
    nums.push_back(num_result);
 
    if(op == OP_DIV)
    {
        std::reverse(nums.begin(), nums.end());
    }
    
    T_nums_strings  nums_strings;
    std::transform(nums.begin(), nums.end(), std::back_inserter(nums_strings),
                   T_num_to_str());
    
    int  hidden_num_ind  = rand() % nums.size();
    int  test_num        = nums[hidden_num_ind];
    nums_strings[hidden_num_ind] = T_str(nums_strings[hidden_num_ind].size(), '?');
 
    std::cout << std::endl
              << std::endl
              << std::endl
              << std::endl
              << nums_strings[0] 
              << " "
              << op
              << " "
              << nums_strings[1] 
              << " = "
              << nums_strings[2] 
              << std::endl
              << "Введите скрытое число: ";
 
    int  users_test_num = 0;
    std::cin >> users_test_num;
    bool  bool_res = users_test_num == test_num;
    std::cout << "Ответ "
              << (bool_res ? "верный." : "НЕверный.")
              << std::endl;
 
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    srand(static_cast<unsigned>(time(0)));
    int   dig_capacity  = 0;
    char  op            = 0;
    int   tests_total   = 0;
 
    input_data
        (
            dig_capacity,
            op,
            tests_total
        );
 
    int  errors_counter = 0;
    for(int  i = 0; i < tests_total; ++i)
    {
        if( !good_exec_test(dig_capacity, op) )
        {
            ++errors_counter;
        }
    }
 
    std::cout << std::endl
              << "В "
              << tests_total
              << " примерах допущено "
              << errors_counter
              << " ошибок."
              << std::endl;
}
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
01.04.2011, 18:20  [ТС]     Тренажёр по устному счету #4
Спасибо большое,а как это будет выглядеть в консольном режиме.
NiRamz
209 / 209 / 16
Регистрация: 26.12.2010
Сообщений: 691
01.04.2011, 19:08     Тренажёр по устному счету #5
Цитата Сообщение от alfsei Посмотреть сообщение
Спасибо большое,а как это будет выглядеть в консольном режиме.
это и есть в консоли
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
02.04.2011, 12:19  [ТС]     Тренажёр по устному счету #6
просто у меня пока билдера нет я через MS-DOS открываю программу.А так спасибо.Через билдер попробую потом открыть.СПС.
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
09.04.2011, 19:08  [ТС]     Тренажёр по устному счету #7
В предложенной выше программе компилятор выдаёт следующие ошибки,помогите их исправить пожалуйста.Вот ошибки:
Миниатюры
Тренажёр по устному счету  
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
09.04.2011, 20:59     Тренажёр по устному счету #8
Похоже, что ваш компилятор не воспринимает новую форму записи имен заголовочных файлов.
Попробуйте вместо
C++
1
2
3
#include <cmath>
#include <cstdlib>
#include <ctime>
включить
C++
1
2
3
#include <math.h>
#include <stdlib.h>
#include <time.h>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2011, 14:11     Тренажёр по устному счету
Еще ссылки по теме:

C++ Текстовые файлы. Определить, в каком по счету предложении впервые встретилось заданное слово
C++ Обучение устному счёту: проверка количества правильных и неправильных ответов
Каким символом по счету встречается первая буква «а» C++

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

Или воспользуйтесь поиском по форуму:
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
10.04.2011, 14:11  [ТС]     Тренажёр по устному счету #9
Хорошо попробую,Спасибо.

Добавлено через 2 часа 12 минут
Всё работает,спасибо.
Yandex
Объявления
10.04.2011, 14:11     Тренажёр по устному счету
Ответ Создать тему
Опции темы

Текущее время: 13:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru