2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 С++ (рекурсия)
Сообщение30.06.2012, 12:59 
Аватара пользователя


17/12/10
538
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
 /* программа должна вывести:
"******
******
******"
а выводит: "*****"
*/

#include <iostream>
using namespace std;
void writeLine(char, int);
void writeBlock(char,int,int)

int main()
{
   writeBlock('*',6,3);
   return 0;
}

void writeLine(char a, int f)
{
   if (f==1)
       cout << a;
   else
   {
       cout << a;
       writeLine(a, f-1);
   }
}

void writeBlock(char a,int n,int m)
{
   if m==1
       writeLine(a, n);
   else
   {
       writeLine(a, n);
       writeBlock(a,n,m-1);
   
       cout << "\n";
       
   }
}

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:07 
Заслуженный участник


09/08/09
3438
С.Петербург
Если исправить синтаксические ошибки, то программа выводит (как и должна по тексту) 18 звездочек в ряд (функция writeLine не переводит строку).

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:10 
Аватара пользователя


17/12/10
538
Она не в ряд должна вывести, а 3 строчки по 6, друг над другом

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:16 
Заслуженный участник


09/08/09
3438
С.Петербург
Покажите, пожалуйста, оператор, переводящий строку после вывода очередной порции звездочек.

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:20 
Аватара пользователя


17/12/10
538
Я добавил, все равно не переводит
Используется синтаксис C++
void writeLine(char a, int f)
{
    if (f==1)
        cout << a;
    else
    {
        cout << a;
        writeLine(a, f-1);
         
    }
    cout <<"\n";
}
 

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:29 
Заслуженный участник


09/08/09
3438
С.Петербург
Вам надо вставлять "\n" только после последнего символа в строке.

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:43 
Аватара пользователя


17/12/10
538
Так тоже не работает
Используется синтаксис C++
 
void writeBlock(char a,int n,int m)
{
   if( m==1)
       writeLine(a, n);
   else
   {
       writeLine(a, n);
       
   
       cout << "\n";
       writeBlock(a,n,m-1);
   }
}
 

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 13:59 
Заслуженный участник


09/08/09
3438
С.Петербург
Да Вы не гадайте. Вам нужно вставить перевод строки в одно-единственное место: после вывода последнего симовола очередной строки. Где у Вас в программе выводится последний символ?

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 14:14 
Аватара пользователя


17/12/10
538
Вот здесь? Но так тоже в строку выводит
Используется синтаксис C++
 
void writeLine(char a, int f)
{
   if (f==1)
   { cout << a;
    cout << "\n";}
   else
   {
       cout << a;
       writeLine(a, f-1);
   }
}
 

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 14:19 
Заслуженный участник


09/08/09
3438
С.Петербург
А вот уже странно. Так у меня выводит в 3 строки.

 Профиль  
                  
 
 Re: С++ (рекурсия)
Сообщение30.06.2012, 14:27 
Аватара пользователя


17/12/10
538

(Оффтоп)

помоему это с онлайн-компилятором проблемы
он на:
Используется синтаксис C++
#include <iostream>

using namespace std;

int main&#40;&#41;
{
    cout << "Hello world!" << endl;
    return 0;
}
 

звездочки выводит


-- Сб июн 30, 2012 15:03:44 --

вот так работает
почему визуал C++ express 2010, говорит, что проект устарел?
как сделать, чтоб программа не закрывалась сразу?

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <iostream>
using namespace std;
void writeLine(char, int);
void writeBlock(char,int,int);

int main()
{
        int j=0;

       
   writeBlock('*',6,3);
        cin >> j;
   return 0;
}


void writeLine(char a, int f)
{
   if (f==1)
   { cout << a;
    cout << "\n";}
   else
   {
       cout << a;
       writeLine(a, f-1);
   }
}

void writeBlock(char a,int n,int m)
{
   if (m==1)
       writeLine(a, n);
   else
   {
       writeLine(a, n);
       writeBlock(a,n,m-1);
   
   
       
   }
}
 

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Dmitriy40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group