10 / 10 / 4
Регистрация: 11.10.2012
Сообщений: 93
1

Ошибки при попытке прочитать в указанном месте

11.10.2012, 17:08. Показов 759. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack**);
stack *push(stack *st, char a);
int PRIOR(char a);
 
int main()
{
    stack *OPERS=NULL;
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
    
    do
    {
        cout<<"Введите выражение (в конце '='):";
        cin>>a[k];
        while(a[k]!='\0'&&a[k]!='=')
        {
            if(a[k]==')')
            {
                while(OPERS->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if(OPERS==NULL)
                    OPERS=push(OPERS,a[k]);
                else
                    if(PRIOR(OPERS->c)<PRIOR(a[k]))
                        OPERS=push(OPERS, a[k]);
                    else
                    {
                        while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
                            outstr[point++]=pop(&OPERS);
                        OPERS=push(OPERS,a[k]);
                    }
            }
            k++;
        }
        while(OPERS!=NULL)
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
stack *push(stack *HEAD, char a)
{
  stack *PTR;
  PTR=new stack;
    if(PTR==NULL) 
  {
    cout<<"нет памяти";
    exit(-1);            
  }
  PTR->c=a;                                
  PTR->next=HEAD;           
  return PTR;                               
}
 
 
char pop(stack **HEAD)
{
  stack *PTR;
  char a;
  if(*HEAD==NULL) return '\0'; 
  PTR=new stack;
  PTR=*HEAD;                   
a=PTR->c; //вот в этом месте отладчик выдает сообщение с адресами.
  *HEAD=PTR->next;         
  delete PTR;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
Необработанное исключение в "0x012b13b9" в "sdsd.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000032".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2012, 17:08
Ответы с готовыми решениями:

ВКонтакте отображается ошибка при попытке прочитать сообщение
При нажатии на сообщение выпадает такое и оно не раскрывается. Браузер - Мозилла 48.0.2

При попытке убрать второе меню, на его месте появляется список всех материалов сайта
При попытке убрать второе меню, на его месте появляется список всех материалов сайта. Как убрать?...

АКИП-4125/4 и EasyScope 3.0 - Ошибка при попытке прочитать сохраненные данные
Доброго времени суток. Недавно привезли к нам переносной осциллограф АКИП-4125/4. В комплекте с...

Создать файл в указанном месте
Как создать файл в указанном месте? Ну вот например мы в пейнте жмем Сохранить как, вылезает...

8
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
11.10.2012, 17:17 2
Сразу вижу у тебя ошибку в неправильном вводе. Как ты просишь ввести выражение и сохраняешь его в одной ячейке a[0]?
1
10 / 10 / 4
Регистрация: 11.10.2012
Сообщений: 93
12.10.2012, 02:59  [ТС] 3
Хм... недочеты.. спасибо, вы раскрыли глаза! а что насчет функции ?
0
10 / 10 / 4
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 10:40  [ТС] 4
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack ** top);
void push(stack **st, char a);
int PRIOR(char a);
 
int main()
{
    
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
    
    stack *OPERS;
    
    freopen("input.txt", "r",stdin);
    freopen("output.txt", "w", stdout);
 
    
    do
    {
        cout<<"Введите выражение (в конце '='):";
        cin>>a[k];
        while(a[k]!='\0'&&a[k]!='=')
        {
            if(a[k]==')')
            {
                while(OPERS->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if(OPERS==NULL)
                    OPERS=push(OPERS,a[k]);
                else
                    if(PRIOR(OPERS->c)<PRIOR(a[k]))
                        OPERS=push(OPERS, a[k]);
                    else
                    {
                        while((OPERS!=NULL)&&(PRIOR(OPERS->c)>=PRIOR(a[k])))
                            outstr[point++]=pop(&OPERS);
                        OPERS=push(OPERS,a[k]);
                    }
            }
            k++;
        }
        while(!feof(stdin))
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
void push(stack **HEAD, char a)
{
  stack *pv;
  pv=new stack;
  pv->c=a;                                
  pv->next=*HEAD;           
  *HEAD=pv;                               
}
 
 
char pop(stack **HEAD)
{
  char a=(*HEAD)->c;
  stack *pv=*HEAD;
  *HEAD = (*HEAD)->next;                   
  delete pv;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
вот чуть переработанный код.. ошибки из-за идентификатора OPERS. Хочу сделать ввод через файлы.. поставьте на путь истинный, заплутавшего..
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
13.10.2012, 10:51 5
В чём суть задачи ?
0
10 / 10 / 4
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 12:28  [ТС] 6
Задача состоит в конвертации из инфиксной записи в постфиксную (Обратная Польская Запись). Ввожу выражение, оно обрабатывается и вычисляется.
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
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <iomanip>
#include <locale>
using namespace std;
 
struct stack
{ 
    char c;
    struct stack *next;
};
 
char pop(stack ** top);
void push(stack **st, char a);
int PRIOR(char a);
 
int main()
{
    
    char a[80], outstr[80];
    int k=0,point=0;
    setlocale(LC_ALL,"Rus");
        
    freopen("input.txt", "r",stdin);
    freopen("output.txt", "w", stdout);
 
    stack OPERS;
    
    do
    {
        cin>>a[k];
        while(a[k]!='\0')
        {
            if(a[k]==')')
            {
                while((&OPERS)->c!='(')
                    outstr[point++]=pop(&OPERS);
                pop(&OPERS);
            }
            if(a[k]=='(')
                OPERS=push(&OPERS,'(');
            if(a[k]=='+'||a[k]=='/'||a[k]=='*'||a[k]=='-')
            {
                if((&OPERS)==NULL)
                    OPERS=push(&OPERS,a[k]);
                else
                    if(PRIOR((&OPERS)->c)<PRIOR(a[k]))
                        OPERS=push(&OPERS, a[k]);
                    else
                    {
                        while(((&OPERS) != NULL) && (PRIOR((&OPERS)->c) >= PRIOR(a[k])))
                        {   outstr[point++]=pop(&OPERS);}
                        OPERS=push((&OPERS),a[k]);
                    }
            }
            k++;
        }
        while(!feof(stdin))
        outstr[point++]=pop(&OPERS);
        outstr[point]='/0';
        cout<<"\n "<<outstr<<"\n ";
        cout<<"\nПовторить(y/n)?";
    }while(getchar()!='n');
}
 
void push(stack **HEAD, char a)
{
  stack *pv;
  pv=new stack;
  pv->c=a;                                
  pv->next=*HEAD;           
  *HEAD=pv;                               
}
 
 
char pop(stack **HEAD)
{
  char a=(*HEAD)->c;
  stack *pv=*HEAD;
  *HEAD = (*HEAD)->next;                   
  delete pv;   
  return a;                   
}
 
 
int PRIOR(char a)
{
  switch(a)
  {
    case '*':
    case '/':
         return 3;
 
    case '-':
    case '+':
         return 2;
 
    case '(':
         return 1;
  }
}
вот кстати очередная итерация кода... неразбериха с OPERS - несовместимость в указателях..
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2012, 12:49 7
У вас push() ничего не возвращает. Тогда что вы присваиваете OPERS в 41 строке и далее?
0
10 / 10 / 4
Регистрация: 11.10.2012
Сообщений: 93
13.10.2012, 13:18  [ТС] 8
Там ж вроде принцип какой-то был с указателями... push по другому не знаю как реализовать )
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
13.10.2012, 13:22 9
Посмотри похожая тема, может что-то подчерпнёшь для себя. Преобразовать выражение в постфиксную форму
1
13.10.2012, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2012, 13:22
Помогаю со студенческими работами здесь

Создание каталога в указанном месте
Здравствуйте, подскажите пожалуйста, как с помощью .Bat файла (который находится на диске E:\)...

WPF: рисование в указанном месте
У меня есть кусок кода в XAML: &lt;Grid x:Name=&quot;LayoutRoot&quot;&gt; &lt;Button x:Name=&quot;Up&quot; Content=&quot;Up&quot;...

Синтаксические ошибки при компиляции на ровном месте
Добрый день. Пол дня не могу найти ошибку в коде, может вы заметите? MAINWINDOW.H #ifndef...

Ошибки при попытке подключения к MySQL
Для подключения использую библиотеки Oracle, (mysql-connector-net-6.9.6.msi) формирую сроку...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru