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

Приложение для вычисления значения арифметического выражения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ алгоритмы и блок схемы http://www.cyberforum.ru/cpp-beginners/thread193633.html
в блок схеме должно все записываться на языке паскаль помогите,обычная блок схема
C++ Не понятно как работают функции bool isstrprint (const char s) { int i = -1, ls = strlen(s); bool rc = true; if (s != 0x00) { while (i <= ls && isprint((int)((unsigned char) s)) > 0); rc = (i == ls)?true:false; }; return rc; http://www.cyberforum.ru/cpp-beginners/thread193629.html
C++ факториал
Я только начал изучать С++ и вот столкнулся с проблемой: дано положительное число A>=10.Найти такое число k, что (k-1)!<=A<=k! заранее спасибо!
Ассемблерная вставка в Visual Studio C++
Есть программа, выполняющая шейкерную сортировку. Функция сортировки представляет собой ассемблерную вставку. Проблема в том что при возврате в главную функцию возникает исключение. Не пойму, в чем его причина. Вот код: #include <iostream> #include <conio.h> using namespace std; const int n=5;
C++ Как из обычной структуры сделать хеш таблицу? http://www.cyberforum.ru/cpp-beginners/thread193612.html
У меня есть такая таблица: #ifndef DIPLOM_H #define DIPLOM_H #include <vector> using namespace std; struct T_Record { char name; //Фамилия, инициалы
C++ Информатика ! очень нужно Дано натуральное число k . Напечатать k-ую цифру (не число!) последовательности из идущих подряд чисел Фибоначчи. 112358132134... Необходимо построить программу так , чтобы она не накладывала ограничений на длину последовательности . подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.12.2010, 13:29     Приложение для вычисления значения арифметического выражения
Она посимвольно вытаскивает из потока число, пропуская при этом пробелы и учитывая знак числа.
Сначала происходит пропуск пробелов. Потом считывается символ и проверяется, не является ли он знаками "+" или "-". Если это знак "-", то в переменной sign сохраняется значение -1, иначе (если это "+") остаётся значение 1. Если это ни "+", ни "-", то считанный символ (чтобы не потеряться) возвращается обратно в поток ввода. Затем в цикле происходит считывание очередной цифры, и эта цифра "приписывается" к результат (т.е. предыдущее значение результата умножается на 10, а затем к полученному числу прибавляется только что считанная цифра). Затем, если мы считали не цифру - выходим из этого цикла, предварительно затолкав то, что мы только что считали, обратно в поток, чтобы это значение не потерялось. Затем мы снова считываем этот же символ и смотрим, не десятичная ли это точка. Если это так, то мы продолжаем считывание числа. Только теперь мы делим очередную считанную цифру на 10, на 100, на 1000 и т.д. и прибавляем полученное число к нашему результату. Ну а если мы считали не цифру - выходим из этого цикла, предварительно затолкнув считанный ранее символ обратно в поток (опять же, чтобы не потерялся). На этом считывание числа заканчивается. Разберём на примере.

Пусть в потоке ввода у нас -123.456
Считывание будет происходить так:
Сначала считается "-". В sign сохранится значение -1. result у нас равен 0. Считалась цифра 1. В result записывается 0 * 10 + 1, т.е. 1. Затем считалась 2. В result записывается 1 * 10 + 2 = 12. Затем считалась 3. result = 12 * 10 + 3 = 123. Считалась ".". Поскольку это не цифра, мы эту точку заталкиваем обратно в поток, чтобы считать её в другом месте. Выходим из цикла. Считываем точку. Поскольку это именно точка, заходим во второй цикл. k у нас изначально равна 10. Считываем 4. Получаем, что result равен 123 + 4 / 10 = 123 + 0.4 = 123.4, а k умножается на 10 и становится равна 100. Затем считываем 5. Получаем 123.4 + 5 / 100 = 123.45. k становится равна 1000. Считываем 6. Получаем result = 123.45 + 6 / 1000 = 123.45 + 0.006 = 123.456. Затем у нас в потоке будет неизвестно что (для функции number), поэтому мы выходим из цикла. Поскольку sign у нас равен -1, то функция вернёт значение -1 * 123.456, т.е. -123.456 - именно то, что мы и хотели получить.
 
Текущее время: 20:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru