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

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

Войти
Регистрация
Восстановить пароль
 
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
#1

Задача на написание ф-ции!!! - C++

27.02.2012, 22:38. Просмотров 397. Ответов 6
Метки нет (Все метки)

Доброго времени суток
Нужно написать ф-цию,которая вводит целое число из диапазона от 1 до 32767 и печатает его как последовательность цифр,каждая из которых отделена от соседней двумя пробелами.
Например,целое число 4562 должно быть напечатано в виде 4 5 6 2
////Вот моё решение,очень долго думал и изобрел вот такой велосипед, ПОЖАЛУЙСТА подскажите правильно ли написан код,и можно ли как нибудь сделать проще, используя ф-цию,циклы.
Напишите эту задача использую рекурсивную ф-цию,если это логически возможно,у меня что то не вышло
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int func(int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int er,number;
    srand(time(NULL));
    number=rand();
    cout<<number<<"\n"<<endl;
    if(number<10) {         //Если число однозначное то нет смысла что то делать дальше
        cout<<number<<endl;   //
        system("pause");        //
        return 0;}             //*****************************
    for(;;){    //вызываем ф-цию пока она не возратит -1 что означает конец вывода чисел
        er=func(number);        //Присваиваем переменной er значение ф-ции и...
        if (er==-1) break;      //....проверяем её на завершение задачи.
        cout<<er<<"  ";}        //печатаем значение ф-ции
    cout<<number%10<<endl;     //
    system("pause");
    return 0;
}
int func(int x){
    static int statica=10;
    if(x>statica){              
        while(x>statica) x=x/10;
        statica=statica*10;
        if(x>=10) x=x%10;
        return x;}
    else return -1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1276 / 634 / 55
Регистрация: 11.08.2011
Сообщений: 2,272
Записей в блоге: 2
Завершенные тесты: 1
27.02.2012, 22:49     Задача на написание ф-ции!!! #2
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
#include <iostream>
 
void Split (int n)
{
    if (!n) return;
    
    Split (n/10);
    std:: cout << n%10 << " ";
}
 
 
int main()
{
    int n;
 
    std:: cin >> n;
 
    if (n==0) std:: cout << "0";
    else Split (n);
    std:: cout << "\n";
 
 
    system ("pause");
    return 0;
}
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
27.02.2012, 22:58  [ТС]     Задача на написание ф-ции!!! #3
Спасибо очень хороший пример)
if (!n) return; Что он проверяет?
Dani
1276 / 634 / 55
Регистрация: 11.08.2011
Сообщений: 2,272
Записей в блоге: 2
Завершенные тесты: 1
27.02.2012, 23:02     Задача на написание ф-ции!!! #4
C++
1
if (n==0)
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
27.02.2012, 23:15  [ТС]     Задача на написание ф-ции!!! #5
Split (n/10); Опиши пожалуйста как она делит и что передаёт оператору cout не могу понять(((
std:: cout << n%10 << " ";

Как я понимаю она делит бесконечно.
Например 253/10 потом 25/10 потом 2/10 и т.д.
Dani
1276 / 634 / 55
Регистрация: 11.08.2011
Сообщений: 2,272
Записей в блоге: 2
Завершенные тесты: 1
27.02.2012, 23:22     Задача на написание ф-ции!!! #6
1: 253. 253!=0, то передает в рекурсию 253/10=25. И ПОСЛЕ ТОГО КАК ЭТА РЕКУРСИЯ ОТПРАБОТАЕТ, она выведет 253%10=3.
2: 25. 25!=0, то передает в рекурскию 25/10=2. И ПОСЛЕ ТОГО КАК ЭТА РЕКУРСКИЯ(с 2) ОТРАБОТАЕТ,
она выведет 25%10=5.
3: 2. 2!=0, то передает в рекурсию 2. И затем как рекурсия отпработает, она выведет 2.
4: 0=0, то выходим.

Функция не знает, что делает вложенная рекурсия и поэтому она узнает только то, когда отпработает эта рекурсия. А затем выведет n%10. А уж вложенные функции выводят свои n%10 и т.д., пока n!=0.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 23:30     Задача на написание ф-ции!!!
Еще ссылки по теме:

C++ Найти среднее значение значений ф-ции
Подскажите функцию, аналогичную ф-ции getch() C++
Поясните по записи возврата из ф-ции C++
C++ Throw() в объявлении/определении ф-ции
Реализация ф-ции удаления элемента из списка C++

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

Или воспользуйтесь поиском по форуму:
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
27.02.2012, 23:30  [ТС]     Задача на написание ф-ции!!! #7
Спасибо за разъяснение а я рекурсию лепил в return и ничего не выходило.
Надо будет перечитать рекурсию,что то она плохо даётся мне
Yandex
Объявления
27.02.2012, 23:30     Задача на написание ф-ции!!!
Ответ Создать тему
Опции темы

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