2016-07-08 2 views
-1

모두! 나는 firstname을위한 3-nest for 루프, middle name을위한 3 중첩 된 while 루프, 3 개의 재귀 함수 (반복을 대체하기위한 재귀 사용)를 사용하여 다음과 같은 프로그램을 작성해야한다.C++ 재귀 및 읽기 infile 문제

는 "당신의 이름, 중간 이름과 성을 표시하고> 지정된 행과 열 수치로 나타낸 바와 같이 직사각형의 형성에서 각. 또한, 사이 전에 도트 증가 번호를 표시 동일한 행에있는 이름을 반복 한 후 입력 파일에 각 사람의 이름이 인 동일한 양식을 반복하십시오. 마지막으로 같은 이름을 다시 작성하십시오. "

좋아, 입력 파일에는 이름, 중간 이름 및 마지막 3 행이 들어 있습니다. 나는 한 번에 한 줄씩 파일을 읽어야한다는 것을 알고있다. 그 다음에는 중간 이름으로 공백이 될 때까지 그리고 그 다음 마지막 부분까지 자신의 이름으로 성의 마지막 줄까지 공백이 올 때까지 다음 부분을 넣어야한다. 문자열. 그런 다음 파일 끝에 도달 할 때까지 모든 행을 반복하십시오. 그런 다음 기본적으로 코드를 복사하여 파일 입력을 적용하십시오.

내가 전혀 이해하지 못하는 것은성에 대해 수행해야하는 재귀입니다. 누구든지 나를 보여 주거나 나를 위해 몇 가지 코드를 시작할 수 있습니까? 재귀에 대한 예제를 읽었지만이 컨텍스트로 이식하는 방법을 모르겠습니다.
감사합니다.

지금까지이 코드는 :

`#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

//void lnameFunction(int j) 
//{ while (c = 1) 



int main() 
{ 
string fname, mname, lname; //declare name 
fname = "John; 
mname = "Bob"; 
lname = "Doe";  

int rows = 2; int column= 5; 
    for (int i= 0; i < rows ; i++) // for loop for fname 
    { cout << ".";   // first period of line 

    for ( int j= 1; j <=column; j++) //name after each period series 
    { cout << fname; 

     for (int k= 0 ; k <= j ; k++) //increasing periods 
     { cout << "."; 
     } 
    }  
    cout << endl; 

    } 
cout << endl; 
    int i = 0, j = 0, k = 0, c = 0;  // declare var. for while loop 

    while (i < 2)   // while loop for lname 
    { cout << "."; 
     while (j < 5) 
     { cout << mname; 
      j++; 
      while (k < j+1) 
      { cout << "."; 
      k++; 
      } 
      k=0; 
     } 
     i++; 
     j=0; 
     cout << endl; 
    } 
    c++;   // increase C for lnamefunction 

return 0; 
    }`  

편집 : 출력과 같이한다 혼란에 대해 :

.john..john ... 존 .... 존 .. ... 존 ......
. 존 ... 존 ... 존 ... .... 존 ..... 존 ......

.bob..bob ... 보브 .... 보브 ..... 보브 ......
""

.doe .. ""
""
그러면 입력 파일은 이름, 중간 이름 및 성의 3 개 행을 읽고 세 행이 모두 완료 될 때까지 위와 같이 반복합니다. 위와 같이 내 이름을 반복합니다. .inputfirstname .. ""
""

내가 재귀의 수를 증가와 함께, 성을 인쇄 할보고 있어요 것과 그래서 등

+1

무엇이 재귀와 관련이 있습니까? – user463035818

+0

일반적으로'while'과'for' 루프는 * 반복 * 재귀 *를 의미하지 않습니다. 재귀는 함수가 자신을 호출 할 때 발생합니다. C++에서'main' 함수는 재귀 적이 될 수 없습니다. –

+0

선생님은 우리가 재귀를 사용하여성에 대한 결과를 이름과 중간 이름의 출력과 같이 나타내기를 원합니다. – itzfran

답변

0

'.' 사이.

C++에서는 함수 자체를 호출 할 수 있습니다. 예를 들어 foo를 호출하는 것은 동일하다 있도록

void foo(){ foo();} 

그것을 만든다 : 마찬가지로

for(;;) 
     foo(); 

,이 방식으로 함수의 매개 변수를 전달할 수 있습니다.우리가 기간의 수 증가와 함께 마지막 이름을 인쇄하고 싶어한다면, 우리는 이런 짓을 했을까 :

void printLastNames(int howMany, string name, int currentIteration){ 
     for (int i = 0; i < currentIteration; i++) 
      cout << '.'; 

     cout << name; 

     currentIteration++; 

     if (currentIteration <= howMany) 
      printLastNames(howMany, name, currentIteration); 

} 

공지 사항을 어떻게 각각의 반복, currentIteration 증가하고, 어떻게이 계속하는 howMany에 대해 확인과 함께. 그래서 즉,이 같은 작동합니다

이것의 가장 중요한 부분은 당신이 반복적으로 수행하는 것은 불가능/어려울 것이다 매개 변수 값을 탐구하는 재귀 함수의 일환으로 매개 변수를 전달하는 방법을 이해하는
for (int currentIterations = 1; currentIterations <= howMany; currentIterations++){ 
//Print the stuff normally 
} 

(다시 말하면 재귀가 없다).

클래스가 제공하려는 재귀 적용의 유용한 예는 미로를 통해 경로를 찾는 것입니다 (https://www.cs.bu.edu/teaching/alg/maze/).

+1

';'s는 함수 선언의 매개 변수 사이에 있습니까? – kfsone

+0

감사합니다. 좋은 하루였습니다. –

+0

괜찮습니다. 고마워요! 그래서 나는 약 1 시간 동안 그것을 알아 내려고 노력해 왔고 ... 나는 혼란 스럽다. 내 코드에서이 코드를 어디에 배치해야하며 내 성을 침을 뱉어 야할까요? – itzfran