|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Programma in C
Ciao a tutti,
sono alle prime armi con la programmazzione in C. Devo fare un esercizio che compili e vada perfettamente.. Il testo dice: chiedere all' utente (al massimo) 13 voti che ha registrato in quest'anno accademico, e di calcolarne la media, dire quale fra i voti è il massimo e quale il minimo. Tenendo presente che abbaimo fatto solo cicli e procedure ricorsive, avete qualche idea da suggerirmi? ciao e grazie
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Codice:
#include <stdio.h> #define NMAX 13 /*numero massimo dei voti*/ #define VMAX 10.0 /*voto massimo*/ int main() { int n, i; float somma, max, min, voto; do { printf("\nNumero dei voti da inserire : "); scanf("%d",&n); if(n > NMAX || n < 1) printf("Inserire un numero compreso fra 1 e %d\n", NMAX); } while(n > NMAX || n < 1); somma = 0.0; max = 0.0; min = VMAX+1.0; printf("\n"); for(i = 0; i < n; i++) { do { printf("Voto numero %d : ", i+1); scanf("%f",&voto); if(voto > VMAX || voto < 0.0) printf("Inserire un voto compreso fra 1 e %.2f\n", VMAX); } while(voto > VMAX || voto < 0.0); if(voto > max) max = voto; if(voto < min) min = voto; somma += voto; } printf("\n\nInseriti %d voti" "\nLa media è %.2f" "\nIl voto minimo è %.2f" "\nIl voto massimo è %.2f\n", n, somma/n, min, max); /*le due istruzioni che seguono servono solo per permettere di leggere l'output del programma*/ printf("\n\nPremere un tasto per terminare..."); getch(); return 0; } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Cacchio,
ma lo avevi gi afatto o ti sei messo apposta??? grassie mille ! Ho preso un po paura...cakkio non ci arrivero mai io!!
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vabbè sono 2 minuti
![]() Dai dai...impegnati... Se c'è qualcosa che non capisci dimmi pure... Si poteva emttere anche qualche funzioncina... Ad esempio quella che legge il voto...ma è solo una questione di leggibilità in questo caso.... |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
Avevo pensato pure io di chiedere quanti voti sono stati registrati per creare un ciclo in modo da uscinre quando il numero di voti fosse stato quello dichiarato ma non riuscivo ad "accumulare" i vari voti perche con un semplice ciclo si sarebbero sovrascritti prima che li potessi analizzare calcolandone la meia il max e il min...forse mi spiego male...anzi sicuro... cmq grazie ancora della disponibilità.... ah i voti doveveno andare da minimo 18 a 30 perche sono voti universitari...ma no problema...almeno a modificarlo ci riesco!!! hehehe... Grazie ancora...mi sa che ci riseniremo ![]()
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Nono...non ti sei spiegato male...
Comunque se i voti sono in 30esimi allora puoi benissimo rendere max, min e voto interi.. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Scusami nuovamente, su una dispensa c'era questo esempio di procedure ricorsive per il quale ho dovuto inventarmi un main per vedere se compilava giusto....perche ho i miei dubbi riguardo all' output...dovrebbe dare un triangolo di n righe composto da spazi e * del tipo
---* --*** ***** e via dicendo in base ad il valore n che immetto..... secondo me non viene cosi ma così: ---* --** *** scusa ma non si reffa bene a fare sti schifo di disegni... ho messo le --- perche altrimenti non veniva incolonnato per bene...ci andrebbero spazi vuoti.. il fatto e che sto robo compila giusto ma se lo eseguo la pseudo shell mi si chiude nonostante il comando che ho aggiunto alla fine system pause... E'solo un problema del mio compilatore? Ciao ------------------------------------------------------------------------------- #include <stdlib.h> #include <stdio.h> void scrivicarattere (char c, int n) { if (n>0) { printf ("%c",c); scrivicarattere (c,n-1); } } void aux (int spazi, int stelle) {if (stelle>0){ aux (spazi+1, stelle-1); scrivicarattere (' ',spazi); scrivicarattere ('*',stelle); printf ("\n"); } } void stelle (int n) {aux (0,n); } int main() { int x=0; printf ("scrivi numero righe"); scanf ("%d\n",x); stelle (x); system("PAUSE"); }
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Metti un getch(); in fondo invece del system("pause")...
PS: creeping death....mitici Metallica !!! Comunque se deve essere così : Ha ragione il testo...devi aggiungere 2 * per ogni livello... i = indice del livello (parte da zero e arriva a n) n = numero di livelli Devi stampare n-i-1 spazi e (2*i)+1 asterischi... OOOA OOAAA OAAAAA AAAAAAA |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
Ho cambiato e messo getch(); ma si chiude lo stesso!! Che compilatore usi ? ah lo usi su win o su linux? Bho mi va in balla solo con questo progetto....uso dev-c++ Cmq dici che è giusto....lo provero di nuovo domani in unive...grazie intanto! ![]()
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dipende...il codice che ti ho postato prima l'ho scritto in Dev-C++, mentre altre cose le scrivo in Visual C++ o Borland C++ Builder...
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
ciao, scusa ma non l'ho piu provato sto programma.... allora dovrebbe andare codi come te l'ho trascritto? Ma se io assegno a x nel main 5, la proc. aux inizia con i pareametri formali spazi=0 e stelle=5.... essendo stelle>o ottengo spazi=1 e stelle=4 essendo ancora stelle>0 ottengo ....... ...... ....... spazi=5 e stelle=0 -----> cosi esco dalla condizione e passo alla proc scrivistelle 4 spazi, che la procedura stampa e va a capo, dopo passo alla stessa 1stella che viene stampata e vado a capo..... successivamente alla proc aux ritorna spazi 4 e 2 asterischi... e via dicendo .... ma cosi facendo stamperebbe veramente quello che sostengo!!! che passaggio ricorsivo salto? ti ripeto che a me viene da pensare che stampa così: ooooA oooAA ooAAA oAAAA AAAAA non mi capisco piu!!!!
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No...avevo capito male...il codice non l'ho provato...
Se vuoi lo provo, ci sono 3 mila modi per fare una cosa del genere... Nel programma manca una & nella scanf... Comunque hai ragione...fa quello che dici te... In ogni caso è un triangolo anche quello... |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
volevo compilarlo così come era scritto nella dispensa...e mi sono inventatoo un main...adesso compila giusto ma una volta inseriti i numeri di righe non fa nulla... sto facendo un altro programma che calcola la potenza di un numero passando ad un aprocedura base ed esponente.....ma mi sono sorti dei dubbi matematici.....: 0 alla 0 non esiste vero? 1 alla 0 = 1 -1 alla 0 =+1 o -1 ? la calcolatrice da -1 ma sapevo che ogni numero positivo o negativo alla 0 da 1 ??? -1 alla 2 =+1 o -1 ??? la calcolatrice da -1 ma dai miei conti è come dire -1*-1= +1 !!! Ps : non dite niente al mio proff di analisi ![]() ![]() ![]()
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Immetti un altro invio...non capisco perchè però se non lo immetti non parte...
Ah ecco...hai messo lo \n nello scanf...è per quello... Comunque -1 ^ 0 è -1...perchè puoi fare -(1^0) = -1... Il segno del risultato di un numero negativo elevato ad una potenza pari è sempre +...mentre se lo si eleva ad una potenza dispari il segno è sempre meno ![]() Ahi ahi ahi...non si studia... |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
allora: -ho tolto il \n e adesso si richiude la shell....come un tempo.... -la storia dei segni...bhe ci sono arrivato...ho dovuto ....concentrarmi un po e riflettere sulle ca@@ate che stavo dicendo.... -nel frattempo ho scritto sto programma, ma con valori del tipo -x alla esponente dispari mi da valore positivo e non negativo.... il problema sta nella valutazione b>0 ...ma non riesco asistemarlo.... qualche suggerimento? #include <stdio.h> double potenza (double b, int e) { int i,pot,pot0; pot=1; pot0=0; if (b==0 && e==0) /* caso in cui base ed esponente sono entrambi 0 */ return printf ("ERROR\n"); if (b==0 && e!=0) /*caso in cui base è 0 ed esponente qualsiasi*/ return 0; for (i=0;i<e;i++) pot=pot*b; if (b>0) /* caso in cui la base sia positiva */ return pot; else return -pot; /* caso in cui la base sia negativa */ } int main() { double base,risultato; int esponente; printf ("Scrivi base\n"); scanf ("%lf", &base); do {printf ("Scrivi esponente\n"); scanf ("%d", &esponente); if (esponente<0) printf ("L'esponente deve essere un intero positivo!\n");} while (esponente<0); printf ("Risultato= %.1lf\n",potenza(base,esponente)); printf ("\n"); system("PAUSE"); }
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non importa che tu faccia la distinzione fra base positiva e base negativa...
b è già negativo...quindi se faccio b^3 e b è negativo mi ritornerà da solo un numero negativo...senza bisogno di cambiare segno... Come fai te torna sempre un nuemro positivo... |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
l'ho modificato così..... #include <stdio.h> double potenza (double b, int e) { int i,pot,pot1; pot=1; pot1=-1; if (b==0 && e==0) /* caso in cui base ed esponente sono entrambi 0 */ return printf ("ERROR\n"); if (b<0 && e==0) /* caso di base negativa ed esponente 0 */ return pot1; for (i=0;i<e;i++) /* casi qualsiasi*/ pot=pot*b; return pot; } int main() { double base,risultato; int esponente; printf ("Scrivi base\n"); scanf ("%lf", &base); do {printf ("Scrivi esponente\n"); scanf ("%d", &esponente); if (esponente<0) printf ("L'esponente deve essere un intero positivo!\n");} while (esponente<0); printf ("Risultato= %.1lf\n",potenza(base,esponente)); printf ("\n"); system("PAUSE"); } un numero negativo alla 0 da sempre ......?
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
.
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
no dai ormai ho fatto che da -1!!!
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:52.