Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 19.11.2019
Сообщений: 193
1

Объясните как работает код

04.04.2020, 20:09. Показов 352. Ответов 3

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
#include <iostream>
 
int main()
{
        //обычная запись : (b + c)* d
        //обратная польская запись : bc + d *
 
    char stek[1000];
    int ns = 0, res = 0;
    char Expr[] = "bc+d*";
    int val[26];  // массив значений переменных a = val[0], b=val[1] ...
    char* p;
    for (p = Expr; *p; p++) {
        if (*p == '*' || *p == '+') {
            if (ns < 2)  break;
            if (*p == '+') stek[ns - 2] = stek[ns - 1] + stek[ns - 2];
            else  stek[ns - 2] = stek[ns - 1] * stek[ns - 2];
            ns--;
        }
        else {
            if (*p < 'a' || *p>'z') break;
            stek[ns++] = val[*p];
        }
    }
    if (*p || ns != 1) printf("Error");
    else printf("res=%d", stek[0]);
}
Объясните как работает код и откуда вывод: 32
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2020, 20:09
Ответы с готовыми решениями:

Объясните как работает код с 5 строки
int c, nl, nw, nc,state; state = OUT; nl = nw = nc = 0; while (( c = getchar()) != EOF) { if (c...

Объясните пожалуйста как работает данный код
Вот после присваивания curnum рандомные числа в пределах COUNT,не могу понять когда он будет...

Объясните, как работает программа
#include &lt;stdio.h&gt; #include &lt;string.h&gt; void num_of_char(char *, char *, int , int , int *); ...

Объясните, как работает пример из книги
Я читаю книгу Дэвида и Дона Гриффитса &quot;Изучаем программирование на си&quot;, и столкнулся там с...

3
Вездепух
Эксперт CЭксперт С++
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,082
04.04.2020, 20:51 2
Никак не работает. val[*p] - гарантированный вылет за пределы массива.
0
2 / 2 / 0
Регистрация: 19.11.2019
Сообщений: 193
04.04.2020, 21:00  [ТС] 3
TheCalligrapher, он работает и выводит res=32
0
Вездепух
Эксперт CЭксперт С++
11697 / 6376 / 1724
Регистрация: 18.10.2014
Сообщений: 16,082
04.04.2020, 21:30 4
Цитата Сообщение от Bohdan2 Посмотреть сообщение
он работает и выводит res=32
Нет, этот код даже скомпилировать невозможно из-за #include <iostream>. Что это за #include такой?

Исправляем эту ошибку, компилируем... http://coliru.stacked-crooked.... 43ecf9f68d Получаем какое-то -32...
Пробуем еще раз... http://coliru.stacked-crooked.... bc2e605b7d Теперь 0.

Вам показалось. Этот код обладает неопределенным поведением. То есть он НЕ работает. А что он там выводит или не выводит никакого значения не имеет.

P.S. Отдельно умиляет/удивляет использование типа char для хранения результатов операций сложения и умножения значений типа int. Даже если исправить вышеупомянутые ошибки, все равно будет получаться чушь.
0
04.04.2020, 21:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2020, 21:30
Помогаю со студенческими работами здесь

Указатели. Объясните почему и как работает malloc ?
Юзер вводит слово char name; scanf(&quot;%s&quot;, name); Необходимо сделать массив такого же размера...

Объясните, как в примере работает приведение типов
Вот такой пример: #include &lt;stdio.h&gt; #include &lt;pthread.h&gt; void * any_func (void * arg) {...

Объясните как работает это программа, по строчно! Пожалуйста C++
Объясните пожалуйста программу построчно. Заранее спасибо

Объясните как работает функция добавления в односвязный список
Программа полностью рабочая. Я просто не могу понять 1 момент в функции показанной ниже. часть...


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

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