• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Esercizio di C #2 - Media aritmetica fra due numeri

Ignazio96

Utente Guru
Autore del topic
User Legend
9 Marzo 2008
10.985
155
Miglior risposta
0
ESERCIZIO PRECEDENTE


Benvenuti a questo nuovo esercizio di C!
Oggi affronteremo un altro problema di livello matematico , l'ultima volta abbiamo visto come poter fare una semplice somma fra due numeri dettati dall'utente da tastiera.
Il lavoro si era presentato abbastanza facile in quanto C ci fornisce l'operatore + per fare la somma aritmetica.
Quest'oggi ci destreggeremo con un problema relativo alla realizzazione della media aritmetica in C.
Andiamo all'esercizio!

ESERCIZIO #2 - MEDIA ARITMETICA TRA DUE NUMERI

Realizzare un programma che rilevi da tastiera due numeri interi e poi proceda a fare la media aritmetica di quest'ultimi.


SOLUZIONE


Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Analizziamo dunque il codice. Si parte con i classici header files ( thx @System32 :emoji_relieved: ) stdlib.h ed stdio.h .
Come nell'esercizio precedente si chiedono poi i due valori da memorizzare stampando a video con printf e registrando i valori da tastiera con scanf.


Qui viene la parte nuova , le librerie che abbiamo richiamato non ci permettono di fare la media aritmetica con una sola funzione ed anche se ce lo permettessero andiamo comunque ad analizzare il problema a fondo , scoprendo cosa in realtà è questa media aritmetica.

La media aritmetica è uguale alla somma dei valori da analizzare sul numero di valori analizzati
, procediamo quindi con sommare le variabili a + b e subito dopo li dividiamo per due , in quanto sono due i valori richiesti.

Stampiamo poi il risultato ed il gioco è fatto.

Alla prossima! ^^
 
A me e System piace rompere le scatole sulle piccolezze quindi ecco a te:
Stdlib.h non è necessario, in quanto le uniche funzioni che usi sono printf() e scanf(), che si trovano in stdio.h.
Inoltre, un errore più che altro di concetto: la divisione potrebbe non restituire un numero intero, quindi conviene dichiarare la variabile d come float o double.
Infine, giusto per essere pignoli al massimo, non dare i nomi delle variabili "a caso", perché finché ce ne sono solo quattro riesci a ricordarti cosa contengono, ma se le cose diventano più difficili è bene dare dei nomi seri alle variabili.

Perdonami per la pignoleria. :emoji_relieved:
 
Qui vale lo stesso discorso per lo scorso esercizio, la media si può fare scrivendo la funzione printf diversamente :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Qui viene la parte nuova , le librerie che abbiamo richiamato

Allora sei cretino :soso:

Stdlib.h non è necessario, in quanto le uniche funzioni che usi sono printf() e scanf(), che si trovano in stdio.h.
Inoltre, un errore più che altro di concetto: la divisione potrebbe non restituire un numero intero, quindi conviene dichiarare la variabile d come float o double.
Infine, giusto per essere pignoli al massimo, non dare i nomi delle variabili "a caso", perché finché ce ne sono solo quattro riesci a ricordarti cosa contengono, ma se le cose diventano più difficili è bene dare dei nomi seri alle variabili.

Perdonami per la pignoleria. :emoji_relieved:

Bravo pisellino :soso:

PS: C'è da aggiungere che, oltre a quanto detto da Dvdrigato, l'utente potrebbe immettere un numero con la virgola e avendo dichiarato i numeri di input come int il programma crasherà, per questo è anche più corretto utilizzare float ( floating point, ovvero numero a virgola mobile ).
 
Ultima modifica:
  • Like
Reactions: 1 person
A me e System piace rompere le scatole sulle piccolezze quindi ecco a te:
Stdlib.h non è necessario, in quanto le uniche funzioni che usi sono printf() e scanf(), che si trovano in stdio.h.
Inoltre, un errore più che altro di concetto: la divisione potrebbe non restituire un numero intero, quindi conviene dichiarare la variabile d come float o double.
Infine, giusto per essere pignoli al massimo, non dare i nomi delle variabili "a caso", perché finché ce ne sono solo quattro riesci a ricordarti cosa contengono, ma se le cose diventano più difficili è bene dare dei nomi seri alle variabili.

Perdonami per la pignoleria. :emoji_relieved:

Qui vale lo stesso discorso per lo scorso esercizio, la media si può fare scrivendo la funzione printf diversamente :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!



Allora sei cretino :soso:



Bravo pisellino :soso:

PS: C'è da aggiungere che, oltre a quanto detto da Dvdrigato, l'utente potrebbe immettere un numero con la virgola e avendo dichiarato i numeri di input come int il programma crasherà, per questo è anche più corretto utilizzare float ( floating point, ovvero numero a virgola mobile ).

Grazie mille per le correzioni :emoji_relieved:

Riguardo il ' allora sei cretino ' , ho capito che sono header files, ma con questi header files avremo pur richiamato le librerie in qualche modo no? Quello intendo , certe operazioni sono situate nelle librerie :shock:
 
Riguardo il ' allora sei cretino ' , ho capito che sono header files, ma con questi header files avremo pur richiamato le librerie in qualche modo no? Quello intendo , certe operazioni sono situate nelle librerie :shock:

Sì che hai richiamato le librerie, ma non si chiamano stdio.dll o stdlib.dll
 
Sì che hai richiamato le librerie, ma non si chiamano stdio.dll o stdlib.dll

No ... non si "richiama" (che vuol dire richiama?) nessuna libreria ... hai dimenticato i nostri discorsi System?

I file include servono soltanto per indicare la corretta "firma" delle funzioni (tipo e numero di argomenti e tipo di valore restituito). Non servono ad altro. E questo avviene durante la "fase di compilazione".

Solo durante la fase seguente (il linking) intervengono le librerie, che possono essere collegate dinamicamente o staticamente, ma questa è un'altra storia.
 
No ... non si "richiama" (che vuol dire richiama?) nessuna libreria ... hai dimenticato i nostri discorsi System?

I file include servono soltanto per indicare la corretta "firma" delle funzioni (tipo e numero di argomenti e tipo di valore restituito). Non servono ad altro. E questo avviene durante la "fase di compilazione".

Solo durante la fase seguente (il linking) intervengono le librerie, che possono essere collegate dinamicamente o staticamente, ma questa è un'altra storia.

Ehy quanto tempo è passato...mi mancano i nostri discorsi su msn...quando ancora si utilizzava. Comunque no non ho dimenticato, intendevo dire che le librerie entreranno in gioco avendo incluso file header dove, come hai scritto, sono contenuti i prototipi delle funzioni. Le librerie sicuramente entrano in gioco, ma solo quando avviene il collegamento tra prototipi di funzioni e le librerie in cui sono contenute le vere e proprie funzioni, in fase di linking per l'appunto.
 
@Ignazio96
Ciao volevo correggertelo nel caso qualcuno usasse il Dev-C++
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

1) Evita di usare le variabili globali a meno che necessarie;
2) Nel printf se metti &d, ti stamperà l'indirizzo a cui punta la variabile e non il valore in esso contenuto;
3) Al posto di usare c e d, utilizzando solo c potevi fare: c = ( a + b ) / 2;
4) La media solitamente può avere dei valori dopo la virgola, quindi ti converrebbe usare una variabile di tipo float per contenerla, e quindi fare:
float c;
c = ( (float)a + (float)b ) / 2; // Non ricordo se mettendo un singolo casting davanti alla somma funzioni uguale.
printf("La media e': %.2f", c); //Solitamente non prende caratteri con gli accenti, il %.2f indica che voglio stampate solo due cifre dopo la virgola

@habbo9898
 
@habbo9898 vedi che come detto già da rikku è sconsigliato usare le variabili globali, si usano solo quando è realmente necessario e questo non è il caso. Inoltre il codice funziona tranquillamente anche su dev c++ dato che il compilatore (MinGW) sempre quello è .
 
@TBH
Ovvio che funziona ù_ù comunque volevo scriverti che ho solo spostato alcune cose che ha messo lui le ho messe io ordinate

- - - Aggiornato - - -
@TBH
anzi ti dirò di più quello che ha scritto lui a me non sembra tanto diverso dal mio
 
@Ignazio96
Ciao volevo correggertelo nel caso qualcuno usasse il Dev-C++
quà scrivi una cosa...
@TBH
Ovvio che funziona ù_ù comunque volevo scriverti che ho solo spostato alcune cose che ha messo lui le ho messe io ordinate
e quà ti contraddici da solo ? :emoji_relieved: cosa avresti messo in maniera ordinata?


come detto già sopra, il codice che hai postato mostra un 'aspetto negativo ,cioè l'uso di variabili globali non necessarie , tra l'altro te l'ha scritto anche Rikku e tu hai riproposto codice con delle variabili globali.
 
@habbo9898 tra l'altro hai anche usato nel printf la e accentata , questo carattere non è riconosciuto dallo standard di base del printf è c'è bisogno di usare un carattere di escape per indicare che è ASCII
 
Su Visual Studio questo problema non c'è, dipende dall'IDE che si sta usando.

No, non dipende dall'IDE (ci mancherebbe), anche se creato con VS il programma mostrerebbe caratteri non corretti.

Questo perché la Console usa un character set Oem e non Ansi.

Windows mette a disposizione un'apposita funzione, la AnsiToOem

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
@TBH
infatti ho sbagliato a scrivere quella risposta nel "ti correggo" comunque qual è l'aspetto negativo delle variabili globali?
P.S.
Ciò che ho scritto io non mi sembra tanto diverso da quello che ha scritto ingazio96 cmq vbb

- - - Aggiornato - - -
@Ignazio96 sì l'ho notato questo errore quando viene compilato, perciò io ci scriverei anche una semplice "e"