Не могу скомпелировать код - C (СИ)
Формулировка задачи:
В интернете нашел вот такой код для синтеза ДМП-автомата на языке С. Не могу скомпелировать!
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> const char Term[6] = "abcde"; char str[100] = ""; int poz = 0; // Порядковый номер буквы введенной строки // Таблица переходов при считывании символа int A[5][14] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0 0 0 }; // Таблица записи в стек int W[14] = { 0, 0, 6, 0, 10, 0, 0, 0, 6, 0, 0, 0, 0, 10 }; void IsTerm(); // Проверка: Все ли символы терминальные? void Stan(int i); // Функция переходов между состояниями class Stek { public: // Присвоение названия нетретм. символа и его индекса void Set(char n, int i) { ind = i; name = n; } // Возвращение индекса терм. символа текущего эл-та стеке int GetInd() const { return ind; } // Возвращение названия терм. символа текущего эл-та стеке char GetName() const { return name; } private: int ind; // индекс терм. символа char name; // название терм. символа }; Stek Mas[50]; int j = 0; // Номер текущего эл-та в массиве int main() { printf("Vvedit stri4ky (terminal symbols: " a \ ", " b \ ", " c \ ", " d \ ", " e \ "): \ n"); scanf("% s", &str); IsTerm(); Stan(0); if (poz == strlen(str)) printf("\ n --- Stri4ka pravulna! ---") else printf( "\ n --- Error! Stri4ka ne pravulna! ---") getch(); return 0; } void IsTerm() { int p; // Проверка всех введенных букв на равенство // Одной из терминальных for (int i = 0; i < strlen(str); i++) { for (int j = 0; j < strlen(Term) j++) { p = 0; if (str[i] == Term[j]) { p = 1; break; } } if (p == 0) { printf("\ n --- Nevirni terminalni symvolu! ---") getch(); exit(0); } } } void Stan(int i) { int p = 0; // Флажок: Есть исполнилось считывания символа, или // Запись или считывание с стека? // Проходим все эл-ты i-го столбца (состояния) for (int k = 0; k < 5, k++) { // Если эл-т таблице не "0" и если текущая буква // Совпадает с буквой данной строки то переходим // В состояние что соотв. эл-ту таблицы if ((A[k][i] ! = 0) && (Term[k] == str[poz])) { poz++; Stan(A[k][i]); p = 1; } } if ((!p) && (W[i])) { switch (i) { // Добавляем новый эл-т в стек и инициализирует его case 2: Mas[j].Set(A, 1); break; case 4: Mas[j].Set('B', 1); break; case 8: Mas[j].Set(A, 2); break; case 13: Mas[j].Set('B', 2); break; } j++; Stan(W[i]); p = 1; } if ((!p) && (j)) { switch (i) { // Зануление эл-то из стека при переходе на следующий case 7: if (Mas[j - 1].GetInd() == 1) { Mas[j - 1].Set( '', 0); j--; Stan(3); p = 1; } if (Mas[j - 1].GetInd() == 2) { Mas[j - 1].Set( '', 0); j--; Stan(9); p = 1; } Break; case 11: if (Mas[j - 1].GetInd() == 1) { Mas[j - 1].Set( '', 0); j--; Stan(5); p = 1; } if (Mas[j - 1].GetInd() == 2) { Mas[j - 1].Set( '', 0); j--; Stan(11); p = 1; } } } // Если не сделано считывания символа, или запись или считывание с стека // И мы не находимся в 1-м состоянии (конечное состояние) то ошибка if ((p == 0) && (i ! = 1)) { printf("\ n --- Error! Stri4ka ne pravulna! ---") getch(); exit(0); } }
Решение задачи: «Не могу скомпелировать код»
textual
Листинг программы
... class Stek { public: ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д