Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Тренажер по арифметике - C++

14.01.2013, 12:33. Просмотров 884. Ответов 10
Метки нет (Все метки)

Пользователь-учитель вводит с клавиатуры разрядность операндов, тип операции: + – * / (на множестве натуральных чисел) и количество примеров. Компьютер генерирует случайным образом операнды, результат операции и выводит пользователю-ученику серию примеров, в каждом из которых один из операндов или результат «замаскирован», например: 37*_=1591. Ученик вводит пропущенное число (в приведенном примере – 41); компьютер проверяет правильность и ведет статистику ошибок.
Вывод происходит на экран, однако, дублируется записью в текстовый файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void main()
{
 srand( time(NULL));
 setlocale(ALL,LC_"Russian");
 char left = 'left';
 char right = 'right';
 char anywhere = 'anywhere';
 char typ;
 int kol,raz;
 cout<<"Введите тип операции:\n";
 cin>>typ;
 cout<<"Введите количество примеров:\n";
 cin>>kol;
 cout<<"Введите разрядность операндов:\n";
 cin>>raz;
 switch(typ){
  case '+': getSum();
  case '-': getSub();
  case '*': getMul();
  case '/': getDiv();
  default: cout << "ОШИБКА! Введите одно из операций: + - * /":
}
Добавлено через 2 минуты
Вот есть версия на Java...пытаюсь переделать под с++
Javascript
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
var mtres = [2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 80, 81, 90, 100];
var left = 'left';
var right = 'right';
var anywhere = 'anywhere';
var add = 0;
var sub = 1;
var mul = 2;
var div = 3;
var max_mul_index, max_div_index;
 
function getSum(lim) {
    var c = Math.floor((Math.random()*lim) + 1);
    var b = Math.floor((Math.random()*c) + 1);
    var a = c - b;
    return [a, b, c];
}
 
function getMult(lim) {
    var c = Math.floor((Math.random()*lim) + 1);
    var b = Math.floor((Math.random()*(c/2)) + 1);
    while ((c%b) !== 0) {
        b--;
    }
    if (Math.random() > 0.5) {
        return [b, c/b, c];
    }
    else return [c/b, b, c];
}
 
function getTableMult(max_index) {
    var c = mtres[Math.floor(Math.random()*(max_index+1))];
    var b = Math.floor((Math.random()*10) + 1);
    while (!(((c%b) === 0) && ((c/b) <= 10))) {
        b++;
        if (b > 10) b = 2;
    }
    return [c/b, b, c];
}
 
function getMaxIndex(lim) {
    var i = mtres.length - 1;
    while ((mtres[i] > lim) && (i > 0)) {
        i--;
    }
    return i;
}
 
function go() {
 
    var action_add_checked, action_sub_checked, action_mul_checked, action_div_checked, table_only_checked;
    var lim_add, lim_sub, lim_mul, lim_div;
    var x_position;
    var symbol;
    var q;
    var result = '';
 
    action_add_checked = document.getElementById('add').checked;
    action_sub_checked = document.getElementById('sub').checked;
    action_mul_checked = document.getElementById('mul').checked;
    action_div_checked = document.getElementById('div').checked;
    table_only_checked = document.getElementById('table_only').checked;
    lim_add = document.getElementById('lim_add').value;
    lim_sub = document.getElementById('lim_sub').value;
    lim_mul = document.getElementById('lim_mul').value;
    lim_div = document.getElementById('lim_div').value;
    x_position = document.getElementById('position').value;
    symbol = document.getElementById('symbol').value;
    q = document.getElementById('q').value;
 
    if (table_only_checked) {
        if (lim_mul > 100) lim_mul = 100;
        if (lim_div > 100) lim_div = 100;
        if (action_mul_checked) max_mul_index = getMaxIndex(lim_mul);
        if (action_div_checked) max_div_index = getMaxIndex(lim_div);
    }
 
    var selected = new Array();
    if (action_add_checked) selected[selected.length] = add;
    if (action_sub_checked) selected[selected.length] = sub;
    if (action_mul_checked) selected[selected.length] = mul;
    if (action_div_checked) selected[selected.length] = div;
 
    var mode;
    if (selected.length === 1) {
        mode = selected[0];
    }
    
    var numbers, action_symbol;
    for (i = 0; i < q; i++) {               
        if (selected.length > 1) {
            mode = selected[Math.floor(Math.random()*(selected.length))];
            }
 
        switch (mode) {
            case add:
                numbers = getSum(lim_add);
                action_symbol = '+';
                break;
            case sub:
                numbers = getSum(lim_sub).reverse();
                action_symbol = '-';
                break;
            case mul:
                if (table_only_checked) {
                    numbers = getTableMult(max_mul_index);
                }
                else {
                    numbers = getMult(lim_mul);
                }
                action_symbol = '*';
                break;
            case div:
                if (table_only_checked) {
                    numbers = getTableMult(max_div_index);
                }
                else {
                    numbers = getMult(lim_div);
                }
                numbers.reverse();
                action_symbol = ':';
                break;
            default:
        }
        if (x_position === right) {
            numbers[2] = symbol;
        }
        else if (x_position === left) {
            numbers[Math.floor(Math.random()*2)] = symbol;
        }
        else if (x_position === anywhere) {
            numbers[Math.floor(Math.random()*3)] = symbol;
        }
        result += numbers[0] + action_symbol + numbers[1] + ' = ' + numbers[2] + '\n';
    }
    document.getElementById('result').value = result;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 12:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Тренажер по арифметике (C++):

целочисленной арифметике - C++
Определить, сколько цифр в каждом числе n из заданной последовательности чисел. Если количество цифр чётное, то получить из него число...

по целочисленная арифметике - C++
дано натуральное число N.найти наибольшие число M(M&gt;1), на которые сумма цифр в цисловой записи числа N делится без остатка.Если такого...

Ошибка в длинной арифметике - C++
Помогите найти ошибку в программе. Задача сводится к тому, чтобы просумировать числа ввода и вычислить их среднее арифметическое. Немогу...

Система остаточных классов в длинной арифметике - C++
Добрый день, коллеги. Занялся реализацией длинной арифметики (так, чисто для тренировки) и у меня возник вопрос. Пробовал ли...

Числа Фибоначчи в длинной арифметике (код почти готов, но я застолбил) - C++
Здравствуйте, дорогие форумчане. Есть такое задание, как написать код для 100 чисел Фибоначчи в длинной арифметике. Делал я его, делал, и...

Совет в написании/использовании длинной арифметике на примере чисел Фибоначчи - C++
Доброго времени суток. Недавно передо мною появилось задание использование длинной арифметики. Немного покопавшись я наткнулся на эту тему:...

10
Jupiter
14.01.2013, 14:01
  #2

Не по теме:

Цитата Сообщение от SKELETTTON Посмотреть сообщение
Вот есть версия на Java
это java script

0
SKELETTTON
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 5
14.01.2013, 14:13  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


это java script

Нет, это бэйсик!
0
gray_fox
14.01.2013, 14:32
  #4

Не по теме:

SKELETTTON, как бы Java и JavaScript разные языки, если что )

0
SKELETTTON
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 5
14.01.2013, 14:51  [ТС] #5
Цитата Сообщение от gray_fox Посмотреть сообщение

Не по теме:

SKELETTTON, как бы Java и JavaScript разные языки, если что )

А я на чем по твоему выложил?
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.01.2013, 20:37 #6
Вот, задание похоже было, не знаю, подойдет ли
Кликните здесь для просмотра всего текста

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
//main.cpp
 
#include <iostream>
#include <conio.h>
#include "myLib.h"
 
using namespace std;
 
int switcher (int current, int value1, int value2, int position);
 
int main ()
{
    int nOfErors = 0;
    int nOfRightAnswers = 0;
    int value1, value2, rezultRight, rezultUser;
    int choise;
    int minVal, maxVal;
    int current;
    int position = 3;
    
    
    cout << "Choose level: ";
    cout << "\n1 - Easy";
    cout << "\n2 - Medium";
    cout << "\n3 - Hard\n";
    
    cin >> choise;
    
    switch (choise)
    {
           case 1:
                minVal = 1;
                maxVal = 100;
                break;
                
           case 2:
                minVal = 100;
                maxVal = 500;
                break;
                
           case 3:
                minVal = 500;
                maxVal = 1000;
                break;
                
           default:
                   cout << "\n\nInvalid choise!";
                   getch();
                   exit (0);
                   break;
    }
                
    
    for (;;)
    {
        position = TXrandom (1,4);
        value1 = TXrandom (minVal, maxVal);
        value2 = TXrandom (minVal, maxVal);
        current = TXrandom (1,5);
        
        rezultRight = switcher (current, value1, value2, position);
        
        cout << "\n";
        
        cin >>  rezultUser;
        
        if (rezultUser == rezultRight)
        {
                       cout << "\nRight!";
                       nOfRightAnswers++;
        }
        
        else 
        {
                       cout << "\nWrong!\nRight answer = " << rezultRight;
                       nOfErors++;
        }
        
        cout << "\n\nRight answers: " << nOfRightAnswers;
        cout << "\nWrong answers: " << nOfErors;
        getch();
        system ("cls");
    }
            
        
    getch();
    return 0;
}
 
