Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
11 / 11 / 11
Регистрация: 09.12.2014
Сообщений: 89
1

Арифметические вычисления со случайными числами и операциями (+/-)

20.05.2015, 19:35. Показов 1274. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть интересная задумка:
Создать программу, которая генерирует два случ. числа, потом берет из массива случайный знак (+,-,/,*), подставляет между двух чисел и считает, что получилось.
Прога нужна, чтобы сделать кучу примеров для натаскивания дитя и избавления родителя от вычислений.

Тупо в файл генерируются примеры а в другой примеры с ответами. (вывод в файл и генерацию я умею делать)

Так вот вопрос, как реализовать подстановку знака и расчет?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 19:35
Ответы с готовыми решениями:

Создать стек со случайными целыми числами. Удалить из него записи с четными числами.
Создать стек со случайными целыми числами. Удалить из него записи с четными числами.

Арифметические операции с числами
Не могу определить ошибку,помогите пожалуйсто. Над введенными числами осуществляется...

Арифметические операции с числами
Составьте программу, выводящую на экран текст: Для любых двух чисел вычисляю: 1) сумму...

Арифметические операции над числами
Пользователь вводит с клавиатуры два целочисленных значения: X и Y. Рассчитать сумму X+Y и...

6
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 5
20.05.2015, 19:50 2
Ну можно как то так попробывать :
Создать 2 массива с рандомным заполнением , в 1 будут просто рандомные числа для бующего примера, а во втором рандомные числа от 0 до 3 которые и будут означать знак ( например если i=0 то делать сложение ) ну сделать 4 условия ...
0
11 / 11 / 11
Регистрация: 09.12.2014
Сообщений: 89
20.05.2015, 20:05  [ТС] 3
ferdass, а если пример будет состоять из N действий сколько же условий придется делать!
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
20.05.2015, 21:31 4
Лучший ответ Сообщение было отмечено AlexM24 как решение

Решение

deleted

Добавлено через 8 минут
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
int sum(int a, int b) {
    return a+b;
}
 
int mul(int a, int b) {
    return a*b;
}
 
typedef struct {
    char sign;
    int(*func)(int, int);
} operation;
 
int main() {
    srand(time(0));
    operation operations[2];
    operations[0].sign = '+';
    operations[0].func = sum;
    operations[1].sign = '*';
    operations[1].func = mul;
    int a = rand() % 100;
    int b = rand() % 100;
    int sign = rand() % 2;
    printf("%d%c%d=%d", a, operations[sign].sign, b, operations[sign].func(a, b));
    return 0;
}
1
11 / 11 / 11
Регистрация: 09.12.2014
Сообщений: 89
21.05.2015, 10:45  [ТС] 5
Jewbacabra, ДА! СПАСИБО ОГРОМНОЕ! А нет ли в си средства прямой подстановки в вычисление?

Что нибудь типа z=a 'q' b 'w' c 'e'
где q,w,e сгенерированные знаки
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
22.05.2015, 01:07 6
Цитата Сообщение от AlexM24 Посмотреть сообщение
Что нибудь типа z=a 'q' b 'w' c 'e'
где q,w,e сгенерированные знаки
это уже парсить строку придется.
Проще в обратном направлении пойти: сначала сгенерировать выражение в виде дерева, потом с ним можно будет что угодно делать: представить в виде строки, вычислять и т.д.
По-быстрому накидал примерный вариант, правда в нем при выводе лишние скобки, иногда получается выражение из 1 числа, но лучше уже лень делать.
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
int sum(int a, int b) {
    return a+b;
}
 
int mul(int a, int b) {
    return a*b;
}
 
typedef struct {
    char sign;
    int (*func)(int, int);
} Operation;
 
typedef struct Expression_ {
    int isLeaf;
    union {
        int num;
        struct {
            Operation op;
            Expression_* left;
            Expression_* right;
        } subExp;
    } value;
} Expression;
 
#define MIN_NUM 1
#define MAX_NUM 10
 
void generate(Expression** exp, Operation* ops, int numOps, int max) {
    *exp = (Expression*)malloc(sizeof(Expression));
    (*exp)->isLeaf = max > 1 ? !(rand() % 3) : 1;
    if ((*exp)->isLeaf) {
        (*exp)->value.num = MIN_NUM + rand() % MAX_NUM;
    } else {
        (*exp)->value.subExp.op = ops[rand()%numOps];
        generate(&(*exp)->value.subExp.left, ops, numOps, max-1);
        generate(&(*exp)->value.subExp.right, ops, numOps, max-1);
    }
}
 
void print(Expression* exp) {
    if (exp->isLeaf) {
        printf("%d", exp->value.num);
    } else {
        printf("(");
        print(exp->value.subExp.left);
        printf("%c", exp->value.subExp.op.sign);
        print(exp->value.subExp.right);
        printf(")");
    }
}
 
int calculate(Expression* exp) {
    if (exp->isLeaf) {
        return exp->value.num;
    } else {
        return exp->value.subExp.op.func(calculate(exp->value.subExp.left), calculate(exp->value.subExp.right));
    }
}
 
void freeExp(Expression* exp) {
    if (!exp->isLeaf) {
        freeExp(exp->value.subExp.left);
        freeExp(exp->value.subExp.right);
    }
    free(exp);
}
 
int main() {
    srand(time(0));
    Operation operations[2];
    operations[0].sign = '+';
    operations[0].func = sum;
    operations[1].sign = '*';
    operations[1].func = mul;
    for (int i = 0; i < 20; ++i) {
        Expression* exp;
        generate(&exp, operations, sizeof(operations)/sizeof(operations[0]), 3);
        print(exp);
        printf("=%d\n", calculate(exp));
        freeExp(exp);
    }
    return 0;
}


Добавлено через 10 минут
Для
Цитата Сообщение от AlexM24 Посмотреть сообщение
прямой подстановки в вычисление
лучше посмотреть в сторону скриптовых языков программирования, например python.
1
11 / 11 / 11
Регистрация: 09.12.2014
Сообщений: 89
22.05.2015, 09:16  [ТС] 7
Jewbacabra, Знаете, если бы была кнопка "САМЫЙ ЛУЧШИЙ ОТВЕТ" я бы её обкликал для Вас! СПАСИБО! Считаю тему закрытой.
0
22.05.2015, 09:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2015, 09:16
Помогаю со студенческими работами здесь

Арифметические действия над 2 числами
Составить программу в Free Paskal которая должна запрашивать у пользователя 2 целых числа и затем...

Арифметические действия над числами
Помогите пожалуйтса решить задачу,я всю ночь сидел парился над задачой и ничего не...

Арифметические действия с комплексными числами
Напишите программу, которая находит сумму разность , произведение, частное и модули двух заданных...

Арифметические действия над числами
Арифметические действия над числами пронумерованы следующим образом: 1 — сложение, 2 — вычитание, 3...


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

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