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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
#1

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

18.09.2010, 15:37. Просмотров 668. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2010, 15:37     Прошу раскритиковать алгоритм!!!
Посмотрите здесь:

Прошу! - C++
Уважаемые люди помогите с задачами по с++ вопрос жизни и смерти точнее отчисление из института вообщем сами задачи Семинар 2 и 3...

прошу помощи - C++
Помогите получить зачетку. Надо написать токую програму на С : User вводит цифру нп: 7965132 а на монитор выводитса : 6,2. тоесть...

Прошу помочь - C++
Нужно привести програмку в порядок, с первой частью вроде справился, со второй не могу, ошибка С2784. Первая часть: было: ...

Прошу подсказки - C++
Вот простой код C++: int main() { int ppc= {17,7,18,56,3,64,71,88,91,15,11,115,130,11,20}; int p=0; int w=0; for(w ; w &lt;...

Помощи прошу - C++
Как сделать ? String name; getline(cin, name) не получается использовать массив

Очень прошу помочь... - C++
Очень прошу!!! Помогите пожалуйста срочно решить задачи!!!!Ну очень надо.... 1 задача. Дан массив. Скопировать все его элементы в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 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;
}
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 16:55  [ТС]     Прошу раскритиковать алгоритм!!! #3
Красиво )))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.09.2010, 17:00     Прошу раскритиковать алгоритм!!! #4
PointsEqual, думаю этого будет достаточно
C++
1
return x == numb;
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 17:03  [ТС]     Прошу раскритиковать алгоритм!!! #5
Ну хотелось что бы мой алгоритм критиковали ))))))
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.09.2010, 17:13     Прошу раскритиковать алгоритм!!! #6
Цитата Сообщение от art_z Посмотреть сообщение
Ну хотелось что бы мой алгоритм критиковали ))))))
имхо, лучшая критика была приведена в коде. то есть вы перемудрили.
art_z
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 12
18.09.2010, 17:16  [ТС]     Прошу раскритиковать алгоритм!!! #7
Ждите добавки))) критика лучший сервис!
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;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 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;
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;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:34     Прошу раскритиковать алгоритм!!! #11
тогда рекурсии уже нет)
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;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 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 минуту
.. вообще вариантов куча
rrrFer
Заблокирован
18.09.2010, 20:51     Прошу раскритиковать алгоритм!!! #14
PointsEqual, дак вы и использовали strlen() чтобы инициализировать
инициализируется при первом вызове, когда дойдет до строки
static int n=...; придется выносить определение длины строки в отдельную фунцию:
и условие краше в цикл было бы засунуть тогда и в статике смысла нету
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2010, 20:59     Прошу раскритиковать алгоритм!!!
Еще ссылки по теме:

Прошу объяснить код С++ - C++
здравствуйте, прошу объяснить как для полного нуба простейшими словами данный кусок кода: y=150 (10010110 в двоичной) int y=150; ...

Прошу коллективной помощи! - C++
Добрый день! Стоит задача создать программу на C, которая бы умела: - обращаться к нескольким внешним программам, а именно поочередно...

прошу помочь с программой на с++ - C++
Для матрицы A, с размерами N×M написать функции умножения матрицы на скаляр и вычисления суммы элементов матрицы. Вычислить и напечатать...

Знатоки прошу ответа!!! - C++
1. double temp; for (int i = p + 1; i &lt; n; i++) { temp = arr; for (int j = 0; j &lt; n + 1; j++) arr -= arr * temp; } 2. ...


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

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
18.09.2010, 20:59     Прошу раскритиковать алгоритм!!! #15
Цитата Сообщение от rrrFer Посмотреть сообщение
и условие краше в цикл было бы засунуть тогда и в статике смысла нету
не спорю
Yandex
Объявления
18.09.2010, 20:59     Прошу раскритиковать алгоритм!!!
Ответ Создать тему
Опции темы

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