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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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