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

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

Восстановить пароль Регистрация
 
SKELETTTON
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 5
14.01.2013, 12:33     Тренажер по арифметике с++ #1
Пользователь-учитель вводит с клавиатуры разрядность операндов, тип операции: + – * / (на множестве натуральных чисел) и количество примеров. Компьютер генерирует случайным образом операнды, результат операции и выводит пользователю-ученику серию примеров, в каждом из которых один из операндов или результат «замаскирован», например: 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
14.01.2013, 14:01
  #2

Не по теме:

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

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

Не по теме:


это java script

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

Не по теме:

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

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

Не по теме:

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

А я на чем по твоему выложил?
coloc
погромист
 Аватар для coloc
409 / 245 / 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 минуты
Только с делением проблемы (сами увидите)
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
14.01.2013, 21:06     Тренажер по арифметике с++ #7
Цитата Сообщение от coloc Посмотреть сообщение
Только с делением проблемы
для этого можно было числа сделать double.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.01.2013, 21:13     Тренажер по арифметике с++ #8
Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
для этого можно было числа сделать double.
Если ТС надо, переделает.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
14.01.2013, 22:57     Тренажер по арифметике с++ #9
А как сделать, чтобы при деление на 0 выскакивало сообщение "Wrong value" и при делении числа на неизвестное исключить результат равный 0?????? Заранее огромное спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 23:42     Тренажер по арифметике с++
Еще ссылки по теме:

Тренажер по арифметике
C++ Написать клавиатурный тренажер
Ошибка в длинной арифметике C++

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

Или воспользуйтесь поиском по форуму:
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
14.01.2013, 23:42     Тренажер по арифметике с++ #10
Вы это к моему коду? Там ноль никак не сгенерируется, потому что
C++
1
2
3
minVal = 1;
maxVal = 100;
value2 = TXrandom (minVal, maxVal);
Yandex
Объявления
14.01.2013, 23:42     Тренажер по арифметике с++
Ответ Создать тему
Опции темы

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