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

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

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

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

08.12.2012, 02:21. Просмотров 912. Ответов 9
Метки нет (Все метки)

Пытался написать функцию, которая заполняет массив типа 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 представить в виде 8 битов - C++
У меня есть символ a. char x = 'a'; = 1 байту. Тоесть 8 битам. Как мне получить символ a в битовом представлению? Тоесть a=....

Массив А с 5 строк и 8 столбцов заполнить случайными числами, вывести на экран в виде таблицы - C++
Массив А с 5 строк и 8 столбцов заполнить случайными числами, вывести на экран в виде таблицы. Определить значение и положение минимального...

Как массив цифр записать в виде одного числа? - C++
Как массив цифр записать в виде одного числа? Например: есть массив а=2,a=4,a=5,a=9, а нужно записать просто одним числом 2459.

Интерпретация char в виде int - C++
Напишите функцию, которая принимает строку из нулей и единиц, интерпретируя ее как двоичное число, и возвращает соответствующее значение...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
интересующийся
303 / 274 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
08.12.2012, 03:57     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #4
вспомни метод математической индукции. Или такой пример.

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



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

Или тебя смущает, что функция может вызывать сама себя? Так она перед вызовом сохраняет весь контекст, а после восстанавливает.
И та функция, которая вызывается, оперирует уже другими своими int v, char* s
xtorne21st
интересующийся
303 / 274 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
08.12.2012, 04:14     Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента #6
так ведь вызывается функция atoii, написанная нами. Она работает? Да! Так почему мы не можем её вызвать, чтобы вывести число? функция вывода находится внутри неё - это putchar.
xtorne21st
интересующийся
303 / 274 / 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
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
интересующийся
303 / 274 / 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 в виде десятичного числа, принимаемого в виде аргумента
Еще ссылки по теме:

Вычислить значение выражения, возведение аргумента в n степень оформить в виде функции - C++
Вычислить z={e}^{{x}^{y}}+\ln ((1-{e}^{y}){\log }_{2}\tan x) при х=3.5, у=1.25 Возведение аргумента в n степеньоформить в виде процедуры

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

По введенному значению аргумента вычислить значение функции, заданной в виде графика - C++
Задание 1. Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R...

Перевод десятичного числа в двоичное, результат в массиве типа int - C++
Здравствуйте! Задача: написать программу, которая переводит введенное десятичное число в двоичное число и цифры результата записывает в...

Задание индекса для доступа к элементу массива в виде char * - C++
по сабжу: a = 2.3234; a = 2.345e12; Каким образом можно организовать такой доступ к элементам массива?


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

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

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