|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
[C] Somma di n numeri...??
Ciao ragazzi, mi chiamo fabrizio ho 19 anni e sono uno studente di informatica all'università di Napoli Federico II.. e sono disperatoo!
![]() Lunedì prossimo ho una prova di intercorso e non so.. niente -.- Stavo svolgendo qualche esercizio a casa quando mi imbatto in questo: Scrivere un programma in C che sommi n numeri... ovvero se do' di input 5 la macchina mi fa 1+2+3+4+5... e ok qua ci siamo ![]() io ho scritto così: #include <stdio.h> #include <stdlib.h> /*dichiarazione della funzione sumnum*/ int sumnum (int somma, int n); main () { int n, i, risult, somma; printf ("Quanti numeri vuoi sommare tra loro?\n"); scanf ("%d", &n); risult= sumnum (n, somma); printf ("Il risultato e' pari a %d\n", risult); system ("pause"); } int sumnum (int somma, int n) { int i; somma=0; for (i=0; i<=n; i++) { somma = i+ somma; } return somma; } Il problema è che nella funzione, esterna al main, non c'è un valore definito di n e quindi il ciclo for è inutile!! come posso fare per comunicare alla funzione il valore inserito con lo scanf nel main? sono alle prime armi heeeelp! vi ringrazio molto :-) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 808
|
tanto per iniziare il fatto che chiami i parametri nello stesso modo delle variabili locali del main ma al contrario ti fa un casotto in testa che basta e avanza
poi non c'è motivo per cui passare come parametro somma visto che tanto poi verrà ritornato. come non c'è motivo e necessità di dichiarare una i dentro il main visto che il main non la usa mai così magari è più leggibile per te Codice:
#include <stdio.h> #include <stdlib.h> /*dichiarazione della funzione sumnum*/ int sumnum (int n); int main () { int n, risult; printf ("Quanti numeri vuoi sommare tra loro?\n"); scanf ("%d", &n); risult= sumnum (n); printf ("Il risultato e' pari a %d\n", risult); system ("pause"); } int sumnum (int n) { int i; int valoredaritornare=0; for (i=0; i<=n; i++) { valoredaritornare = i+ valoredaritornare; } return valoredaritornare; } inoltre la funzione main è meglio dichiararla SEMPRE int se hai dubbi chiedi pure |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 497
|
ci sono molte imprecisioni nel tuo codice
1) non devi passare somma come parametro int sum(int n) { int i, somma = 0; for(i = 1; i <= n; i++) somma = somma + i; return somma; } 2) non fare confusione tra i tipi: se n lo dichiari intero allora la scanf prenderà un intero(%i) non un double(%d) scanf("%i", &n) stesso discorso per la printf, se stampa un intero il parametro è %i non %d |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Dec 2008
Città: Napoli
Messaggi: 21
|
siete dei geniiiiiiiiiiiiiii
![]() quindi tralasciando la mia sintassi che è ancora pessima l'errore dell'algoritmo stava nell'aver dichiarato più parametri di quanti ne avessi bisogno...?? |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 808
|
Quote:
forse anche tu dovresti dare una occhiata al manuale... ![]() http://www.cplusplus.com/reference/c...dio/scanf.html |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Se devi sommare i primi n numeri interi tra di loro, puoi usare anche la formula di Gauss:
Codice:
somma = (n * (n + 1)) / 2; Codice:
somma = (100 * 101) / 2 = 10100 / 2 = 5050 ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Gauss aveva dimostrato ed usato questo suo primo teorema alle elementari, come risultato di una punizione (sommare i numeri da 1 a 100) che l'avrebbe tenuto impegnato per un'oretta. E che ha invece risolto in un paio di minuti e godendosi il resto del tempo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Sì, lo sapevo quest'aneddoto. Infatti mi sono sempre immaginato la faccia del prof che soddisfatto pensò "oooh, così me lo tolgo dalle scatole per un bel po'" e dopo pochi minuti lo vede già rispondere (e per di più correttamente)...
![]() Certo che Gauss aveva una mente fuori dal comune. ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 808
|
si era immaginato che fosse un esercizio improntato sull'imparare a codificare e non su quello che si implementava realmente. naturale che poi nella realtà la formula di gauss è molto meglio
![]() tanto per aggiungere alla nota una precisazione: i numeri da sommare erano fino a 1000, senza la formula farlo a mano era abbastanza complicato...ma quel bambino di dieci anni in quattro e quattr'otto capì come aggirare il problema. tar l'altro non è nemmeno difficile capire come abbia fatto ad arrivare alla soluzione. è l'area di un triangolo che ha come base il numero massimo che si deve sommare e come altezza il numero più uno. ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Poi aveva provato a sommare 99 con 2 e otteneva sempre 101, ma anche 98 e 3... etc. A quel punto si era chiesto quante volte dovesse ripetere queste operazioni, ed ha trovato il risultato.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 808
|
sì, beh sono due diverse dimostrazioni della medesima cosa, una con un metodo grafico e una con un metodo aritmetico
![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Aug 2007
Messaggi: 50
|
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Non esiste concorso a stampo logico/matematico senza almeno un esercizio che richieda la formula di Gauss!
__________________
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
d or i Signed decimal integer http://www.cplusplus.com/reference/c...dio/scanf.html d Decimal integer: Number optionally preceded with a + or - sign. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:43.