Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
ilizard
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 50
1

Не запускается прога из Керниган и Ритчи

01.06.2013, 18:12. Просмотров 749. Ответов 1
Метки нет (Все метки)

программа-калькулятор
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <conio.h>
#include <math.h>
#include <stdio.h>
 
#define MAXOP   20  /* MAX SIZE OF OPERAND, OPERГЂTOR */
#define NUMBER '0'  /* SIGNAL THAT NUMBER FOUND */
#define TOOBIG '9'
 
main()  /* REVERSE POLISH DESK CALCULATOR */
   {
   
    int tupe;
    char s[MAXOP];
    double op2,atof(),pop(),push();
 
    while ((tupe=getop(s,MAXOP)) != EOF);
      switch(tupe) {
      case NUMBER:
           push(atof(s));
           break;
      case '+':
           push(pop()+pop());
           break;
      case '*':
           push(pop()*pop());
           break;
      case '-':
           op2=pop();
           push(pop()-op2);
           break;
      case '/':
           op2=pop();
           if (op2 != 0.0)
   push(pop()/op2);
           else
              printf("ZERO DIVISOR POPPED");
           break;
      case '=':
           printf("%f",push(pop()));
           break;
      case 'C':
           clear();
           break;
      case TOOBIG:
           printf("%.20s ... IS TOO LONG",s);
           break;
           }
           getch();
}
   #define MAXVAL 100 /* MAXIMUM DEPTH OF VAL STACK */
 
 
 
   int sp = 0;        /* STACK POINTER */
   double val[MAXVAL]; /*VALUE STACK */
   double push(f)    /* PUSH F ONTO VALUE STACK */
   double f;
   {
    if (sp < MAXVAL)
            return(val[sp++] =f);
    else    {
            printf("ERROR: STACK FULL");
            clear();
            return(0);
}
}
 
   double pop()   /* POP TOP VALUE FROM STEACK */
   {
    if (sp > 0)
            return(val[--sp]);
    else    {
            printf( "ERROR: STACK EMPTY");
            clear();
            return(0);
}
}
 
  clear()       /* CLEAR STACK */
   {
     sp=0;
}
проблема в getop.
Что это не знаю, Керниган пишет: Функция GETOP
считывает цифры подряд /возможно с десятичной точкой/ и запоминает их, пока
последовательность не прерывается.
А что за функция, она не стандартная?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2013, 18:12
Ответы с готовыми решениями:

Ритчи и Керниган
В этом учебники в некоторых примерах прототип функции объявляется внутри другой...

Компилятор С(Керниган ,Ритчи)
Здравствуйте! Открыл книгу Брайана Кернигана и Денниса Ритчи. Первое задание ...

Керниган/Ритчи упражнение 1.22
&quot;Упражнение 1.22. Напишите программу, печатающую символы входного потока так,...

Керниган Ритчи Упражнение 2.2
Добрый день. Помогите начинающему разобраться пожалуйста. Само...

Керниган/Ритчи упражнение 1.20
&quot;Упражнение 1.20. Напишите программу detab, заменяющую символы табуляции во...

1
Revolver_45
19 / 19 / 13
Регистрация: 17.05.2013
Сообщений: 31
01.06.2013, 19:19 2
Эта функция описана дальше, пролистай одну-две страницы вперёд.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* getop: извлекает следующий операнд или знак операции */
int getop(char s[]) {
  int i, c;
  while ((s[0] = c = getch()) == ' ' || c == '\t')
      ;
  s[1] = '\0';
  if (!isdigit(c) && c != '.') return c; /* Не число */
  i = 0;
  if (isdigit(c)) /* Накопление целой части */
    while (isdigit(s[++i] = c = getch()))
      ;
  if (c == '.') /* Накопление дробной части */
    while (isdigit(s[++i] = c = getch()))
      ;
  s[i] = '\0';
  if (c != EOF) ungetch(c);
  return NUMBER;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2013, 19:19

Указатели, Керниган и Ритчи 5.4
Здравствуйте, нужна помощь начинающему. Читаю Керниган и Ритчи и не могу понять...

Керниган/ритчи задачи 1.18
Упражнение 1.18. Напишите программу, которая будет в каждой вводимой строке...

Керниган и Ритчи подсчет строк
после запуска вместо результата просто переходит на следущую строчку ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru