Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.712.790
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

class Person
{
private:
   int _id;
   string _name;
   int _age;
public:
   Person(int i, string n, int a)
    :_id(i), _name(n), _age(a)
   {
   }
};

Lack of money is the root of all evil. George Bernard Shaw
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
CalvinRi kaže...

class Person
{
private:
   int _id;
   string _name;
   int _age;
public:
   Person(int i, string n, int a)
    :_id(i), _name(n), _age(a)
   {
   }
};

Moze i tako, pomocu inicijalizacijskih lista. Ovo je zapravo bolji nacin, jer su inicijalizacijske liste potrebne kod kompozicije i nasljedivanja. Takoder, ako su varijable const, opet je potrebna inicijalizacijska lista, jer ako se varijabla prvo deklarira, a onda joj se tek u konstruktoru dodjeljuje vrijednost, to ce biti ekvivalentno ovom kodu:

const int varijabla;
varijabla = 1; //error jer se const varijablama vrijednost mora odmah dodijeliti

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put pon 12.11.2012 15:57 (1domagoj1).
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Govub kaže...

Postovanje ako mi mozete pomoci kod ovoga. Trebam da ispisem romb samo sa crtama koje ga obiljezavaju i radi mi za brojeve do 8 a trebalo bi mi raditi za sve brojeve koje unes. molivas ako imate kakav savjet:

 

Evo ovako, program radi na principu dviju vanjskih petlji, prva vanjska petlja crta "gornji trokut", a druga vanjska petlja crta "donji trokut" romba.

U obje vanjske petlje izračun ide redosljedom: razmak - znak - razmak - znak.

Program radi sve dok ima dovoljno prostora na konzolnom ekranu.

 

#include<iostream>
using namespace std;

int main()
{
    int n;
    cin>> n;
    for (int i = 0; i < n ; i++)
    {
       for (int j = 0; j < n-i-1; j++)
       {
          cout<< " ";
       }
       cout<< "/";
       for (int k = 0; k < i*2; k++)
       {
          cout<< " ";
       }
       cout<< "\\";
       cout<< endl;
    }
    for (int i = n-1; i >= 0; i--)
    {
       for (int j = 0; j < n-i-1; j++)
       {
          cout<< " ";
       }
       cout<< "\\";
       for (int k  = 0; k  < i*2; k++)
       {
          cout<< " ";
       }
       cout<< "/";
       cout<< endl;
    }
    return 0;
}

 

 

 

Poruka je uređivana zadnji put uto 13.11.2012 15:50 (Floki).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...

Moze i tako, pomocu inicijalizacijskih lista. Ovo je zapravo bolji nacin, jer su inicijalizacijske liste potrebne kod kompozicije i nasljedivanja. ...

I ne samo zato...

Kad koristis inicijalizacijsku listu, prilikom konstrukcije sa standardnim 'new', tvoje vrijednosti inicijaliziraju tocno mjesto u memoriji _prije_ nego udjes u konstruktor. Sto (teoretski) znaci da su inicijalizacijske liste brze jer ako dodijeljujes vrijednosti unutar konstruktora, dodijeljujes vrijednosti dvaput - opet, teoretski, compiler je opcenito dovoljno pametan da sam napravi izmjene, i vecina compilera nece automatski inicijalizirati alociranu memoriju.

 

Apropos 'inline' - ista stvar. To je hint, a ne instrukcija (bas kao i 'register' npr.) Inline ne garantira da ce inlineirati, dovoljno je compilirati sa -O3 ili -Os i vidjeti da GCC i MSVC ne sljive inline hint ni pet posto.

U praksi - one-lineri su odlicni kandidati za inline, i opcenito ih compiler sam inlineira iovako ionako.

 

@TracerCPP

Btw - nisam imao pojma da implementacija u headeru automatski znaci i inline??? Jel to po standardu, ili samo ponasanje specificnog compilera sa specificnim opcijama???

I wanna feel the changes coming down... I wanna see what I've been hiding...
Poruka je uređivana zadnji put uto 13.11.2012 19:38 (Deus ex machina).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Deus ex machina kaže...
...

 

@TracerCPP

Btw - nisam imao pojma da implementacija u headeru automatski znaci i inline??? Jel to po standardu, ili samo ponasanje specificnog compilera sa specificnim opcijama???

C++ ISO standard kaze:

"A function defined within a class definition is an inline function." - izvor

 

Ista stvar pise i u Demistificiranom, stoga bih rekao da je, po standardu je.

EDIT: Evo iz drafta, strana 144 (158).

"A function defined within a class definition is an inline function. The inline specifier shall not appear on a block scope function declaration.91 If the inline specifier is used in a friend declaration, that declaration shall be a definition or the function shall have previously been declared inline."

EDIT2: (boldano) Mislis tijelo f-je u klasi, a ne u headeru? :D

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put uto 13.11.2012 20:10 (1domagoj1).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...
....

EDIT2: (boldano) Mislis tijelo f-je u klasi, a ne u headeru? :D

Cjepidlaka :-P

Ali hvala, nisam imao pojma :-) Ja uredno sve te metode oznacim sa inline...

I wanna feel the changes coming down... I wanna see what I've been hiding...
15 godina
online
Programiranje u C++-u - pitanja i odgovori

Imam par nejasnoća oko naziva klasa, metoda i varijablu u c++'u.

 

Koliko znam u javi klase idu veliki početnim slovom, metode malim, a ako naziv ima više riječi, početna slova riječi su velika. U STL-u su svi nazivi malim slovima, a riječi u nazivu se odvajaju donjom crtom(_). Sada pomoću googlea tražim o konvencijama u c++ i nalazim na različita objašnjenja. Negdje piše da se nazivi klasa pišu u camel caseu, a funkcije malim slovima i riječi se odvajaju donjom crtom. Negdje drugdje da sve ide u camel caseu, na nakon trećem mjestu nešto treće. Što da od toga primjenjujem?

 

I ima li još ikakvih stvari na koje bi trebao paziti pri imenovanju?

I would love to change the world, but they won't give me the source code
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Inace koliko ja znam za imena smijes koristiti i velika i mala sove i _(crtica) i to u svim mogucim kombinacijama. Npr za varijablu auto1 mozes napraviti

Auto1

aUto_1

A_Uto1

i tako sve kako zelis. U praksi se najcesce deklarira ovako:

imevarijable

ime_varijable

ImeVarijable

Nadam se da sam pomogao. Ja inace ovako deklariram i nikada nemam problema s tim.

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

klase, metode, svojstva - pascal case

podatkovni članovi, argumenti metoda - camel case

 

underscore izbaci

 

možda to jest po diktatu c sharpa, ali prevladava ovaj stil, sve više je  u upotrebi.

ne sjećam se više kad sam za podatkovni član klase stavio _ime, mnogi to više ne koriste.

 

ostalo :

 

akronimi ako su dva slova ovako osobaIQ za podatkvni član , a za klasu ovako OsobaIQ

ako je više od dva slova onda ovako za klasu DrzavaUsa, a za podatkovni član drzavaUsa

Poruka je uređivana zadnji put sri 14.11.2012 17:29 (Floki).
 
0 0 hvala 1
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...

Imam par nejasnoća oko naziva klasa, metoda i varijablu u c++'u.

 

Koliko znam u javi klase idu veliki početnim slovom, metode malim, a ako naziv ima više riječi, početna slova riječi su velika. U STL-u su svi nazivi malim slovima, a riječi u nazivu se odvajaju donjom crtom(_). Sada pomoću googlea tražim o konvencijama u c++ i nalazim na različita objašnjenja. Negdje piše da se nazivi klasa pišu u camel caseu, a funkcije malim slovima i riječi se odvajaju donjom crtom. Negdje drugdje da sve ide u camel caseu, na nakon trećem mjestu nešto treće. Što da od toga primjenjujem?

 

I ima li još ikakvih stvari na koje bi trebao paziti pri imenovanju?

Kako god zelis, pogledaj koji je najpopularniji stil, ja osobno se najvise drzim konvencija oko Jave, jer mi je Java najvise prirasla srcu kao jezik, opcenito zbog sintakse i "ljepote" jezika (no ne znaci da samo u Javi radim, trenutno samo u C++-u). Ali kad jedan stil odaberes, toga se onda dosljedno i drzi i to nek ti bude za stalno.

 

Druga je stvar pak, kad dodes raditi na neki projekt, vise-manje svaki projekt ima svoj stil pisanja koda (sto bi trebalo biti opisano u dokumentaciji) pa se onda toga drzis.

 

Jedino drugo sto trebas paziti kod imenovanja je da postujes pravila koja jezik namece (tipa, varijable ne mogu poceti brojkom i sl.).

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Po meni ta logika 

klasa - pascal

podatkovni član - camel

izgleda nekako najlogičnije

 

k tomu čemu underscored kad je razliku između pod. članova i varijabli u klasi i kad su istog imena lako pokazati this->a = a

 
1 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Treba da izračunam ovakvu sumu 

 

 

S = 1 /x+1 - 2! /(x+1)2 + 3!/(x+1)3 + ...+(.1)n-1 n!/(x+1)n

 

Eh sad, šta vi mislite kako mi je najlakše riješit? 

Ne treba mi nikakav kod samo malo da mi pojasnite, ja više volim tako nego kod na gotovo, jer tako ništa ne mogu naučit :)

 

 

Pokušao sam ovako al' ne radi kako treba :S

 

 

 

int main(){

float suma,x,clan;

int i,j,n,f=1;

cout <<"unesi x:\n";

cin >> x;

cout <<"unesi n:\n";

cin>>n;

 

 

 

suma=0;

for(i=1;i<=n;i++){

   for(int k=1; k<i;k++)

   f*=k;

   clan = f/pow((x+1),i);

   suma=clan+pow(-n,n-1)*clan;

 

}

 

Poruka je uređivana zadnji put čet 15.11.2012 18:03 (iTrako).
 
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav ! 

Dakle, imam problem,trebam selektirat i izbacit neke članove sa stoga, ugl dolazim do problema da bi ja htio koristiti trenutni datum što radim pomoću funkcija  :

 

 

int time_god(){

   time_t t = time(0);   // get time now

   struct tm * now = localtime( & t );

   cout << (now->tm_year +1900) << '-' 

     << (now->tm_mon + 1) << '-'

     <<  now->tm_mday

     << endl;

   return (now->tm_year +1900);

 

}//godina

 

int time_mje(){ time_t t = time(0);   // get time now

   struct tm * now = localtime( & t );

   return (now->tm_mon + 1);

 

}//mje

 

int time_dan(){

   time_t t = time(0);   // get time now

   struct tm * now = localtime( & t );

   return  now->tm_mday;       

}//dan

 

 

 

i onda dolje  u mainu uspoređujem...ALI problem su ove linije...

 

 

if(time_god()-(pomocni_putnik.godina)<18 || time_god()-pomocni_putnik.godina>25) PopS(pomocni_stog);

           if(time_god()-(pomocni_putnik.godina)==18 || time_mje() < pomocni_putnik.mjesec) PopS(pomocni_stog);//samo kad ima 18

           if(time_god()-(pomocni_putnik.godina)==25 || time_mje() > pomocni_putnik.mjesec) PopS(pomocni_stog);//samo kad ima 25

           if(time_god()-(pomocni_putnik.godina)==18 || time_mje()!=(pomocni_putnik.mjesec) || time_dan < pomocni_putnik.dan) PopS(pomocni_stog); <----Javlja gresku

           if(time_god()-(pomocni_putnik.godina)==25 || time_mje()!=(pomocni_putnik.mjesec) || time_dan > pomocni_putnik.dan) PopS(pomocni_stog);<----Javlja gresku

 

 

Greska:

 

 

 error: ISO C++ forbids comparison between pointer and integer 

 

 

Nemam pojma zasto mi tek na 3. liniji izbaci gresku i nemam pojma kako ovo rijesti pa ako netko ima ideju bio bih  zahvalan :)

 
0 0 hvala 0
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

