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

Modular Calculator

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

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Вобщем задача следующая:
Есть текстовый файл "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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2015, 23:21
Ответы с готовыми решениями:

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

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

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

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

Решение

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

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

Делаю Calculator
Делаю калькулятор, и в функции slotButtonClicked выдает ошибку: D:\Git\Projects\Qt\Calculator\Calculator.cpp:68: error: C2679: binary '=' :...

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

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

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

calculator
вопрос как изменить код что бы можно было , пользоваться приоритетами знаков , т.е 4+4*2 =12 а не 16 !??? #include&lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru