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

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

Hmm, pa ja bi to napravio tako da inizijaliziras jedan brojac=0, setas po stringu2, i svaki put kad naletis na string1 uvecas brojac za +1. Uploadaj sto si napravio dosad, pa da ti popravimo, da li ti je to za faks skolu?

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

 Nisam bas skuzia ovo prvih deset umnozaka broja, sto ako unesem broj 5? Evo ti jedno rjesenje umnozka uz pomoc rekurzije.
#include <stdio.h>

int umnozak(int x)
{
if(x==0)
return 1;
return x*umnozak(x-1);
}
int main()
{
printf("%d\n", umnozak(4));

return 0;
}

drugi zadatak uploadaj nesto, pa ti popravim.

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

Može ovako sa stringom

 

for(int found = string2.find(string1) ; found != string::npos; found = string2.find(string1, found+1))
       brojac++;

int varijablu brojač inicvijalizirati na 0.

Prije toga ukloniti razmake i napraviti cijeli string malim slovima ukoliko želi da mu ovdje rezultat bude 2

ma

Mala m aca.

Poruka je uređivana zadnji put čet 7.3.2013 22:38 (Floki).
 
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

mala pomoc oko zadatka u WPF-u 

 

 

Kreirati WPF aplikaciju za aukcijsku prodaju koja ispunjava sledeće zahteve:

  • Aplikacija sadrži sistem za upravljanje korisnicima realizovan kroz bazu podataka. Moraju postojati najmanje dva statusa korisnika – administrator i običan korisnik.
  • Aplikacija dobavlja podatke za aukciju iz baze podataka
  • U glavnom prozoru aplikacije prikazuju se svi proizvodi koji su trenutno u ponudi. Za svaki proizvod prikazuju se podaci o ceni, poslednjoj ponudi, poslednjem ponuđaču...
  • Korisnik koji nije ulogovan ima pravo da gleda sve podatke o aukcijama, ali nema mogućnost ponude.
  • Običan ulogovani korisnik ima mogućnost podizanja ponude.
  • Ulogovani administrator ima mogućnost unosa novih proizvoda i brisanja postojećih. Svaki put kada se unese novi proizvod, mora biti postavljena njegova početna cena, naziv i ostale informacije.

 

Sistem za aukciju funkcioniše na sledeći način:

Onog trenutka kada se proizvod unese, aukcija za taj proizvod je započeta i počinje odbrojavanje za nju. Svaka aukcija ima trajanje od 2 minuta. Sve dok korisnici postavljaju ponude, vreme aukcije se vraća na početak i onda dobija dodatnih 2 minuta trajanja. Kada korisnik postavi ponudu, vrednost proizvoda za koji je ponuda postavljena povećava se za 1 euro. Kada istekne vreme aukcije, korisnik koji je postavio poslednju ponudu označava se kao pobednik i aukcija se zatvara i prestaje da bude dostupna ostalim korisnicima.

Aplikaciju isporučiti u vidu Visual Studio projekta, a bazu podataka u vidu SQL skripte (u tekstualnom dokumentu).

Napomena: Bazu podataka ne treba isporučivati u binarnoj formi (bekap ili .mdf fajl).

napravio sam bazu podataka koja sadrzi tabele users (name i password), aukcije (id aukcije, id prizoda...) i items (item id, min price, curent price...)

medjutim kada zelim da povezem login sa bazom jednostavno ne ide, molim za pomoc, 

PS u frci sam sa vremenom

 

 

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

Što se C++a i WPF-a tiče situacija je loša. Moraš prvo ručno napraviti dll-ove pa ih pozivati iz XAML-a. Pretpostavljam da želiš C#, pa onda pitaj u pravoj temi.

14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ovako ide zadatak..

Unosi se niz A  od n clanova.Treba napraviti niz b od m clanova (duplo vise clanova - (m=2*n)).

Prvi clan niza B treba biti isti kao i prvi clan niza A.

3. clan niza B je 2. clan niza A

5. clan niza B je 3. clan niza A itd.

2. clan niza B je prosjek clanova niza A

4. clan niza B je duplo veci od drugog..

Svaki sledeci parni clan niza je za 1 veci od prethodnog..

 

Ja sam ovako poceo ali ne ide (nisam do kraja uradio)..

 

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[n];
    int m;
    m=2*n;
    int b[m];
    float ar;
    for (int i = 0; i < n;i++)
    {
        cin>>a[i];
        ar=a[i]/n;
    }
    b[0]=a[0];
    for (int i = 0; i < n;i++)
    for (int k = 1;k < m;k=k+2)
    {
        b[k]=a[i];
    }
    return 0;
}

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Kako da u tom gore zadatku upisem niz A u niz B,ali da je svaki clan niza A neparan clan niza B.

Npr.

1. clan niza A = 1. clan niza B

2. clan niza A = 3. clan niza B

3. clan niza A = 5. clan niza B

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

pozdrav, dobio sam ovaj zadatak na faksu a nisam još niti pogledo gradivo, imam još 2 dana vremena a ne čini se komplicirano s tim da bi ovo znao sam napraviti.

ako možete dati neki savjet ili napisati program na brzinu pošto ste iskusniji, bio bi zahvalan :)

 

Umro je Einstein, umro je Newton, ni ja se ne osjećam baš najbolje.. :(
 
0 0 hvala 0
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Ovako, imam problem s jednim zadatkom. Rješavam zadatke koje je Tracer dao u ovoj temi http://www.bug.hr/forum/topic/programiranje/vjezbe-programiranje/148047.aspx?page=0&jumpto=2842620&sort=asc&view=flat. Rješavam 38. zadatak: napisati program koji će tražiti unos niza brojeva (maks. 100), nakon čega će izračunati aritmetičku sredinu tog niza, te najprije ispisati brojeve manje od aritmetičke sredine, a zatim one koji su veći od aritmetičke sredine. Zadatak je zaista lagan ali fakat ne kužim zašto izbacuje grešku.  Kompajlira normalno i onda u konzoli piše: terminate called after throwing an instance of std::bad_alloc. A kad maknem zadnju for petlju onda greške nema :S 

 

#include <iostream>
using namespace std;
int main (){
    int a, zbroj = 0;
    int* niz = new int[a];
    cout << "Koliko brojeva zelis: ";
    cin >> a;
   
    for(int i = 0; i < a; ++i){
       cin >> niz[i];
       zbroj += niz[i];
    }
    double prosjek = (static_cast<double>(zbroj)) / a;
    cout << "Aritmeticka sredina je " << prosjek << endl;
    cout << endl;
    cout << "Brojevi manji od prosjeka:" << endl;
   
    for(int i = 0; i < a; ++i){
       if(niz[i] < prosjek)
          cout << niz[i] << endl;
    }
    cout << endl;
    cout << "Brojevi veci od prosjeka: " << endl;
   
    for(int i = 0; i < a; ++i){
       if(niz[i] > prosjek)
          cout << niz[i] << endl;
    }
    delete[] niz;   
}   

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam123456 kaže...

Ovako, imam problem s jednim zadatkom. Rješavam zadatke koje je Tracer dao u ovoj temi http://www.bug.hr/forum/topic/programiranje/vjezbe-programiranje/148047.aspx?page=0&jumpto=2842620&sort=asc&view=flat. Rješavam 38. zadatak: napisati program koji će tražiti unos niza brojeva (maks. 100), nakon čega će izračunati aritmetičku sredinu tog niza, te najprije ispisati brojeve manje od aritmetičke sredine, a zatim one koji su veći od aritmetičke sredine. Zadatak je zaista lagan ali fakat ne kužim zašto izbacuje grešku.  Kompajlira normalno i onda u konzoli piše: terminate called after throwing an instance of std::bad_alloc. A kad maknem zadnju for petlju onda greške nema :S 

 

#include <iostream>
using namespace std;
int main (){
    int a, zbroj = 0;
    int* niz = new int[a];
    cout << "Koliko brojeva zelis: ";
    cin >> a;
   
    for(int i = 0; i < a; ++i){
       cin >> niz[i];
       zbroj += niz[i];
    }
    double prosjek = (static_cast<double>(zbroj)) / a;
    cout << "Aritmeticka sredina je " << prosjek << endl;
    cout << endl;
    cout << "Brojevi manji od prosjeka:" << endl;
   
    for(int i = 0; i < a; ++i){
       if(niz[i] < prosjek)
          cout << niz[i] << endl;
    }
    cout << endl;
    cout << "Brojevi veci od prosjeka: " << endl;
   
    for(int i = 0; i < a; ++i){
       if(niz[i] > prosjek)
          cout << niz[i] << endl;
    }
    delete[] niz;   
}   

Ovaj moj code radi..

 

#include <iostream>

using namespace std;

int main()
{
    int n,s=0;
    float ar;
    cin>>n;
    int niz[n];
    for (int i = 0;i < n; i++)
    {
        cin>>niz[i];
        s+=niz[i];
    }
    ar=s/n;
    cout<<"Aritmeticka sredina je "<<ar<<endl;
    cout<<"Brojevi manje od AR su : "<<endl;
    for (int i = 0; i < n;i++)
    {
        if (niz[i]<ar)
        {
            cout<<niz[i]<<endl;
        }
    }
    cout<<"Brojevi veci od AR su : "<<endl;
    for (int i = 0; i < n;i++)
    {
        if (niz[i]>ar)
        {
            cout<<niz[i]<<endl;
        }
    }
    return 0;
}

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam123456 kaže...

   int a, zbroj = 0;
    int* niz = new int[a];

Pogledaj još jednom taj isječak!
Meni Visual C++ Compiler kaže: "Run-Time Check Failure #3 - The variable 'a' is being used without being initialized".

Nakon deklaracije varijabla a ima neku random vrijednost, memorisjku lokaciju, smeće, štoveć. Inicijalizaciju dinamičkog polja uradi nakon unosa koliko elemenata želiš.
Znači:
int* niz;

cin>>a;

niz = new int[a]; 

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...
neznam123456 kaže...

   int a, zbroj = 0;
    int* niz = new int[a];

Pogledaj još jednom taj isječak!
Meni Visual C++ Compiler kaže: "Run-Time Check Failure #3 - The variable 'a' is being used without being initialized".

Nakon deklaracije varijabla a ima neku random vrijednost, memorisjku lokaciju, smeće, štoveć. Inicijalizaciju dinamičkog polja uradi nakon unosa koliko elemenata želiš.
Znači:
int* niz;

cin>>a;

niz = new int[a]; 

Moze i ovako kako sam ja uradio gore..

Nego zna li iko kako da napravim ono sa nizom..

Da stavim clanove niza A na neparna mjesta u nizu B

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozz ekipa,,

 

Pokušavam sastaviti nekakav program koji zapravo učitava podatke iz nekog dokumenta(npr. notepad) i izbacuje podatke za određeno razdoblje.... Dakle, ja sam počeo sa combobox,, Prvo sam napisao da odaberede za koje razdoblje želite podatke i onda 1 Godina, Siječanj, Veljača itd... I tu sam praktički stao,, jer sam početnik... Zanima me kako sada kodirati to tako da kada npr. odaberem Siječanj i da mi program učita podatke iz doc. za Siječanj i ispiše datum i vrijeme najprometnijeg dana i prikaže ih tu u programu ili pak u novom prozoru,, ali više bih volio u istom prozoru,, odnosno tom programu... Tu me zanima da li ću morat za svaki dan pisat broj prometa itd,, jer to bi bilo 365 dana.... Treba mi primjer samo za neko razdoblje, pa je dalje više manje isto... Pa bih ga trebao znati dovršiti! A problem mi je jer takvo što je teško naći na tutorialima na youtube.... 

Poruka je uređivana zadnji put sri 20.3.2013 16:34 (VArTExZu).
 
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Da li bi mi neko mogao pomoci da uradim ovaj zadatak(hitno je) :Napisati program za odredjivanje parnosti broja?

Hvala unaprijed :)

Dina Mustovic
 
0 0 hvala 0
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

evo moj pokušaj na zadatak iznad (ili slika u prilogu), pa recite dali valjda ili ne, zahvaljujem :)

 

#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
    float a,b,c,d,kvoc,umno;
    int mod,e;

    /unos
    cout << "Upisi prvi broj: ";
    cin >> a;
    cout << "Upisi drugi broj: ";
    cin >> b;
    cout << "Upisi treci broj: ";
    cin >> c;
    cout << "Upisi cetvrti broj: ";
    cin >> d;

    kvoc=a/b;
    umno=c*d;

    /prvi
    cout << "Kvocijent prva dva: " << kvoc << endl;
    cout << "Umnozak druga dva: " << umno << endl;

    /drugi
    cout << "Umnozak u oktalnom: " << oct << int(umno) << endl;

     /treci
    kvoc=(int)kvoc;
    cout << "Kvocijent kao cijeli broj: " << dec << kvoc << endl;

    /cetvrti
    cout << "Unesi zadnji broj: ";
    cin >> e;

    /peti
    mod=(int)kvoc%e;
    cout << "Modularno dijeljenje uz hex: " << hex << mod << " i dec: " << dec << mod << endl;

    system("pause");
    return 0;
}

Umro je Einstein, umro je Newton, ni ja se ne osjećam baš najbolje.. :(
Poruka je uređivana zadnji put sri 20.3.2013 19:04 (LUNAT1C).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Za provjeru parnosti koristiš operator modulo (%) stavi uvjet kojim ces provjeravati je li uvjet ispunjen sa if i else.

16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Xyloto kaže...

Za provjeru parnosti koristiš operator modulo (%) stavi uvjet kojim ces provjeravati je li uvjet ispunjen sa if i else.

al nije mi zadano da provjerim parnost?!

 

Umro je Einstein, umro je Newton, ni ja se ne osjećam baš najbolje.. :(
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Hehe, nije to bilo namjenjeno tebi :)
Mogu li nekako u funkciji rand staviti da mi ne ne izbacuje broj koji je vec generiralo ili moram ja sam definirati uvjet provjere
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Xyloto kaže...
Hehe, nije to bilo namjenjeno tebi :)
Mogu li nekako u funkciji rand staviti da mi ne ne izbacuje broj koji je vec generiralo ili moram ja sam definirati uvjet provjere

