C++ kod - problem

poruka: 63
|
čitano: 14.257
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
C++ kod - problem

//---------------------------------------------------------------------------

#pragma hdrstop
#include <iostream.h>
#include <tchar.h>
#include <cstdlib.h>
#include <dirent.h>
#include <dir.h>

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

struct kartica
{
 long long br_racuna;
 int PIN;
};

class bankomat
{
public:
void provjera ()
{
kartica k;
if (k.br_racuna == 123456 && k.PIN == 0000)
{
cout<<"Logirani ste ... " <<endl;
}

else
{
cout <<"Greska kod logiranja ... " <<endl;
}
}

};

int _tmain(int argc, _TCHAR* argv[])
{
    kartica *k;
    bankomat*b;

    cout <<"Broj racuna: ";
    cin>>k->br_racuna;

    cout <<"PIN: " ;
    cin>>k->PIN;
    cout <<endl;

    cout <<"PODACI: "<<endl;
    cout <<"-----------------------------------"<<endl;
    cout<<"Broj racuna: " << k->br_racuna<<endl;
    cout<<"PIN: " << k->PIN<<endl;
    cout <<"-----------------------------------"<<endl;

    b->provjera();

    system("PAUSE");
    return 0;
}
//---------------------------------------------------------------------------

 

kad unesem 123456 za broj racuna i pin tocan izbaci uvijek da nisam logiran , to je bezveze program, samo vjezbam malo rad s klasama i tim stvarima pa me zanima kako to rijesiti?

Moj PC  
0 0 hvala 0
14 godina
offline
RE: C++ kod - problem

Koliko vidim ne prosljeđuješ varijablu kartica *k kad pozivaš provjera(), u provjera() imaš lokalnu varijablu kartica k ali je nigdje ne inicijaliziraš.

14 godina
neaktivan
offline
RE: C++ kod - problem

Moze malo detaljnije objasnjenje ili kod jer sam praktički još početnik u c++...

15 godina
neaktivan
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

//---------------------------------------------------------------------------

#pragma hdrstop
#include <iostream.h>
#include <tchar.h>
#include <cstdlib.h>
#include <dirent.h>
#include <dir.h>

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

struct kartica
{
 long long br_racuna;
 int PIN;
};

class bankomat
{
public:
void provjera ()
{
kartica k; //Ovjde stvaras novu instacu strukture kartica
if (k.br_racuna == 123456 && k.PIN == 0000)
{
cout<<"Logirani ste ... " <<endl;
}

else
{
cout <<"Greska kod logiranja ... " <<endl;
}
}

};

int _tmain(int argc, _TCHAR* argv[]) //itako ne koristis ulazne argumente pa cemu ih onda definirati
{
    kartica *k;
   bankomat*b;

    cout <<"Broj racuna: ";
    cin>>k->br_racuna;

    cout <<"PIN: " ;
    cin>>k->PIN;
    cout <<endl;

    cout <<"PODACI: "<<endl;
    cout <<"-----------------------------------"<<endl;
    cout<<"Broj racuna: " << k->br_racuna<<endl;
    cout<<"PIN: " << k->PIN<<endl;
    cout <<"-----------------------------------"<<endl;

    b->provjera();

   system("PAUSE");
    return 0;
}
//---------------------------------------------------------------------------

 

kad unesem 123456 za broj racuna i pin tocan izbaci uvijek da nisam logiran , to je bezveze program, samo vjezbam malo rad s klasama i tim stvarima pa me zanima kako to rijesiti?

1. Nisi inicijalizirao pokazivace, kako ti uopce radi nije mi jasno.

2. Klasa bankomat radi svoju instancu strukture Kartica koja nema veze s onom koju postavljas unutar maina.

3. Nemoj koristiti int pa usporedivati s 0000 ???? int nije string te ako je 0 je 0 nije 0000

Taj 0000 s kojim usporedujes kompajler interpretira kao binarnu reprezentaciju te ce stvarno i biti 0 te ako upise

0000 dok upisujes podatke ce prihvatiti ali da si kod provjere napisao 0010 onda bi bilo isto ko da si napisao 8 ali

pri unoso podataka ako upises 0010 ce biti interpretirano kao 10. Zato ovdje bolje koristi string ili polje znakova char PIN[5]

4. Imas hrpu suvisnih #include-a i pragma, cemu ?

5. Ne koristi system("pause") koristi getchar(); ili cin.get();

6. Nemoj na klase i strukture prije što ne shvatis osnove.

 

Evo sam slozio da radi kako mislim da si zamislio da radi, međutim program je i dalje školski

primjer loše napisanog programa {#}

http://pastebin.com/0V3GMrLX

All religions are the same: religion is basically guilt, with different holidays.
Poruka je uređivana zadnji put ned 5.12.2010 23:01 (drnde).
14 godina
neaktivan
offline
C++ kod - problem

Sad mi je puno jasnije, zahvaljujem, a zanima me jos , dali se uvijek moraju koristiti (i zašto?) pointeri kod pristupa strukturi?

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

Sad mi je puno jasnije, zahvaljujem, a zanima me jos , dali se uvijek moraju koristiti (i zašto?) pointeri kod pristupa strukturi?

Ne moraju se uopce koristiti. Recimo imas strukturu

 

struct St {

int broj;

} struktura //ovdje sam instancirao jednu strukturu tipa St

 

mozes joj iz main-a pristupati varijabli broj sa:

 

struktura.broj = 10;

 

isto i kao kad bi napravio novu instancu:

 

St novaInstanca;

 

novaInstanca.broj = 10;

 

ili preko pointera kojeg inicijaliziras na strukturu

 

St *st;

st = &struktura;

st->broj = 10;

ili

(*st).broj = 10;

All religions are the same: religion is basically guilt, with different holidays.
Poruka je uređivana zadnji put ned 5.12.2010 23:15 (drnde).
14 godina
neaktivan
offline
C++ kod - problem

Aha, ali recimo kada preko cin-a upisujem podatke, dali onda moram koristiti pointer ili ne, to me zanima, zapravo zanima me koja je uopce svrha pointera tocno i kad se koriste, znam ih koristiti ali neznam kad tocno ih trebam koristiti.

Poruka je uređivana zadnji put ned 5.12.2010 23:16 (NiGHT_RiDER92).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

Aha, ali recimo kada preko cin-a upisujem podatke, dali onda moram koristiti pointer ili ne, to me zanima, zapravo zanima me koja je uopce svrha pointera tocno i kad se koriste, znam ih koristiti ali neznam kad tocno ih trebam koristiti.

Zašto bi morao? Možes koristiti cin>>struktura.broj; jednako kao cin>>st->broj; ista stvar.

All religions are the same: religion is basically guilt, with different holidays.
14 godina
neaktivan
offline
RE: C++ kod - problem

Da, ali gdje se onda opce i za sto koriste pointeri?

16 godina
moderator
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

Da, ali gdje se onda opce i za sto koriste pointeri?

 

Jedna namjena im je ta da se koriste kod dinamicke alokacije memorije ili objekata na heapu (hrpi) - dakle, kad alociras memoriju ili stvaras objekte, a da zapravo ne znas unaprijed koliko ce ti memorije ili objekata trebati.

 

Druga namjena im je za povezivanje - recimo za povezivanje objekata u nekakvu listu (svaki objekt u sebi recimo sadrzi pokazivac na sljedeci i prethodni objekt). Pokazivaci isto tako mogu upucivati i na staticki deklarirane objekte. Takodjer, mogu biti odlicni pomagaci, gdje si skracujes pisanje kobasica koda.

 

Vjerojatno postoje i jos neke primjene - netko ce me vec dopuniti.

14 godina
neaktivan
offline
C++ kod - problem

Hvala ti puno, ovo mi je pomoglo :)

Moj PC  
0 0 hvala 0
15 godina
offline
RE: C++ kod - problem

Ja bih nadodao, kada se radi sa jako velikim strukturama. Onda se nekoj funkciji daje pointer (ili referenca) na strukturu, da se spriječi bespotrebno kopiranje velikog dijela memorije.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
15 godina
neaktivan
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

Da, ali gdje se onda opce i za sto koriste pointeri?

U C-u se koriste za mnogo namjena, evo za tvoj specifican primjer, zamisli da imas potrebu sastaviti listu

koja je načinjena od struktura svaka struktura predstavlja jednu karticu, sto bi bilo poprilicno lako izvesti tako

da imas polje struktura, ali sada zelis da mozes dinamicki (znaci dok je program pokrenut) dodavati nove elemente

na listu dok program radi a da svaki unos tocno zna gdje je sljedeci element te dali uopce postoji sljedeci element.

Za tako nesto trebas pokazivac unutar strukture koji pokazuje na sljedecu strukturu u nizu, tako da dobijes povezanu

listu ili ga engleskom linked list. Pogledaj ovaj link.

 

Dalje u C-u kada god zelis nesto dinamicki stvarati najcesce moras koristiti pokazivace, isto tako npr. ako zelis predavati funkcije kao

argumente drugoj funkciji itd,itd. Imaš dosta dobro objašnjeno sa dosta primjera ovdje.

All religions are the same: religion is basically guilt, with different holidays.
Poruka je uređivana zadnji put ned 5.12.2010 23:43 (drnde).
15 godina
offline
Re: C++ kod - problem

Što ti točno nje jasno? Ovo su popriličono lagani programi, tako da ne bi trebalo biti teško.

 

Parnost provjeravaš s operatorom %, on radi ovak:

a%b=c znači da ako podijelimo a sa b dobijemo ostatak c. U slučaju provjeravanja parnosti b=2, a broj je paran ako je a%2=0

 

Provjeravanje poretka vršiš sa operotom <. Ako imaš a,b,c onda su oni dobro poredani ako je a<b i b<c. Povratna vrijednost se stavlja true/false ili 1/0.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Moj PC  
1 0 hvala 0
14 godina
offline
C++ kod - problem

1.

#include <iostream>

using namespace std;

int pretvori(int a){
    if(a%2==0) a=0;
    else a=1;
    return a;
}

int main()
{
    int a;
    cin>>a;
    cout << pretvori(a) << endl;
    return 0;
}

 

2.

#include <iostream>

using namespace std;

bool poredak(int a,int b,int c){
    if(c>b){
      if(b>a) return true;
      else return false;
    }
    else return false;
    return a;
}

int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if(poredak(a,b,c)==true){
    cout<<"Brojevi su ulazno sortirani"<<endl;
    }
    else{
    cout<<"Brojevi nisu ulazno sortirani"<<endl;
    }
    return 0;
}

Ovo su ti vrlo banalni primjeri.

Mrzim svoj nadimak!!!
 
0 0 hvala 0
15 godina
offline
Re: C++ kod - problem

Nisi mu baš trebo dat gotova rješenja, ovo je stvarno jako banalno. Ako to nije naučio ne znam kak će dalje programirat.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
offline
Re: C++ kod - problem
Luuka kaže...

Nisi mu baš trebo dat gotova rješenja, ovo je stvarno jako banalno. Ako to nije naučio ne znam kak će dalje programirat.

  VJerojatno je programiranje imao cijeli semestar ili dva. Ako nije za vrijeme njih ovo naučio onda sumnjam da će baš sad naučiti.

Mrzim svoj nadimak!!!
12 godina
neaktivan
offline
RE: C++ kod - problem
NiGHT_RiDER92 kaže...

Da, ali gdje se onda opce i za sto koriste pointeri?

Kao što je već rečeno, pokazivači se koriste kod dinamičke alokacije memorije, no koriste se i kao sredstvo "komunikacije" među funkcijama. Primjerice, pri predaji varijabli upotrebom call by reference;

 

#include <iostream>
using namespace std;

void zamjena(int *a, int *b){
    int pom = *a;
    *a = *b;
    *b = pom;
}

int main()
{
    int a = 1, b = 2;

    cout << a << b << endl;  //12
    zamjena(&a, &b);
    cout << a << b << endl;  //21
    return 0;
}

 

Ovo je tipični školski primjer upotrebe pokazivača gdje jedna funkcija predaje svoje lokalne varijable (njihove adrese) drugoj funkciji kako bi ova zamjenila njihove vrijednosti. Primjena pokazivača je jako velika i većina ih je već ovdje spomenuta. Za sada kreni od najjednostavnijih slučajeva, a kasnije ćeš vidjeti kako se pomoću njih realiziraju razne strukture podataka itd..

14 godina
offline
C++ kod - problem

Kako ne funkcionira? Meni radi i izbacuje rezultate prema tvome zadatku. Aono bool možeš zamijeniti sa int.

Mrzim svoj nadimak!!!
 
0 0 hvala 0
16 godina
neaktivan
offline
C++ kod - problem

Čekaj, je li to Bologna u praksi, položi se informatika a da se funkcija pravo ne riješi.

 
0 0 hvala 0
14 godina
neaktivan
offline
C++ kod - problem

Aj molim te reci mi zašto si upisao ovaj faks kad ti očito ne ide i kako ga misliš završiti?

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
C++ kod - problem

 

Kad mu je već za ocjenu, onda može malo i pojednostaviti kod

da ne prepiše nekritički

bool Poredak(int a, int b, int c)

{

    if(a<b && b<c)

         return true;

    else

         return false;

}

 

a u main funkciji:

 

if(Poredak(a, b, c)

  cout<< "Brojevi su uzlazno sortirani;

else

  cout<< "Brojevi nisu uzlazno sortirani";

 

Poruka je uređivana zadnji put čet 12.5.2011 16:56 (Floki).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: C++ kod - problem
Floki kaže...

 

Kad mu je već za ocjenu, onda može malo i pojednostaviti kod

da ne prepiše nekritički

bool Poredak(int a, int b, int c)

{

    if(a<b && b<c)

         return true;

    else

         return false;

}

 

a u main funkciji:

 

if(Poredak(a, b, c)

  cout<< "Brojevi su uzlazno sortirani;

else

  cout<< "Brojevi nisu uzlazno sortirani";

 

iskreno, da sam kakav profa ja bi za izraz if(boolFunkcija == true) odmah srušio na ispitu{#}

16 godina
neaktivan
offline
Re: C++ kod - problem
vecaveca kaže...

ovaj drugi zadatak, malo komplikovaniji ne funkcionise a i nismo na nastavi nikad koristili ovo nesto "bool", pa ako moze na drugi nacin i da funkcionise molim Vas :)

eksplicitno ti se u zadatku traži baš bool funkcija, baš ona vraća true ili false vrijednost,

može se napraviti da int funkcija vraća vrijednost 0 ili 1, ali to nema smisla raditi u C++

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: C++ kod - problem
vecaveca kaže...

sreco ja sam ekonomski fakultet i programiranje nit mi treba niti me interesuje, da sam upisao elektrotehniku vjerovatno bi ucio i znao kako se radi

A lol, jesi me nasmijal. Inače, svi su elektrotehničari ludi za programiranjem isto ko i ekonomisti... XD

Some people say that if you play a Windows install CD backwards you will hear demon voices commanding you to worship Satan. But that's nothing. If you play it forward it will install Windows.
 
0 0 hvala 0
16 godina
neaktivan
offline
C++ kod - problem

Nije C++, već C, ali jel mi netko može ovo pogledati i ispraviti me?

 

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char naziv[31];
    int cijena;
} automobil;

void ucitaj(automobil a){
    printf("Ucitaj naziv: \n");
    scanf("%[^\n]", a.naziv);
    printf ("Ucitaj cijenu: \n");
    scanf("%d", &a.cijena);
}

void ispisi(automobil a){
    printf("%s, %d, \n", a.naziv, a.cijena);
}

int main()
{
    automobil *auti;
    int n, i;

    printf("Ucitaj n:\n");
    scanf("%d", &n);

    auti = (automobil *)malloc(n*sizeof(automobil));

    for(i = 0; i < n; i++) ucitaj(auti[i]);
    for(i = 0; i < n; i++) ispisi(auti[i]);

    return 0;
}

 

Program bi trebao dakle, učitavati ime i cijenu n automobila. To se sprema u strukturu. E sad, muči me ova f-ja ucitaj (namjerno sam to napravio u posebnoj f-ji, baš zato da naučim kak to izvesti), ne radi kak bi trebalo. U čemu je problem točno?

Some people say that if you play a Windows install CD backwards you will hear demon voices commanding you to worship Satan. But that's nothing. If you play it forward it will install Windows.
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: C++ kod - problem
1domagoj1 kaže...

U čemu je problem točno?

Pročitaj si o Call by Value i Call by Reference.

16 godina
neaktivan
offline
C++ kod - problem

Ovako radi, skužit ćeš iz koda gdje je bio problem:

 

 

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char naziv[31];
    int cijena;
} automobil;

void ucitaj(automobil* a, int n){
    int i;
    for(i=0; i<n; i++) {
    printf("Ucitaj naziv: \n");
    scanf("%s", a[i].naziv);
    printf ("Ucitaj cijenu: \n");
    scanf("%d", &a[i].cijena);
    }
}

void ispisi(automobil* a, int n){
    int i;
    for(i=0; i<n; i++)
       printf("%s, %d, \n", a[i].naziv, a[i].cijena);
}

int main()
{
    automobil *auti;
    int n, i;

    printf("Ucitaj n:\n");
    scanf("%d", &n);

    auti = (automobil *)malloc(n*sizeof(automobil));

    ucitaj(auti, n);
    ispisi(auti, n);

    free(auti);

    return 0;
}

 
0 0 hvala 1
14 godina
neaktivan
offline
Re: C++ kod - problem
1domagoj1 kaže...

Nije C++, već C, ali jel mi netko može ovo pogledati i ispraviti me?

Postoje dva moguca nacina. Prvi je onaj koji si ti pokusao napraviti i o kojem je tom69 govorio. A drugo je postaviti funkciju "ucitaj" tako da vraca tip podatka "automobil".

 

Prvi nacin:

void ucitaj(automobil *a){
    printf("Ucitaj naziv: \n");
    scanf("%[^\n]", a->naziv);
    printf ("Ucitaj cijenu: \n");
    scanf("%d", &a->cijena);
}

....

for(i = 0; i < n; i++) ucitaj(&auti[i]);

 

Drugi nacin:

automobil ucitaj(){
    automobil a;
    printf("Ucitaj naziv: \n");
    scanf("%[^\n]", a.naziv);
    printf ("Ucitaj cijenu: \n");
    scanf("%d", &a.cijena);
   return a;
}

....

for(i = 0; i < n; i++) auti[i]=ucitaj();

So then I typed GOTO 500 - and here I am!
16 godina
neaktivan
offline
C++ kod - problem

Ma dovoljno je prenijeti polje tipa automobil i uz to index polja u funkciju i tamo preko petlje učitati.

dakle

void ucitaj(automobil* a, int n)

 

poziv izgleda:

ucitaj(auti, n)

 

radi preglednosti petlju za upis i ispis opaliti u funkciji.

Poruka je uređivana zadnji put sri 18.5.2011 14:46 (Floki).
 
1 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice