//Программа дял вычисления длинны строки //Автор: Романов Ермолай Евгеньевич, 171 группа ПМиИ //Версия: 0.1 //Среда разработки: Microsoft Visual C++ 2010 (ОС Windows 7) //Дата последнего изменения: 15.03.2010 //----------------------------------------------------------------- #include #include using namespace std; unsigned len_rec(char istr[]); unsigned len_itr(char *istr); bool pdrom(char poly[], int n = 0); int main() { setlocale(LC_ALL,"Russian"); const int nelm = 100; char my_str[nelm]; const char dot = '.'; cout << "Введите строку: "; cin.getline(my_str, nelm, '\n'); cout << "Длинна строки \"" << my_str << "\" равна " << len_rec(my_str) << endl; int beg = clock(); for (int i = 0; i < 1000000; i++) len_rec(my_str); int end = clock(); unsigned rec_time = end - beg; cout << "Время выполнения рекурсивной версии счетчика эл-тов: " << rec_time << " секунд."; beg = clock(); for (int i = 0; i < 1000000; i++) len_itr(my_str); end = clock(); unsigned itr_time = end - beg; cout << "\nВремя выполнения итеративной версии счетчика эл-тов: " << itr_time << " секунд."; cout << "\nРекурсивная версия медленнее в " << rec_time/itr_time << " раз."; cout << "\nПолиндром или нет??"; if (pdrom(my_str)) cout << "\nПолиндром!"; else cout << "\nНе полиндром..."; getchar(); getchar(); } unsigned len_rec(char istr[]) { if (!(*istr)) return 0; return len_rec(istr + 1) + 1; } unsigned len_itr(char *istr) { int n = 0; while (!istr[n]) n++; return n; } bool pdrom(char poly[], int n) { if (poly == poly + len_itr(poly) - n) { n++; pdrom(poly + n, n); return true; } return false; }