Ako ne zelis da se broj ponavlja, onda ne zelis random brojeve, vec random permutacije.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

@Lunat1c

 

Ok je. Kod komentara moraš staviti dvije kose crte:  //....

Poruka je uređivana zadnji put čet 21.3.2013 0:10 (neznam123456).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...
Xyloto kaže...
Hehe, nije to bilo namjenjeno tebi :)
Mogu li nekako u funkciji rand staviti da mi ne ne izbacuje broj koji je vec generiralo ili moram ja sam definirati uvjet provjere

Ako ne zelis da se broj ponavlja, onda ne zelis random brojeve, vec random permutacije.

Hvala, ma zezam se sa programom da pravim loto 7/39 pa mi tu smeta ako se brojevi ponavljalju, vidio sam da se ovo sto si ti postavio rjesava sa iteratorom i moze sa vectorom, pa me zanima moze li se ikako izbjeci ovaj naci kako si ti ponudio...

14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav, trebao bih sada (u roku 15-20 minuta) iz Računalstva nacrtati u C++ par geometrijskih likova. Za početak kosu crtu.

 

Znači, ovako nešto:

 

             *

          *

        *

    *

*

 

Ali, naravno, ne tako sa zvjezdicama već normalnih programiranjem. (Ako može i neko malo objašnjenje). Hvala!

 

EDIT: Nema veze, pokušat ću sam!

Poruka je uređivana zadnji put čet 21.3.2013 11:24 (master4games).
Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

da li bi mi neko mogao pomoci oko ovog zadatka ?

Na ekranu ispisati " Otkucajte nadimak pjesnika Jovana Jovanovica".Ako se otkuca "Zmaj" ili "ZMAJ" treba pisati "odlicno",inace na druge odgovore treba pisati "tacan odgovor je Zmaj"

Hvala unaprijed :)

Dina Mustovic
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

To je vrlo jednostavan zadatak. Sve što trebaš je pohraniti string vrijednost sa tipkovnice, provjeriti da li je jednaka "Zmaj" ili "ZMAJ", ako jeste ispišeš to što već trebaš...

 

Tako nešto ide sa string objektima, ako trebaš sa poljima, reci.

string nadimak;

getline(cin, nadimak);

if(nadimak=="Zmaj" || nadimak=="ZMAJ")

{

  cout<<"Odlicno!"<<endl;

else

{

  cout<<"tacan odgovor je zmaj"<<endl;

}

14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Zasto mi kod ovog koda kad unesem aritmeticki niz ispise tacno da je aritmeticki i ispise jos ovo pod goto nis;

A kad unesem geometrijski niz ispise sve..

ispise i ovo pod goto geo; goto arp;goto  nis...

Kako da napravim da ide samo na jedan goto koji sam zadao gore???

 

 

#include <iostream>

using namespace std;

int main()
{
    int n,k,rez=1,MAX,rez1=1,poz;
    cin>>n;
    int niz[n];
    for (int i=0;i<n;i++)
    {
        cin>>niz[i];
    }
    cin>>k;
    MAX=niz[1];
    for (int i=0;i<n;i++)
    {
        for (int j=1;j<n;j++)
        if (niz[j]>MAX) MAX=niz[j];
        if ((niz[i+3]-niz[i+2]!=niz[i+1]-niz[i])&&(niz[i+3]/niz[i+2]!=niz[i+1]/niz[i]))
           goto nis;
        if ((niz[i+1]-niz[i])==(niz[i+2]-niz[i+1]) && (niz[i+3]-niz[i+2])==(niz[i+2]-niz[i+1])){
            rez=(k*(niz[i+1]-niz[i]))-1;
           goto arp;}
        if ((niz[i+2]/niz[i+1])==(niz[i+1]/niz[i]) && (niz[i+3]/niz[i+2])==(niz[i+1]/niz[i])){
            if (MAX=niz[i]) poz=niz[i];
            rez1=((k-n)*(niz[i+1]/niz[i])*MAX);
           goto geo;}
    }
   geo:
        cout<<"Geometrijski, K:"<<rez1<<endl;
    arp:
        cout<<"Aritmeticki, K:"<<rez<<endl;
    nis:
        cout<<"Nije ni aritmeticki ni geometrijski"<<endl;
    return 0;
}

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
Poruka je uređivana zadnji put ned 24.3.2013 18:29 (Intelovac123).
 
0 0 hvala 0
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Izbjegavaj goto.

Nadam se da radi kak spada....

 

#include <iostream>
using namespace std;

int main (){

    int n,k,rez=1,MAX,rez1=1,poz;
    cin>>n;
    int niz[n];
    for (int i=0;i<n;i++)
    {
        cin>>niz[i];
    }
    cin>>k;
    MAX=niz[1];
    for (int i=0;i<n;i++)
    {
        for (int j=1;j<n;j++)
        if (niz[j]>MAX)
       MAX=niz[j];
       
       if ((niz[i+3]-niz[i+2]!=niz[i+1]-niz[i])&&(niz[i+3]/niz[i+2]!=niz[i+1]/niz[i])){
           cout<<"Nije ni aritmeticki ni geometrijski"<<endl;
           break;
          }
       
       if ((niz[i+1]-niz[i])==(niz[i+2]-niz[i+1]) && (niz[i+3]-niz[i+2])==(niz[i+2]-niz[i+1])){
            rez=(k*(niz[i+1]-niz[i]))-1;
              cout<<"Aritmeticki, K:"<<rez<<endl;
          break;
          }
       
       if ((niz[i+2]/niz[i+1])==(niz[i+1]/niz[i]) && (niz[i+3]/niz[i+2])==(niz[i+1]/niz[i])){
            if (MAX=niz[i]) poz=niz[i];
            rez1=((k-n)*(niz[i+1]/niz[i])*MAX);
             cout<<"Geometrijski, K:"<<rez1<<endl;
          break;  
          }
    }
}

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam123456 kaže...

Izbjegavaj goto.

Nadam se da radi kak spada....

 

#include <iostream>
using namespace std;

int main (){

    int n,k,rez=1,MAX,rez1=1,poz;
    cin>>n;
    int niz[n];
    for (int i=0;i<n;i++)
    {
        cin>>niz[i];
    }
    cin>>k;
    MAX=niz[1];
    for (int i=0;i<n;i++)
    {
        for (int j=1;j<n;j++)
        if (niz[j]>MAX)
       MAX=niz[j];
       
       if ((niz[i+3]-niz[i+2]!=niz[i+1]-niz[i])&&(niz[i+3]/niz[i+2]!=niz[i+1]/niz[i])){
           cout<<"Nije ni aritmeticki ni geometrijski"<<endl;
           break;
          }
       
       if ((niz[i+1]-niz[i])==(niz[i+2]-niz[i+1]) && (niz[i+3]-niz[i+2])==(niz[i+2]-niz[i+1])){
            rez=(k*(niz[i+1]-niz[i]))-1;
              cout<<"Aritmeticki, K:"<<rez<<endl;
          break;
          }
       
       if ((niz[i+2]/niz[i+1])==(niz[i+1]/niz[i]) && (niz[i+3]/niz[i+2])==(niz[i+1]/niz[i])){
            if (MAX=niz[i]) poz=niz[i];
            rez1=((k-n)*(niz[i+1]/niz[i])*MAX);
             cout<<"Geometrijski, K:"<<rez1<<endl;
          break;  
          }
    }
}

Samo prvi uslov radi..Koji god da stavim prvi samo on radi

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
12 godina
offline
Programiranje u C++-u - pitanja i odgovori

Kako? Meni radi normalno. Upiši npr. 1,2,3,4 i ispisat će da je aritmetički niz. Ili 2,4,8,16 za geometrijski.

Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam123456 kaže...

Kako? Meni radi normalno. Upiši npr. 1,2,3,4 i ispisat će da je aritmetički niz. Ili 2,4,8,16 za geometrijski.

Sad radi..Ne kontam u cemu je fora bila

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Zasto mi kod ovog koda kad unesem aritmeticki niz ispise tacno da je aritmeticki i ispise jos ovo pod goto nis;

A kad unesem geometrijski niz ispise sve..

Zato što je goto bezuvjetni skok na određenu lokaciju. Kada se program prebaci na tu lokaciju onda se dalje nastavlja izvršavati liniju po liniju. Samo zato što si ti skočio na "geo:" labelu ne znači da će program tu stati, on dalje nastavlja izvršavati liniju po liniju.

 

Labele nisu nekakve magične barijere koje označavaju da se treba izvršiti samo određeni kod, one su adrese u programu koje naredbe poput gotoa mogu koristiti.

 

#include <stdio.h>

int main()
{
    goto a;

    a:
        printf("Prva linija\n");
    b:
        printf("Druga linija\n");
    c:
        printf("Treca linija\n");

    return 0;
}

 

Pogledaj gornji primjer, ispisat će se sve tri linije, zašto? Kompletna main funkcija se izvršava u devet koraka:

  1. Goto kaže da se prebacimo na liniju koja sadrži labelu "a:", pa se prebacimo.
  2. Kako se u liniji u kojoj se nalazi labela "a:" nema što izvršiti idemo dolje za jednu liniju.
  3. Tu nas dočeka poziv na funkciju printf, to izvršimo, idemo opet dolje za jednu liniju.
  4. Sada smo na liniji u kojoj se nalazi labela "b:", nemamo što tu izvršiti pa se spuštamo dolje za jednu liniju.
  5. Opet poziv na funkciju printf, izvršimo i to i spustimo se dolje za jednu liniju.
  6. Sad smo na liniji labele "c:", ni tu se nema što izvršiti pa se spuštamo dolje za jednu liniju.
  7. Evo nam i zadnjeg poziva na funkciju printf, izvršimo to i spuštamo se dolje za jednu liniju.
  8. Prazna linija, opet se spuštamo dolje za jednu liniju.
  9. Keyword return kojim izlazimo iz funkcije i operacijskom sutavu vraćamo kod sa greškom 0 (nula obično predstavlja uspješno izvršavanje, bez greške).

 

Ovih devet koraka je malo pojednostavljeno da bi lakše shvatio (kompajler u stvarnosti niti ne stavi neke od ovih koraka u izvršnu datoteku, jer ne rade baš ništa pa su suvišni).

 

Dakle naučili smo važnu stvar, labela ne čini baš ništa sama po sebi osim što predstavlja "metu" na koju goto može skočiti. Ovdje je korisno primijetiti i kako je switch-case blok zapravo samo zamaskirani goto i labele.

 

Ako bi željeli izvršiti samo ono što se nalazi između labele "a:" i "b:", onda bi morali nekako preskočiti preostale linije koda, pa bi to ovako izgledalo:

 

#include <stdio.h>

int main()
{
    goto a;

    a:
        printf("Prva linija\n");
        goto kraj;
    b:
        printf("Druga linija\n");
        goto kraj;
    c:
        printf("Treca linija\n");

    kraj:

    return 0;
}

 

Za tu smo potrebu dodali još i labelu "kraj:" i goto nakon poziva na prve dvije printf funkcije s kojima odmah skačemo na "kraj:", pa nam se neće pozvati i druge dvije printf funkcije.

 

FAQ:

 

Zašto nema gotoa nakon zadnje printf funkcije?

Zato što nije potreban. Ionako nakon zadnje printf funkcije dolazi labela "kraj:", pa u biti nemamo potrebu ništa preskakati.

 

Znači li to onda i da su labela "a:" i skok na tu labelu na samom početku suvišni?

Da, zato što bi se i bez skoka na "a:" program ionako počeo izvršavati od prvog printfa. "Goto a" i labelu "a:" sam stavio čisto "radi ukrasa", kako bih lakše objasnio cijelu stvar.

 

Zašto je pametno izbjegavati naredbu goto?

Zato što sama po sebi ne stvara nikakve strukturirane blokove, i omogućava stvaranje zamršene mreže skokova koje je jako teško pratiti pri čemu se lako može pogriješiti. To naravno ne znači da će goto sam po sebi nekako magično usrati cijeli program, nego da lako omogućava programeru da napravi konfuzno sranje (ako ovaj ne pazi što radi).

0xBADC0DE
Poruka je uređivana zadnji put pon 25.3.2013 2:24 (rustweaver).
E-mail:
Lozinka:
 
vrh stranice