Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Initializare variabila  (Citit de 1117 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« : Iunie 23, 2011, 03:29:56 »

Am doua programe (1 si 2) care determina daca un numar N e prim. Primul functioneaza, al doilea scrie "DA" chiar daca N e par. Singura diferenta, dupa cum puteti observa, e ca al doilea are initializat OK-ul in momentul in care e declarat. Eu nu prea pot sa-mi dau seama de ce nu este modificata pe parcurs, totusi Think Ma puteti ajuta? Multumesc!

Cod:
#include <stdio.h>
#include <stdbool.h>

int main(void) {

    unsigned long long n, i;
    bool ok;

    (void) scanf("%llu", &n);

    if(n % 2) {
        ok = 1;
        for(i = 3; i * i <= n && ok; i += 2) if(n % i == 0) ok = 0;
    } else ok = (n == 2);

    if(ok) printf("DA\n");
    else printf("NU\n");

    return 0;
}
Cod:
#include <stdio.h>
#include <stdbool.h>

int main(void) {

    unsigned long long n, i;
    bool ok = 1;

    (void) scanf("%llu", &n);

    if(n % 2)
        for(i = 3; i * i <= n && ok; i += 2) if(n % i == 0) ok = 0;
    else ok = (n == 2);

    if(ok) printf("DA\n");
    else printf("NU\n");

    return 0;
}
« Ultima modificare: Iunie 23, 2011, 03:36:51 de către C.A.EN » Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #1 : Iunie 23, 2011, 09:32:15 »

Pe scurt(am schimbat doar indentarea):
Cod:
#include <stdio.h>
#include <stdbool.h>

int main(void) {

    unsigned long long n, i;
    bool ok = 1;

    (void) scanf("%llu", &n);

    if(n % 2)
        for(i = 3; i * i <= n && ok; i += 2)
              if(n % i == 0)
                 ok = 0;
              else ok = (n == 2);

    if(ok) printf("DA\n");
    else printf("NU\n");

    return 0;
}
P.S.: Te ajuta sa iti setezi compilatorul sa iti dea toate warning-urile. Cand am compilat codul tau, am primit un warning care imi zicea sa pun braces "{}" ca sa evit un ambiguous else.
« Ultima modificare: Iunie 23, 2011, 09:38:12 de către Marginean Ninu Ciprian » Memorat
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #2 : Iunie 23, 2011, 10:18:42 »

Ah, merci. Era cam tarziu si chiar nu mi-am dat seama de asta. Referitor la warning-uri, compilez cu
Cod:
gcc sursa.c -o sursa -Wall -O2
si nu am primit nimic legat de paranteze (GCC 4.2). Inainte foloseam si splint (acum nu il mai am si mi-a fost lene sa-l instalez, dar cred ca il voi pune din nou).

Multumesc mult Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines