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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Класс-шаблон http://www.cyberforum.ru/cpp-beginners/thread267850.html
Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода элементов массива на экран, а так же для подсчета суммы элементов массива, расположенных после последнего элемента, равного нулю. Продемонстрировать работу методов класса.
C++ Написать программу с родовым классом у которого есть поле двумерного массива... Написать программу с родовым классом у которого есть поле двумерного массива, описать метод с помощью которого меняются местами два столбца массива. Добавлено через 2 часа 24 минуты Никто помочь не может? ( http://www.cyberforum.ru/cpp-beginners/thread267845.html
C++ свич
подскажите пожалуйсто, как сделать чтобы после выполнения задачи 1 он сново просил нажать на цифру, пока не пройдут все? switch(A) { case 1: zad1(); break; case 2: zad2(); break; case 3: zad3(); break; case 4: zad4(); break; default:cout<<" Вы ввели не правильный номер "; }
C++ Алгоритм Дейкстры(нерабочий)
Написал программу по нахождению кратчайшего пути алгоритмом Дейкстры. С простыми примерами программа справляется, но, к примеру, если где-то начиная со второй вершины происходит разветвление, то программа уходит в бесконечный цикл. Суть проблемы вижу - не все элементы матрицы зануляются. Но как сделать программу работоспособной, не знаю) помогите советом... #include<stdio.h> #include<conio.h>...
C++ Элементы очереди http://www.cyberforum.ru/cpp-beginners/thread267832.html
Всем привет... Помогите доработать процедуру.... Вот в этой процедуре не могу разобраться с указателями чтобы добавить элементы в конец очереди void add(int add_num) { int i; node *v,*p; if(i % 2 !=0) { v=new node; v->info=i; v->next=p->NULL;
C++ Диалог Реализовать в программе диалог с помощью меню, для выполнения указанных в задании действий, и контроль ошибок. при вводе. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
01.04.2011, 10:11     Тренажёр по устному счету
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;
}
 
Текущее время: 01:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru