Programiranje

Programiranje u C++-u - pitanja i odgovori

emerik pon 20.6.2011 16:19

Jedno pitanje.Kako u C++ u inicijalizaciji zadati d avarijabla npr. može koristiti integere od 0 do 128 ,a ne u rasponu -32768 do +32768.U Pascalu znam d ase može ,pa se vjerojatno može i tu.Hvala.

rustweaver pon 20.6.2011 17:38
BassMan kaže...

Nemaš u c/c++ byte tip podatka. Najbliže onome što hoćeš je unsigned char koji može poprimiti vrijednosti od 0 - 255. Manje od toga ne ide. 

typedef unsigned char BYTE;

 

eto sad imas :D

 

char jest jedan bajt u memoriji. Posve je nebitno zove li se taj tip podatka char ili byte ili komadic :D

 

emerik kaže...
A ako su mi npr. potrebni brojevi od 1 do 5?Kod npr. računanja prosjeka.

Onda mozes koristiti  long, int, short, char ili float (vjerojatno zelis float jer prosjek nije cijeli broj) ili double (nepotrebno, ali mozes).

 

http://en.wikipedia.org/wiki/C_data_types#Size

http://www.cplusplus.com/doc/tutorial/variables/

BassMan pon 20.6.2011 17:42

Nemoj brkat stvari. Ja sam ti ovdje spomenuo zauzeće memorije. unsigned char je tip podatka koji zauzima 1 byte u memoriji i zbog toga u njega može stati spomenuti raspon (unsigned je bez negativnih brojeva). Najbolje ti je onda, budući da počinješ sa c++ koristiti standardne tipove a to su

int - cijeli broj

float - decimalni broj

char - znak

rustweaver pon 20.6.2011 17:48
emerik kaže...
ali kako napraviti da mi varijabla koju upisujem može imati vrijednosti samo od 1 do 5?

Nikako, najmanji broj na racunalu je 8 bitni broj (1 bajt iliti char), i on ima raspon 0-255 ako je unsigned ili -128-127 ako je signed. Ti u programu sâm trebas provjeravati je li unos unutar dozvoljenog raspona...

 

cin >> ocjena;

if (ocjena < 1 || ocjena > 5)

   cout << "Pogresna ocjena" << endl;

 

captain_soap_McTawish uto 21.6.2011 17:06
emerik kaže...
Znam da koristim float kao prosjek,ali kako napraviti da mi varijabla koju upisujem može imati vrijednosti samo od 1 do 5?

Zato ti je najbolje koristiti pobrojene tipove(na dnu stranice):

npr:

 

enum ocjene(nedovoljan=1,dovoljan,dobar,vrlo_dobar, odlican); 

ocjene mojaocjena=odlican;

ocjene njegovaocjena=4; 

emerik čet 23.6.2011 15:07

Može netko reći zašto ne radi program?

 

//Program upisuje niz,te u drugi niz prebacuje proste brojeve i zatim ih ispisuje#include<iostream>using namespace std;int main() {    int x,y [20];    bool prost;    int j,i,k,n;    cout<<"Upisi n: ";    cin>>n;    cout<<"Upisi clanove niza ";    for(i=1;i==n;i++)       cin>>x[i];    k=0;    for(i=1;i==n;i++) {        prost == true;        for(j=2;i<(x[i]-1),j++)           if (x[i]%j == 0)               prost == false;                      }     if (prost == true) {               k++;               y[k] = x[i];                    }     cout<<"Prosti brojevi su :";     for(i=1;i==k;i++)        cout<<y[i];     system("pause");     return 0;}

KKristijan čet 23.6.2011 15:16
emerik kaže...

Može netko reći zašto ne radi program?

 

//Program upisuje niz,te u drugi niz prebacuje proste brojeve i zatim ih ispisuje#include<iostream>using namespace std;int main() {      int x,y [20];      bool prost;      int j,i,k,n;      cout<<"Upisi n: ";      cin>>n;      cout<<"Upisi clanove niza ";      for(i=1;i==n;i++)            cin>>x[i];      k=0;      for(i=1;i==n;i++) {              prost == true;              for(j=2;i<(x[i]-1),j++)                    if (x[i]%j == 0)                           prost == false;                      } // OVU VITIČASTU ....        if (prost == true) {                            k++;                            y[k] = x[i];                    }// PREBACI TU        cout<<"Prosti brojevi su :";        for(i=1;i==k;i++)              cout<<y[i];        system("pause");        return 0;}

 

  ovaj dio di trpas proste u drugi niz treba biti pod petljom...

i dovoljno ti je da vrtis petlju do korjena iz x[i],matematicki se da dokazati da ako broj nema djeljitelja do svog korjena,da je prost. petlji

 

EDIT: jos ti je u drugoj for petlji kod provjere prostosti umjesto 'j' , 'i' ( kod logičkog izraza,i < (x[i]-1) )

 

rustweaver čet 23.6.2011 15:23
emerik kaže...

Može netko reći zašto ne radi program?

 

     cout<<"Upisi clanove niza ";    for(i=1;i==n;i++)  

Polja uvijek pocinju sa indexom nula, a ne 1

I kakav ti je to uvjet? Dok je 'I' jednak 'N'? To nema smisla, zelis valjda dok je 'I' manji ili jednak 'N', ili samo manji od 'N' ovisno kako brojis...

 

emerik kaže...

     for(i=1;i==n;i++) {       prost == true;

Jos gresaka iz prethodnog ulomka. Ovo zeleno oznaceno treba ici "prost = true;" ide samo jedan znak jednakosti kod dodjeljivanja vrijednosti varijabli. Dva znaka jednakosti idu kod provjere vrijednosti.

 

emerik kaže...

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

I opet malo gresaka pred kraj. I to su samo one greske koje su mi na prvi pogled upale u oci, a sada jos treba detaljnije pogledati.

 

Btw. kod ti je cudno formatiran, posebno me uznemiruje nacin na koji stavljas viticaste zagrade.

rustweaver čet 23.6.2011 16:03

@emerrik

ne <=n nego <n

 

kada deklariras polje sa 5 clanova, prvi clan ti ima index 0, a poslijednji 4. Ako ces vrsiti iteraciju po clanovima, pocetnu vrijednost brojaca postavljas na 0, a kranja vrijednost mora biti za 1 manja od ukupnog broja clanova (zato sto se pocinje brojati od nule).

 

dakle za:

int x[5];

 

imas clanove

x[0], x[1], x[2], x[3], x[4]

 

stoga je pravilna petlja:

for (int n=0; n<5; n++)

     x[n]=nesto...;

 

ako kao uvjet na gornju petlju stavis <=n onda ce ti petlja ici od nultog elementa pa sve do petog x[5] (koji nije definiran) i time ces izletiti iz polja.

 

Sto se tice same for petlje, ovako idu argumenti:

for (pocetna vrijednost brojaca; uvjet; uvecanje ili umanjenje brojaca)

for petlja ce se ponavljati tako dugo dok je uvjet zadovoljen, ako stavis N==X onda ce ti se petlja ponavljati samo ako je N jednak X, ako stavis N < X onda ti se petlja ponavlja tako dugo dok je N manji od X.

captain_soap_McTawish čet 23.6.2011 17:26

Imam ovakav kod:

 

 #include <cassert>

#include <iostream>

 

using namespace std;

 

class Tablica

{

private:

   int BrEl;

   int *elementi;

public:

   Tablica();

   Tablica(int BrEle);

   void UmetniElement(int poz);

   void IzbrisiElement(int poz);

   Tablica* SortirajTablicu();

};

 

Tablica::Tablica():BrEl(10),elementi(new int[BrEl])

{

   assert(elementi!=0);

}

 

Tablica::Tablica(int BrEle):BrEl(BrEle),elementi(new int[BrEle])

{

   assert(elementi!=0);

}

 

int main()

{

   Tablica lista;

   return 0;

}

Kako ću funkciji UmetniElement koja pripada razredu Tablica staviti da podrazumijevani argument bude varijabla BrEl koja pripada privatnome dijelu klase Tablica?
CalvinRi čet 23.6.2011 17:48

Ako u funkciji UmetniElement trebas BrEl, slobodno pristupas njemu unutar funkcije, jer je ta funkcija dio klase. Uopce ti ne treba default argument funkcije.

Osim toga, u klasi ti nedostaje ti destruktor u kojem brises zauzetu memoriju

mate960 čet 23.6.2011 18:25

Evo a ne otvaram novu temu, zanima me ako mi tko moze pomoci i naci neku tutorial knjigu za c++ novijeg izdanja, po mogucnosti na hrv a nije ni eng problem, jer vecina onih primjera i zadataka iz starijih knjiga ne radi u novom DEV C++.

 

Inace, pocetnik sam sto se tice programiranja i bio bih vam zahvalan ako mi pomognete.

KKristijan čet 23.6.2011 18:27
mate960 kaže...

Evo a ne otvaram novu temu, zanima me ako mi tko moze pomoci i naci neku tutorial knjigu za c++ novijeg izdanja, po mogucnosti na hrv a nije ni eng problem, jer vecina onih primjera i zadataka iz starijih knjiga ne radi u novom DEV C++.

 

Inace, pocetnik sam sto se tice programiranja i bio bih vam zahvalan ako mi pomognete.

  Kako mislis ne rade u devu? Koliko stare knjige?

Moj prijedlog ti je Demifisticirani c++ od Šribara i Motike, trenutno je i ja čitam :)

mate960 čet 23.6.2011 18:31
KKristijan kaže...
mate960 kaže...

Evo a ne otvaram novu temu, zanima me ako mi tko moze pomoci i naci neku tutorial knjigu za c++ novijeg izdanja, po mogucnosti na hrv a nije ni eng problem, jer vecina onih primjera i zadataka iz starijih knjiga ne radi u novom DEV C++.

 

Inace, pocetnik sam sto se tice programiranja i bio bih vam zahvalan ako mi pomognete.

  Kako mislis ne rade u devu? Koliko stare knjige?

Moj prijedlog ti je Demifisticirani c++ od Šribara i Motike, trenutno je i ja čitam :)

Prosinac 2000 {#}

 

EDIT: Moze link od te knjige?

mate960 čet 23.6.2011 18:36
Luuka kaže...

NOVOM Devc++-u? Pa to je compiler koji se godinama ne razvija. Prije 5god kad sam ja krenuo s njim je bila ova verzija koja je i sad zadnja, a i onda je bila stara.

Nemam ja pojma o tim verzijama, samo znam da mi za pola onih cuda izbacuje error pri kompajliranju.