Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
1

задачка математические выражения

06.12.2019, 17:45. Показов 1736. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть задачка в виде уравнения (показываем уравнение. ждем недостающего. отдаем верно/не верно)
A + B = C
где знак операции может быть одним из “+”, “-”, “*” и “/”.
сами числа (переменные) могут быть как одноразрядными, так и повышать разрядность в зависимости от сложности.
сложность идет по возрастанию и бывает такая:
1) только знак “+” и только “В” может быть неизвестной. результат и числа участвующие в выражении не больше 10.
2) знак “+”. неизвестной может быть одна из А/В
3) знак “+”. неизвестной может быть одна из А/В/С
4) знак “+”. неизвестной может быть одна из А/В/С. результат и числа участвующие в выражении не больше 20.
5) знак “+” и “-” ...
и так далее по наращиванию сложности...


существует 2 варианта:
одна из переменных A, B и C может быть неизвестной
уравнение принимает вид
A + B = ?
A + ? = C
? + B = C
неизвестен знак
A ? B = C

я набросал как это понимаю я и как позволяет мой уровень понимания запрограммировать. но вижу получается ерунда.
с помощью свитча выходит уже 12 видов и это без учета того что сам знак может быть тоже неизвестным.

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
public void Mathem()
    {
        int A = 0;
        int B = 0;
        int C = 0;
 
        int type = 0;
        int maxType = 3;
        type = Utils.RandomNumber(0, maxType);
        int digitCapacity = 10; // может быть 10/20/50/100/500/1000 (зависит от type)
        string expression = "";
 
        if (type < 3)
        {
            // логика создания чисел для выражения (А+В=С)
            C = Utils.RandomNumber(2, digitCapacity + 1); // сумма не должна превышать digitCapacity
            A = Utils.RandomNumber(0, C + 1); // да мы можем в переменной использовать "0"
            B = C - A;
        }
        else
        if (type < 6)
        {
            // логика создания чисел для выражения (А-В=С)
            A = Utils.RandomNumber(2, digitCapacity + 1); // первая переменная не должна быть больше digitCapacity
            B = Utils.RandomNumber(0, A + 1);
            C = A - B;
        }
        else
        if (type < 9)
        {
            // умножение
        }
        else
        if (type < 12)
        {
            // деление
        }
 
        switch (type)
        {
            case 0:
                expression = $"{A} + {B} = ?";
                break;
            case 1:
                expression = $"{A} + ? = {C}";
                break;
            case 2:
                expression = $"? + {B} = {C}";
                break;
            case 3:
                expression = $"{A} - {B} = ?";
                break;
            case 4:
                expression = $"{A} - ? = {C}";
                break;
            case 5:
                expression = $"? - {B} = {C}";
                break;
                // деление
                // умножение
            default:
                break;
        }
 
        System.Console.WriteLine(expression);
        System.Console.ReadKey();
 
        // обработка ответа
        // ...
    }
прошу помощи. подскажите как это можно реализовать и что подучить. если примером в меня кинете, чтобы понять.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2019, 17:45
Ответы с готовыми решениями:

Записать указанные математические выражения на языке C#

Программа которая считает математические выражения и скобки
Здравствуйте) Я создаю программу которая считает математические выражения (вводишь в техбох 1...

Математические выражения
Fx=

Математические выражения
1. Как переводится and a separate validation set, also called a hold-out set, used to optimize...

6
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
06.12.2019, 21:30 2
Правда здесь нет проверки на деление на ноль и случайное число берётся не по вашим правилам, но всё можно исправить.


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
static void Main(string[] args)
{
    Random rand = new Random();
 
 
    while (true)
    {
        string[] operators = { "+", "-", "/", "*" };
        int randOperator = rand.Next(0, 4); // 0 +,  1 -,  2 /,  3 *
        int A = rand.Next(1, 10);
        int B = rand.Next(1, 10);
        int C = rand.Next(1, 10);
 
        switch (randOperator)
        {
            case 0: C = A + B; break;
            case 1: C = A - B; break;
            case 2: C = A / B; break;
            case 3: C = A * B; break;
            default:
                break;
        }
 
        string[] template = { A.ToString(), operators[randOperator], B.ToString(), C.ToString() };
        int randX = rand.Next(4); // 0 -> A, 1 -> operator, 2 -> B, 3 -> C
        string answer = template[randX];
        template[randX] = "?";
 
        Console.WriteLine($"{template[0]} {template[1]} { template[2]} = {template[3]}");
        Console.Write("Ваш ответ: ");
 
        if (Console.ReadLine() == answer)
        {
            Console.WriteLine("Верно!!!\n");
        }
        else
        {
            Console.WriteLine("..неверно\n");
        }
 
    }
 
 
}
1
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
06.12.2019, 22:17 3
Все числа всегда будут положительные, все деления всегда будут целыми, единственно что не учитывает это двойной правильный ответ, типа 4 ? 1 = 4, тут правильно будет и * и /, ну и с делением на ноль проблемы тоже))
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
using System;
 
class Program
{
    static void Main(string[] args)
    {
        while (true)
        {
            var result = Generator.Next(2, 10);
 
            Console.WriteLine(result.expression);
 
            var input = Console.ReadLine();
 
            if (input != result.answer)
            {
                Console.WriteLine("No!");
            }
            else
                Console.WriteLine("Yes!");
        }
    }
}
 
public static class Generator
{
    public struct Result
    {
        public string answer;
        public string expression;
    }
 
    static Random r = new Random();
 
    public static Result Next(int min, int max)
    { 
        string sign = string.Empty;
 
        int a = r.Next(min, max);
        int b = r.Next(min, max);
        int c = 0;
 
        switch (r.Next(0, 4))
        {
            case 0:
                sign = "+";                
                c = a + b;
                break;
 
            case 1:
                sign = "-";
                if (a < b)
                    Swap(ref a, ref b);
                c = a - b;
                break;
 
            case 2:
                sign = "*";
                c = a * b;
                break;
 
            case 3:
                sign = "/";
                if (a < b)
                    Swap(ref a, ref b);
                int mod = a % b;
                if (mod != 0)
                    a -= mod;
                c = a / b;
                break;
        }
 
        var array = new string[]
        {
            a.ToString(),
            sign,
            b.ToString(),
            c.ToString()
        };
 
        Result result = new Result();
        int unknown = r.Next(0, 4);
        result.answer = array[unknown];
        array[unknown] = "?";
        result.expression = $"{array[0]} {array[1]} {array[2]} = {array[3]}";
 
        return result;
    }
 
    static void Swap(ref int a, ref int b)
    {
        a ^= b;
        b ^= a;
        a ^= b;
    }
}
1
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
08.12.2019, 17:32  [ТС] 4
интересное решение.

а ещё есть варианты?
может там через лексемы (я не уверен что это именно так называется. калькулятор кажется так работает)
0
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
09.12.2019, 10:51  [ТС] 5
Цитата Сообщение от samana Посмотреть сообщение
всё можно исправить.
1max1,
это уже все нюансы.

мне главное увидеть другие решения чтобы менять свою логику. хромает она.
0
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
09.12.2019, 20:28 6
Цитата Сообщение от MuaddibFremen Посмотреть сообщение
мне главное увидеть другие решения чтобы менять свою логику. хромает она.
В самом начале вы спросили:
Цитата Сообщение от MuaddibFremen Посмотреть сообщение
подскажите как это можно реализовать
Вам показали несколько способов, попробуйте теперь придумать и свой вариант.
0
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
10.12.2019, 10:59  [ТС] 7
samana, с этими вариантами я разобрался. спасибо.
но может еще есть и другие варианты. взгляды на этот вопрос.
0
10.12.2019, 10:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2019, 10:59
Помогаю со студенческими работами здесь

Математические выражения
Здравствуйте! Помогите разобраться, пожалуйста и исправить ошибки, если они есть. Файл задания...

Математические выражения в c++
Привет. Такая задача. Мне даны 3 числа и я должен написать программу, которая используя эти 3 числа...

Записать математические выражения
Всем привет! Нужно написать программку на вывод следующих математические выражения, но не знаю с...

Математические выражения на языке С++
Всем привет! Не дает мне покоя одна задачка. Вот как выглядит в оригинале. И вот как я...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru