Вывести цифры числа в нормальном и обратном порядке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не могу понять функции. Написал простенький код, а переделать его на функции никак не могу, читаю теорию - вроде все ясно, а практике сильно туплю Переделайте, пожалуйста, мой "код" на функции, что бы в мейне лишь вызовы были и поясните, почему и как работает каждая из ваших функций

Условие:

ввести с клавиатуры некоторое количество чисел и вывести их цифры в нормальном и обратном порядке
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define N 100
 
int main(){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char K=0;
    char mas[N];
    char*p1;
    int i=0, kolvo;
    printf("Введите количество чисел: ");
    kolvo=getche()-48;
    printf("\n\n");
    do{
        fflush(stdin);
        p1=mas;
        printf("Введите число: ");
        K=0;
        do{
            *p1=getchar();
            if(isdigit(*p1))
                mas[K++]=*p1;
            if(*p1=='\n') break;
        }while(++p1<mas+N-1);
        *p1='\0';
        printf("Нормальный порядок: ");
        for(p1=mas;p1<&mas[K];p1++)
            printf("%c ",*p1);
        printf("\nОбратный порядок: ");
        for(p1=&mas[K]-1;p1>=mas;p1--)
            printf("%c ",*p1);
        printf("\n\n");
    }while(++i<kolvo);
    getch();    
}

Решение задачи: «Вывести цифры числа в нормальном и обратном порядке»

textual
Листинг программы
#include <stdio.h>
 
/* с отрицательными числами не морочимся, активно используем тип unsigned */
 
/* печать по цифре через пробел в "прямом" порядке */
void goahead(unsigned n) {
    if ( n > 9 )
        goahead(n / 10);
    printf("%d ", n % 10);
}
 
/* печать по цифре через пробел в "обратном" порядке */
void upsidedown(unsigned n) {
    printf("%d ", n % 10);
    if ( n > 9 )
        upsidedown(n / 10);
}
 
int main(void) {
    unsigned n;
    
    while ( printf("Number: ") && scanf("%u", &n) == 1 ) {
        printf("Right order: ");
        goahead(n);
        printf("\nReversed order: ");
        upsidedown(n);
        printf("\n");
    }
    
    return 0;
}

Объяснение кода листинга программы

В этом коде есть две функции: goahead и upsidedown, которые печатают цифры числа в прямом и обратном порядке соответственно. Функция goahead рекурсивно разбивает число на десятки и вызывает саму себя для каждой цифры, пока не будет достигнуто число, которое меньше или равно 10. Затем функция печатает последнюю цифру числа, используя оператор % для получения остатка от деления. Функция upsidedown делает то же самое, но в обратном порядке, сначала печатая последнюю цифру, а затем вызывая саму себя для каждой цифры, пока не будет достигнуто число, которое меньше или равно 10. Функция main считывает число с помощью функции scanf и передает его в функцию goahead, чтобы напечатать цифры числа в прямом порядке, а затем в функцию upsidedown, чтобы напечатать цифры в обратном порядке. Этот процесс повторяется до тех пор, пока пользователь не введет число, которое больше 9.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы