Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простенький калькулятор для командной строки, Мультиплатформенный)) 
:(
    Опции темы
superkaban
Дата 6.2.2011, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 2.2.2011
Где: Москва

Репутация: нет
Всего: нет



Написал для себя несколько лет назад на C. Выкладываю, может кому пригодится. С моим кодом можно делать всё что угодно. smile
Для пользователей Windows: скачайте ca.exe (2 килобайта) и положите в папку C:\WINDOWS\system32
Запускается из командной строки командой ca (или двойным щелчком мыши), закрывается Ctrl^C (или мышью закрыть окно терминала).

Код

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define ALLDIGITS 14
#define PRINTMASK "18.2"

int getnumber(double *, char *);

int main()
{
    char oper = '+';
    double result = 0, input = 0;
    int len = 0;

    do
    {
        if (len > 0)
            switch (oper)
            {
                case '/':
                    input?(result /= input):printf(" Division by zero exeption!\n");
                    break;
                case '-':
                    result -= input;
                    break;
                case '*':
                    result *= input;
                    break;
                case '+':
                default:
                    result += input;
                    break;
            }
        printf("%"PRINTMASK"f  (+)  ", result);
    }    while ((len = getnumber(&input, &oper)) >= 0);
    return 0;
}

int getnumber(double *number, char *operand)
{
    char c;
    int i = 0;
    *operand = '+';
    char row[ALLDIGITS];
    int opcontrol = 0;
    int sign = 1;

    while ((c = getchar()) != '\n')
    {
        if ((c == '+') || (c == '-') || (c == '*') || (c == '/'))
            if (opcontrol)
                {
                if (c == '-')
                    sign = -1;
                }
            else
            {
                *operand = c;
                opcontrol = 1;
            }
        else if (isdigit(c) || (c == '.'))
            if (i < ALLDIGITS)
                row[i++] = c;
    }
    row[i] = '\0';
    *number = sign * atof(row);
    return i;
}


PM MAIL   Вверх
Modul
Дата 6.2.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Пойду предложу мелкософту ! smile 

Как думаешь за сколько можно толкнуть ?
--------------------
I'll be back !
PM MAIL   Вверх
superkaban
Дата 6.2.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 2.2.2011
Где: Москва

Репутация: нет
Всего: нет



Цитата(Modul @  6.2.2011,  15:33 Найти цитируемый пост)
Пойду предложу мелкософту ! smile 

Как думаешь за сколько можно толкнуть ? 
Я не против. За сколько толкнёте - всё ваше))) Только меня не выдавайте - мелкософт очень жадный, вас разденет до нитки, а если меня назовёте, то и меня. Каким макаром? - не знаю. Знаю только, что в этом они мастера) smile

PM MAIL   Вверх
borisbn
Дата 7.2.2011, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Modul @  6.2.2011,  15:33 Найти цитируемый пост)
Пойду предложу мелкософту !

Такую красоту нужно предлагать не мелкомягким, а "фруктовой компании" (С) Forrest Gump


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
TIT
Дата 7.2.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 4.4.2010

Репутация: нет
Всего: 3



У меня это так заработало.
user posted image
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
Molodec
Дата 7.2.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.12.2010
Где: Украина

Репутация: нет
Всего: 1



TIT, когда ты пишешь 2+2 то на выходе ты получишь 22. То есть слияние двух чисел. Чтобы просуммировать пишешь 2, потом ВВОД, потом еще раз 2  smile
----------------
А вообще программа норм. Но сейчас ее никто не захочет пользоваться. Сейчас же есть Microsoft Excel или же Open Office Calc... Которые в зависимости от ОС есть на большинстве компьютеров. 
Но все равно, superkaban, молодец. Хорошо smile
PM MAIL   Вверх
TIT
Дата 7.2.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 4.4.2010

Репутация: нет
Всего: 3



Цитата(Molodec @ 7.2.2011,  18:06)
TIT, когда ты пишешь 2+2 то на выходе ты получишь 22. То есть слияние двух чисел. Чтобы просуммировать пишешь 2, потом ВВОД, потом еще раз 2  smile

Мой мозг оказался слишком примитивен понять внутреннюю вселенную данной логики.
Каюсь, грешен. От калькулятора, которому говоришь 2+2 я ожидал увидеть ответ 4, а не 22.
Конкатенация как-то не ассоциируется у меня с калькуляцией. smile

user posted image
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
superkaban
Дата 8.2.2011, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 2.2.2011
Где: Москва

Репутация: нет
Всего: нет



Цитата(TIT @  7.2.2011,  13:50 Найти цитируемый пост)
У меня это так заработало.

