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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alfsei
0 / 0 / 0
Регистрация: 23.03.2011
Сообщений: 13
#1

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

31.03.2011, 18:36. Просмотров 921. Ответов 8
Метки нет (Все метки)

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

программа берет слово, к примеру Hello, и удаляет в нем какую либо букву указанную программистом по счету, C++
На счету в банке 1000руб.Через каждый месяц размер вклада увеличивался на 2%. Когда будет 1200? C++
C++ Определить каким по счету идет в последовательности рандомных чисел число введенное пользователем
C++ Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент
C++ Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент
C++ Вывести 2е по счету слово введеное в строку
C++ Текстовые файлы. Определить, в каком по счету предложении впервые встретилось заданное слово
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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
211 / 211 / 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
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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++
Написать процедуру поиска индекса n-го по счету нулевого элемента в одномерном массиве C++
C++ Реализовать функцию, возвращающую i-е по счету слово от начала строки s, либо пустую строку

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

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

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

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