Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
#1

Прошу раскритиковать алгоритм!!! - C++

18.09.2010, 15:37. Просмотров 685. Ответов 14
Метки нет (Все метки)

Здравствуйте товарищи программисты! Прошу раскритиковать алгоритм для определения является ли число палиндромом, который написаний мною С++. Что не правильно? как можно, или как нужно было писать код? (алгоритм может быть не тот что нужен, думал сам, пока работает )


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
#include<iostream>
#include<conio.h>
using namespace std;
 
int main()
{
 
int inputDigit, poliDigit=0, rest=0, position=10,temp=0;
cout<<"Enter digit: ";
cin>>inputDigit;
while(inputDigit!=temp)
    {
    if((inputDigit%position)!=inputDigit)
        position*=10;
    else
        {
        temp=inputDigit;
        position/=10;
        }
 
    }
temp=inputDigit;
while(temp!=0)
    {
    rest=(temp%10);
    poliDigit+=rest*position;
    temp=(temp-rest)/10;
    position/=10;
    }
if(poliDigit==inputDigit)
cout<<"Inputed digit "<<inputDigit<<" is a palindrome!";
else
cout<<"Sorry, but inputed digit "<<inputDigit<<" isn't a palindrome!";
cout<<"\n\nResult of algorim is: "<<poliDigit;
getch();
return 0;
}

http://www.cyberforum.ru/cpp-beginners/thread1326616.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2010, 15:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прошу раскритиковать алгоритм!!! (C++):

Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
Написать программу для работы по запросам оператора с приоритетной очередью...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками...

Комбинаторика: раскритиковать код
Добрый день, только начинаю учить c#. Задача - поиск пароля, где psw - пароль,...

Прошу подсказать алгоритм
Нужно распредилить большой отрезок на маленькие (кол-во и размер указаны). Вот...

14
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 16:08 #2
у меня вот такой алгоритм получился

C++
1
2
3
4
5
6
7
8
9
bool poli(int x){
    int tmp = x;
    int numb = 0;
    while( tmp ){
        numb = numb * 10 + (tmp % 10);
        tmp /= 10;
    }
    return ( x == numb ) ? true : false;
}
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
int main()
{
    if ( poli(121) )
        cout<<"yes";
    else
        cout<<"not";
    return 0;
}
2
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 16:55  [ТС] #3
Красиво )))
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.09.2010, 17:00 #4
PointsEqual, думаю этого будет достаточно
C++
1
return x == numb;
2
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 17:03  [ТС] #5
Ну хотелось что бы мой алгоритм критиковали ))))))
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.09.2010, 17:13 #6
Цитата Сообщение от art_z Посмотреть сообщение
Ну хотелось что бы мой алгоритм критиковали ))))))
имхо, лучшая критика была приведена в коде. то есть вы перемудрили.
2
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 17:16  [ТС] #7
Ждите добавки))) критика лучший сервис!
1
rrrFer
Заблокирован
18.09.2010, 20:29 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int poli(char *s,int i){
    int n;
    if(!s[i])
        return 0;
    if((n=poli(s,i+1))>=0&&s[n]==s[i])
        return n+1;
    return -1;
}
 
int main(){
    char s[25];
    std::cin>>s;
    std::cout<<(poli(s,0)<0?"no":"yes")<<std::endl;
    std::cin.get(),std::cin.get();
    return 0;
}
Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int poli(char *s,int n){
    if(n<0)
        return 1;
    if(*s==s[n])
        return poli(s+1,n-2);
    return 0;
}
 
int main(){
    char s[25];
    int n;
    std::cin>>s;
    for(n=0;s[n];n++);
    std::cout<<(!poli(s,n-1)?"no":"yes")<<std::endl;
    std::cin.get(),std::cin.get();
    return 0;
}
1
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:32 #9
rrrFer, если не ошибаюсь чтобы в функцию передавать только строку
C++
1
poli(char *s)
а не
C++
1
 poli(char *s,int n)
в теле можно завести
C++
1
static int n;
1
rrrFer
Заблокирован
18.09.2010, 20:33 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
int poli(char *s){
    int n,i;
    for(n=0;s[n];n++);
    for(i=0,n--;i<n;i++,n--)
        if(s[i]!=s[n])
            return 0;
    return 1;
}
 
int main(){
    char s[25];
    int n;
    std::cin>>s;
    
    std::cout<<(!poli(s)?"no":"yes")<<std::endl;
    std::cin.get(),std::cin.get();
    return 0;
}
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:34 #11
тогда рекурсии уже нет)
1
rrrFer
Заблокирован
18.09.2010, 20:45 #12
PointsEqual, в первом случае можно, во втором врядли стоит, т.к. там N-длина строки, наверно ее лучше узнать в маин.статическая переменная инициализируется при первом вызове, когда дойдет до строки
static int n=...; придется выносить определение длины строки в отдельную фунцию:
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
#include <iostream>
int len(char *s){
    int n;
    for(n=0;s[n];n++);
    return n;
}
int poli(char *s){
    static int n=len(s)-1;
    if(n<0)
            return 1;
    if(*s==s[n]){
            n-=2;
            return poli(s+1);
    }
    return 0;
}
 
int main(){
    char s[25];
    std::cin>>s;
    std::cout<<(!poli(s)?"no":"yes")<<std::endl;
    std::cin.get(),std::cin.get();
    return 0;
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int poli(char *s){
    static int i=0;
    int n;
    if(!s[i])
        return 0;
    if((++i,n=poli(s))>=0&&s[n]==s[--i])
        return n+1;
    return -1;
}
 
int main(){
    char s[25];
    std::cin>>s;
    std::cout<<(poli(s)<0?"no":"yes")<<std::endl;
    std::cin.get(),std::cin.get();
    return 0;
}
1
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:47 #13
Цитата Сообщение от rrrFer Посмотреть сообщение
придется выносить определение длины строки в отдельную фунцию:
можно прям там, вот мой вариант

C++
1
2
3
4
5
6
7
8
9
10
11
bool polindrom(char* s){
    static char *start=s;
    static char *end=s+strlen(s)-1;
    if (start>=end)  return true;
    if (*start==*end) {
        start++;
        end--;
        return polindrom(s);
    }
    else return false;
}
Добавлено через 1 минуту
.. вообще вариантов куча
0
rrrFer
Заблокирован
18.09.2010, 20:51 #14
PointsEqual, дак вы и использовали strlen() чтобы инициализировать
инициализируется при первом вызове, когда дойдет до строки
static int n=...; придется выносить определение длины строки в отдельную фунцию:
и условие краше в цикл было бы засунуть тогда и в статике смысла нету
0
PointsEqual
ниначмуроФ
838 / 522 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:59 #15
Цитата Сообщение от rrrFer Посмотреть сообщение
и условие краше в цикл было бы засунуть тогда и в статике смысла нету
не спорю
1
18.09.2010, 20:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2010, 20:59
Привет! Вот еще темы с решениями:

Прошу проверить алгоритм
В общем, для пробы, сделал программку (не без чужих примеров, естественно),...

Матлаб.С 3 по 10 задание.Прошу выполнить до Вторника,а то отчислят с универа.Прошу вас!
я Скинул 2 фотки.Там задания Правила: 4.3. Создавайте темы с осмысленными и...

Абрамов № 61, 85, 334(а), 374, 67(б,а). Прошу помочь, мне нужны эти задания для зачета прошу помощи.
Прошу помощи, скачайте файл Абрамов (пожалуйста), номер 61, 85, 334(а), 374,...

Оператор If. Прошу прошу
Пользователь вводит значения x, a, b, c (a, b, c - действительные числа)....


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

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

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