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

Палиндром. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Ierehon
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 130
19.09.2011, 14:01     Палиндром. #1
Все доброго времени суток. Проблема следующая. Сделал задачу, реализовал палиндром по средствам С++. Преподаватель решил придраться и требует написать ему свою функцию палиндрома. Как можно реализовать палиндром в С++ не встроенной процедурой?

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
/*19. Рассмотрим некоторое натуральное число n. Если это- не палиндром, то изменим порядок его  цифр  
на  обратный  и  сложим  исходное  число  с получившимся.  Если  сумма- не  палиндром,  то над ним 
повторяется те же действия и т.д., пока  не  получится  палиндром.  До  настоящего  времени неизвестно,  
завершается ли этот процесс для любого натурального числа n.  Даны натуральные числа n,m. 
Проверить,  верно ли, что для n процесс завершается не позднее, чем после m таких действий */
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int is_not_palyndrome(int);
 
void main(){
int a,b,m;
//ввод натурального числа
cout<<"ENTER NATURAL INTEGER: ";
cin>>a;
//проверка на то что число натуральное
if (a<0) {
        cout<<"INTEGER IS NOT NATURAL"<<endl;
        cin>>a;
        return;
}
//проверка является ли число палиндромом
if (!is_not_palyndrome (a)) {
        cout<<"INTEGER IS PALYNDROME"<<endl;
        cin>>a;
        return;
}
//ввод количества действий
cout<<"ENTER M: ";
cin>>m;
 
//попытка получения палиндрома за М шагов
for (int i = 0; i<=m; i++)
 
 {
    //проверка является ли палиндромом
        if (b=is_not_palyndrome (a)) a+=b;
        else {
    //вывод если получился палиндром
           cout<<"PALYNDROME "<<a<<" OBTAINED ON STEP: "<<i<<endl;
           cin>>a;
           return;
        }
}
//вывод если палиндром не получен
cout<<"CANT OBTAIN PALYNDROME IN "<<m<<" STEPS"<<endl;
cin>>a;
return;
}
 
//функция проверки на палиндром
int is_not_palyndrome (int number) {
        int a = number;
        int b = 0;
    //выполнение проверки
        while (a) {
           b*=10;
           b+=a%10;
           a/=10;
        }
    //если палиндом то возвращаем 0
        if (number==b) return 0;
    // если нет, то возвращаем b
        else return b;
        getch();
}
Сам палиндром проверяется через
C#
1
int is_not_palyndrome(int);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2011, 14:01     Палиндром.
Посмотрите здесь:

C++ Палиндром
Палиндром... C++
C++ палиндром
Палиндром C++
Палиндром с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
19.09.2011, 14:07     Палиндром. #2
Ierehon, а разве ваш код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//функция проверки на палиндром
int is_not_palyndrome (int number) {
        int a = number;
        int b = 0;
        //выполнение проверки
        while (a) {
           b*=10;
           b+=a%10;
           a/=10;
        }
        //если палиндом то возвращаем 0
        if (number==b) return 0;
        // если нет, то возвращаем b
        else return b;
                getch();
}
Не является этой функцией?
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
19.09.2011, 15:45     Палиндром. #3
а что имелось ввиду преподавателем под "реализовать палиндром" и "функция палиндрома"? тут ф-ция is_not_palyndrome всего лишь проверяет на принадлежность палиндромам входного числа.
Ierehon
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 130
19.09.2011, 16:25  [ТС]     Палиндром. #4
talis, правильно говорите. Мой косяк.

Paporotnik, если я его правильно понял. То он хочет чтобы он мог по действиям видеть как программа проверяет введенное число на принадлежность к палиндрому. Но как мне уже сказал выше talis, функция уже есть. Просто я ее проморгал. Получается что требование есть и выполняется..
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
19.09.2011, 17:26     Палиндром. #5
Цитата Сообщение от Ierehon Посмотреть сообщение
talis, правильно говорите. Мой косяк.

