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

задание по рекурсии - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упорядочить строки массива в соответствии с ростом характеристики строки http://www.cyberforum.ru/cpp-beginners/thread96175.html
Кто знает как решить радачу помогите please. Для заданного двумерного массива из n строк и m столбцов: Упорядочить строки массива в соответствии с ростом характеристики строки. Характеристикой строки считать сумму её положительных чётных элементов.
C++ Одна на тему: Символы и рядки Помогите в решении задачи, а то я застопорился немного.Вот условие 1. Задана строка, среди символов которого есть как минимум одна запятая. Найти номер последней по порядку запятой. Заранее благодарен!!!! http://www.cyberforum.ru/cpp-beginners/thread96173.html
что не так? C++
#include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> class students { int i,kil,j; char name,fath,group,tel,zalik,fam; char *f; public:
Работа со строками C++
Задача №1 Удалить лишние пропуски в введенной строке символов. Задача №2 Посчитать частоту появления букв в строке, если считать ровными буквы в верхнем и нижнем регистре. Задача№3 В строке слов все слова, которые состоят из четырех букв, удалить, а слова, которые состоят из пяти букв, заменить словом «сурок». Задача№4 В строке слов из букв латинского алфавита найти слова, в которых нет...
C++ выделить слово в тексте http://www.cyberforum.ru/cpp-beginners/thread96072.html
Задан текст Си - программы (у входном файле или массиве символов). Найти (выделить другим цветом или подчеркнуть) служебные слова Си. Использовать функцию strtok().
C++ свой strcpy() кто может написать или показать, или подсказать код к функции либы стринг.н - strcpy() я уже замучался искать правильный вариант, 3 часа ночи, завтра вставать в 6:00, сжальтесь ктонить, дайте код нуждающемуся) подробнее

Показать сообщение отдельно
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
24.02.2010, 19:54  [ТС]     задание по рекурсии
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <fstream.h>
 
ifstream f;         //исходный файл
ofstream out,calls; //выходной файл с результатом и файл вызовов функции
 
const int empty = 0;
const int after_a = 1;
const int after_b = 2;
const int after_in_br = 3;
const int after_out_br = 4;
const int nothing = 5;
 
 
void Hello(int w){                  //вывод в файл надписи запуска функции
    for(int i=0; i<w; i++)
        calls<<' ';
    calls<<"Analyze запущена"<<endl;
}
 
void Goodbye(int w){                //вывод в файл надписи завершения функции
    for(int i=0; i<w; i++)
        calls<<' ';
    calls<<"Analyze завершена"<<endl;
}
 
void Error(int N, int num) {        //функция вывода ошибок
    switch (N){
        case 1: out<<"Error! Source file is empty. "<<endl; break;
        case 2: out<<"Error! Unexpected symbol. At pos "<<num<<endl;break;
        case 3: out<<"Error! Unexpected symbol A. At pos "<<num<<endl;  break;
        case 4: out<<"Error! Unexpected symbol ). At pos "<<num<<endl;  break;
        case 5: out<<"Error! Unexpected symbol B. At pos "<<num<<endl;  break;
        case 6: out<<"Error! Unexpected symbol (. At pos "<<num<<endl;  break;
        case 7: out<<"Error! The symbol A is passed. At pos "<<num<<endl;   break;
        case 8: out<<"Error! The symbol B is passed. At pos "<<num<<endl;   break;
        case 9: out<<"Error! The bracket is passed. At pos "<<num<<endl;    break;
        default: out<<"Error! At pos "<<num<<endl; break;
    }
}
 
int getNext(char& ch, int & num){   //прочтение следующего значащего символа
    static int n=0; //номер символа для диагностических сообщений
    do  {
        f>>ch; 
        num = ++n;
    } while (((ch==' ') || (ch=='\n')) && (!f.eof())) ; //пропускаем пробелы и перевод строки
    if (f.eof()) return 0;  //если обнаружен конец файла, сообщим о неудаче чтения
    return 1;
}
 
 
/*
    главная рекурсивная функция, выявляющая ошибки и пробегающая всю входную цепочку
    параметры:  w - смещение в файле вызовов функции.
                st - информация о том, что было перед этим символом прочитанно
                br - счетчик скобок
*/
void Analyze(int w, int st, int br){
    Hello(w);           //функция запустилась, информация об этом добавлятся в файл
    char c;
    int i;
    if (!getNext(c,i)){ //читаем следующий символ
        if (br>0) Error(9,i);
        if ((st != nothing) || br) Error(10,i);         
        else out<<"Правильная запись скобки"<<endl;
        Goodbye(w); 
        return;
    }
    out<<c<<endl;       //выведем его в файл
    switch(st){
        case empty:     //начинаться правильная последовательность может с..
            if (c=='('){
                br++;   //изменим счетчик скобок
                Analyze(w+2,after_in_br,br);
            }
            else if (c=='A'){   //первый символ и он же должен быть последний
                Analyze(w+2,nothing,br);
            }
            else {      //увы, ошибки
                Error(7,i);
                Error(9,i);
                if (c==')') Error(4,i);
                else if (c=='B') Error(5,i);
                else Error(2,i);
            }
            break;
        case after_a: //после символа А могут идти ..
            if ( br>0 && (c==')')){ //только закрывающие скобки, если они должны присутствовать
                br--;
                Analyze(w+2,after_out_br,br);
            }
            else {      //увы, ошибки
                if (br>0) Error(9,i);
                if (c=='A') Error(3,i);
                else if (c=='B') Error(5,i);
                else if (c=='(') Error(6,i);
                else Error(10,i);
            }
            break;
        case after_b:   //после символа Б могут идти .. 
            if (c=='('){
                br++;
                Analyze(w+2,after_in_br,br);
            }
            else if (c=='A'){
                Analyze(w+2,after_a,br);
            }
            else {      //увы, ошибки
                if (c=='B') Error(3,i);
                else if (c==')') Error(4,i);
                else Error(2,i);
            }
            break;
        case after_in_br: //после открывающей скобки может идти ..
            if (c=='B'){    //только Б
                Analyze(w+2,after_b,br);
            }
            else{       //увы, ошибки
                Error(8,i);
                if (c=='A') Error(3,i);
                else if (c=='(') Error(6,i);
                else if (c==')') Error(4,i);
                else Error(2,i);
            }
            break;
        case after_out_br:  //после закрывающей скобки могут идти ..
            if(c==')'){     //еще одна закрвающая, например (Б(БА))А
                br--;
                Analyze(w+2,after_out_br,br);
            }
            else if ((br==0)&&(c=='(')){ //новая открывающая, если все старые скобки закрыты (БА)(БА)А
                br++;
                Analyze(w+2,after_in_br,br);
            }
            else if((c=='A') && !br){   //завершающий символ А, при условии, что все скобки на местах
                Analyze(w+2,nothing,br);
            }
            else {          //увы, ошибки
                if ((c=='A') && br) {
                    Error(9,i); 
                    Error(3,i); 
                }
                else if ((c=='(') && !br){
                    Error(9,i); 
                    Error(6,i); 
                }
                else Error(10,i); 
            }
            break;
        case nothing:       //если больше ничего не должно быть в файле, но есть..
            if (c=='A') Error(3,i); 
            else if (c=='B') Error(5,i); 
            else if (c=='(') Error(6,i); 
            else if (c==')') Error(4,i);            
            break;
    }
    Goodbye(w);         //функция завершается  и выводит сообщение в файл
}
 
int main(){ 
    f.open("Input.txt",fstream::in|fstream::nocreate ); //исходный файл
    if (!f.is_open()) {
        cout<<"Source file is not exist or busy.. Try again later.."<<endl;
        return 1;
    }
    out.open("Output.txt",fstream::out|fstream::trunc );    //файл выходной
    calls.open("Analyze.txt",fstream::out|fstream::trunc ); //файл вызово функции
    Analyze(0,empty,0); //запуск анализатора
    return 0;
}

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