С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
1

Modular Calculator

06.04.2015, 23:21. Показов 1641. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Вобщем задача следующая:
Есть текстовый файл "data.txt" в котором есть следующие данные:
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
5
* 50
+ 193
+ 8
* 9140
* 7286
+ 498
* 8
+ 32
* 72
* 4194
+ 80
+ 539
+ 8
* 4739
* 3
* 2
* 4
* 80
* 3
* 2
* 62
+ 1249
* 186
+ 12
* 3308
* 5504
+ 6
+ 94
+ 107
+ 298
+ 7
+ 54
+ 3
* 566
* 347
+ 3375
* 59
* 9
+ 460
+ 11
* 22
+ 6
* 761
+ 432
* 76
* 9777
* 3009
+ 40
* 48
* 50
% 7356
из этих данные нужно получить вот такую строчку и затем вычислить:
(5 * 50 + 193 + 8 * 9140 * 7286 + 498 * 8 + 32 * 72 * 4194 + 80 + 539 + 8 * 4739 * 3 * 2 * 4 * 80 * 3 * 2 * 62 + 1249 * 186 + 12 * 3308 * 5504 + 6 + 94 + 107 + 298 + 7 + 54 + 3 * 566 * 347 + 3375 * 59 * 9 + 460 + 11 * 22 + 6 * 761 + 432 * 76 * 9777 * 3009 + 40 * 48 * 50) % 7356

Приоритет операций тут не должен иметь место быть, все действия должны выполняются последовательно, что я и реализавал в своем коде ниже

Вот мой код:
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
#include <iostream>
#include <fstream>
 
int main()
{
    int Mi, brk, index = 0;
    unsigned long long int N;
    std::ifstream fin("data.txt");
    fin >> N;
    int *num = new int[100];
    char *oper = new char[100];
    for(int i = 0; i < 100; i++)
    {
        fin >> oper[i] >> num[i];
        if(oper[i] == '%')
        {
            Mi = num[i];
            brk = i;
            break;
        }
    }
 
    for(int i = 0; i < brk; i++)
    {
        if(oper[i] == '+')
            N += num[i];
        if(oper[i] == '*')
            N *= num[i];
    }
 
    std::cout << N % Mi;
 
    delete[] num;
    delete[] oper;
 
    return 0;
}
Программа работает корректно для такого примера:
C++
1
2
3
4
5
6
7
8
5
+ 3
* 7
+ 10
* 2
* 3
+ 1
% 11
и строка соответственно (5 + 3 * 7 + 10 * 2 * 3 + 1) % 11

Не могу понять, где ошибка.
Буду очень признателен, если кто-то мне поможет
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2015, 23:21
Ответы с готовыми решениями:

Calculator
Помогите, пожалуйста:-[ надо решить задачку: Реализовать класс Calculator с полным набором...

Calculator by Bjarne Stroustrup
Здравствуйте, уважаемые форумчане! Изучаю C++ по книге Bjarne Stroustrup'a. Пишу пример...

Ошибка в программе C++(calculator)
Всем привет! начал тут для себя учить с++. Хотел создать мини-калькулятор, что бы можно было...

Делаю Calculator
Делаю калькулятор, и в функции slotButtonClicked выдает ошибку:...

7
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
07.04.2015, 00:26 2
Цитата Сообщение от Leonman Посмотреть сообщение
Программа работает корректно для такого примера:
Цитата Сообщение от Leonman Посмотреть сообщение
Не могу понять, где ошибка.
А в чем проблема-то? Код работает с вашим первым набором. На выходе число 264. Должно быть по-другому?
Конкретизируйте.
0
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
07.04.2015, 00:53  [ТС] 3
DISTURB, Не могу конкретизировать, так как потерял правильный ответ, но в любом случае, тот код, что меня, не работает по какой-то причине с большим количеством данных

Добавлено через 9 минут
DISTURB, Прошу прощения, в вопросе указал не правельные данные.
Вот данные для проверки:
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
841
* 778
* 768
+ 7
* 95
+ 17
+ 7
* 2
* 9734
+ 862
* 7
* 2676
+ 89
+ 987
+ 40
+ 83
* 10
* 729
* 9544
* 5
+ 5625
* 5
* 78
* 4
* 6728
* 7
* 1238
* 88
* 741
+ 9
* 59
+ 74
+ 37
+ 2527
+ 334
+ 33
+ 285
+ 5627
* 31
* 473
+ 94
+ 3690
+ 32
+ 9
+ 7
* 552
+ 746
* 72
* 1
+ 676
+ 932
% 8274
На выходе должно быть 2064, а у меня 3114.

Во втором случае, с маленьким количеством данных, все работает корректно, на выходе 1.
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
07.04.2015, 01:13 4
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

Цитата Сообщение от Leonman Посмотреть сообщение
Вот данные для проверки:
После выполнения действия в 17 строке (*10) вы выходите за пределы диапазона unsigned long long.

Добавлено через 5 минут
А для операций 1-51 число превысит диапазон в несколько тысяч раз. Данные, естественно, теряются.
0
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
07.04.2015, 01:16  [ТС] 5
DISTURB, диапазон unsigned long long int = 18446744073709551615, а после 17 строки(*10) результат равен всего лишь 1910513414 или я не правильно посчитал?
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
07.04.2015, 01:25 6
Leonman, у меня получилось 1.7408683e+20 (~1.7*10^20).
Это даже не суть важно, в какой строке. Попробуйте просто слагаемые откинуть, а оставшееся перемножить, для простоты. Явно за пределы выходит.
0
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
07.04.2015, 01:26  [ТС] 7
DISTURB, да, вы правы. Что мне делать в таком случае, я не знаю типа данных, который может содержать большие числа
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
07.04.2015, 01:35 8
Цитата Сообщение от Leonman Посмотреть сообщение
Что мне делать в таком случае, я не знаю типа данных, который может содержать большие числа
Использовать длинную арифметику
1
07.04.2015, 01:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2015, 01:35
Помогаю со студенческими работами здесь

Modular Calkulator
Подскажите по задаче. Данные передаються в программу в виде строки: '''5 + 3 * 7 + 10 * 2 *...

Modular Grid Pattern
Попытался удаленно поставить это расширение... ОС - windows 7, фп - 5.1, менеджер расширений -...

BIOS Award Modular BIOS v6.00PG напрочь отказывается видеть загрузочную флэшку
Приветствую всех! Два дня не могу разобраться в том, почему БИОС не видит флэшку, записывал Виндоус...

calculator
вопрос как изменить код что бы можно было , пользоваться приоритетами знаков , т.е 4+4*2 =12 а не...

calculator II
привет! как сделать - x:=0; после нажатия кнопки x:=1; если еще раз нажать то прибавляется...

Java calculator
помогите пожалуйста переделать код, чтобы он не суммировал а вычитал import java.awt.*; import...


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

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