C++ - problem z ćwiczeniem dotyczącym funkcji

0

W podręczniku Szkoła Programowania. Język C++ Stephen'a Prata trafiłem na nietypowe ćwiczenie.

Napisz funkcję, która normalnie pobiera jeden parametr, adres łańcucha, po czym zaraz pokazuje ten łańcuch. Jeśli jednak podany zostanie niezerowy drugi parametr, napis ma się pojawić tyle razy, ile razy dotąd wywołano tę funkcję. Zauważmy, że drugi parametr nie mówi, ile razy należy pokazać napis. Owszem, funkcja jest nieco bzdurna, ale jej napisanie będzie dobrym ćwiczeniem utrwalającym wiedzę. Użyj opisanej funkcji w prostym programie, który pokaże jej działanie.

Udało mi się napisać część kodu, ale nie wiem jak zrobić, żeby funkcja liczyła ile razy została wywołana.

//VIII_1
#include <iostream>

void pokaz(char * str, bool powtorz = false);

const int ArSize = 20;

int main()
{  
    using namespace std;
    cout << "Podaj lancuch: ";
    char lancuch[ArSize];
    cin.getline(lancuch, ArSize);
    pokaz(lancuch);
    cout << endl;
      
    system("PAUSE");
    return 0;
}

void pokaz(char * str, bool powtorz)
{
     if(powtorz == false)
                std::cout << str;
     else
         for(int i = 0; i < powtorz; ++i)
                 std::cout << "Wpisano drugi parametr\n";    //tu trzeba zmienić
     
}

Proszę o pomoc w rozwiązaniu.

0

Hmm.. Wydaje się, że trzeba zadeklarować zmienną na zewnątrz funkcji i wraz z wywołaniem w jej środku dać inkrementację tej zmiennej czyli licznika wywołań.

0

Potrzebujesz zmiennej statycznej. Najpierw inicjalizujesz ją liczbą 0. Następnie wykonujesz pętlę w zależności od tej zmiennej, a na końcu zwiększasz ją o 1.

Btw: Co to za bzdurna książka, która uczy używania char * zamiast std::string? Przy ArSize raczej nie const int tylko const size_t. Po co system? Czym Ty to kompilujesz? Wyrzuć tę książkę.

0
  1. Wiem, że do tego jest klasa String. Używam *char, bo uczę się jak działają wskaźniki. Jestem początkującym.

  2. Do programowania używam Dev-C++. Jeśli nie wpiszę system("PAUSE") nie zdążę zobaczyć wyników.

  3. Czyli program powinien wyglądać tak:

//VIII_1
#include <iostream>

void pokaz(char * str, bool powtorz = false);

const int ArSize = 20;
int static licznik = 1;  

int main()
{
    using namespace std;
    cout << "Podaj lancuch: ";
    char lancuch[ArSize];
    cin.getline(lancuch, ArSize);
    cout << "\nPiersze wywolanie: ";
    pokaz(lancuch, 5);
    cout << "\nDrugie wywolanie: ";
    pokaz(lancuch, -3.4);
    cout << "\nTrzecie wywolanie: ";
    pokaz(lancuch, 2);
    cout << endl;
      
    system("PAUSE");
    return 0;
}

void pokaz(char * str, bool powtorz)
{
     if(powtorz == false)
                std::cout << str;
     else
         for(int i = 0; i < licznik; ++i)
                 std::cout << str << " ";
     ++licznik;
}

Jeśli to jest najlepszy sposób do dzięki :)

2

Zaprzestań używania tego dziwacznego środowiska. Ten kod nie powinien w ogóle się kompilować.

Ja zrobiłbym to tak: http://ideone.com/2KOiJ

Polecam Ci zawsze stosować klamry, nawet, jeżeli po if czy for itd. występuje tylko jedna linijka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1