Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Alociranje dinamickog niza
Author Message
MetalGenius Offline
Novi korisnik
*

Posts: 46
Joined: Oct 2011
Reputation: 3
Post: #1
Alociranje dinamickog niza
Pozdrav, hvala svima za pomoc od proslog puta, sada imam novi problem.
Cesto mi u zadacima najvise odgovara da se staticki niz alocira tako da mu u opseg spada interval indexa kojeg mi trebamo. Evo primjer, da lakse shvatite.

Dakle, u Quick Basicu to je islo ovako:
Code:
DIM NIZ (5 to 15) AS INTEGER

Indexi niza ce ici od 5 do 15, dakle 10 polja.

Sto sam probala u C++, i nije radilo. Zanima me da li ta mogucnost uopste postoji.
Poz :)

I can't escape myself.
25-12-2011 08:14 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #2
RE: Alociranje dinamickog niza
Nemožeš a evo i zašto prilikom alokacije se alocira kontinuirani blok memorije (zapravo na je fragmentirana u fizičkom smislu, ali operacijski sustav to predstavlja da jeste) i upravo preko indexa se pristupa pojedinim lokacijama zato je moguća ona algebra sa pokazivačima *(p+1), pa ovisno o tipu dodaje se na adresu određeni broj da se pristupi sljedecem podatku, ako ti stavis da ti je index 10 onda on dodaje 10*tip na tu lokaciju ako nisi alocirala tu memoriju pristupa se podatku kojem se nebi trebalo pristupiti i javlja se segmentation fault. Eh sad to ne znaci da ti nemozes implementirati takvo ponasanje ako ti zaista treba to jednostavno mozes preko structa
Deklariraj niz struktova i sa tipom i brojem koji ce predstavljati index te daji im index-e koje hoces, dakako tu pristupas struktovima na konvencionalan nacin ili mozes isto tako implementirati neki listu preko pokazivača i sl.

"When all else fails, read the manual."
26-12-2011 12:23 AM
Find all posts by this user Quote this message in a reply
MetalGenius Offline
Novi korisnik
*

Posts: 46
Joined: Oct 2011
Reputation: 3
Post: #3
RE: Alociranje dinamickog niza
Hvala. Ne znam, mislila sam da sam ti odg, ali post mi je misteriozno nestao... Jezivo. Nego, kad sam vec tu da te pitam.
Mozes li da mi das primjer void funkcije. Treba mi za zadatak, druze, ne mogu naci nigdje nista. U mojoj knjizi (koja dolazi da tog nivoa da pravis neke male programcice koji salju mailove, lol), nema nista objasnjeno, samo definicija. A sad ne kopala. A na netu nista ne mogu naci, ni u C++ reference. Jel imas nekakav zadatak manji, samo da mi pokazes na primjeru kako se poziva void iz maina. Naravno, ako nije problem. Poz Ccc
Da ima smajli koji place, plakala bih. :(
Lol... sad sam vidjela da sam nasla nesto. Ali ako nije problem da objasnis svojim rijecima He he

I can't escape myself.
(This post was last modified: 28-12-2011 02:33 AM by MetalGenius.)
28-12-2011 02:27 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #4
RE: Alociranje dinamickog niza
Ok nisam siguran da sam te u potpunosti razumjeo void je tip i kao što mu ime kaže označava nešto što je prazno možemo reći da void funkcija je takva funkcija koja ne vraća vrijednost ili procedura, za razliku od funkcija tip int, float, double koje uvijek moraju vratiti neku vrijednost. Te void funkciju tretiraš kao bilo koju drugu funkciju prvo ju moraš deklarirati
Code:
#include <iostream>
#include <cstdlib>

using namespace std;

void nekaProcedura () {
     cout << "Hello iz nekaProcedura" << endl;
}

float podjeli (int a, int b) {
    if (b != 0) return (float)a/b; //nemožemo djeliti sa 0
    return 0;
}

int main () {
    nekaProcedura ();
    cout << podjeli (2, 3) << endl;
    system("pause");
    return 1;
}

Kako vidis ovdje su 3 funkcije različitog tipa main je glavna funkcija tzv ulaz u program i tipa je cijelog broja (int) te na kraju vraća vrijednost 1 što bi značilo uspješno izvođenje programa, dok procedura nekaProcedura (); izvršava samo neku obradu te ne vraća ništa u ovom slučaju ispisuje "Hello iz nekaProcedura", dok funkcija djeli djeli dva cijela broja i vraća njihov količnik te sa time opravdava ime same funkcije koja je definirana u matematici tako da svakom elementu iz domene pridružuje jedan element iz kodomene, ovdje isto tako za svaki ulaz mora dati određeni izlaz. Nadam se da sam dobro shvatio, i na kraju nemoj se previse sekirati oko zadataka Namigivanje

"When all else fails, read the manual."
28-12-2011 12:40 PM
Find all posts by this user Quote this message in a reply
MetalGenius Offline
Novi korisnik
*

Posts: 46
Joined: Oct 2011
Reputation: 3
Post: #5
RE: Alociranje dinamickog niza
Lol, znam ja sve to... xDD Ali moram da se spremim za takmicenje... a poojma nemam. Da, procitala sam da su void funkcije u C++ isto kao SUBovi u QBasicu. A reci mi... ako zelimo da proslijedimo neke parametre funkciji void. Kako se to radi? Je l' se u mainu, ova tvoja linija
Code:
nekaProcedura ();
moze napisati kao
Code:
nekaProcedura (neki bezveze parametar 1, par. 2);
I da... void funkcija tj. procedura se, kada se izvrsi, vraca u main gdje je glavna funkcija prekinuta?
Poz, hvala ti covjece jos jednom puno... Zao mi je sto ti ne mogu dati veci rejting, stalno si na usluzi Namigivanje Happy Palac-gore

I can't escape myself.
28-12-2011 04:42 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #6
RE: Alociranje dinamickog niza
Nema na cemu tu sam da pomognem koliko mogu, naravno da se može pozvati sa paramatrima ako je prototipirana na taj način tj da bismo prosljedili parametre moramo ju deklarirati na taj način npr proceduri nekaProcedura() je deklarirana na taj način da ne prima nikakve parametre no i to se može promjeniti, a funkcija podjeli je deklarirana da prima točno dvije vrijednosti ni manje ni više. Naravno tu postoji razlika prilikom prosljeđivanja parametara gdje ju možemo poslati po kao referencu (poslati pokazivač na lokaciju) i možemo poslati vrijednost funkciji (saljemo kopiju vrijednosti kao u primjeru funkcije sa djeljenjem). I da naravno kada se funkcija se izvodi nastavlja sa izvođenjem u glavnoj funkciji gdje je stala.

"When all else fails, read the manual."
(This post was last modified: 28-12-2011 06:38 PM by danielvast.)
28-12-2011 06:36 PM
Find all posts by this user Quote this message in a reply
MetalGenius Offline
Novi korisnik
*

Posts: 46
Joined: Oct 2011
Reputation: 3
Post: #7
RE: Alociranje dinamickog niza
Ok pokusacu napraviti neki maleni programcic da testiram, ako ne uspije javim ti se :P
Tnx ^_______^

I can't escape myself.
28-12-2011 06:45 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #8
RE: Alociranje dinamickog niza
OK :)

"When all else fails, read the manual."
28-12-2011 06:50 PM
Find all posts by this user Quote this message in a reply
MetalGenius Offline
Novi korisnik
*

Posts: 46
Joined: Oct 2011
Reputation: 3
Post: #9
RE: Alociranje dinamickog niza
Op. Nece da prihvati parametar koji sam iz maina proslijedila voidu. Kaze 'void ne moze da se iskoristi kao funkcija'.
Bezveze.
Znaci ovdje, za razliku od QB-a, proceduri ne mogu da proslijedim parametre?
Pa nisam pukla da deklarisem nove varijable u voidu. Ipak, znam za sta se moze iskoristiti, ali meni pomoci ne moze...

I can't escape myself.
29-12-2011 01:24 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #10
RE: Alociranje dinamickog niza
Jel mozes postaviti source jer meni nije jasno što ti zapravo želiš pa da se nebi vrtili u krug? Parametre naravno da možeš slati ali koje parametre dakle prilikom deklaracije procedure navodiš njen tip (void naravno), njeno ime, i unutar zagrade definiraš njene argumente sa tipom i naravno imenom argumenta koje onda koristiš unutar procedure evo jedan primjer
Code:
#include <iostream>
#include <cstdlib>

using namespace std;

void nekaProcedura (int p) {
    cout << "Ova procedura nece promjeniti vrijednosti u mainu" << endl;
    p = 10;
}

void nekaProcedura (int *p) {
    cout << "Ova procedura ce promjeniti vrijednosti u mainu" << endl;
    *p = 10;
}

int main () {
    int p = 2;

    nekaProcedura (p);
    cout << p << endl;
    
    nekaProcedura (&p);
    cout << p << endl;

    system("pause");
    return 1;
}

Napravili smo 2 procedure jedna prima kao parametar podatak tipa int i to prima samo njegovu vrijednost (call ba value) on dakle ne prima varijablu iz glavnog programa već samo kopiju njene vrijednosti i samim time nece promjeniti vrijednost varijable u mainu. Dok druga procedura prima kao parametar lokaciju u memoriji i kada postavi vrijednost tada ce tu vrijednost pohraniti na lokaciju varijable koja se nalazi u pogramu (call by reference).

"When all else fails, read the manual."
29-12-2011 11:53 AM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)