Alokovanie dynamickeho pola cez funkcie C++

Programovacie jazyky, rady, poradňa...
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Alokovanie dynamickeho pola cez funkcie C++

Príspevok od používateľa marek788 »

Ahojte, robim si cvicne nejaky ulohy a dopracoval som sa k jednej na vytvorenie a nacitanie pola cez funkciu a potom vypis takisto cez funkciu. V podstate primitivna uloha, no ked som to zacal robit, az take jednoduche to pre mna nie je. Problem je v tom, ze ak vytvorim pole v nejakej funkcii bude lokalne a ja ho potrebujem do dalsej funkcie na vypisanie pola. Snazil som sa nieco vytvorit, no nefunguje to, kedze tam potrebujem jednoznacne pouzit pointre a nie som si celkom isty ako na to. Skor mam problem so syntaxou, co a ako zapisat, kedze pointrom som sa vzdy velkym oblukom vyhybal. Skusal som aj hladat na internete, nasiel som plno veci, nieco mi trochu pomohlo, no aj tak to nevyriesilo cely moj problem. Pomohol by mi niekto?

Tu je zadanie

Kód: Vybrať všetko

Napište program, přečte délku pole (počet prvků) a pak prvky pole, pole vypíše, seřadí a vypíše seřazené pole.
Pro čtení délky a prvků pole zaveďte proceduru ctiPole, která pole vytvoří dynamicky, délku pole uloží do proměnné dané prvním parametrem a ukazatel na vytvořené pole
do proměnné dané druhým parametrem
Zoradenie, zatial neriesim, to uz potom nebude problem zoradit, ak to budem mat hotove.

Tu je moj vytvor, nedokonceny a nefunkcny, kedze fakt neviem ako to zapisat. Ak by mi niekto nejak pomohol budem velmi rad. :)

Kód: Vybrať všetko

#include <cstdlib>
#include <iostream>

using namespace std;


int nacitajPole(int * x){
    int i = 0;
    cout << "Zadaj velkost pola" << endl;
    cin >> x ;
    int * pole = new int[x];
    
    cout << "Zadaj prvky:" << endl;
    
    for (i=0; i<x; i++){
        cin >> pole[i];
    }
    
}

void vypisPole(int x){
    int i=0; 
    cout << "Boli zadane prvky:" << endl;
    for (i=0; i<x; i++){
        cout << pole[i] << endl;
    }
}

int main(int argc, char** argv) {
    int x;
    int * pole;
    
    nacitajPole();
   
    vypisPole(x);
    
    return 0;
}
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Alokovanie dynamickeho pola cez funkcie C++

Príspevok od používateľa pcsiete »

Na to iné riešenie nie je, nauč sa používať pointre. Môžeme ti tu napísať nejaký príklad, ale nebudeš mu rozumieť pokým sa to nenaučíš.
marek788
Light Star
Light Star
Príspevky: 234
Registrovaný: 08 okt 2013, 12:40

Re: Alokovanie dynamickeho pola cez funkcie C++

Príspevok od používateľa marek788 »

No ono pointrom aj celkom rozumiem, prave som si este raz precital kapitolu v knihe mistrovstvi v c++ o pointroch. Chapem tomu, len neviem tu ako na to ako predavat tie pointre medzi fciami.
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: Alokovanie dynamickeho pola cez funkcie C++

Príspevok od používateľa paralen »

Tu mas priblizne ako by sa to dalo spravit:

Kód: Vybrať všetko

int nacitajPole(int * dlzkaPola, int **pole) {
....
   *pole = new int[x];
   *dlzkaPola = x;
....
}

void vypisPole(int x, int *pole) {
   ....
}

int main(int argc, char** argv) {
   int x;
   int *pole;
   
   nacitajPole(&x, &pole);   
   vypisPole(x, pole);
   
   return 0;
}
Takyto zapis je vsak imho neprehladny a ked sa pracuje s takymito smernikmi, je dobre pouzivat konstrukciu typedef...
Napísať odpoveď