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

Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента - C++

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 02:21     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #1
Пытался написать функцию, которая заполняет массив типа char в виде десятичного числа, принимаемого в виде аргумента. Но почему то отображает только последнее значение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void atoii( int v, char s[] )
{
    int i;
    
    i = 0;
    if( v < 0 ) {
    s[i++] = '-';
    v = -v;
    }
    if( v )
    atoii( v / 10, s );
    s[i++] = (v % 10) + '0';
    s[i++] = '\n';
    s[i] = '\0';
}
Аналог, этой функции (взятая с учебника) работает прекрасно, она просто отображает (никуда не записывая значения, а только выводит на стандартное ус-во результат ):
C++
1
2
3
4
5
6
7
8
9
10
void atoii( int v )
{
    if( v < 0 ) {
    putchar( '-' );
    v = -v;
    }
    if( v / 10 )
    atoii( v / 10);
    putchar( n % 10 + '0' );
}
В чём загвоздка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 02:21     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента
Посмотрите здесь:

C++ Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика
Задание индекса для доступа к элементу массива в виде char * C++
Перевод десятичного числа в двоичное, результат в массиве типа int C++
C++ Массив А с 5 строк и 8 столбцов заполнить случайными числами, вывести на экран в виде таблицы
Как массив цифр записать в виде одного числа? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.12.2012, 02:55     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int atoii( int v, char* s)
{
    int n;
    if( v < 0 ) {
    *s= '-';
    s++;
    v = -v;
    }
    if(!v) return 0;
    n=atoii( v / 10, s);
    s[n] = (v % 10) + '0';
    return n+1;
}
Добавлено через 49 секунд
Цитата Сообщение от xtorne21st Посмотреть сообщение
void atoii( int v, char s[] )
{
* * int i;
i = 0;
* * if( v < 0 ) {
* * s[i++] = '-';
* * v = -v;
* * }
* * if( v )
* * atoii( v / 10, s );
* * s[i++] = (v % 10) + '0';
* * s[i++] = '\n';
* * s[i] = '\0';
}
вместо того, чтоб писать это, разобрал бы свой пример сначала. Три строчки же!(если убрать проверку отрицательных чисел и работать с положительными только)
C++
1
2
3
4
5
6
7
void atoii( int v )//алгоритм вывода v. пример: v=1234
{                               
    if( v / 10 )               //если v больше чем одна цифра   пример: if (123!=0)  
    atoii( v / 10);           //       вывести все цифры кроме последней   atoii(123)
    putchar( n % 10 + '0' ); // вывести последнюю цифру                   putchar( '4' );
                                              ///ВСЁ!!! какие ещё вопросы???
}
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 03:30  [ТС]     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #3
Вопросы есть.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
int atoii( int v, char* s)
Можно ли как то без возвращаемого значения, ведь по сути дела оно нам и не нужно, нам нужно только заполнить массив.
И второе, вы писали:
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
atoii( v / 10); // вывести все цифры кроме последней atoii(123)
но каким образом строчка, в которой нету ни одного оператора/функции для вывода, может вывести на экран значения?

Добавлено через 3 минуты
ПС. Действительно, я далеко не до конца понимаю устройство рекурсивных функций, хотя уже не мало рассмотрел примеров. Но мне бы очень хотелось с вашей помощью или с чей-то другой основательно разобраться.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.12.2012, 03:57     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #4
вспомни метод математической индукции. Или такой пример.

Алгоритм подъёма на 1000ю ступеньку по лестнице:
1) сделать 1 шаг
2) подняться на лестницу из 999 ступеней.



Также и здесь. Если функция работает, значит её можно вызывать для любого числа, абстрагировавшись от внутреннего устройства функции.

Или тебя смущает, что функция может вызывать сама себя? Так она перед вызовом сохраняет весь контекст, а после восстанавливает.
И та функция, которая вызывается, оперирует уже другими своими int v, char* s
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 04:07  [ТС]     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Или тебя смущает, что функция может вызывать сама себя? Так она перед вызовом сохраняет весь контекст, а после восстанавливает.
И та функция, которая вызывается, оперирует уже другими своими int v, char* s
Это теория, и мне тут всё ясно. Не ясно только практика применения. Допустим, как эта строчка
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
atoii( v / 10); // вывести все цифры кроме последней atoii(123)
может выводить значения без оператора вывода?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.12.2012, 04:14     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #6
так ведь вызывается функция atoii, написанная нами. Она работает? Да! Так почему мы не можем её вызвать, чтобы вывести число? функция вывода находится внутри неё - это putchar.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 04:32  [ТС]     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #7
Ладно ещё вопрос,
есть функция:
C++
1
2
3
4
5
6
7
8
9
10
11
double power( double v1, int n )
{
    if( n < 0 ) {
    v1 = 1.0 / v1;
    n = -n;
    }
    
    if( n > 0 )
    return power( v1, n - 1 ) * v1;
    return 1.0;
}
почему функция не возвращает 1.0 (последний оператор), а возвращает степень числа? Тогда как если заменить 1.0 на 0.0 функция возвратит значение 0?
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 04:51     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #8
xtorne21st, http://www.ozon.ru/context/detail/id/3249367/ есть еще много чего. учи алгоритмы, а язык - инструмент.

Добавлено через 1 минуту
Рекурсия широко используется в ФП. Подробно объясняется в книгах по lisp'у и Haskell'у. Ну и как я уже сказала в лиетратуре по теории алгоритмов.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 13:59  [ТС]     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #9
Цитата Сообщение от activnaya Посмотреть сообщение
Рекурсия широко используется в ФП
ФП - это что такое?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2012, 16:07     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента
Еще ссылки по теме:

Вывод десятичного числа в двоичном виде C++
C++ По введенному значению аргумента вычислить значение функции, заданной в виде графика
Вычислить значение выражения, возведение аргумента в n степень оформить в виде функции C++

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

Или воспользуйтесь поиском по форуму:
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 16:07     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #10
Цитата Сообщение от xtorne21st Посмотреть сообщение
ФП - это что такое?
функциональное программирование
Yandex
Объявления
08.12.2012, 16:07     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента
Ответ Создать тему
Опции темы

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