Paporotnik, если я его правильно понял. То он хочет чтобы он мог по действиям видеть как программа проверяет введенное число на принадлежность к палиндрому. Но как мне уже сказал выше talis, функция уже есть. Просто я ее проморгал. Получается что требование есть и выполняется..
Что значит проморгал функцию? Если бы ты писал этот код, ты бы прекрасно знал, что у тебя в нем есть функция, которая проверяет число.
Да и вообще, как препод, посмотрев код, в котором есть функция на проверку палиндрома, мог сказать, что ее там нет.
P.S. Вы сломали мой мозг)
Ierehon
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 130
19.09.2011, 18:25  [ТС]     Палиндром. #6
fidzhi, когда код пишется на автопилоте то запоминается только что где то было, по крайней мере у меня. По поводу:
Да и вообще, как препод, посмотрев код, в котором есть функция на проверку палиндрома, мог сказать, что ее там нет.
Тут возникает вопрос просто о компетентности данного преподавателя.
CAHTEXHUK
Заблокирован
19.09.2011, 18:33     Палиндром. #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
это я то некомпетентен? о зачёте вобще забудь
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.09.2011, 19:09     Палиндром. #8
Цитата Сообщение от Ierehon Посмотреть сообщение
Тут возникает вопрос просто о компетентности данного преподавателя.
Препод, видимо, просто развёл. Писал бы сам - знал бы, где там функция. А раз на очевидный вопрос не смог ответить, отмазки вроде
Цитата Сообщение от Ierehon Посмотреть сообщение
когда код пишется на автопилоте
уже можно не рассказывать...
Mиxaил
19.09.2011, 19:17
  #9

Не по теме:

Ierehon, почему Вы коды оформляете как С#?!

Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
19.09.2011, 19:40     Палиндром. #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
тока вот не надо про автопилот) я прекрасно помню, что этот код я писал сам в какой-то из тем)
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
19.09.2011, 19:59     Палиндром. #11
Цитата Сообщение от Ierehon Посмотреть сообщение
когда код пишется на автопилоте то запоминается только что где то было, по крайней мере у меня
Ierehon пал по натиском препода Навина . хоть бы разобрал код прежде чем сдавать.
Ierehon
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 130
20.09.2011, 09:52  [ТС]     Палиндром. #12
Paporotnik, не спорю есть такой код. Твой брался за аналог, что то изменялось. Тогда к тебе вопрос. У тебя есть часть кода в палиндроме
C#
1
2
3
4
5
6
7
    //выполнение проверки
        while (a)
        {
           b*=10;
           b+=a%10;
           a/=10;
        }
Но в цикле нет условия. Как тогда проверяется палиндром?

Mиxaил, С# потому что консоль пишу в нем
alkagolik, разобрал, только толку. Когда хотят завалить завалят. ЧТо в данном случае и делают.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
20.09.2011, 10:04     Палиндром. #13
Ierehon, while( a ) означает while( a != 0 ), если я правильно понял суть вопроса.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.09.2011, 17:26     Палиндром. #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
#include <stdio.h>
#include <math.h>
    
int is_palindrome(unsigned num){
    int pwr = (int)pow(10.0, round(log((double)num)/log(10.0)));
 
    while ( pwr ){
        if ( num / pwr % 10 != num % 10 )
            return 0;
        num /= 10;
        pwr /= 100;
    }
    
    return 1;
}
 
int main(void){
    unsigned num;
    
    while ( printf("Number: ") && scanf("%u", &num) == 1 && num )
        printf("%u is %sa palindrome.\n", num, ( is_palindrome(num) ) ? "" : "NOT ");
    
    return 0;
}
по сути бестолковый, ну пусть уж будет - вроде работает...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 20:01     Палиндром.
Еще ссылки по теме:

C++ Палиндром
C++ Палиндром
C++ Палиндром 2 С++

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

Или воспользуйтесь поиском по форуму:
Ierehon
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 130
20.09.2011, 20:01  [ТС]     Палиндром. #15
CAHTEXHUK, а ты то вообще тут причем?
Yandex
Объявления
20.09.2011, 20:01     Палиндром.
Ответ Создать тему
Опции темы

Текущее время: 11:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru