[ Krejmer @ 17.05.2010. 21:57 ] @
Imam problema sa ovime,zadatak glasi da se štampaju svi savršeni brojevi od 1 do n.

Ako može neko da objasni gdje sam pogriješio.
Code:
#include <stdio.h>
#include <iostream>
using namespace std;
bool savrsen(int x)
{
     int i,zb;
     for (i=1;i<=x/2;i++)
     {
       if (x % i==0) zb+=i;
     }
     if (zb==x) return true;
     else return false;
}
int main()
{
    int broj,i,n;
    bool Yes;
    printf("Savrseni brojevi do:\n");
    printf("n=");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
        broj=i;
        Yes=savrsen(broj);
        if (Yes) printf("\n%d",broj);
    }
    system("pause");
    return 0;
}    


Nadam se da sam pogodio podforum.
I da,ne zamjerajte Pascal programeru... :=)
[ Mihajlo Cvetanović @ 17.05.2010. 22:22 ] @
Moraš da inicijalizuješ zb na 0 pre korišćenja.
[ Krejmer @ 18.05.2010. 14:08 ] @
Jaoj,vidi ga radi.Hvala puno.


Ajde samo još nešto. ;)

U pitanju su stringovi.



Code:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char S[255];
    scanf("%s",S);
    if (S=="ABV") printf("ABV\n");
    else printf("Nesto tamo bezveze...\n");
    system("pause");
    return 0;
}



I uvijek on meni izbaci tamo nešto bezveze(ali bukvalno :) ).

[ djoka_l @ 18.05.2010. 14:41 ] @
if (S=="ABV")
je uvek FALSE jer ti ovde pitaš da li je pokazivač na string jednak drugom pokazivaču na statički definisani string. Da bi poredio slova koristi funkciju, na primer strcmp
[ X Files @ 18.05.2010. 14:47 ] @
[ EDIT: pretekao me djoka_l ]


Mešaš C i C++ ;)

U C maniru:
Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char S[255];
    scanf("%s",&S);
    if ( strcmp(S, "ABV") == 0 ) printf("ABV\n");
    else printf("Nesto tamo bezveze...\n");
    system("pause");
    return 0;
}

Ako zelis case-insensitive, koristi "stricmp" umesto "strcmp". Obrati paznju i na ampersand ispred S kod scanf.


U C++ maniru postoji vise nacina, recimo:
Code:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string S;
    cin >> S;
    if (S=="ABV") cout << "ABV" << endl;
    else cout << "Nesto tamo bezveze..." << endl;
    system("pause");
    return 0;
}

Dakle, nije <string.h>, nego <string>.

Ukratko, kada koristis niz char-ova, uporedjivanje vrsis funkcijom, kao sto je opisano. Uporedjivanje dvostrukim znakom jednakosti nije moguce jer zapravo uporedjujes pointere. Kod C++ string tipa to ipak mozes jer se radi o sasvim drugom mehanizmu.

[ Krejmer @ 18.05.2010. 14:51 ] @
Kao što sam naslov kaže... ;)

Još jednom zahvaljujem.

To je ovako,svježe iskompajlirano.

Code:
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char S[255];
    int s;
    scanf("%s",S);
    s=strcmp(S,"ABV");
    if (s==0) printf("\nABV\n");
    else printf("Nesto tamo bezveze...\n");
    system("pause");
    return 0;
}
[ djoka_l @ 18.05.2010. 14:58 ] @
Opet ne valja.

U scanf treba da se stavi &S, a ne S, kao što ti je X Files već napisao...
#include <iostream>
ne treba jer si ti napisao C program, a ne C++. Umesto njega stavi <string.h> i odluči da li ćeš da pišeš u C-u ili C++
[ Krejmer @ 18.05.2010. 15:01 ] @
Radi program?

Mislim,ako je to neki red da se stavlja &S,negdje sam pročitao da nema potrebe,mada nema veze,ovako ću odsada &S iz prve ruke ;) .


A za drugi dio,onda nemam system("pause");

Pa trenutno mešam oba,tako da mi je svejedno.
[ the_tosic @ 18.05.2010. 15:04 ] @
U scanf funkcijama parametar je adresa promenjive. A adresa promenjive se dobija sa &.
Zato ti je bolje da koristis cout i cin jer su njima parametri promenjive.
[ X Files @ 18.05.2010. 15:08 ] @
Zapravo, u pravu si za ampersand (&). Kada se radi o nizovima bilo koje vrste, oni su odmah reprezentovani kao pointeri, tako da ne mora ampersand. Ipak, ja ga uvek stavljam.


system("pause") se nalazi u "stdlib.h", a ako se i nasao u <iostream>, to je zato sto je header ukljucen iz samog <iostream>-a, valjda :).
[ Krejmer @ 18.05.2010. 15:10 ] @
E ljudi hvala,šta da kažem,tražio sam samo da mi ispravite kod,a vi maltene održali jedan školski čas. :D


Odsad znači #include <stdlib.h> .
[ karas @ 19.05.2010. 08:13 ] @
U C++ je pozeljno da C zaglavlja ubacujes sa
Code:

#include <cstdlib>

potpunije objasnjenje na http://www.parashift.com/c++-f...mixing-c-and-cpp.html#faq-32.2