• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

spoj wiatraczki

Object Storage Arubacloud
0 głosów
569 wizyt
pytanie zadane 6 sierpnia 2019 w C i C++ przez niezalogowany
otwarte ponownie 13 listopada 2019

Można oglądać nie zepsuje się zabawy, bo to, i tak rozwiązanie nie zgodne z teścia zadania.

#include <iostream>

using namespace std;

void rek(int m,bool p,int i=0) {
    int n=0;
    if(m<0) n=-1*m;
    else if(m>0) n=m;
    else return;
///******************************************
    if (i==n)
        return;
    if (p) {
        string s1(i,'.');
        string s2(n-i,'*');
        string s3(n-i-1,'.');
        string s4(i+1,'*');
       if(m>0) cout<<s1<<s2<<s3<<s4<<endl;
        else cout<<s4<<s3<<s2<<s1<<endl;
        i++;
    }
    else {
        string s1(n-i,'*');
        string s2(i,'.');
        string s3(i+1,'*');
        string s4(n-(i+1),'.');
      if(m>0)  cout<<s1<<s2<<s3<<s4<<endl;
        else cout<<s4<<s3<<s2<<s1<<endl;

        i++;
    }
    rek(m,p,i);
}


int main() {
int n=0;
 while (cin>>n){
    rek(n,1);
    rek(n,0);
    cout<<'\n';
 }
    return 0;
}


Natomiast problem mam inny, chciałem zwrócić vector<string> moja_funkcja_rekurencyjna(){} i nie bardzo mam pomysł jak to zrobić. Zdefiniowałem nawet vector<string> globalny{}, i w funkcji próbowałem globalny.push_back(mojstring) i nie wiele to dało.

Bo miałem fantazje do jednej części skrzydełka napisać rekurencję.Byłoby o wiele ładniej.  A rekurencję muszę poćwiczyć bo ni w ząb jej nie kumam(podstawowa teoria tak - ale z praktyką ciężko )

1
komentarz 6 sierpnia 2019 przez criss Mędrzec (172,590 p.)
Kod który wkleiles nijak sie ma do twojego pytania. Nie mam pojęcia jak ci pomóc w ogóle

1 odpowiedź

0 głosów
odpowiedź 6 sierpnia 2019 przez Munvik Dyskutant (9,350 p.)
Rekurencyjna funkcja polega na zwracaniu jakiejs wartości. Nie powinna być typu void.

Podpowiem Ci, że twoja ma zwracać std::string'a a w parametrze również ma mieć std::string'a.
komentarz 6 sierpnia 2019 przez niezalogowany
O wektor bardziej mi chodziło bo łatwiej po elementach się poruszać i może się bardziej przydać w taktyce.  To naprawdę nie da się  zwrócić vectora. O spoja mi nie chodzi bardziej to pretekst by poćwiczyć różne rzeczy i sprawdzić co mi sprawia problem.
komentarz 6 sierpnia 2019 przez niezalogowany

@Munvik,
A fakt string to też taki vector tyle, że <char> więc nie powinno być różnicy;

komentarz 7 sierpnia 2019 przez Munvik Dyskutant (9,350 p.)
Da się zwrócić wektor, tak jak każdą inną strukturę danych.
komentarz 7 sierpnia 2019 przez niezalogowany
edycja 7 sierpnia 2019

W normalnej funkcji ok. Ale w rekurencyjnej, to nie umiem sobie wyobrazić. (jak próbowałem to przez 2 sekundy zobaczyłem wszystkie biblioteki c::b), ale przez argument iterator to wszystko da się zrobić. Mamy void i odchodzi definicja vectora w funkcji to nawet ładnie to wygląda.

Edit :: i całkiem zgrabnie to wygląda, i można to jeszcze uprościć 

#include <iostream>
#include <vector>

using namespace std;

void it(int n,bool p,vector<string>::iterator itt,vector<string>::iterator itend,int i=0) {

    if(itt==itend){n=i; cout<<"za mały vector ";}
   string s(i,'.');
    if (i==n) {
        //*itt=s;
        return;
    }

    i++;
    *itt=s+'\n';
    itt++;
    it(n,p,itt,itend,i);
    return;
}

int main() {

    int n=20;
    string s(n,'?');
    vector<string> v(n/2,s);
    vector <string>::iterator v_it(v.begin());
    vector <string>::iterator v_end(v.end());
    it(n,1,v_it,v_end);
    for(auto x:v)
        cout<<x<<'*';
    cout << "Hello world!" << endl; // to obowiązkowo musi zostać :)
    return 0;
}

Edit:: Ale jak byś potrafił coś podobnego tylko ze zwracaniem vectora to chętnie obejrzę tylko funkcja musi być rekurencyjna

Podobne pytania

0 głosów
1 odpowiedź 393 wizyt
pytanie zadane 12 września 2021 w SPOJ przez Exequilas Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 393 wizyt
pytanie zadane 21 listopada 2020 w C i C++ przez milosz123 Użytkownik (720 p.)
0 głosów
0 odpowiedzi 197 wizyt
pytanie zadane 1 sierpnia 2023 w C i C++ przez Jakub005 Początkujący (310 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...