Ех, не написал сразу инсрукцию... smile
Калькулятор простенький, в одну строчку можно написать только одно число и операцию (по умолчанию +) которые вы хотите совершить с числом напечатанным слева (при запуске проги это 0.00).
Т.е. в вашем случае надо было нажать:
+ 2 [Enter] + 2 [Enter]
или ещё проще (так как операция сложения стоит по умолчанию):
2 [Enter] 2 [Enter]
Допускаются только 4 арифметических действия: + - * /
причём символ операции может стоять как перед числом, так и после.
Пробелы и другие посторонние символы на ход вычислений не влияют.
Допустимо использовать сразу два оператора, когда второй из них минус.
Например так: умножить на минус три: * -3
Можно работать с не целыми числами - разделитель точка.
Отображаемый результат (но не сам результат) будет  округляться
до двух знаков после точки.
Можно вводить числа до 13 знаков (остальное потеряется) и результат
будет правильным если не превысит 14 знаков. Кому этого мало -
поменяйте две константы и перекомпилируйте.
Вот пример вычислений:
Код

              0.00  (+)  79
             79.00  (+)  - 3
             76.00  (+)  6-
             70.00  (+)  /    7
             10.00  (+)  / -0.4567
            -21.90  (+)  *8765.4321
        -191929.76  (+)  1000000
         808070.24  (+)  Wq77 z5bU 4tXX9.y24v-P
         730521.00  (+)
 Как видим и ваше и моё последнее (казалось бы абсурдное) вычисление
мой калькулятор выполнил правильно.


P.S. Мне моё изделие подходит...
Часто, работая с терминалом надо что то быстро сложить или поделить.
А запускать для этого графическую оболочку (Windows smile ) не хочется.


Это сообщение отредактировал(а) superkaban - 8.2.2011, 04:30
PM MAIL   Вверх
TIT
Дата 8.2.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 4.4.2010

Репутация: нет
Всего: 3



Цитата

Часто, работая с терминалом надо что то быстро сложить или поделить.
А запускать для этого графическую оболочку (Windows smile ) не хочется.

Эм... Простите, а как это вы работаете с терминалом вне графической оболочки Windows?
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
superkaban
Дата 9.2.2011, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 2.2.2011
Где: Москва

Репутация: нет
Всего: нет



Цитата(TIT @  8.2.2011,  18:49 Найти цитируемый пост)
Эм... Простите, а как это вы работаете с терминалом вне графической оболочки Windows? 

У меня в компе живут разные терминалы. Есть от линукса (debian). Недавно от хурда (hurd) поселился, так к нему пока родные иксы не прикрутил. Есть и виндус ХР, но им редко пользуюсь, тока когда нада в любимую игруху - Impossible Creatures поиграть. smile

PM MAIL   Вверх
TIT
Дата 9.2.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 4.4.2010

Репутация: нет
Всего: 3



И всё-таки, потешьте моё любопытство, сударь.
Каким образом при всём многообразии операционных систем на вашем компьютере вам удаётся работать в терминале Windows без графической оболочки Windows?
Мне, право , очень интересно, ибо я давно в мечтах хочу установить на своём компьютере консольный Windows.
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
cutwater
Дата 9.2.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Цитата(superkaban @  9.2.2011,  12:56 Найти цитируемый пост)
 меня в компе живут разные терминалы. Есть от линукса (debian). Недавно от хурда (hurd) поселился, так к нему пока родные иксы не прикрутил. Есть и виндус ХР, но им редко пользуюсь, тока когда нада в любимую игруху - Impossible Creatures поиграть. smile


Между прочим в линуксе есть bc


--------------------
user posted image
PM MAIL   Вверх
superkaban
Дата 9.2.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 2.2.2011
Где: Москва

Репутация: нет
Всего: нет



Цитата(TIT @  9.2.2011,  14:05 Найти цитируемый пост)
И всё-таки, потешьте моё любопытство, сударь.
Каким образом при всём многообразии операционных систем на вашем компьютере вам удаётся работать в терминале Windows без графической оболочки Windows?
Мне, право , очень интересно, ибо я давно в мечтах хочу установить на своём компьютере консольный Windows. 

TIT, вы просто мучитель... Ставьте Windows 2008 Server Core для полного счастья. Читайте про это у  Микрасофта или вот тут. Не мучьте меня... smile

Добавлено через 9 минут и 43 секунды
Цитата(cutwater @  9.2.2011,  15:13 Найти цитируемый пост)
Между прочим в линуксе есть bc 

Да каких только калькуляторов в линуксе нет...
Но своя рубашка ближе к телу. smile

PM MAIL   Вверх
cutwater
Дата 9.2.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Цитата(superkaban @  9.2.2011,  14:21 Найти цитируемый пост)
Да каких только калькуляторов в линуксе нет...
Но своя рубашка ближе к телу. smile


[offtopic] Велосипедисты такие велосипедисты [/offtopic]


--------------------
user posted image
PM MAIL   Вверх
TIT
Дата 9.2.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 4.4.2010

Репутация: нет
Всего: 3



Цитата(cutwater @  9.2.2011,  15:13 Найти цитируемый пост)
Между прочим в линуксе есть bc 

Есть, но в линупсе мне привычней python запустить. smile

Цитата(superkaban @  9.2.2011,  15:21 Найти цитируемый пост)
 Ставьте Windows 2008 Server Core для полного счастья.

 smile Окей, поставил. Как в нём запустить графическую оболочку Windows, ежели оно ставиться console only?

Цитата(cutwater @  9.2.2011,  15:37 Найти цитируемый пост)
[offtopic] Велосипедисты такие велосипедисты [/offtopic] 

^like, однако загляните в свою папку /home/$USER/bashs|scripts/ много старых великов можно найти. smile

PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.