Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37

Discussione: [C] Pari o dispari

  1. #1

    [c] pari o dispari

    ciao a tutti..innanzitutto mi scuso per questa idiotissima domanda ma sono nuovo sia di linguaggio sia di questa parte di forum...

    1.come si fa con un IF a dire se un numero è pari o dispari?
    è sbagliato:


    if(num%2)
    printf("pari");
    else
    printf("dispari");

    ?
    il mio compilatore no mi riconosce l'operatore % modulo..help..

    2.e con un ciclo for stampare una sequenza di numeri pari nell'intervallo 1~99?

    grazie e vi prego non mandatemi a quel paese :P
    ALICE FIBRA 50M/20M Telecom is Now!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    codice:
      int x;
    
      for(x=1; x<100; x++)
        if(x & 1)
          printf("%d e' dispari\n", x);
        else
          printf("%d e' pari\n", x);
    Prendi spunto per il tuo problema ...

  3. #3
    grazie oregon, ma vorrei anche capirlo il programma...

    cosa vuol dire if(x & 1)
    ?
    ALICE FIBRA 50M/20M Telecom is Now!

  4. #4
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345
    Originariamente inviato da oregon
    codice:
      int x;
    
      for(x=1; x<100; x++)
        if(x & 1)
          printf("%d e' dispari\n", x);
        else
          printf("%d e' pari\n", x);
    Prendi spunto per il tuo problema ...
    Seeeee va beh, dai Che soluzioni vai a dargli?

    codice:
    if (n % 2)
       printf ("Dispari\n");
    else
       printf ("Pari\n");
    n % 2 = 1 sse n è dispari, quindi è il contrario di quello che faceva l'autore del thread

  5. #5
    Originariamente inviato da oregon
    codice:
      int x;
    
      for(x=1; x<100; x++)
        if(x & 1)
          printf("%d e' dispari\n", x);
        else
          printf("%d e' pari\n", x);
    Prendi spunto per il tuo problema ...
    Un pò macchinosa in effetti...
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Dò anche la mia versione

    codice:
    void pariDispari(int n){
        if(n == 0)
            printf("pari");
        else if(n == 1)
            printf("dispari");
        else pariDispari(n - 2);
    }

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da unomichisiada
    Un pò macchinosa in effetti...
    Macchinosa? E' più macchinoso fare una divisione e controllarne il resto rispetto al verificare semplicemente lo stato del bit di peso minore del valore di riferimento, che se non ho capito male è quanto fa la soluzione di oregon.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Originariamente inviato da alka
    Macchinosa? E' più macchinoso fare una divisione e controllarne il resto rispetto al verificare semplicemente lo stato del bit di peso minore del valore di riferimento, che se non ho capito male è quanto fa la soluzione di oregon.
    In realtà no

    codice:
    maiosyet@alcibiade:/tmp$ time ./divisione.bin > /dev/null
    
    real    0m38.154s
    user    0m37.553s
    sys     0m0.009s
    
    maiosyet@alcibiade:/tmp$ time ./oregon.bin > /dev/null
    
    real    0m38.646s
    user    0m38.037s
    sys     0m0.016s
    Calcolo dei primi 100 milioni di numeri pari/dispari.

    Comunque non ho mica capito cos'è che fa il codice di oregon, eh

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da IImalcom
    va beh, dai Che soluzioni vai a dargli?
    Perche' ? E' una tra le soluzioni classiche piu' efficienti ...

    Quindi? Che vuoi dire?

    Originariamente inviato da unomichisiada
    Un pò macchinosa in effetti...
    "Macchinosa" ...?

    Ovviamente non sono d'accordo ...

    In che senso una operazione logica AND tra bit e' piu' macchinosa del calcolo del resto di una divisione ?

    Capire o meno cio' che si scrive e' una cosa, dare indicazioni come quella tua, credo vadano "giustificate" ...


    Originariamente inviato da maiosyet_2
    In realtà no ...
    Come hai fatto quei benchmark e come si dovrebbero leggere ?

    Un AND tra bit è sicuramente meno "pesante" del calcolo del resto di una divisione. Ti ricordo che, per confrontare dei tempi di esecuzione bisogna tenere in considerazione il "codice generato" (quello in linguaggio macchina) nei due casi ...

    Codice che tu non hai mostrato ...


    Originariamente inviato da maiosyet_2
    Comunque non ho mica capito cos'è che fa il codice di oregon, eh
    Originariamente inviato da piccoloma
    cosa vuol dire if(x & 1)
    E' una semplice operazione di AND bit per bit tra il valore che vuoi testare e il valore 1. Come potrai facilmente immaginare, una operazione di AND di questo genere ha come risultato il valore del primo bit a destra (il bit meno significativo). In binario, quel bit indica se un valore intero e' dispari (il bit è a 1) o pari (il bit è a 0). Tutto qui. Se avete altri dubbi ... ne parliamo, ma e' un metodo semplicissimo e, dal punto di vista della CPU, molto piu' semplice del calcolo del resto della divisione per due.

    Saluti a tutti

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    si ma una divisione per due è sicuramente ottimizzata..bsata fare uno shift....non è una normale divisione

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.