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

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

Hvala Cap

Kako mogu uraditi da mi se ne dupliraju clanovi.

Transact-SQL
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
adimesic kaže...
adimesic kaže...

Pozdrav raja :)

Imam jedan problem pa bih vas zamolio za pomoc!

Trebam implementirati funkciju int*umetnibroj(int*niz,int duzina, int broj);

 

Zadatak kaze da broj koji smo unjeli moramo staviti u niz, prosljedjeni niz mora biti unaprijed sortiran
 i nakon umetanja broja on mora ostati sortiran! Jos jedna napomena: U zadatku ne smijemo koristiti algoritme za sortiranje, to je ustvari i jedini problem za mene, posto ne znam kako bi inace umetnuo broj u niz a da ostane sortiran!

Eee, hvala unaprijed i pozdrav :)

Evo, ovaj ti radi:

 

 

int* UmetniBroj(int* niz, int duzina, int broj)
{
    int* noviNiz = new int[duzina+1];
    bool pozicija = true;
    int index = 0;
    for(int i=0; i<duzina+1; i++)
    {
       if(niz[index] <= broj)
       {
          noviNiz[i] = niz[index];
          index++;
       }
       else
       {
          if(pozicija)
          {
             noviNiz[i] = broj;
             pozicija = false;
          }
          else
          {
             noviNiz[i] = niz[index];
             index++;
          }

       }

    }
    return noviNiz;
}

Poruka je uređivana zadnji put čet 3.5.2012 21:50 (Floki).
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
adimesic kaže...

Prije svega hvala na trudu. U svom kodu sam alocirao prostor za novi niz u funkciji, ne znam kako nisi mogao da to vidis,

 

 

int d=duzina+1;

int *niz2=new int [d];


Primjetio sam to ali mi nije bilo jasno sto dalje radis.

adimesic kaže...

temp mi je bila pomocna varijabla koja mi je sluzila da nadjem clan niza koji je manji od prosljedjenog broja. To sam radio pomocu for petlje:

 

for(int i=0; i<duzina-1; i++){

if(niz[i]<=broj){

temp=i;}}

 


Nije mi jasno zasto ovdje ides do duljina-2. Jer ti si napisao kao uvjet izvodena da je i<duljina-1 pa je posljedni i = duljina-2. To je progresno jer broj koji unos moze biti i veci od zadnje clana pa bi tu trebalo  biti i<duljina. Dakle to je zadnji clan koji je manji od broja

adimesic kaže...

 

for(int j=0; j<=temp; j++){

niz2[j]=niz[j];}

 

 

Prije toga sam rekao da je:

 

niz2[temp]=broj;

 

Nakon toga sam u niz2 upisivao preostale clanove prosljedjenog niza koji su bili veci od prosljedjenog broja:

 

 

for(int j=temp; j<=duzina; j++){

niz2[j]=niz[j];}

 

 

A to sto return-am pokazivac na temp, to je greska {#}

U zadatku mi je naglaseno da moram vratiti pokazivac na prvi clan novog niza, to bi u mom slucaju bilo,

 

return &niz2[0];

 

A zasto vracam referencu prvog clana novog niza?! Pogledaj deklaraciju funkcije! 

Uradio sam prema tvojoj preporuci (tj.tvom kodu) al i dalje ne radi! Evo screen-a

 

adimesic kaže...

temp mi je bila pomocna varijabla koja mi je sluzila da nadjem clan niza koji je manji od prosljedjenog broja. To sam radio pomocu for petlje:

 

for(int i=0; i<duzina-1; i++){

if(niz[i]<=broj){

temp=i;}}

 


Nije mi jasno zasto ovdje ides do duljina-2. Jer ti si napisao kao uvjet izvodena da je i<duljina-1 pa je posljedni i = duljina-2. To je progresno jer broj koji unos moze biti i veci od zadnje clana pa bi tu trebalo  biti i<duljina. Dakle to je zadnji clan koji je manji od broja

adimesic kaže...

 

for(int j=0; j<=temp; j++){

niz2[j]=niz[j];}

Ovo ti je dobro. Dakle kopiras sve do zadnjega najmanjega polja.

adimesic kaže...

 

Prije toga sam rekao da je:

 

niz2[temp]=broj;

 

Ovo ti nije dobro. Naime kako si ti pronasao posljedni clan koji je manji od broja kojega trebamo ubaciti, onda mjesto na koje cemo ubaciti taj broj je za jedan vece od mjesta zadnje manjeg broja od broja koji trebamo unijeti. Pa tu treba biti:

niz2[temp+1] = broj;

 

adimesic kaže...

Nakon toga sam u niz2 upisivao preostale clanove prosljedjenog niza koji su bili veci od prosljedjenog broja:

 

for(int j=temp; j<=duzina; j++){

niz2[j]=niz[j];}

Ovdje isto imas par gresaka. Prvoj j ti pocinje sa temp, a to je zadnji manji broj koji je manji od zadanoga broja, a njega smo vec ubacili i zato j treba pocinjati sa temp+1. I kad ubacujemo u novi niz, ona moramo primjetiti da smo u njega vec ubacili broj pa je index sljedecega slobodnoga clana od novoga polja za jedan veci od indexa staroga polja i zato treba pisati:

niz2[j+1]=niz[j]. I ovdje ti nikako ne smije biti j<= duzina jer bi j iskocio van indexa staroga polja, pa tu mora biti j<duzina.

adimesic kaže...
A to sto return-am pokazivac na temp, to je greska {#}

U zadatku mi je naglaseno da moram vratiti pokazivac na prvi clan novog niza, to bi u mom slucaju bilo,

 

return &niz2[0];

 

A zasto vracam referencu prvog clana novog niza?! Pogledaj deklaraciju funkcije! 

Uradio sam prema tvojoj preporuci (tj.tvom kodu) al i dalje ne radi! Evo screen-a

Ovo si dobro napravio iako si neke stvari pobrkao. Naime ime polja je samo pokazivac na prvi clan polja, i onda ovisno o indexu mi se micemo od tog mjesta u memoriji za vise ili manje. P vrijedi da je:

*niz = niz[0]

*(niz+2)=niz[2] itd.

I onda vrijedi da je

niz = &niz[0]

 

I zato je isto:

return niz2;i

return &niz2[0];Sasvim je svejedno iako je meni osobno prvi nacim malo ljepsi. I evo komplentoga provjerenoga koda:

#include <iostream>

using namespace std;

int *umetni(int *niz,int duzina, int broj)
{

    int d=duzina+1;

    int *niz2=new int [d];

    int temp=0;

    for(int i=0; i<duzina; i++)
    {

        if(niz[i]<=broj)
        {

            temp=i;
        }
    }
    niz2[temp+1]=broj;

    for(int j=0; j<=temp; j++)
    {

        niz2[j]=niz[j];
    }

    for(int j=temp+1; j<duzina; j++)
    {

        niz2[j+1]=niz[j];
    }

    return niz2;
}

int main()
{

    cout<<"unesite duzinu niza"<<endl;

    int duzina;

    cin>>duzina;

    cout<<"ispunite niz"<<endl;

    int *niz=new int[duzina];

    for(int i=0; i<duzina; i++)
    {

        cin>>niz[i];
    }

    cout<<"unesite broj"<<endl;

    int broj;

    cin>>broj;

    niz = umetni(niz,duzina,broj);

    for(int i =0;i<duzina+1;i++)
        cout<<niz[i]<<endl;
    return 0;
}

 

 

Twitter- @capttawish Linux/GNU live forever.
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
T-SQL kaže...

Hvala Cap

Kako mogu uraditi da mi se ne dupliraju clanovi.

E onda samo moras malo promijeniti moj kod. Sada ces za svaki clan provjeravati ima li on duploga clana, ako nema dodati ces ga:

for(int i =0; i< velicina;i++){
    bool nemaGa = true;
    for(int j = 0;j< velicina;j++)
        if(niz_prvi[i] == niz_drugi[j]){
            nemaGa = false;
            break;
        }
    if(nemaGa){
        niz_zajednicki[pom] = niz_prvi[i];
        pom++
    }
}

Imamo jednu varijablu kojom pamtimo ima li toga clana u novome nizu. Na pocetku pretpostavimo da ga nema i onda prolazimo kroz svaki clan drugoga niza. Ako ga ima promijenimo zastavicu nemaGa u false i prekinemo petljanje. Na kraju provjerimo jesmo li ga pronasli, ako nismo onda ga dodamo.

 

S ovime ces dobiti razliku skupova tj. ako imas skup A i B onda ces dobiti A\B. Problem sto ces ovdje dobiti samo clanove koji se nalaze u skupu A, a ne nalaze se u skupu B. Da bi dobio sve clanove koji se ne dupliraju moras onda tome novome skupu dodati jos razliku B\A pa to mozes izvesti pomocu dvije provjere;

 

pom = 0;
for(int i =0; i< velicina;i++){
    bool nemaGa = true;
    for(int j = 0;j< velicina;j++)
        if(niz_prvi[i] == niz_drugi[j]){
            nemaGa = false;
            break;
        }
    if(nemaGa){
        niz_zajednicki[pom] = niz_prvi[i];
        pom++
    }
}

for(int i =0; i< velicina;i++){
    bool nemaGa = true;
    for(int j = 0;j< velicina;j++)
        if(niz_drugi[i] == niz_prvi[j]){
            nemaGa = false;
            break;
        }
    if(nemaGa){
        niz_zajednicki[pom] = niz_drugi[i];
        pom++
    }
}

Twitter- @capttawish Linux/GNU live forever.
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

Zamolio bih nekoga tko bi bio voljan, da mi napiše C++ programčić koji bi putem 3 niti na ekranu ispisao ABC, svaka nit po 1 slovo.

Cijenio bih ako bi program radio u Visual Studio 2008. Hvala.

Kreiranje nove niti samo za ispis jednog jedinog znaka na ekran je veoma neucinkovito zato sto sami API pozivi koji stvaraju novu nit obave vise procesiranja nego sto bi obavio jedan jednostavan poziv na cout ili printf. Ali recimo da zelis neprekidno ispisivati znakove, svaki znak u zasebnoj niti onda bi to nekako ovako mogao napraviti:

 

#include <iostream>
#include <process.h>

using namespace std;

void ispis(void *arg)
{
     while (1)
           cout << ((char*)arg)[0];
}

int main()
{
    char a='a', b='b', c='c';
   
    _beginthread(ispis, 0, &a);
    _beginthread(ispis, 0, &b);
    _beginthread(ispis, 0, &c);
   
    while (1);
   
    return 0;
}

 

Nemam VS ali trebalo bi to i tamo raditi bez ikakvih modifikacija.

S time da mozes i direktno poslati neki string literal kao argument funkcije na slijedeci nacin:

 

_beginthread(ispis, 0, (void*)"c");

 

Za detalje vezane uz _beginthread pogledaj ovdje.

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put čet 3.5.2012 21:44 (rustweaver).
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže....

Kreiranje nove niti samo za ispis jednog jedinog znaka na ekran je veoma neucinkovito zato sto sami API pozivi koji stvaraju novu nit obave vise procesiranja nego sto bi obavio jedan jednostavan poziv na cout ili printf. Ali recimo da zelis neprekidno ispisivati znakove, svaki znak u zasebnoj niti onda bi to nekako ovako mogao napraviti:

 

...

 

Nemam VS ali trebalo bi to i tamo raditi bez ikakvih modifikacija.

S time da mozes i direktno poslati neki string literal kao argument funkcije na slijedeci nacin:

 

_beginthread(ispis, 0, (void*)"c");

 

Za detalje vezane uz _beginthread pogledaj ovdje.

Kada hoću buildati navedeni kod ovo mi ispiše:

 

1>------ Build started: Project: sbug, Configuration: Debug Win32 ------

1>Compiling...

1>sbug.cpp

1>c:\users\ivan marijanović\documents\visual studio 2008\projects\sbug\sbug\sbug.cpp(1) : warning C4627: '#include <iostream>': skipped when looking for precompiled header use

1>     Add directive to 'stdafx.h' or rebuild precompiled header

1>c:\users\ivan marijanović\documents\visual studio 2008\projects\sbug\sbug\sbug.cpp(2) : warning C4627: '#include <process.h>': skipped when looking for precompiled header use

1>     Add directive to 'stdafx.h' or rebuild precompiled header

1>c:\users\ivan marijanović\documents\visual studio 2008\projects\sbug\sbug\sbug.cpp(24) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?

1>Build log was saved at "file://c:\Users\Ivan Marijanović\Documents\Visual Studio 2008\Projects\sbug\sbug\Debug\BuildLog.htm"

1>sbug - 1 error(s), 2 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Problem je što mi isto to za "stdafx.h" ispisuje koji god ja višenitni program odnosno programski kod pokušao buildati.
Kad dodam stdafx onda bude mali milijun errora...

 

Prodajem RAGE za PS3: http://www.bug.hr/forum/topic/igre-accounti-igrama/prodaja-igra-rage-playstation-3/129629.aspx?page=0&amp;amp;jumpto=2529211&amp;amp;sort=asc&amp;amp;view=flat
Poruka je uređivana zadnji put čet 3.5.2012 22:00 (191x7).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ajme.

 

Sorry, ali prekompajlirani headeri u VS-u definitivno nisu moje podrucje...

Znam da si trazio nekakav primjer upravo za VS, ali mislim da nije problem u kôdu nego u projektu koji treba postaviti. Ne znam moze li uopce VS kompajlirati jednu source datoteku bez postavljanja projekta.

My computer once beat me at chess, but we got even after a round of boxing.
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
adimesic kaže...
adimesic kaže...

Pozdrav raja :)

Imam jedan problem pa bih vas zamolio za pomoc!

Trebam implementirati funkciju int*umetnibroj(int*niz,int duzina, int broj);

 

Zadatak kaze da broj koji smo unjeli moramo staviti u niz, prosljedjeni niz mora biti unaprijed sortiran
 i nakon umetanja broja on mora ostati sortiran! Jos jedna napomena: U zadatku ne smijemo koristiti algoritme za sortiranje, to je ustvari i jedini problem za mene, posto ne znam kako bi inace umetnuo broj u niz a da ostane sortiran!

Eee, hvala unaprijed i pozdrav

A možemo i ovako, samo sa jednom provjerom da izvršimo upis u jednoj petji elemenata starog niza uz pomak u novi niz, a onda naknon toga novi elemet upisujemo na svoje mjesto gdje nam je varijabla pozicija index za taj element u novom nizu, koja je služila kao brojač.

 

 

 

int* UmetniBroj(int* niz, int duzina, int broj)
{
    int* noviNiz = new int[duzina+1];
    int pozicija = 0;
    for(int index=0; index<duzina; index++)
    {
       if(niz[index] <= broj)
       {
          noviNiz[index] = niz[index];
          pozicija++;
       }
       else
       {
          noviNiz[index+1] = niz[index];
       }
    }
    noviNiz[pozicija] = broj;
    return noviNiz;
}

Poruka je uređivana zadnji put pet 4.5.2012 13:28 (Floki).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...
Problem je što mi isto to za "stdafx.h" ispisuje koji god ja višenitni program odnosno programski kod pokušao buildati.
Kad dodam stdafx onda bude mali milijun errora...

Bio sam raspolozen pa sam malo googlao za tebe. Cini se da imas dvije mogucnosti, dodati stdafx.h prije svih ostalih headera, ili jednostavno onemoguciti prekompajlirane headere u projektu, to napravis ovako (skrolaj dolje do TODO #9). Ubuduce kada koristis project wizard u njemu imas checkbox kojim mozes omoguciti ili onemoguciti prekompajlirane headere za novi projekt, obrati pozornost na to.

 

Moras poznavati alat u kojemu radis jer se inace dogadaju ovakve stvari ;)

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

http://bhoi.net/Zadaci/JBHOI%202008/broj.pdf

To je zadatak..

 

Ja imam problem pokusao sam milion nacina ali ne ide da sortiram to ..

Znam sortirati niz kad je samo niz ali ovdje ne ide..

 

Evo ovaj kod ispisuje sve proste djelioce tog zadanog broja..meni samo treba da ih sortira..

 

int main()
{
int n,bd=0;
cout << "Unesi n=";
cin >> n;
for(int i=1; i <= n; i++)
{
bd=1;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
{
bd+=1;
}
}
if(bd==2)
{
cout << i << endl;
}
}
system("PAUSE");
return 0;
}

 

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...
Ja imam problem pokusao sam milion nacina ali ne ide da sortiram to ..

Znam sortirati niz kad je samo niz ali ovdje ne ide..

 

Evo ovaj kod ispisuje sve proste djelioce tog zadanog broja..meni samo treba da ih sortira..

Pa najjednostavniji moguci nacin. Nadi sve faktore, spremi ih u polje, sortiraj polje, i iz polja redom ispisuj samo one koji su prosti, kako si polje vec prethodno sortirao tako ce i prosti faktori biti ispisani u pravilnom redoslijedu.

My computer once beat me at chess, but we got even after a round of boxing.
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

http://bhoi.net/Zadaci/JBHOI%202008/broj.pdf

To je zadatak..

 

Ja imam problem pokusao sam milion nacina ali ne ide da sortiram to ..

Znam sortirati niz kad je samo niz ali ovdje ne ide..

 

Evo ovaj kod ispisuje sve proste djelioce tog zadanog broja..meni samo treba da ih sortira..

 

int main()
{
   int n,bd=0;
   cout << "Unesi n=";
   cin >> n;
   for(int i=1; i <= n; i++)
   {
     bd=1;
     for(int j=1;j<=i/2;j++)
     {
         if(i%j==0)
        {
            bd+=1;
        }
     }
     if(bd==2)
     {
        cout << i << endl;
     }
   }
   system("PAUSE");
   return 0;
}

On ti brojeve ispisuje sortirane i ako hoćeš od najveće ka najmanjem, onda moraš krenuti od najvećeg broja i, tj. naredba for ti treba izgledati ovako:

for(int i = n; i>=1;i--)

 

No to ti svjedeno ne pomaze jer ti je algoritam pogresan. Naime tvoj program trazi sve prose brojeve koji su manji ili jednaki zadanome broju, no u zadatku se trazi da pronades proste djelitilje zadanog broja, tj. da rastavis broj na proste faktore. Dakle da bi ispisao broj moras jos provjeriti dijeli li on zadani broj. Tako samo moras modificirati jednu if naredbu u:

if(bd == 2 && n%i == 0)

Sada ce ti program pravilno raditi.

 

Twitter- @capttawish Linux/GNU live forever.
Poruka je uređivana zadnji put pet 4.5.2012 17:35 (captain_soap_McTawish).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

http://bhoi.net/Zadaci/JBHOI%202011/faktori.pdf

 

Ja uradim program i on radi ali moze li mi neko objasniti kako da koristim ove faktori.in  i faktori.out datoteke..

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

http://bhoi.net/Zadaci/JBHOI%202011/faktori.pdf

 

Ja uradim program i on radi ali moze li mi neko objasniti kako da koristim ove faktori.in  i faktori.out datoteke..

Ja to radim ovak :P :

 

#include <ifstream>

 

ifstream ime ("path_do_fajla") // čitaš iz fajla

ofstream ime("path_do_fajla") // pišeš u fajl

 

npr.

 

ifstream fin("in.txt") // učitavat će iz datoteke in.txt koja se nalazi u istom direktoriju gdje je i projekt

ofstream fout("out.txt") // isto ovo gore samo što će pisati u datoteku

 

I sad samo umjesto cin i cout koristiš imena ovih gore varijabli npr.

 

int a;

fin>>a;

 

i učitat će ti broj iz datoteke u varijablu a

 

fout<<a; // ispišemo u datoteku i sl.

 

Valjda sam dobro objasnio.

Mislim da imaju one mandže sa open, close i sl. ali ja koristim ovaj način.

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

Jest.

Twitter- @capttawish Linux/GNU live forever.
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ovako. Pravim program za računanje Fibonačijevog niza sa i bez rekurzije (da se vidi razlika u vremenu izračunavanja, rekurzija je dosta spora). Sad je problem što se iznad 45 broja u nizu pojavljuju negativni brojevi. Kako da riješim ovo? Problem se pojavljuje kod obe vrste izračunavanja.

 

Source: http://pastebin.com/KbBc69yd 

Dafuq I just read?
Moj PC  
0 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
SaidSikiraX kaže...

Ovako. Pravim program za računanje Fibonačijevog niza sa i bez rekurzije (da se vidi razlika u vremenu izračunavanja, rekurzija je dosta spora). Sad je problem što se iznad 45 broja u nizu pojavljuju negativni brojevi. Kako da riješim ovo? Problem se pojavljuje kod obe vrste izračunavanja.

 

Source: http://pastebin.com/KbBc69yd 

Problem je sto koristis tip podatka sa premalim opsegom, pa kad se dode do maksimalne vrijednsti koju int moze podnijeti, dode do prelijevanja brojeva pa se int tip vari na najnizi negativni broj. Radije umjesto int koristi long ili long long. Ako ti je nezgodno stalno pisati long long onda napravi ovo:

typedef long long llint;
...

llint broj; //isto kao long long broj.

Twitter- @capttawish Linux/GNU live forever.
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Molim vas može neko pomoć s ovim zadatkom...

 

 

Korisnik unosi N = 1..100 i polje 1 do 100 pozitivnih cijelih brojeva. Poziva se

funkcija kojoj je deklarirano polje i N argumenata i koja u slučaju da je proslijeđen

1 broj, uvedava taj broj za 2 i vrada rezultat, a inače zbraja sve proslijeđene

parametre i vrada njihovu sumu kao rezultat. Rezultat se ispisuje unutar glavnog

programa. 

 

Hvala!!!

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
SaidSikiraX kaže...

Ovako. Pravim program za računanje Fibonačijevog niza sa i bez rekurzije (da se vidi razlika u vremenu izračunavanja, rekurzija je dosta spora). Sad je problem što se iznad 45 broja u nizu pojavljuju negativni brojevi. Kako da riješim ovo? Problem se pojavljuje kod obe vrste izračunavanja.

 

Source: http://pastebin.com/KbBc69yd 

Problem je sto koristis tip podatka sa premalim opsegom, pa kad se dode do maksimalne vrijednsti koju int moze podnijeti, dode do prelijevanja brojeva pa se int tip vari na najnizi negativni broj. Radije umjesto int koristi long ili long long. Ako ti je nezgodno stalno pisati long long onda napravi ovo:

typedef long long llint;
...

llint broj; //isto kao long long broj.

Problem i dalje ostaje. Zblesira se na 47 broju kakav god tip stavio. Probao sam i sa unsigned long long zato što najveća zapamćena vrijednost može biti 18,446,744,073,709,551,615. Nijedan broj u nizu nije toliko veliki, ali opet izbaci pogrešan rezultat na 47 broju i kasnije sve zahebe.

Dafuq I just read?
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Meni se slicno desavalo..

Ajd pokusaj napisati novi kod (sve ispocetka),mozda je nesto upamtio staro pa to izvrsava.

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

Problem i dalje ostaje. Zblesira se na 47 broju kakav god tip stavio.

A jesi li izmjenio i vrstu povratne vrijednosti funkcije u unsigned? :D

Nesto ovako?

 

unsigned long fibonaciX(int n)
{
    unsigned long f1=1,
                  f2=0,
                  FIB=0,
                  i;

    if (n<=2) return n;

    for(i=2;i<=n;i++)
    {
       FIB=f1+f2;
       f2=f1;
       f1=FIB;
    }

       return FIB;
}

 

Nema vise negativnih brojeva... :P

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put ned 6.5.2012 0:26 (rustweaver).
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
SaidSikiraX kaže...

Problem i dalje ostaje. Zblesira se na 47 broju kakav god tip stavio.

A jesi li izmjenio i vrstu povratne vrijednosti funkcije u unsigned? :D

Nesto ovako?

 

unsigned long fibonaciX(int n)
{
    unsigned long f1=1,
                  f2=0,
                  FIB=0,
                  i;

    if (n<=2) return n;

    for(i=2;i<=n;i++)
    {
       FIB=f1+f2;
       f2=f1;
       f1=FIB;
    }

       return FIB;
}

 

Nema vise negativnih brojeva... :P

Da, logično da sam izmijenio. Nema negativnih brojeva ali opet izbacuje pogrešane rezultate poslje 47 broja.

 

EDIT: Kad napišem ovakav algoritam u Pascal-u dolazi do istog problema.

Dafuq I just read?
Poruka je uređivana zadnji put ned 6.5.2012 11:12 (SaidSikiraX).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Sad je u pitanju tvoja greška, a ne ograničenje zapremine broja.

 

Kad ideš sa unsigned int, odnosno sa unsigned long 47. broj u nizu dobijaš ispravan, odnosno broj 2,971 x 10^9.

Sve u svemu, na taj način dobijaš jedan broj u nizu plus, pošto već na 48. dolazi do prelijevanja.

 

 

 

- Na slici je tvoj kod sa unsigned int koji računa niz za 47

slika slika
Poruka je uređivana zadnji put ned 6.5.2012 13:11 (Floki).
 
0 0 hvala 0
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozz ljudi...Imam problema u mainu s ovim kodom pa ako je netko voljan pogledati..Ugl trebam implementirati skalarni produkt dva polja i testirat sa 2 i 4 treda..

 

#include<iostream>

#include<pthread.h>

 

using namespace std;

 

const int brojTh = 2;

int polje[brojTh];

int *A, *B, *C;

int n = 1000;

 

void* produkt_komponenata_vektora(void *start)

{

  int i = *(int *)start;  

  while (i < n) 

  {

   C[i] = A[i] * B[i];

   i += brojTh;

  }

}

 

void* suma_elemenata_vektora(void *start) 

{

  int t,brojac;

  int suma = 0;

  brojac = *((int *) start);

  t = brojac;

  while(brojac < n)

  {

   suma += C[brojac];

   brojac += brojTh;

  }

 

  polje[t]=suma;  

}

 

int main()

{

  A = new int[n];

  B = new int[n];

  C = new int[n];  

 

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

 {

   A[i] = i;

   B[i] = 1;

 }

 

 

int start = 0;

 

pthread_t tid1, tid2;

 

int t1 = pthread_create(&tid1, NULL, produkt_komponenata_vektora, (void *)start);//OVO TU MI TREBA

  start++;

int t2 = pthread_create(&tid2, NULL, produkt_komponenata_vektora, (void *)start); 

 

pthread_join(tid1, NULL);

 

pthread_join(tid2, NULL);

 

cout <<"Skalarni produkt: "<<endl; 

 

 

return 1;

 

}

 

Unaprijed zahvaljujem..  

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

bump

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

bump

jel ti to koristis pthreads?

 

Nisi rekao u cemu je tocno problem.

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Da koristim pthreads..Pa neznam kako da kreiram threadove i trebam onda paralelno pozbrajat ove sume..

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
e_77 kaže...

Pa neznam kako da kreiram threadove i trebam onda paralelno pozbrajat ove sume..

Pocni sa osnovama napravi jedan programcic koji u jednom threadu beskonacno ispisuje slovo "A", a u drugom slovo "B".

 

Problem sa paralelnim programiranjem je sto moras sinkronizirati threadove, i paziti sto pristupa cemu i kada, jer inace lako mozes napraviti totalnu zbrku.

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Sve je to meni jasno..Pa napravila sam vecinu koda...Jel mi mozes pomoc konkretno?Sto nije u redu s ovim boldanim u mom kodu?

E-mail:
Lozinka:
 
vrh stranice