Semplice programma in C

di il
8 risposte

Semplice programma in C

Dovrei fare un programma in C che chiede all'utente di inserire 5 numeri, poi stampa a video la quantità di numeri pari, dispari e quanti numeri sono maggiori del primo inserito. Riesco a fare la prima parte dove chiede i inserire i numeri, ma non so come fare per il resto.

8 Risposte

  • Re: Semplice programma in C

    Ciao, ti rispondo subito

    Allora per verificare se un numero sia pari o dispari basta procedere come segue;
    
    if( num % 2==0 )
    	contapari++;
    else
       contadispari++;
    
    Dove num è una variabile (che devi dichiarare) che rappresenta il numero mentre contapari e contadispari due contatori.
    Questa parte verifica se il resto della divisione è 0 (quindi il numero è pari) oppure no (quindi dispari)
    Riesci a continuare poi?
  • Re: Semplice programma in C

    python34 ha scritto:


    Ciao, ti rispondo subito

    Allora per verificare se un numero sia pari o dispari basta procedere come segue;
    
    if( num % 2==0 )
    	contapari++;
    else
       contadispari++;
    
    Dove num è una variabile (che devi dichiarare) che rappresenta il numero mentre contapari e contadispari due contatori.
    Questa parte verifica se il resto della divisione è 0 (quindi il numero è pari) oppure no (quindi dispari)
    Riesci a continuare poi?
    È possibile anche controllare l'ultimo bit di num per verificare se è pari o dispari. Usando l'operatore di bitwise & si può prelevare l'ultimo bit con
    
    num & 1
    
    infatti provando a convertire una manciata di numeri pari e dispari in binario si nota facilmente che i primi hanno come bit meno significato lo zero e i secondi l'uno. Per esempio, volendo verificare se 15 è pari o dispari si può fare l'AND tra 15 e 1 come segue
    
    1111  AND
    0001 =
    ------------
    0001
    
    Valutando l'ultimo bit del risultato si può concludere che 15 è dispari. Per una rapida e superficiale introduzione all'algebra di Boole si può vedere il link seguente: .

    Approfittando di quanto detto sopra si possono contare i numeri dispari così
    
    dispari = dispari + (num & 1)
    
    dal momento che NUM & 1 restituisce 1 quando num è dispari, 0 quando è pari.
    In seguito è possibile ottenere il conteggio dei numeri pari facendo NUMERI_LETTI - dispari.



    PS: la precedente versione del presente post non voleva essere una dimostrazione di sapere fare, ma una "spiegazione" per una soluzione alternativa. Le mie conoscenze in materia sono estramamente limitate e mi scuso se sono apparso arrogante. Per correttezza ho fornito una breve spiegazione di quanto scritto in precedenza, così da permettere OP, se vorrà, di vedere un altro modo di svolgere l'esercizio. Nella mia minuscola esperienza ho imparato molto dai suggerimenti altrui, soprattutto se contenevano nozioni da me non ancora affrontate(sono autodidatta).
  • Re: Semplice programma in C

    Caro loopunrolling scusa ma così non aiuti blue_ra1n !!!
    Suggerisco di suddividere il problema in sottoproblemi (funzioni):
    - inserimento dati
    - stampa a video dei dati
    - calcolo del numero di pari e dispari
    - calcolo del numero di elementi maggiori di un certo valore.
    Se il primo punto é ok bisogna stampare a video questi valori prima di affrontare gli altri punti.
  • Re: Semplice programma in C

    In effetti, è solo un modo per "dimostrare" di sapere scrivere del codice (per cui basta un minimo di esperienza), ma ad un giovane che sta iniziando adesso e che di tutto ha bisogno tranne di avventurarsi in ottimizzazioni e codici a lui ancora poco chiari, non può importare molto.

    Del resto, i compilatori moderni ottimizzano il codice da soli e molti "traducono" quel % 2 già in and con il primo bit.
  • Re: Semplice programma in C

    Molto semplice... basta porre questa condizione in un if
    if(Ninserito % 2 == 0)
  • Re: Semplice programma in C

    candaluar ha scritto:


    Caro loopunrolling scusa ma così non aiuti blue_ra1n !!!
    Suggerisco di suddividere il problema in sottoproblemi (funzioni):
    - inserimento dati
    - stampa a video dei dati
    - calcolo del numero di pari e dispari
    - calcolo del numero di elementi maggiori di un certo valore.
    Se il primo punto é ok bisogna stampare a video questi valori prima di affrontare gli altri punti.

    oregon ha scritto:


    In effetti, è solo un modo per "dimostrare" di sapere scrivere del codice (per cui basta un minimo di esperienza), ma ad un giovane che sta iniziando adesso e che di tutto ha bisogno tranne di avventurarsi in ottimizzazioni e codici a lui ancora poco chiari, non può importare molto.

    Del resto, i compilatori moderni ottimizzano il codice da soli e molti "traducono" quel % 2 già in and con il primo bit.
    loopunrolling ha semplicemente postato una soluzione alternativa e ben argomentata, spetterà poi a blue_ra1n stabilire se per lui è di aiuto o meno, nel frattempo ha comunque scoperto qualcosa di nuovo! senza contare che potrebbe essere utile per qualcun altro che legge il thread. Sia chiaro, non ho nulla contro candaluar & oregon ma davvero non capisco come non potrebbe essere d'aiuto la risposta di loopunrolling o cosa ci sia di sbagliato nel "dimostrare di saper scrivere del codice" condividendo così il proprio sapere con tutti gli altri :')
  • Re: Semplice programma in C

    Caro ariston077 io non ho niente contro loopunrolling e vedo che ha modificato il suo post con una descrizione ottima.
    Il punto é che il suo post originale non aiutava minimamente, anzi confondeva o forse anche sconfortava, il nostro amico blue_ra1n, il cui problema riguarda l'impostazione del programma più che la determinazione se un numero é pari o dispari.
  • Re: Semplice programma in C

    ariston077 ha scritto:


    non ho nulla contro candaluar & oregon ma davvero non capisco
    Invece loopunrolling ha perfettamente capito cosa intendevamo e ha, molto correttamente, integrato il suo intervento che adesso è costruttivo.

    Probabilmente ariston non hai ben compreso tu il senso del nostro intervento sul vecchio post di loopunrolling.
    Per capirci, avremmo potuto anche rispondere che bastava
    
    	num >>= 1; 
    	_asm adc dispari,0;
    
    senza aggiungere nulla. Sarebbe stato un altro modo, arricchiamo le conoscenze di chi comprende ma si confonde sicuramente l'OP.
    Tutto qui.
Devi accedere o registrarti per scrivere nel forum
8 risposte