int switcher (int current, int value1, int value2, int position)
{
        int rezultRight;
        switch (current)
        {
               case 1:
                    rezultRight = value1 + value2;
                    switch (position)
                    {
                           case 1:
                           cout << "\n? + " << value2 << " = " << rezultRight;
                           return value1;
                           break;
                    
                           case 2:
                           cout << value1 << " + ?" << " = " << rezultRight;
                           return value2;
                           break;
                    
                           case 3:
                           cout << value1 << " + " << value2 << " = ?";
                           return rezultRight;
                           break;
                    }
                    
                    break;
                    
               case 2:
                    rezultRight = value1 - value2;
                    switch (position)
                    {
                           case 1:
                           cout << "\n? - " << value2 << " = " << rezultRight;
                           return value1;
                           break;
                    
                           case 2:
                           cout << "\n" << value1 << " - ?" << " = " << rezultRight;
                           return value2;
                           break;
                    
                           case 3:
                           cout <<  "\n" << value1 << " - " << value2 << " = ?";
                           return rezultRight;
                           break;
                    }
                    
 
                    break;
                    
               case 3:
                    rezultRight = value1 * value2;
                    switch (position)
                    {
                           case 1:
                           cout << "\n? * " << value2 << " = " << rezultRight;
                           return value1;
                           break;
                    
                           case 2:
                           cout << "\n" << value1 << " * ?" << " = " << rezultRight;
                           return value2;
                           break;
                    
                           case 3:
                           cout <<  "\n" << value1 << " * " << value2 << " = ?";
                           return rezultRight;
                           break;
                    }
                    
                    break;
                    
               case 4:
                    rezultRight = value1 / value2;
                    switch (position)
                    {
                           case 1:
                           cout << "\n? / " << value2 << " = " << rezultRight;
                           return value1;
                           break;
                    
                           case 2:
                           cout << "\n" << value1 << " / ?" << " = " << rezultRight;
                           return value2;
                           break;
                    
                           case 3:
                           cout << "\n" << value1 << " / " << value2 << " = ?";
                           return rezultRight;
                           break;
                    }
                    
                    return rezultRight;
                    break;
        }
}

C++
1
2
3
4
5
//myLib.h
#ifndef MYLIB
#define MYLIB
int TXrandom (int min, int max);
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//myLib.cpp
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
using namespace std;
 
 
int TXrandom (int min, int max)
{
    srand ( time (NULL) + rand() );
    
    int temp = max - min;
    
    if (temp == 0)
       temp = 1;
    
    int value = rand() % temp + min;
    return value;
}


Добавлено через 4 минуты
Только с делением проблемы (сами увидите)
0
v.a.l.i.d
416 / 381 / 10
Регистрация: 21.09.2012
Сообщений: 913
14.01.2013, 21:06 #7
Цитата Сообщение от coloc Посмотреть сообщение
Только с делением проблемы
для этого можно было числа сделать double.
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.01.2013, 21:13 #8
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
для этого можно было числа сделать double.
Если ТС надо, переделает.
0
isaak
107 / 44 / 9
Регистрация: 17.10.2010
Сообщений: 685
14.01.2013, 22:57 #9
А как сделать, чтобы при деление на 0 выскакивало сообщение "Wrong value" и при делении числа на неизвестное исключить результат равный 0?????? Заранее огромное спасибо.
0
coloc
погромист
411 / 247 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.01.2013, 23:42 #10
Вы это к моему коду? Там ноль никак не сгенерируется, потому что
C++
1
2
3
minVal = 1;
maxVal = 100;
value2 = TXrandom (minVal, maxVal);
1
JonSnow1
0 / 0 / 0
Регистрация: 02.04.2018
Сообщений: 1
23.04.2018, 01:34 #11
Подскажите пожалуйста, как сделать чтобы можно было выбирать знак действия(+,-,*,/) и примеры выводились только на этот знак
0
23.04.2018, 01:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2018, 01:34
Привет! Вот еще темы с ответами:

Предложить эффективный алгоритм умножения числа на дробь в длинной арифметике - C++
Нам дано длинное натуральное число, представленное в виде динамического массива: 1) разряды числа записываются от старшего к младшему;...

Олимпиадная задача. Юный программист Петя обучает своего младшего брата арифметике - C++
Карточки для счета Юный программист Петя обучает своего младшего брата арифметике. Петя заготовил много карточек, на каждой из которых...

Клавиатурный тренажер - C++
Как перехватывать нажатые клавиши на клавиатуре, чтобы я мог их сравнивать с текстом на экране? Ведь я не ввожу их в Edit, а просто нажимаю...

Тренажер клавиатуры - C++
Помогите, пожалуйста! как правильно реализовать такую задачу? Определить класс «Тренажёр клавиатуры», с закрытым элементом строкой s1...


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

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

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