[C++] Разбиение числа на разряды и порязрядный вывод через пробел

Тема в разделе "Другие языки программирования", создана пользователем Alex1983, 14 авг 2010.

  1. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    848
    Симпатии:
    523
    Всем добрый вечер.
    Имеется задача:
    Код (Text):
    На пишите программу которая счывает число из пяти цифр, разделяет это число
    на отдельные цифры и выводит эти цифры на печать, отделяя друг от друга тремя пробелами.
    То есть мы вводим число 12345 программа должна вывести 1   2   3   4   5.
    Заранее благодарен.

    P.S. Решение на С++. Используя инструкцию if. И функции printf(), scanf().
     
    Последнее редактирование: 14 авг 2010
  2. iskander-k
    Оффлайн

    iskander-k Команда форума Супер-Модератор Ассоциация VN/VIP Преподаватель

    Сообщения:
    3.733
    Симпатии:
    3.260
    Хитрец... :) А Самому решить ?
     
    2 пользователям это понравилось.
  3. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    848
    Симпатии:
    523
    Не могу сообразить.
     
  4. AlexTNT
    Оффлайн

    AlexTNT Активный пользователь

    Сообщения:
    80
    Симпатии:
    58
    На дисплей?
    printf(), scanf() - это уже С
     
  5. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    848
    Симпатии:
    523
    Да.

    Это взято из учебника-задачника по С/С++.
     
  6. AlexTNT
    Оффлайн

    AlexTNT Активный пользователь

    Сообщения:
    80
    Симпатии:
    58
    Вот код, но это уже С, if не придумал куда вставить.
    Код (Text):
    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
            char c;
            scanf("%c",&c);
            for (int i=0;i<5;i++)
            {
                    printf("%c   ",c);
                    scanf("%c",&c);
            }
            if(c!='\n')
            printf("\nKol-vo bolishe 5");
        printf("\n");
        system("PAUSE");
      return 0;
    }
     
    Добавлено через 12 часов 6 минут 18 секунд
    Прошу прощения, if вставил ещё вчера, а само сообщение не отредактировал.
     
    4 пользователям это понравилось.
  7. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.902
    Симпатии:
    8.221
    AlexTNT, А вы батенька, хитрец. :biggrin:
    Число нужно, а не строка. ;)

    Покопавшись в своих решениях, нашёл, эту задачу из книги Дейтелов, и как я её тогда решил, прочитав только первую и вторую главу.
    Код (Text):
    // Задачи главы 1. Задача 1.36
    // Пробел между цифрами
    #include <iostream>
    using namespace std;

    int main()
    {
       int num1, tic,
           num2, sot,
           num3, dec,
           num4, one;

       cout<<"  Enter Number Format - ####:  ";
       cin>>num1;
       while(num1 != -1){
          tic = num1 / 1000;
          num2 = num1 % 1000;
          sot = num2 / 100;
          num3 = num2 % 100;
          dec = num3 / 10;
          num4 = num3 % 10;
          one = num4 / 1;
          cout<<"  Resultat:  "<<tic<<" "<<sot<<" "<<dec<<" "<<one<<endl;
          cout<<"\n  Enter Number:  ";
          cin>>num1;
        }
       return 0;
    }
    //---------------------------------------------------------------------------
    Программа просит ввести четырёхзначное число и разбивает на числа через пробел, если вводить меньше четырёх или больше четырёх разрядов, выводимое решение будет неверно. Но это было решено уже позже, понадобились знания создания динамических массивов и вроде бы всё. Если интересно, поищу и приведу пример уже в понедельник. :)

    P.S. Вместо printf\scanf лучше используй cout\cin проще на уровень. А результат тот же.
     
    5 пользователям это понравилось.
  8. Alex1983
    Оффлайн

    Alex1983 Разработчик

    Сообщения:
    848
    Симпатии:
    523
    Я нашел ошибку, вместо С++ я скачал просто С.

    Конечно интересно, буду ждать.



    Понял. Спасибо за подсказку.
     
  9. Drongo
    Оффлайн

    Drongo Ассоциация VN/VIP Разработчик

    Сообщения:
    7.902
    Симпатии:
    8.221
    В принципе нашёл, но видимо запутался, без создания динамических массивов, для её написания, вполне достаточно двух глав 1 и 2 по книге Дейтелов. Что не ясно, спрашивай.

    Код (Text):
    // Написать прогу, которая по заданному натуральному числу
    // определяет количество цифр в нем и выводит их по одному через пробел.
    #include <iostream>
    using std::cout;
    using std::cin;
    using std::endl;

    // Функция расчитывающая количество чисел во введённом числе...
    // Пока число делится на 10
    // увеличиваем счётчик считающий кол-во разрядов в числе
    int Rasriad(int enterNumber)
    {
      int n = enterNumber, x = 0;
      while(n != 0){
         n /= 10;
         x++;
        }
      return x;
    }

    int main()
    {
       int enterNumber,  // сохраняем введённое число
           lenght = 0,   // сохраняем "длину" числа, кол-во разрядов: 1234567 = 7 чисел
           indexRas,     // последний запоминаемый разряд числа
           decimal = 1,  // делитель, "отрывающий" разряды числа, после каждого прохода, умножается на 10
           z;

       cout<<" Enter Number: ";    // вводим число
       cin>>enterNumber;          // считываем число в переменную

       // определяет количество цифр в нем.
       lenght = Rasriad(enterNumber);

       // Вычисляем максимальное число, которым мы начнём "отрывать" разряды у введённого числа
       for(int j = 1; j < lenght; j++)
          decimal *= 10;

       cout<<" Number = "; // Выводим сообщение о начале вывода, информационный вывод

       // Процесс "отрыва" разрядов и вывод через пробел
       for(int i = 0; i < lenght; i++){
          indexRas = enterNumber / decimal % 10; // Отрываем первый разряд в числе и сохраняем в переменной
          decimal /= 10; // уменьшаем делитель для последующего разряда в числе
          cout<<indexRas<<" "; // выводим через пробел
        }

       cin>>z;

       return 0;
    }
    //---------------------------------------------------------------------------
     
    Последнее редактирование: 15 авг 2010
    6 пользователям это понравилось.

Поделиться этой страницей