[error - mod briši]

http://nighthawk-software.blogspot.com/
Poruka je uređivana zadnji put čet 15.11.2012 20:31 (Sum_of_all_fears).
15 godina
online
Re: Programiranje u C++-u - pitanja i odgovori
CovjekToplomjer kaže...

           if(time_god()-(pomocni_putnik.godina)==18 || time_mje()!=(pomocni_putnik.mjesec) || time_dan < pomocni_putnik.dan) PopS(pomocni_stog); <----Javlja gresku

           if(time_god()-(pomocni_putnik.godina)==25 || time_mje()!=(pomocni_putnik.mjesec) || time_dan > pomocni_putnik.dan) PopS(pomocni_stog);<----Javlja gresku

Problem je u ovome zutome, tj. u pozivu funkcije time_dan. Poslije naziva funkcije zaboravio si staviti zagradu (), pa to compiler tretira kao pokazivac na funkciju. Dakle umjesto time_dan pisi time_dan().

I would love to change the world, but they won't give me the source code
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
iTrako kaže...

Treba da izračunam ovakvu sumu 

 

 

S = 1 /x+1 - 2! /(x+1)2 + 3!/(x+1)3 + ...+(.1)n-1 n!/(x+1)n

 

Eh sad, šta vi mislite kako mi je najlakše riješit?

 

 

Ja bi to napravio jednom petljom, i to bez korištenja funkcije pow, jer bi tako dobio linearnu složenost izvođenja tj. O(n), u svakoj iteraciji petlje koja ide [1, n] podjelio bi iznos (faktorjel *= i) sa iznosom (potencija *= (x+1)), a taj rezultat strpao u varijablu suma, da bi to napravio moraš dobro znati redosljed izvođenja operatora, najprije se izvode operacije u zagradama u kojima se u svakoj iteraciji dobiju varijable faktorjel i potencija, zatim se one podijele, jedna od njih se casta u double i ta vrijednost se pridoda varijabli suma operatorom += .

 

Evo koda, pogledaj ako ti zapne sa savjetom iz prve rečenice.

 

#include<iostream>
using namespace std;

int main()
{
    int faktorjel = 1, potencija = 1, n, x;
    double suma = 0;
    cin>> x;
    cin>> n;
    for (int i = 1; i <= n; i++)
    {
       suma += (faktorjel *= i) / (double) (potencija *= (x + 1));
    }
    cout<< suma << endl;
}

 

 

Poruka je uređivana zadnji put pet 16.11.2012 18:08 (Floki).
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

vrtim beskonačnu petlju u programu i hoću da kada korisnik pritisne X (za gašenje programa) da se izvrši određeni dio koda te nakon toga ugasi program. znači kad da spremi neke stvari prije nego se ugasi. kako?

 
0 0 hvala 0
16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

Pseudokod:

 

do...

neki kod

if (user stisnuo X)

postavi uvjet koji breaka do petlju

else

nastavi za izvršavanjem programa

while (uvjet za break)

http://nighthawk-software.blogspot.com/
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Sum_of_all_fears kaže...

Pseudokod:

 

do...

neki kod

if (user stisnuo X)

postavi uvjet koji breaka do petlju

else

nastavi za izvršavanjem programa

while (uvjet za break)

 

Tako sam nekako i ja pomislio, a onda mi je sinulo da mozda cilja na X u kutu cmd prozora. U tom slucaju treba zasukati ruke u winAPI vjerojatno, nes kao ovo http://msdn.microsoft.com/en-us/library/windows/desktop/ms686016%28v=vs.85%29.aspx

16 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

Yep, to je vjerojatno to. A da bi mogao to iskoristiti, trebat će mu kod na foru ovog gore. Jedina je razlika što ne hvata neki keyPressEvent nego WinAPI funkciju.

http://nighthawk-software.blogspot.com/
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Imam jedan string, u kojem se nalaze brojevi, recimo "0012345", dakle niz moze poceti s nulom. Ti brojevi meni trebaju kao integeri, svaki posebno, da mogu sa svakim pojedinacno manipulirati, znaci trebam ih potrpati u vektor integera -> (0, 0, 1, 2, 3, 4, 5).

E sad, koji je od ova dva pristupa bolji i zasto?

 

//temp variables used for conversion: string > int
std::string strTemp;
int intTemp;

for (std::string::const_iterator iter = strNumbers.begin(); iter != strNumbers.end(); ++iter)
{
    strTemp = *iter;
    std::istringstream istr(strTemp);
    istr >> intTemp;
    individualDigits.push_back(intTemp);
}

ili

for (std::string::const_iterator iter = strNumbers.begin(); iter != strNumbers.end(); ++iter)
{
    individualDigits.push_back(*iter - 48);
}

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put sub 17.11.2012 12:31 (1domagoj1).
 
1 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Promatrano iz kategorije složenosti bolji je drugi.

Prostorna i vremenska složenost za oba načina su iste, a konstanta u vrhu složenosti je manja za drugi, pogotovo što prvi ima i pridruživanje, koje traje dulje od oduzimanja.

Poruka je uređivana zadnji put sub 17.11.2012 18:20 (Floki).
 
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Imam problem , kako da ispisem varijablu Vektor v?

Evo i kod :

 

#include <iostream>
using namespace std;

class Vektor
{
    private:
    double ax,ay;

    public:
    Vektor();
    Vektor(double a, double b) { ax=a; ay=b;}
    double DajX() { return ax;}
    double DajY() { return ay; }



};

 Vektor::Vektor()
    {
    ax=0;
    ay=0;
    }



int main()
{
    Vektor v(5,6);
   




}

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Fuhrer kaže...

Imam problem , kako da ispisem varijablu Vektor v?

Evo i kod :

 

// ... //
int main()
{
    Vektor v(5,6);
   return 0;
}

Kako god ti hoces. Mozes napisati posebnu metodu za ispis, koju pozivas nad svojim Vektor objektom, a mozes i preopteretiti operator <<. U mainu ti fali return 0; {#}

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put ned 18.11.2012 18:52 (1domagoj1).
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Kad napravim metodu za ispis izbaci mi error " 'Ispis' was not declared in this scope"

 

#include <iostream>
using namespace std;

class Vektor
{
    private:
    double ax,ay;

    public:
    Vektor();
    Vektor(double a, double b) { ax=a; ay=b;}
    double DajX() { return ax;}
    double DajY() { return ay; }
    double Ispis(double a);

};

 Vektor::Vektor()
    {
    ax=0;
    ay=0;
    }

double Vektor::Ispis(double a)
{
    return a;
}


int main()
{
    Vektor v(5,6);
    Ispis(v);

return 0;

}

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Fuhrer kaže...

Kad napravim metodu za ispis izbaci mi error " 'Ispis' was not declared in this scope"

 

class Vektor
{
    // ... //
   void Ispisi();
}

// ... //

void Vektor::Ispis()
{
   cout << DajX() << " " << DajY();
}


int main()
{
    Vektor v(5,6);
   v.Ispis();

return 0;

}

Opcenito, metode koje samo ispisuju nesto su void tipa, jer ne trebaju nista vracati, zato void Vektor::Ispis().

Ispis se vrsi klasicno cout objektom, ti si ga jos prilagodi kako zelis da ti izgleda, ovo je ugrubo.

Poziv metode nad objektom se vrsi na sljedeci nacin: ime_objekta.ime_metode(argumenti).

The programmer is fighting against the two most destructive forces in the universe: entropy and human stupidity. --Damian Conway
Poruka je uređivana zadnji put ned 18.11.2012 19:06 (1domagoj1).
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hvala puno .

 
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav,

 

Jasno mi je da dat.close() i dat.clear() nije isto ali sto tocno radi ovaj dat.clear() i zasto ga koristiti/ne koristiti ? 

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Može li mi itko reći za što se koristi kopirni instruktor i ako možete dati koji primjer :)

 
0 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice