Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

08.12.2012, 02:21. Просмотров 954. Ответов 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' );
}
В чём загвоздка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 02:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Введение в рекурсию. Заполнить массив типа char в виде десятичного числа, принимаемого в виде аргумента (C++):

Вывод десятичного числа в двоичном виде - C++
Собственно интересно как реализовать вывод десятичного числа в двоичном виде с помощью битовой маски, последовательно проверяя каждый бит и...

Переменную типа char представить в виде 8 битов - C++
У меня есть символ a. char x = 'a'; = 1 байту. Тоесть 8 битам. Как мне получить символ a в битовом представлению? Тоесть a=....

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

Добавление в массив типа char * одного элемента типа char - C++
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

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

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

9
Kuzia domovenok
2119 / 1949 / 192
Регистрация: 25.03.2012
Сообщений: 6,755
Записей в блоге: 1
08.12.2012, 02:55 #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' );
                                              ///ВСЁ!!! какие ещё вопросы???
}
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 03:30  [ТС] #3
Вопросы есть.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
int atoii( int v, char* s)
Можно ли как то без возвращаемого значения, ведь по сути дела оно нам и не нужно, нам нужно только заполнить массив.
И второе, вы писали:
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
atoii( v / 10); // вывести все цифры кроме последней atoii(123)
но каким образом строчка, в которой нету ни одного оператора/функции для вывода, может вывести на экран значения?

Добавлено через 3 минуты
ПС. Действительно, я далеко не до конца понимаю устройство рекурсивных функций, хотя уже не мало рассмотрел примеров. Но мне бы очень хотелось с вашей помощью или с чей-то другой основательно разобраться.
0
Kuzia domovenok
2119 / 1949 / 192
Регистрация: 25.03.2012
Сообщений: 6,755
Записей в блоге: 1
08.12.2012, 03:57 #4
вспомни метод математической индукции. Или такой пример.

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



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

Или тебя смущает, что функция может вызывать сама себя? Так она перед вызовом сохраняет весь контекст, а после восстанавливает.
И та функция, которая вызывается, оперирует уже другими своими int v, char* s
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 04:07  [ТС] #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Или тебя смущает, что функция может вызывать сама себя? Так она перед вызовом сохраняет весь контекст, а после восстанавливает.
И та функция, которая вызывается, оперирует уже другими своими int v, char* s
Это теория, и мне тут всё ясно. Не ясно только практика применения. Допустим, как эта строчка
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
atoii( v / 10); // вывести все цифры кроме последней atoii(123)
может выводить значения без оператора вывода?
0
Kuzia domovenok
2119 / 1949 / 192
Регистрация: 25.03.2012
Сообщений: 6,755
Записей в блоге: 1
08.12.2012, 04:14 #6
так ведь вызывается функция atoii, написанная нами. Она работает? Да! Так почему мы не можем её вызвать, чтобы вывести число? функция вывода находится внутри неё - это putchar.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
08.12.2012, 04:32  [ТС] #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?
0
activnaya
256 / 46 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 04:51 #8
xtorne21st, http://www.ozon.ru/context/detail/id/3249367/ есть еще много чего. учи алгоритмы, а язык - инструмент.

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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