Tutorijali.Net forum

Full Version: Generisanje niza u C++
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pozdravcic! He he
Nova sam na forumu, pa bi mi trebala mala pomoc. Prvi programski jezik bio mi je QBasic, tu rasturam poprilicno dosta stvari osim grafike. A sada ucim krace vrijeme C++, ali znam osnove sintakse, pa bih zamolila za pomoc. Zasto se prilikom generisanja nizova mora odmah navesti tacno koliko ce clanova da ima taj niz (npr. int a[10])? Objasnjavali su mi to, skontala sam , ali mi strasno treba da korisnik prvo upise koliko clanova zeli, pa da onda automatski napravim niz sa tacno toliko clanova. Pokazivali su mi nesto sa new int* ili kako vec, pa ako moze neko to da mi objasni. Hvala puno He he
Dakle pozdrav MetalGenius, Welcome :)
Haha i ja sam od basica poceo XD, ovo o cemu ti govoris je alociranje memorije. Dakle statičko alociranje memorije je ovo sto si navela sa
(int a[10]) kod ovako alocirane memorije velicina polja se ne moze mijenjati tjekom izvršavanja programa, također ovako alocirano polje se alocira na staku pa se brise nakon izvršavanja funkcije u kojoj je i alocirana. Sa druge strane je dinamički alocirana memorja, čija se veličina može mijenjati prilikom izvršavanja, ovako alocirana memorija se alocira na heap-u i brise ju sam korisnik. Dakle sve sto imamo u memoriji ima svoju neku lokaciju, tzv pokazivačima mi i možemo i pristupati odgovarajućim lokacijama. Upravo sa pokazivačima mi možemo i dodjeliti odgovarajući prostor tjekom izvršavanja programa, a to je upravo ono sto tebi treba. To nam omogućava naredba new koji alocira polje određene veličine na stacku u vraća pokazivač na to polje. To bi u c++ bilo nekako ovako:

Code:
#include <iostream>
using namespace std;

int main () {
  int *p, n, i;
  cout << "Koliko zelite polje ";
  cin >>n;
  p = new int[n];
  for (i = 0;i<n;i++) {
        cout << "Unesite " << i+1 << " broj: ";
        cin >> *(p+i); //ili alternativno p[i] samo sam htio demonstrirati operator * koji sa lokacije čita vrijednost
  }
  
  for (i = 0;i<n;i++) {
        cout << "Broj : " << p[i] << endl;
  }
  delete [] p; // na kraju najbitije od svega je pobrisati alocirano polje uvijek !!!
  system("pause");
}

Dakle razlika između ova dva nacina alociranja je u scope-u (zivotnom vijeku) varijable koja je alocirana ono sto smo staticki alocirali brise se tek nakon sto se program zavrsi, a kod dinamički alociranog polja brisemo ga mi tijekom izvođenja samog programa pozivanjem operatora delete. ;D
Hvl, hvl He he Ma sto se tice teorije i slicnih gluposti, ja sam ti mentolcic i po He he Ali hvala , sad otprilike kontam He he
Ma znas kako je, kaze mi ucitaj varijablu n, napravi niz od n clanova pa radi nesto. I ja ti fino napisem int niz[n], compile, nece. I onda mi instruktor kaze da to sto ima u Basicu ne postoji u C++-u, dakle, prije izvrsenja programa kompajler treba da zna tacnu velicinu niza. Meni malo bezveze. A ovo sa dinamickim alociranjem... rekao je isto da obavezno obrisem, citat: 'Jedan radnik u Americi je zaboravio da ovo odradi i ubio je deset ljudi He he ' .
Uglavnom, hvala. tacno cu da svracam ovdje, super ste mi ^__________^
A sto se tice pokazivaca, to ne znaju najbolje ni ovi stariji. Drzim se svoga i ubijam lagano He he
np Namigivanje ako igdje zapne ovdje ima puno većih stručnjaka od mene tako da... Namigivanje i btw new alocira na heapu tek sad vidio lapsus :)
Reference URL's