Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48

Довести до ума простой калькулятор

18.01.2014, 14:00. Показов 999. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сделать задание никак не получается(((
Задание такое :
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
// hometask.cpp: простой калькулятор.
//
 
#include "stdafx.h"
#include "stdio.h"
 
int main(void)
{
    char oper1,oper;
    float value1,acc;
    printf ("Nachalo vichisleniy\nType in your experssion.\n");
    scanf ("%f %c", &value1, &oper);
    switch (oper)
    {
        case '/':
            if (value1 ==0)
                printf ("Division by zero!\n");
            else
                acc=acc/value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
 
 
        case '+':
            acc=acc+value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
 
 
 
        case '-':
            acc=acc-value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
 
        case 'S':
            acc=value1;
            printf("%.1f\n",acc );
            scanf("%f %c", &value1, &oper);
            
 
 
        case '*':
            acc=value1*acc;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
 
 
        case 'E':
            printf("%.1f\n", acc);
            break;
 
        default:
            printf ("Unknown oreator.\n");
    }
 
    return 0;
}
Миниатюры
Довести до ума простой калькулятор  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2014, 14:00
Ответы с готовыми решениями:

Довести до ума программу по перемножению матриц
помогите пожалуйста довести до ума программу по перемножению матриц #include <stdio.h> #include <stdlib.h> #include...

Необходимо довести калькулятор до ума
Доброго времени суток. Помогите пожалуйста довести калькулятор до ума. Необходимо сделать так , чтобы можно было бы...

Довести до ума
Помогите довести до ума код.Программа раскладывает числа на сумму 3-х квадратов.Много раз пытался написать условия для случая,когда число...

15
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.01.2014, 15:22
Сходу вижу, что после почти всех case забыт break.
Описывайте конкретнее, что именно "не получается".
0
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 15:44  [ТС]
Break; вставлял, потом удалил т.к. не могу реализовать, чтобы при "case" после занесения в аккумулятор значения не выходил из программы, а заново просчитывал значение т.е. заново прогонял "case"(надеюсь понятно объяснил)
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.01.2014, 16:53
Прежде всего, break должны быть. Иначе выполняется весь код после соответствующего case, даже тот, который к нему не относится. Очевидно, это ошибка.
Если нужно, чтобы программа не завершаласЬ, поместите все действия в бесконечный цикл.
0
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 17:03  [ТС]
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
// hometask.cpp: простой калькулятор.
//
 
#include "stdafx.h"
#include "stdio.h"
 
int main(void)
{
    char oper1,oper;
    float value1,acc;
    printf ("Nachalo vichisleniy\nType in your experssion.\n");
    scanf ("%f %c", &value1, &oper);
            switch (oper)
    {
        case '/':
            if (value1 ==0)
                printf ("Division by zero!\n");
            else
                acc=acc/value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case '+':
            acc=acc+value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
 
        case '-':
            acc=acc-value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
        case 'S':
            acc=value1;
            printf("%.1f\n",acc );
            scanf("%f %c", &value1, &oper);
            break;
            
 
 
        case '*':
            acc=value1*acc;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case 'E':
            printf("%.1f\n", acc);
            break;
 
        default:
            printf ("Unknown oreator.\n");
            break;
    }
        
    return 0;
}
Как мне поместить его в бесконечный цикл т.е. чтобы он после выполнения "case" заново считывал переменную "case".????
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.01.2014, 17:17
C
1
2
3
4
5
while (1) {
    printf(">>> ");
    scanf(...);
    switch () { ... }
}
1
о_____О
Эксперт 1С
 Аватар для OrkVasya
225 / 224 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
18.01.2014, 17:17
Можно попробовать че-нить типа:
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
   printf ("Nachalo vichisleniy\nType in your experssion.\n");
   scanf ("%f %c", &value1, &oper);
 
   while(oper != EOF)  {  
            switch (oper)
    {
        case '/':
            if (value1 ==0)
                printf ("Division by zero!\n");
            else
                acc=acc/value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case '+':
            acc=acc+value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
 
        case '-':
            acc=acc-value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
        case 'S':
            acc=value1;
            printf("%.1f\n",acc );
            scanf("%f %c", &value1, &oper);
            break;
            
 
 
        case '*':
            acc=value1*acc;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case 'E':
            printf("%.1f\n", acc);
            break;
 
        default:
            printf ("Unknown oreator.\n");
            break;
    }
printf ("Nachalo vichisleniy\nType in your experssion.\n");
   scanf ("%f %c", &value1, &oper);
}
1
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 18:07  [ТС]
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
// hometask.cpp: простой калькулятор.
//
#include "stdafx.h"
#include "stdio.h"
 
int main(void)
{
    char oper1,oper;
    float value1,acc;
printf ("Nachalo vichisleniy\nType in your experssion.\n");
   scanf ("%f %c", &value1, &oper);
 
   while(oper != EOF) 
   {  
            switch (oper)
    {
        case '/':
            if (value1 ==0)
                printf ("Division by zero!\n");
            else
                acc=acc/value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case '+':
            acc=acc+value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
 
        case '-':
            acc=acc-value1;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
        case 'S':
            acc=value1;
            printf("%.1f\n",acc );
            scanf("%f %c", &value1, &oper);
            break;
            
 
 
        case '*':
            acc=value1*acc;
            printf ("%.1f\n", acc);
            scanf("%f %c", &value1, &oper);
            break;
 
 
        case 'E':
            printf("%.1f\n", acc);
            break;
 
        default:
            printf ("Unknown oreator.\n");
            break;
    }
printf ("Nachalo vichisleniy\nType in your experssion.\n");
   scanf ("%f %c", &value1, &oper);
}
   return 0;
}
Спасибо1
Немного подправил, в принципе работает) НО после введения 'EOF' программа 'ругается' , попробую исправить......

Добавлено через 34 минуты
Что добавить в алоритм чтобы он вышел из 'while' ?? при введение 'EOF' программа зацикливается и не выходит.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.01.2014, 18:13
От фонаря: попробуйте Ctrl+D, Enter для выхода.
1
о_____О
Эксперт 1С
 Аватар для OrkVasya
225 / 224 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
18.01.2014, 18:19
http://ru.wikipedia.org/wiki/EOF
1
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 18:23  [ТС]
Чувствую себя немного глупым) Но все-таки как выйти из while?
0
о_____О
Эксперт 1С
 Аватар для OrkVasya
225 / 224 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
18.01.2014, 18:27
Во время ввода операции нажмите Ctrl + Z, если вы в винде.
0
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 18:28  [ТС]
Что нужно отредактировать чтобы при вводе например '12 E' программа сама выходила?
0
о_____О
Эксперт 1С
 Аватар для OrkVasya
225 / 224 / 37
Регистрация: 19.11.2010
Сообщений: 1,062
18.01.2014, 18:29
Или возьмите другой значение какое для выхода.

Добавлено через 58 секунд
while(oper != <любое значение, которое вы выбрали для выхода из цикла>)
0
0 / 0 / 0
Регистрация: 16.04.2012
Сообщений: 48
18.01.2014, 18:31  [ТС]
Просто по заданию при вводе Е программа должна сама завершаться.

Как я понял в данном случае при вводе EOF программа должна выходить из цикла, она почему-то не выходит(

Добавлено через 2 минуты
Всё заработало, огромное спасибо))
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
// hometask.cpp: простой калькулятор.
//
#include "stdafx.h"
#include "stdio.h"
 
int main(void)
{
    char oper1,oper;
    float value1,acc;
printf ("Nachalo vichisleniy\nType in your experssion.\n");
   scanf ("%f %c", &value1, &oper);
 
   while(oper !='E') 
   {  
            switch (oper)
    {
        case '/':
            if (value1 ==0)
                printf ("Division by zero!\n");
            else
                acc=acc/value1;
            printf ("%.1f\n", acc);
            break;
 
 
        case '+':
            acc=acc+value1;
            printf ("%.1f\n", acc);
            break;
 
 
 
        case '-':
            acc=acc-value1;
            printf ("%.1f\n", acc);
            break;
 
        case 'S':
            acc=value1;
            printf("%.1f\n",acc );
            break;
            
 
 
        case '*':
            acc=value1*acc;
            printf ("%.1f\n", acc);
            break;
 
 
        case 'E':
            printf("%.1f\n", acc);
            break;
 
        default:
            printf ("Unknown oreator.\n");
            break;
    }
printf ("Gotov k vichislenyiam.\n");
   scanf ("%f %c", &value1, &oper);
}
   return 0;
}
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
18.01.2014, 20:53
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
#include <stdio.h>
#include <stdlib.h>
 
#define PUT_TO_EAX      ('S')
#define END_OF_WRK      ('E')
#define ADDITION        ('+')
#define SUBSTRACTION    ('-')
#define MULTIPLIC       ('*')
#define DIVISION        ('/')
 
int main()
{
    double accumulr = 0., storage;
    char operation;
    int trigger = 1;
 
    while (trigger && (scanf("%lf %c", &storage, &operation) == 2))
    {
        switch (operation)
        {
            case PUT_TO_EAX: accumulr = storage;
                break;
            case END_OF_WRK: fputs("end of calculate\n", stdout);
                trigger = !trigger;
                break;
            case ADDITION: accumulr += storage;
                break;
            case SUBSTRACTION: accumulr -= storage;
                break;
            case MULTIPLIC: accumulr *= storage;
                break;
            case DIVISION:
                if (storage != 0)
                    accumulr /= storage;
                else
                    fputs("division by zero. try again\n", stdout);
                break;
            default: fputs("unknoun operation. try again\n", stdout);
        }
        fprintf(stdout, "actual accumulator are %lf\n", accumulr);
    }
 
    exit(EXIT_SUCCESS);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2014, 20:53
Помогаю со студенческими работами здесь

Довести до ума
В общем, изначально надо было посчитать такую загогулину: S=\sum_{i:=1}^{n}\sum_{k:=1}^{m}{\left({b}_{ik}+{c}_{ki}...

довести до ума
добрых времени суток. Нужно опять доделать задачу. Вот само условие: Дано вещественное число Х(|X|&lt;1) и целое число N(&gt;0) Найти...

Довести программу до ума
Разработайте алгоритм и программу, реализующую этот алгоритм. Основные функции программы оформите в виде процедур и функций. Исходные...

довести до ума курсовую
задание:программное моделирование международной телефоной станции. указание.на междунородной тел станции картотека абонентов содержащая...

Довести до ума приложение на С#
Здравствуйте! Помогите, пожалуйста, тут две строчки буквально дописать, но до меня не доходит Есть программа и код для консольного...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru