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

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

A connection string u toj ado komponenti ima relativnu ili punu putanju? Ako je puna putanja onda se ona mora maknuti, a zatim tu punu putanju maknuti i tamo gdje se definira prijevod (potražiti i tamo connection string).

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

Putanja je bila relativna, ali izgleda da nesto nije stimalo sa njom u prijevodima. Nanovo sam definirao putanju do baze (relativnu, sve isto kao i prvi puta) i proradilo je :)

Hvala profesore ;)

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

Pozdrav! Bilo bi mi od velike pomoći kad bi mi netko riješio ovaj zadatak, puno hvala. :)

 

Napiši rekurzivnu funkciju koja računa n-ti član niza i rekurzivnu
funkciju koja računa zbroj članova do n-tog uključujući i njega. U
glavnom programu učitaj n pa ispiši n-ti član i zbroj n članova.

 

 

 

 

U pravilu ne daje se gotov kod, nego smjernice za riješiti zadatak.

Dakle, pošto se radi o rekurziji, ovdje bi bilo idealno primjeniti aritmetiku pokazivača.

 

int rek(int* niz, int n)
{
    if (n == 0) return *niz;
    rek((niz+1), n-1);
}

U funkciji rek koja ima parametre pokazivač na niz i n sa svakim pozivom pomičeno pokazivač i smanjujemo n, kad n dođe do 0, vraća se vrijednost niza na koju pokazuje pokazivač, a to je n.

Drugi pokušaj istim konceptom, sa funkcijom koja ima iste parametre. Kad dođe do n = 0 vrati 0, inače vrati vrijednost na trenutnom pokazivaču koju zbrajaš sa vrijednosti iznad koja je na sljedećem pokazivaču.

Dakle, sa vha stoga zbrajaš vrijednosti, kad se skine cijeli stog, imaš sumu niza do n.

 

 

Poruka je uređivana zadnji put pon 10.6.2013 14:52 (Floki).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ovako, napravio sam klasu Konto koja provjerava stanje na kontu, omogucuje transakcije, i izbacuje broj transakcija. Dosao sam do zadatka gdje trebam uvrsiti operator+. Treba uvrsiti 

k1 = k + 2 -- to dupla stanje na kontu, 

k2 = 7 + k -- povecava stanje na kontu 7 puta.

Upisao sam obicnu metodu int operator+ ...... u klasu Konto, i ona uspijeva ali do pola, tj moze uraditi ovo k + 2, ali ne moze 7 + k. Tu treba sada globalna funkcija koju ja nikako ne mogu da povezem.

Ja sam to zamislio kao:

Konto operator+ (varijabla stanjeKonta koju ne znam da povezem sa istom, i varijabla vrijednost (to je ova sedmica))

{

int neu;

neu = stanjeKonta * vrijednost;

return neu;

};

i to sam pisao van granica klase konto. Pokusao sam na razne nacine ali ne znam sta moram uraditi da dovedem ovu varijablu stanjeKonta i varijablu vrijednost u ovu funkciju, i da napravim ovo da funkcionise. Dobro bi mi dosla necija pomoc. Unaprijed sam zahvalan.

 

Loyal to the game
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

1. Moras deklarirat taj globalni operator kao friend operator od klase Konto.
Znaci unutar klase imas deklaraciju:
friend Konto operator+(const int value, const Konto& K);

2. Ne koristis varijablu stanjeKonta, vec objekt klase Konto. Kada si napravio operator+ unutar klase za koji kazes da radi pola posla, on ima implicitni parametar "this" koji je pokazivac na samog sebe. Dakle njegov tip je 'Konto', isto tako trebas i tu.

3. Valjda bi prvi argument trebala biti vrijednost, dakle ta sedmica, inace je isto kao da si implementirao kao operator klase.

4. Tvoj operator u definiciji kaze da vraca tip 'Konto', a unutar funkcije vracas int?? Obzirom na pitanje, sumnjam da imas definiran operator implicitne konverzije klase Konto u tip 'int', pa ti ovo nece ni kompajler dopustit.
Moras imat nesto tipa
Konto result;
result.stanjeKonta = (kombinacija ona dva)
return result;

5. "k + 2" i "7 + k" kreiraju privremeni objekt tipa Konto i pridruzuju ga (assign) objektu na lijevoj strani. Osim ako klasa nije trivijalna sto se tice privatnih varijabli, ovo znaci da bi trebao imat definiran assignment operator, dakle "Konto& operator=(const Konto&);"

6. friend funkcije se obicno nastoji izbjeci sto vise, jer stete enkapsulaciji. Ovdje to mozes ovako:
Konto operator+(const int stanje, const Konto& K)
{
  return K+stanje;
}

T.j., jednostavno pozoves normalni operator+ koji radi kad je objekt prvi argument. Podrazumijevam tu da je operacija komutativna.



Inace, 7+K definirat kao 7 puta vece stanje je dosta cudno. operator* mi se cini kao puno smisleniji...

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

1. Moras deklarirat taj globalni operator kao friend operator od klase Konto.
Znaci unutar klase imas deklaraciju:
friend Konto operator+(const int value, const Konto& K);

2. Ne koristis varijablu stanjeKonta, vec objekt klase Konto. Kada si napravio operator+ unutar klase za koji kazes da radi pola posla, on ima implicitni parametar "this" koji je pokazivac na samog sebe. Dakle njegov tip je 'Konto', isto tako trebas i tu.

3. Valjda bi prvi argument trebala biti vrijednost, dakle ta sedmica, inace je isto kao da si implementirao kao operator klase.

4. Tvoj operator u definiciji kaze da vraca tip 'Konto', a unutar funkcije vracas int?? Obzirom na pitanje, sumnjam da imas definiran operator implicitne konverzije klase Konto u tip 'int', pa ti ovo nece ni kompajler dopustit.
Moras imat nesto tipa
Konto result;
result.stanjeKonta = (kombinacija ona dva)
return result;

5. "k + 2" i "7 + k" kreiraju privremeni objekt tipa Konto i pridruzuju ga (assign) objektu na lijevoj strani. Osim ako klasa nije trivijalna sto se tice privatnih varijabli, ovo znaci da bi trebao imat definiran assignment operator, dakle "Konto& operator=(const Konto&);"

6. friend funkcije se obicno nastoji izbjeci sto vise, jer stete enkapsulaciji. Ovdje to mozes ovako:
Konto operator+(const int stanje, const Konto& K)
{
  return K+stanje;
}

T.j., jednostavno pozoves normalni operator+ koji radi kad je objekt prvi argument. Podrazumijevam tu da je operacija komutativna.



Inace, 7+K definirat kao 7 puta vece stanje je dosta cudno. operator* mi se cini kao puno smisleniji...

Uspio sam napokon. Ono sto me je kocilo je to sto nisam stavljao this objekat koji je imao tip konto kao i globalna funkcija, i sto nisam imao assignment operator. Hvala ti puno na pomoci i vremenu.

 

Loyal to the game
14 godina
offline
Programiranje u C++-u - pitanja i odgovori

#include<stdio.h>
#include<math.h>
main(){
int a=0,b=0,zbr=0,umn=0;
printf("\n Ucitaj broj:");
scanf("%d",&a);
if(a>b){
    zbr=a+b;
    printf("\n Njihov zbroj je %d:",zbr);
}
if(a<b){
    umn=a*b;
    printf("\n Njihov umnozak je %d:",umn);
}
    if(a=b)
       printf("\n Brojevi su jednaki:");
}
Zadatak je bio da učitam 2 broja a i b. Ako je a>b(izračunati i ispisati zbroj), ako je a<b(izračunati i ispisati umnožak),a ako je a=b(ispisati poruku: brojevi su jednaki). Problem je kad upišem npr. 1 1-> on mi izbaci,njihov zbroj je 1. A ako upišem 1 2,isto mi izbaci njihov zbroj je 1. Može pomoć? :)

R.I.P. EnlightenedPhoenix 24.6.2011. Steve Jobs: 1955 - 2011
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

scanf("%d%d",&a, &b);

 

Da nisi ovo zaboravio?

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

Program bi trebao prvo ispisati "kriptirane" podatke pa onda dekriptirane podatke problem je sto kad pokrenem program ne prikazu se "kriptirani" podaci? Koristim Codebloks na linuxu.

 

#include <iostream>
#include <string.h>
using namespace std;

int main() {

 string toEncrypt = "podaci";
 char keyToEncrypt = 's';

 for (int temp = 0; temp < toEncrypt.size(); temp++)
   toEncrypt[temp] ^= keyToEncrypt;
 cout << "nThe encrypted data = " << toEncrypt << endl;

 cout << endl;



 for (int temp = 0; temp < toEncrypt.size(); temp++)
   toEncrypt[temp] ^= keyToEncrypt;
 cout << "nThe unencrypted data = " << toEncrypt;

 return 0;

}

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

Program bi trebao prvo ispisati "kriptirane" podatke pa onda dekriptirane podatke problem je sto kad pokrenem program ne prikazu se "kriptirani" podaci? Koristim Codebloks na linuxu.

...

Tako je ispalo kod kriptiranja. Probaj staviti neki drugi kljuc, recimo broj 2.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Makavelii kaže...

Program bi trebao prvo ispisati "kriptirane" podatke pa onda dekriptirane podatke problem je sto kad pokrenem program ne prikazu se "kriptirani" podaci? Koristim Codebloks na linuxu.

To je zapravo za očekivati kada malo bolje razmisliš što se događa sa znakovima kada ih kriptiraš. Jednostavno - pretvaraš ih u nešto drugo, a to nešto ne mora biti unutar seta znakova koji se mogu ispisivati bez nekih trikova.

 

Recimo da imaš neku transformaciju kojom ASCII 65 (veliko slovo 'A') pretvoriš u ASCII 3 (si vidio taj znak? spada u kontrolne kodove i postoji dobra šansa da ga sustav jednostavno ne želi ispisati na ekran: http://man7.org/linux/man-pages/man4/console_codes.4.html).

 

http://www.ascii-code.com/

http://en.wikipedia.org/wiki/Code_page_437

 

Pogotovo ovaj zadnji link, slika na početku stranice. Već sam se zabrinuo da neću pronaći sliku kako DOS prikazuje pojedine kodove, ali Wikipedia to the rescue :) Pogledaj znakove u prvom redu, kladim se da to baš i nisi viđao uokolo.

 

Vidi recimo ovaj kod:

#include <stdio.h>

int main()
{
    putchar(0x07);
    return 0;
}

 

Ispisuje ASCII 0x07 (bell znak) na ekran. Što misliš što se dogodi? Moja WinXP konzola ga interpretira kao kratki beep (sukladno namijeni tog znaka) ali ga ne ispisuje na ekran. Ne da mi se sada paliti Win9x mašinu kako bih provjerio kako DOS reagira, znam sigurno da se i tamo čuje beep ali se ne mogu sjetiti pojavi li se i znak na ekranu. (kao klinac sam se znao zabavljati izvršavanjem 'type' komande na manjim binarnim datotekama, to su bili moji prvi pokušaji da zavirim u unutrašnjost nečega što inače nije namijenjeno ljudima za čitanje, tek sam kasnije otkrio dos tekst editor).

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put sri 19.6.2013 3:03 (rustweaver).
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hvala na detaljnom odgovoru.
Da postavim jos jedno pitanje..

Zanima me kako generirati slucajno odabran broj? Ne pseudorandom broj nego da je bas stvarno "random"?

I recimo da se novi broj mora generirati relativno cesto? Npr. svakih par sekundi?

Zanima me cisto kakve sve tehnike generiranja slucajno odabranih brojeva postoje a da nisu pseudo brojevi?

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

Hvala na detaljnom odgovoru.
Da postavim jos jedno pitanje..

Zanima me kako generirati slucajno odabran broj? Ne pseudorandom broj nego da je bas stvarno "random"?

I recimo da se novi broj mora generirati relativno cesto? Npr. svakih par sekundi?

Zanima me cisto kakve sve tehnike generiranja slucajno odabranih brojeva postoje a da nisu pseudo brojevi?

Nikako. Racunala su diskretni sustavi i kao takva ne mogu generirati stvarni random broj. Zato je jedna od bitnih stvari u kriptografiji napraviti cim bolji generator (pseudo)random brojeva.

Doduse, postoje nacini, ali ne vjerujem da ti se isplate. Potrebna ti je cim veca entropija (mjera za kaos, ajmo ju tako nazvati). Dakle, izvori ti mogu biti radioaktivni poluraspad, toplinski sum, nekakav elektromagnetski sum, akusticni sum (recimo buka ulice) i sl.

 

Doduse, na Linuxu (tj. *nix sustavima) mozes koristiti i /dev/random koji skuplja sum "okolisa", tj. klikove misa, tipkanje... Poprilicno je dobar za vecinu kriptografskih potreba, ali ne za dugorocne.

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

Imam problem, ovaj kod:

#include <iostream>

using namespace std;

 

int main(){

   char a,b,c;

cout<<"Vodic za izbor Cherry MX prekidaca mehanicke tipkovnice"<<endl;

cout<<"Na pitanja molimo odgovorite s D za Da i N za Ne."<<endl;

cout<<endl;

cout<<"Volite li cujan klik mehanicke tipkovnice?"<<endl;

cin>>a;

cout<<endl;

if (a=='D' || a=='d'){

cout<<"Imate li snazne prste?"<<endl;

cin>>b;

cout<<endl;

if (b=='D' || b=='d'){

cout<<"Za Vas je Cherry MX green."<<endl;

} else {cout<<"Za Vas je Cherry MX Blue."<<endl;}

} else {

cout<<"Volite li taktilni osjet?"<<endl;

cin>>b;

cout<<endl;

if (b=='D' || b=='d'){

cout<<"Za Vas je Cherry MX Brown."<<endl;

} else 

{

cout<<"Imate li snazne prste?"<<endl;

cin>>c;

cout<<endl;

if (c=='D' || c=='d'){

cout<<"Za Vas je Cherry MX Black."<<endl;

} else {cout<<"Za Vas je Cherry MX Red."<<endl;}

}

}

cout<<endl;

cout<<"Jeste li zadovoljni vodicem?"<<endl;

cin>>c;

   return 0;

}

 

U VS2008 kompajliram i sve, program radi bez problema, no nikako ga ne mogu natjerati da radi na nekom drugom racunalu.

Dev-C++ ga kao kompajlira i sve ok, no ne želi ga pokrenuti, kada treba kaže do source nije kompajliran.

 

Kako da to čudo natjeram da exe radi i na drugim kompovima? Hvala.

Twitter: @191x7
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav, da li bi mi netko mogao napisati funkciju koja množi sve proste brojeve između a i b?
Ako nekome nije problem, bio bih zahvalan! 

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 2 hvala 0
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Slash 666 kaže...

Pozdrav, da li bi mi netko mogao napisati funkciju koja množi sve proste brojeve između a i b?
Ako nekome nije problem, bio bih zahvalan! 

Malo tko će ti to od nule ovako rješiti. Barem probaj nešto da ljudi vide da ti je stalo pa će ti pomoći ako si zapeo s nečim.

 

EDIT: Jesi siguran da ih baš treba množiti? Pitam zato jer bi za iole veći raspon a i b taj umnožak mogao lako overflowati unsigned (kad se sjetim faktorijela lol). Nema veze, imamo u C++-u unsigned long long, njega nećeš tako lako overflowati {#}

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 25.6.2013 18:54 (pr0n_addict).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Rješio sam zadatak koristeći samo funkciju za prost, i množeći ga unutar main-a.

 

Problem je što ne znam kako da ubacim ovaj dio gdje se dobiva umnožak u funkciju.
I vidim da vi koristite nekakve naprednije varijable i funkcije, ništa od toga nisam učio.

Evo i koda.

#include <stdio.h> 

#include <stdlib.h>

int prost(int n)

{

int i;

if(n==1) return 0;

for(i=2;i<n;i++) if(n%i==0) return 0;

return 1;

}

int main(int argc, char *argv[]) 

{

int a,b,j,i,umn;

scanf("%i",&a);

scanf("%i",&b);

umn=1;

for(i=a;i<=b;i++)

if(prost(i)==1) umn=umn*i;

}

 

printf("%i\n",umn);

system("PAUSE"); 

return 0; 

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

I ovo je što sam probavao u funkciji dobiti ali ne radi nikako.

Editirao bi post ali ne mogu ništa ubaciti ispod ovog koda, valjda je do browsera greška. Sorry na duplom.

#include <stdio.h> 

#include <stdlib.h>

int prost_umn(int n, int m)

{

 

int j;

int umn=1;

 

for(j=n;j<m;j++)

 

{

 

int i;

if(j==1) umn=umn;

 

for(i=2;i<j;i++) 

{

if(j%i==0) umn=umn;

else umn=umn*i;

}

 

return umn;

}

 

}

 

int main(int argc, char *argv[]) 

 

 

{

int a,b,j,i,umn;

scanf("%i",&a);

scanf("%i",&b);

umn=1;

 

printf("%i\n",prost_umn(a,b));

 

return 0; 

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
13 godina
offline
Programiranje u C++-u - pitanja i odgovori

Probaj indentirati kod, ovako je gotovo posve nečitljiv.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 25.6.2013 19:58 (pr0n_addict).
Moj PC  
1 0 hvala 0
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Čim ga uvučem baca mi onaj warning za kod, i moram maknuti svo oblikovanje :/

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

u funkciji stavi dvostruku petlju

 

vanjska ide u rasponu od min do max

 

unutarnja ispituje za svaki je li prost - ako jest množi

 

funkcija ima ovaj potpis

 

long long prostRaspon(int min, int max)

 

za ispitati da li je broj prost dosta ti je ovaj raspon

 

for(int i = 2; i <=  sqrt(broj); i++) ili for(int i = 2; i * i <= broj; i++) - kako ti draže

Poruka je uređivana zadnji put uto 25.6.2013 20:54 (Floki).
 
1 0 hvala 1
13 godina
offline
Programiranje u C++-u - pitanja i odgovori

Možda ima nekih gluposti, ali perem ruke jer sam i osobno početnik {#}

Btw, rezultati su ogrooomni kako sam očekivao.

 

    #include <iostream>
    #include <cmath>
     
    using namespace std;
     
    unsigned long long prime_number_product(unsigned lower, unsigned upper);
     
    int main()
    {
       unsigned a, b;
       cout << "Unesite a i b: ";
       cin >> a >> b;
       cout << "Umnozak prostih brojeva izmedu " << a << " i " << b << " je: " << prime_number_product(a, b) << endl;
    }
     
    unsigned long long prime_number_product(unsigned lower, unsigned upper)
    {
       int i, j;
       unsigned long long product = 1;
       for(i = lower < 2 ? 2 : lower; i <= upper; ++i)
       {
         double square_root = sqrt(static_cast<double>(i)); // naravno da tu moze biti i obicni c-ovski cast, ali ovo je ipak c++
         for(j = 2; j <= square_root; ++j)
         {
           if(i % j == 0)
             break;
         }
         if(j > square_root)
         {
           //cout << i << endl; ispis za provjeru ispravnosti
           product *= i;
         }
       }
       return product == 1 ? 0 : product;
    }
0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 25.6.2013 21:15 (pr0n_addict).
Moj PC  
2 0 hvala 1
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Dobro si ti to. Evo jedne varijacije na tvoj kod, pošto si koristio break, ja iz zafrkancije stavio i continue

 

 

#include <iostream>
#include <cmath>
 
using namespace std;
 
unsigned long long prime_number_product(unsigned lower, unsigned upper);
 
int main()
{
   unsigned a, b;
   cout << "Unesite a i b: ";
   cin >> a >> b;
   cout << "Umnozak prostih brojeva izmedu " << a << " i " << b << " je: " << prime_number_product(a, b) << endl;
}
 
unsigned long long prime_number_product(unsigned lower, unsigned upper)
{
   int i, j;
   unsigned long long product = 1;
   for(i = lower < 2 ? 2 : lower; i <= upper; ++i)
   {
     double square_root = sqrt(static_cast<double>(i)); // naravno da tu moze biti i obicni c-ovski cast, ali ovo je ipak c++
     for(j = 2; j <= square_root; ++j)
     {
       if(i % j == 0)
         break;
     }
     if(j <= square_root) continue;
       //cout << i << endl; ispis za provjeru ispravnosti
       product *= i;
   }
   return product == 1 ? 0 : product;
}

 

Poruka je uređivana zadnji put uto 25.6.2013 21:42 (Floki).
 
1 0 hvala 1
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hvala vam puno dečki ali ovo unsigned i long long i break i continue opće nismo učili.

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Onda stavi zastavicu iliti kontrolnu varijablu, koja mijenja vrijednost ako broj nije prim, ali tipove brojeva si morao učiti kad radiš funkcije, čak i prekide petji kad radiš petlje.

 

#include <iostream>
#include <cmath>
 
using namespace std;
 
unsigned long long prime_number_product(unsigned lower, unsigned upper);
 
int main()
{
   unsigned a, b;
   cout << "Unesite a i b: ";
   cin >> a >> b;
   cout << "Umnozak prostih brojeva izmedu " << a << " i " << b << " je: " << prime_number_product(a, b) << endl;
}
 
unsigned long long prime_number_product(unsigned lower, unsigned upper)
{
   int i, j, kontrola;
   unsigned long long product = 1;
   for(i = lower < 2 ? 2 : lower; i <= upper; ++i)
   {
      kontrola = 0;
     double square_root = sqrt(static_cast<double>(i)); // naravno da tu moze biti i obicni c-ovski cast, ali ovo je ipak c++
     for(j = 2; j <= square_root; ++j)
     {
       if(i % j == 0)
         kontrola = 1;
        
     }
     if(kontrola == 0)
       product *= i;
   }
   return product == 1 ? 0 : product;
}

 

Poruka je uređivana zadnji put uto 25.6.2013 21:55 (Floki).
 
0 0 hvala 0
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Slash 666 kaže...

Hvala vam puno dečki ali ovo unsigned i long long i break i continue opće nismo učili.

Nema na čemu, inače bilo bi dobro izbjegavati printf i scanf jer su to C-ovski I/O mehanizmi - radije koristi cin i cout.

Osim ako to još niste radili, onda u redu mada mi je to čudno.

Posebna su gnjavaža ti format specifieri, ajd' ga ti sad traži za unsigned long long ili neki deseti primitvni tip - hau jes nou {#}

Isto tako, koristiš C-ove headere što je također uglavnom nepotrebno u ovom kontekstu (ovi tvoji bi bili cstdio i cstdlib, ali imaš iostream za I/O potrebe).

Btw, što će ti command-line argumenti (argc, argv) u ovom zadatku?

 

Unsigned ti samo onemogućava da koristiš negativne brojeve, time dobiješ još jedan bit za samu vrijednost broja (onaj biti koji se inače koristi za predznak). To ti je onda duplo od signed tipa (npr. za int - od 0 do 2^32 - 1 je unsigned, a signed je -2^31 do 2^31 - 1).

Long long ti garantira osam bajta za pohranu broja, a to je prilično puno.

Break i continue je samo kontrola iteriranja petlje - break bezuvjetno izlazi iz petlje dok continue ulazi u sljedeću iteraciju petlje.

 

EDIT: Kada bolje razmislim, mogao si slobodno pitanje postaviti u temi o programiranju u C-u jer ovaj tvoj kod je čisti C.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 25.6.2013 22:20 (pr0n_addict).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Evo uspio sam uz pomoć prijatelja.

 #include <stdio.h> 

#include <stdlib.h>

int f(int a, int b)

{   

   int suma=1,i,ok;

 

   for (a; a <= b; a++)

   {

     ok=1;

 

     for (i = 2; i < a; i++)

     {

     if (a % i == 0 && i != a)ok=0;

     }

     if (ok==1) suma*=a;

 

   }

   return suma;

}

 

int main(int argc, char *argv[])

{

  int a,b;

  scanf("%i",&a);

  scanf("%i",&b);

  printf("%i \n",f(a,b));

 

  return 0;

}

Got a gun, in fact I've got two, that's okay man, cause I love God
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

čemu taj uvjet da je i != a - kad u petlji i mora biti manji od a

 

nisi slušao

 

for(i = 2; i * i <= a; i++)

   if(a % i == 0) ok = 0;

 

to je dovoljno

Poruka je uređivana zadnji put uto 25.6.2013 22:30 (Floki).
 
0 0 hvala 1
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Moj problem nitko ništa?

Twitter: @191x7
Moj PC  
0 0 hvala 0
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

Moj problem nitko ništa?

Kad radim samo u VS pa ne mogu provjeriti o čemu se radi - nije da te ignoriram.

E-mail:
Lozinka:
 
vrh stranice