Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Nizovi i funkcije u c++
Author Message
sempron Offline
Novi korisnik
*

Posts: 1
Joined: Jan 2010
Reputation: 0
Post: #1
Nizovi i funkcije u c++
Tema premjestena iz C++ Primjeri

Pozdrav kolege. Vidim daje tema c++ pa da postam ovde. Vec 3 mjeseca ucim c++ , radim konzolne aplikacije (jos nemam znanja da radim druge He he). Moje pitanje je mozeli mi iko objasniti malo funkcije i nizove, to nekontam. Znam da se programi pogotovo oni sa kodom od nekolko stotina i vise tisuca linija pisu tako sto se njihovi djelovi postave u funkcije, radi lakseg pronalazenja i ispravljanja greski, mjenjanja nekih djelova itd. no ja imam osjecaj da mi je lakse napravit program sa jednom funkcijom tj glavnom main (sve u nju strpat), nego da pisem kod podjeljen u funkcijama (najvjerojatnije zato sto ih ne kontam).
A stose tice nizova, cuo sam da c++ podrzaje oko 15-16 dimenzija. mene zanima samo jenodimenzionalni i dvodimenzionalni niz kako funkcionira (npr kako se dvodimenzionalni niz moze koristit za x/o igru i slicno) , znaci zelim skontat bit svega toga.
30-01-2010 08:34 PM
Find all posts by this user Quote this message in a reply
schmrz Offline
____
*

Posts: 569
Joined: Feb 2007
Post: #2
RE: Nizovi i funkcije u c++
Tema C++ Primjeri bi trebala da bude mjesto gdje se mogu naći praktični primjeru u c++, ali mnogi su fulili izgleda. Nego, da pređemo na stvar...

Prvo da kažem samo da c++ ne podrzava 15-16 dimenzija kada su u pitanju nizovi. To vjerovatno zavisi od kompajlera i njegovih postavki a više je moguće da zavisi od dostupne radne memorije. Tako da to varira od kompa do kompa, ali u stvarnosti trebaju ti jednodimenzionalni, dvodimenzionalni i vrlo rijetko trodimenzionalni nizovi.

Pročitaj ova dva tutorijala:
Moram sada da idem pa kada se vratim, malo ćemo pričati o njima a i o funkcijama.

I have no drinking problems. I drink. Get drunk. Fall down. NO PROBLEM
Registered As Linux User #484215
Moj skromni blog
Savjet za buduće programere: ovdje
31-01-2010 02:40 PM
Find all posts by this user Quote this message in a reply
schmrz Offline
____
*

Posts: 569
Joined: Feb 2007
Post: #3
RE: Nizovi i funkcije u c++
Nizovi

Nizovi su najjednostavniji i najčešće korišteni tipovi struktuiranih podataka koji sadrže grupu podataka istog tipa. Naravno, tim podacima pristupamo preko indeksa. Eh što se tiče njihove primjene to ćeš vjerovatno sam vidjeti kako budeš radio različitije programe sa raznim namjenama :) Ako recimo imaš neki program koji vrši evidenciju bodova neke grupe takmičara, onda ne možeš znati koliko će takmičara biti, prema tome ne možeš deklarisati jednu, dvije, tri varijable ili više, zavisno od broja takmičara za koje ćeš držati bodove, nego moraš koristiti niz da bi mogao držati bodove a i po potrebi vratiti broj bodova za određenog takmičara.

Evo recimo kako bi mogao koristiti dvodimenzionalni niz za iks-oks (kod sam napisao tek' tako u editoru, nemoj uzeti sve zdravo za gotovo, to je samo da otprilike vidis kako bi to islo):
Code:
#include <iostream>

using namespace std;

int g_polja[3][3]; // iks oks matrica


    (ostale funkcije)
          ...
          
int provjeriPobjednika()
{
  if (g_polja[0][0] == g_polja[0][1] && g_polja[0][1] == g_polja[0][2])
    return g_polja[0][0]; // tri uzastopne iste vrijednosti, vrati vrijednost
    
  if (g_polja[1][0] == g_polja[1][1] && g_polja[1][1] == g_polja[1][2])
    return g_polja[1][0]; // tri uzastopne iste vrijednosti, vrati vrijednost
    
    (ostale provjere)
          ...
    
  return 0; // nemamo tri uzastopne vrijednosti
}

int main(int argc, char** agrv)
{  
    int pobjednik = 0;
    int brojPoteza = 0;
    while(pobjednik == 0 && brojPoteza < 9)
    {
      nacrtajTabelu();
      napraviPotez();
      brojPoteza++;
      pobjednik = provjeriPobjednika();
    }
    
    if (pobjednik == 1)
    {
      cout << "Pobjednik je iks!\n";
    }
    else if(pobjednik == 2)
    {
      cout << "Pobjednik je oks!\n";
    }
    else
    {
      cout << "Partija je nerijesena.\n";
    }
    
      (ostatak programa)
            ...
}

Znači, imaš jednostavnu matricu koja ti predstavlja iks oks polja, imaš tri reda i tri kolone. Tako ti je naprimjer g_polja[1][1] centralno polje, odnosno drugi red, druga kolona. Prvi indeks je broj reda, a drugi broj kolone. Naravno indeksiranje počinje od nule Namigivanje

Funkcije

Funkcije se koriste iz više razloga. Gospodin Steven C. McConnell ima dosta kompletnu listu tih razloga:
  • Smanjivanje kompleksnosti
  • Kada hoćemo da dio koda napravimo čitljivim
  • Izbjegavanje pisanja duplog koda
  • Sakrivanje toka izvođenja programa (opet u cilju smanjenja kompleksnosti)
  • Sakrivanje operacija sa pokazivačima
  • Povećanje portabilnosti koda
  • Pojednostavljenje komplikovanih boolean testova
  • Unaprijeđenje perfomansi
  • Izoliranje kompleksnosti
  • Sakrivanje detalja implementacije
  • Ograničavanje efekta izmjena
  • Sakrivanje globalnih podataka
  • Pravljenje centralnih tački kontrole
  • Pisanje ponovo iskoristivog koda
  • Da bi se poboljšao kvalitet samog koda

Možda su ti neki od ovih razloga sada mutni, ali vremenom ćeš ih sve razumiti. Uglavnom, funkcije se pišu iz razloga da bi se povečao kvalitet koda, njegova čitljivost, izbjeglo duplo pisanje koda i omogučilo lakše izmjenjivanje koda. Ako čitav program možeš zamisliti "u glavi" ako ne moraš o njemu misliti u komadima, dijelovima, onda i ne moraš koristiti funkcije jer se vjerovatno radi o nekom trivijalnom programu. Također, imaj na umu da se kod čita mnogo više puta nego što se piše.

Recimo da imaš po čitavom programu rasut kod koji izračunava neku udaljenost koja se dalje koristi da bi tvoja neka mašina izrezala komad daske:
Code:
udaljenost = brojNekihJedinica / NEKA_KONSTANTA

Onda se izmijeni dizajn mašine i sada imaš neke graničnike čiju širinu moraš uzeti u obzir. Šta radiš u tom slučaju? Promijeniš kod na 1001 mjestu na kojem si ga pisao? U tom slučaju trebao si tu jednu liniju postaviti u posebnu funkciju i onda samo na tom mjestu napraviti izmjenu npr:
Code:
double izracunajUdaljenost(int brojNekihJedinica)
{
    return (brojNekihJedinica / NEKA_KONSTANTA) + uzmiSirinuGranicnika();
}

Nije bitno što je čitava funkcija samo jedna linija koda. Na ovaj način si sebi olakšao muke pri debuggiranju, izmjenama dokumentacije i sl.

Eh sada, jel' treba objasniti i parametre funkcija, kakvi mogu biti, kako se trebaju koristit i sl?

I have no drinking problems. I drink. Get drunk. Fall down. NO PROBLEM
Registered As Linux User #484215
Moj skromni blog
Savjet za buduće programere: ovdje
31-01-2010 05:18 PM
Find all posts by this user Quote this message in a reply
kecko Offline
Forumaš
***

Posts: 647
Joined: Nov 2009
Reputation: 20
Post: #4
RE: Nizovi i funkcije u c++
za funkcije, zamisli si da imaš dio koda koji radi neki ispis nekamo...
a za taj ispis potrebno je napisati par stotina linija koda, a taj ispis pozivaš 20-tak puta u programu, dal će ti lakše biti tih par sto linija koda kopirat, ili samo pozvat funkciju u kojoj je taj kod? naravno nije neki problem kopirat, a sad zamisli ovo, taj kod treba malo izmijeniti, dal ćeš onda ići po svih 20 blokova koda nalazit u programu i mjenjat, ili ti ej lakše funkciju na jednom mjestu izmijenit?
01-02-2010 08:28 AM
Find all posts by this user Quote this message in a reply
schmrz Offline
____
*

Posts: 569
Joined: Feb 2007
Post: #5
RE: Nizovi i funkcije u c++
Upravo ono što i ja govorim, ali kao što se da vidjeti iz priloženog, sempron je zadnji put posjetio forum kada je postavio temu. Ali nebitno, može poslužiti drugima Namigivanje

I have no drinking problems. I drink. Get drunk. Fall down. NO PROBLEM
Registered As Linux User #484215
Moj skromni blog
Savjet za buduće programere: ovdje
01-02-2010 10:59 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 424
Joined: Dec 2009
Reputation: 22
Post: #6
RE: Nizovi i funkcije u c++
Svaka čast momcima na ovom obrazloženju funkcija i polja a pogotovo schmrz na detaljnom objašnjenju sorry što sam offtopic ali ovakav odgovor nisam mogao dobiti ni od profesora na fax-u Hvala puno ste pomogli Happy

"When all else fails, read the manual."
01-02-2010 08:50 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


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