1 Востаннє редагувалося Johny_Hacker (30.09.2013 21:05:25)

Тема: Програма, що переставляє цифри в числі, некоректно працює

Отже так, програма має переставляти цифри в числі задом наперед. Деякі числа нормально переставляє. а от наприклад там де 3 розряди, в кінці замість потрібної цифри виводить нуль. Підкажіть, будь-ласка де помилка.

#include <conio.h>
#include <stdio.h>
#include <math.h>

int main()
{
    int num,a=0,b=0,c=0,x=0;
    printf("Vveditb naturalbne chuslo\n");
    scanf("%d",&num);
    x=num;
    while(x){
       x/=10;
       a++;
    }
    printf("%d\n",a);
    for(int i=a-1;i>=0;i--)
    {
        b=num%10;
        c+=b*pow(10,i);
        num/=10;
        if (num/10==0)
        num=11;
     }
     printf("%d",c);
     getch();
     return 0;  
}

2

Re: Програма, що переставляє цифри в числі, некоректно працює

1) Цікаво, а для чого ви вставили:

 if (num/10==0)
        num=11;

Щоб запутати себе чи нас?

2) Код якось важкува-то читається, але ідея зрозуміла. Проте можна було б обійтись без циклу for.
3) Якщо прибрати if, вказаний вище, то все буде працювати.
4) У мене таке відчуття, що хтось підсунув вам неправильну програму, а ви в цьому не розумієтесь.

Подякували: koala1

3

Re: Програма, що переставляє цифри в числі, некоректно працює

Replace написав:

4) У мене таке відчуття, що хтось підсунув вам неправильну програму, а ви в цьому не розумієтесь.

У мене є відчуття, що це домашку яку замовили у когось, і для захисту від кидалова було вставлено зайве. Ну що рівень замовника, що рівень виконавця є майже однакові :D

4 Востаннє редагувалося Johny_Hacker (01.10.2013 16:14:04)

Re: Програма, що переставляє цифри в числі, некоректно працює

Replace написав:

Щоб запутати себе чи нас?

Ну вас мені плутати сенсу немає. Цей іф і справді не потрібний, це я лишнього написав

Replace написав:

3) Якщо прибрати if, вказаний вище, то все буде працювати.

Справа в тому, що спочатку я написав програму без іфа, а сам іф додав, коли побачив, що вона не те виводить. Коротше, що з іфом, що без - результат роботи неправильний. Отже проблема в іншому. От в чому, я не можу зрозуміти.

Replace написав:

4) У мене таке відчуття, що хтось підсунув вам неправильну програму, а ви в цьому не розумієтесь.

HetmanNet написав:

У мене є відчуття, що це домашку яку замовили у когось, і для захисту від кидалова було вставлено зайве. Ну що рівень замовника, що рівень виконавця є майже однакові

:o Програму я сам робив. Ваші відчуття вас підвели. А на рахунок того, що я не розуміюсь на цьому, то не буду заперечувати, що навиків програмування в мене не дуже багато.

5

Re: Програма, що переставляє цифри в числі, некоректно працює

Johny_Hacker написав:

Справа в тому, що спочатку я написав програму без іфа, а сам іф додав, коли побачив, що вона не те виводить. Коротше, що з іфом, що без - результат роботи неправильний. Отже проблема в іншому. От в чому, я не можу зрозуміти.

Будь ласка, конкретний приклад, де програма працює некоректно. Бажано зі скріншотом. Бо в мене без того if-у все працює.
І подумайте над тим, як можна об'єднати цикли. Зверніть увагу, що перший цикл працює рівно стільки разів, скільки цифр в числі, а другий цикл використовує результат першого тільки для визначення кількості ітерацій.

Подякували: Johny_Hacker1

6 Востаннє редагувалося Johny_Hacker (01.10.2013 17:05:42)

Re: Програма, що переставляє цифри в числі, некоректно працює

koala написав:

І подумайте над тим, як можна об'єднати цикли. Зверніть увагу, що перший цикл працює рівно стільки разів, скільки цифр в числі, а другий цикл використовує результат першого тільки для визначення кількості ітерацій.

Саме так, перший потрібний лише для визначення к-сті цифр у числі, а тоді вже це значення передається для for. Навіть не уявляю, як їх можна об'єднати.

Ось, наприклад. Останню цифру виводить як цифра-1. Якщо к-сть цифр парна, то виводить правильний результат, а якщо к-сть рівна 3 або 5 то неправильно. Коли цифр 7 то теж правильно. Щось ніяк не зрозумію, що за чортівня.

Post's attachments

sdfsdfsvv22.jpg 16.24 kb, 303 downloads since 2013-10-01 

7

Re: Програма, що переставляє цифри в числі, некоректно працює

Це скріншот від коду з if-ом.
Будь ласка, видаліть оце казна-що і перекомпілюйте.
А об'єднати дуже легко:

    while(num){//x - це тимчасова змінна для num, викидаємо його
        //тут можна було додати a++, але нащо нам тепер a?
        //b не потрібен, бо використовується тільки в одному місці
        c=10*c+num%10;//"зсуваємо" c на 1 знак і "дописуємо" в кінець num%10
        num/=10;
     }

Дивіться, як красиво: "з'їдаємо" по одній цифрі в num і "запхаємо" їх в c, доки не скінчиться число num.

Подякували: Johny_Hacker1

8 Востаннє редагувалося Johny_Hacker (01.10.2013 19:17:58)

Re: Програма, що переставляє цифри в числі, некоректно працює

koala написав:

Це скріншот від коду з if-ом.

Та ні, без if-a. видалив його, перекомпілював - усе так само. В останньому розряді одиниця з'їдається. Але вже нехай. Не буду надокучати вам з цим.

koala написав:

Дивіться, як красиво: "з'їдаємо" по одній цифрі в num і "запхаємо" їх в c, доки не скінчиться число num.

Ну це вже вищий пілотаж. Справді красиво. *BRAVO* Якщо чесно, то я до такого не скоро додумався б, якщо взагалі додумався б. Дякую за допомогу!!!