Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Рекурсия, печать массива в обратном порядке 
:(
    Опции темы
nekstv
Дата 4.11.2006, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



Помогите написать рекурсивную функцию которая печатает массив в обратном порядке. Функция принимает массив  и размер массива и ничего не возвращает. Функция прекращает свою работу и возвращаеться, если принимаемый массив имеет нулевой размер.
PM MAIL   Вверх
Kuvaldis
Дата 4.11.2006, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 32
Всего: 61



nekstv, 
Код

void print_rec(char* mas, int n)
{
    if (n == 0)  
       return;

    print_rec(mas + 1, n - 1);
    cout << mas[0];
}



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
nekstv
Дата 21.12.2006, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



У меня эта прога, что-то не работает, пишет ошибку, типа того, что не хватает функции main???
PM MAIL   Вверх
TaNK
Дата 21.12.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(nekstv @ 21.12.2006,  00:14)
У меня эта прога, что-то не работает, пишет ошибку, типа того, что не хватает функции main???

так добавь функцию main и вызов функции print_rec с двумя параметрами!


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
V.A.KeRneL
  Дата 21.12.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 7
Всего: 14



nekstv, вообще-то, ты, действительно, просил только функцию, но если тебе нужна готоваая прога, то нет ничего проще: 
Код

#include <iostream>
#include <cstring>
using namespace std;

void 
print_rec(char * mas, int n) 
{ 
    if (n == 0) 
        return;
    
    print_rec(mas + 1, n - 1);
    cout << mas[0];
}

int 
main(void) 
{ 
    char str[] = "TRAM-PAM-PAM...))";
    
    print_rec((char *) str, strlen((char *) str));
    
    return (0);
}



Это сообщение отредактировал(а) V_A_KeRneL - 21.12.2006, 11:16


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
nekstv
Дата 21.12.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



Спасибо большое, все работает!
PM MAIL   Вверх
Denzel666
Дата 22.12.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



а можно написать то же тока без printf...getchar?Работа с динамической памятью...
PM MAIL   Вверх
Denzel666
Дата 23.12.2006, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.12.2006
Где: Дзержинск

Репутация: -1
Всего: нет



Я вот это имел в виду если что:

Код

// Рекурсивная ф-ция, печатающая стринг в прямом и обратном порядке


#include <stdio.h>
#include <string.h>
//функция печатает строку в прямом и обратном порядке
print_direct_and_reverse(const char *str, int length)
{
 //терминальное условие рекурсии - когда строка становится нулевой длины
 if(length == 0)
 {
  //тогда переходим на новую строку, чтобы 
  //реверсированная строка напечаталась на новой строке
  putchar('\n');
  return;
 }
 putchar(*str);  //этот символ будет выводится в строке с прямым порядком
 //вызываем эту же функцию, передавая ей сдвинутый на 1 вперёд указатель и уменьшенную длину
 print_direct_and_reverse(str+1, length-1);
 putchar(*str); //а этот символ будет выводиться в строке с обратным порядком при "раскрутке" рекурсии
 
}
void main()
{
 char *str = "abcSAD";
 //применение написанной функции
 print_direct_and_reverse(str, strlen(str));
 putchar('\n');
}





И сразу извиняюсь за оффтоп...Как выбрать не С++ а Си?
ПРошу оценить и с радостью прочитаю критику если что не так...Помогите подправить комментарии где необходимо...заранее Спасибо !!
PM MAIL   Вверх
V.A.KeRneL
  Дата 23.12.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 7
Всего: 14



Denzel666, в принципе, всё првильно.
Особенно, приятно, что сам допёр (если сам). Молодец!
Единственное, что бы я исправил, это функция main(): 
1. Возвращаемое значение и аргументы: int main(void)
2. Cоответственно, в конце надо добавить return (0);
3. Ты ведь просил getchar() и работу с динамической памятью... Я бы добавил, если бы мне было надо, а если не надо -- не писал бы, что типа надо... smile

Цитата(Denzel666 @  23.12.2006, 02:27 Найти цитируемый пост)

Как выбрать не С++ а Си?

В том-то и дело что пока никак!
Надо админов просить, чтоб переименовали хотя бы «C++» в «C/C++», как это обстоит с Паскалем и Дельфи.


Это сообщение отредактировал(а) V_A_KeRneL - 23.12.2006, 09:57


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.