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

Стек - C++

Восстановить пароль Регистрация
 
Цветик
3 / 1 / 1
Регистрация: 13.10.2010
Сообщений: 42
27.11.2010, 13:11     Стек #1
В текстовом файле записана без ошибок формула вида: цифра или S(формула, формула), или P(формула, формула), где S (a, b) = (a+b) mod 10, P(a, b) = (a*b) mod 10. Вычислить значение данной формулы. Например: P(6, S(8, 4)) = 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
struct stek {
  char sym;
  struct stek *next;
};
stek *vstek (stek **ns, int x)
{
  stek *tmp1;        // вспомогательный указатель
  tmp1 = new stek;    /*выделяем память под новый элемент стека*/
  tmp1 -> sym = x;    // задаем значение
  tmp1 -> next = *ns;    /*добавляем новый элемент в вершину стека*/
  *ns = tmp1;
  return *ns;        //возвращаем новое значение вершины
}
stek *izsteka (stek **ns)
{
  stek *tmp;
  tmp = *ns;
  if( *ns==NULL )          //при нулевом указателе вершины
    cout << "Stek pust!";
  else
  {
    *ns = tmp->next;        //вершина - следующий элемент
    delete tmp;          // освобождаем память
  }
  return *ns;
}
 
void main ()
{ clrscr();
  char c,e; // для символа
  char f[12] ={ 'P','S','0','1','2','3','4','5','6','7','8','9'};
  stek *head = NULL;  // вершина стека
  FILE *file; // для описателя файла
  int a;  // 
  int b;  //  
  int SP; // 
 
  file = fopen("F:\doc.dat","r"); // открываем файл
  if(file == NULL) // если функция вернула 0 файл не открылся,
  {                 // предупреждаем и выходим
    cout<<"Error. Can't open file.";
    getch();
    exit(1);        
  }
 
   while(!feof(file)){  // feof - размер файла
 
   fscanf(file, "%c", &c); // считываем очередной символ из файла
    for(int j=0; j<strlen(f); j++) // strlen - длина массива
    if (c==f[j]) vstek(&head,(int)c);  // заносим получ. символ в стек
            // если символ совпал с символом из массива
    if (c==')'){
 
    // выдергиваем верхнии 3 элемента из стека
    c=head->sym;
    a=(int)c;
    izsteka(&head)->sym; 
    c=head->sym;
    b=(int)c;
    izsteka(&head)->sym; 
    c=head->sym;
    SP=c;
    izsteka(&head)->sym;
 
    // вычисляем по формуле
     if (SP=='S') a=a+b; // если S, то (a+b)
     if (SP=='P') a=a*b; // если P, то (a*b)
     a=a%10;
    e=(char)a;
 
     vstek(&head,e); // кладем результат в стек
     c=0; // обнуляем [c char]
    }
   }
 
  fclose(file); // закрываем файл
  c=(char)head->sym;
  cout << "Result: " << c; // показываем результат
  getch();
}
Вроде работает но блин почему то результат выводит 0, подскажите где ошибка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2010, 13:11     Стек
Посмотрите здесь:

C++ Стек
C++ Стек
Стек C++
Стек C++
C++ Стек
Стек C++
C++ Стек на С++
C++ Стек

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 05:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru