infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: c a e n din Iunie 23, 2011, 03:29:56



Titlul: Initializare variabila
Scris de: c a e n din 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 :-k 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;
}


Titlul: Răspuns: Initializare variabila
Scris de: MciprianM din 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.


Titlul: Răspuns: Initializare variabila
Scris de: c a e n din 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 :)