|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
[C]Le basi
Ho inziato a programmare qualcosa in C ma sto veramente sclerando. Mi sembra di perdermi in un bicchiere d'acqua.
Dopo diverse ore di elaborazione mentale, mi sono arreso e ho deciso di chiedere a voi alcune delucidazioni. Sto tentando di fare un programma che risolva equazioni di secondo grado, dati in input i valori di a, b e c. Per ora ho proceduto solo con l'inserire i valori e stampare a schermo ciò che ho inserito, ma mi sono già bloccato... Questo è il codice: Codice:
#include <stdio.h> #include <math.h> main () { float a, b, c, delta; printf("Inserisci il valore di a:\t"); scanf("%f\n", &a ); printf("Inserisci il valore di b:\t"); scanf("%f\n", &b ); printf("Inserisci il valore di c:\t"); scanf("%f\n", &c ); printf("I valori da te inseriti sono:\t %f\t%f\t%f\n", a b c); // verifichiamo i valori inseriti } Inserito il primo valore in input ( in questo caso "a" ), il programma attende che io gli dia un secondo valore ( da me mai definito ) per poi passare a chiedermi "b". Perchè fa sta cosa? Stessa cosa dell'ultimo printf, con lo scanf come faccio a chiedere contemporaneamente più valori in input? Grazie Kwb
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
Codice:
printf("I valori da te inseriti sono:\t %f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2009
Messaggi: 67
|
è normale che ti chieda valori perchè la funzione scanf richiede un'input da tastiera
![]() e inoltre non mi risulta che si possono mettere più valori in una sola istruzione scanf.... ma puoi mettere in serie una cs del genere: printf(" inserire valori a,b,c); scanf("%f\n", &a ); scanf("%f\n", &b ); scanf("%f\n", &c ); buon lavoro!
__________________
- Sei... Il numero perfetto! - Ma non era Tre il numero perfetto? - Si, ma la mia pistola ha sei colpi... [cit:Il Buono...ne "Il Buono, Il Brutto E Il Cattivo"] Ultima modifica di cruyffissimo : 26-10-2009 alle 13:43. |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Ecco a voi, questo è l'output generato: Codice:
Inserisci il valore di a: 5.0 4.0 Inserisci il valore di b: 3.0 Inserisci il valore di c: 5 I valori da te inseriti sono: 5.000000 4.000000 3.000000 Quote:
![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
||
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Oct 2009
Messaggi: 67
|
non saprei perchè ti mette due volte la richiesta di input, però come ti ho detto prima, non si possono prendere più valori in un solo scanf...è lo scanf che determina il numero di input, non la quantità di printf
![]()
__________________
- Sei... Il numero perfetto! - Ma non era Tre il numero perfetto? - Si, ma la mia pistola ha sei colpi... [cit:Il Buono...ne "Il Buono, Il Brutto E Il Cattivo"] |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Codice:
#include <stdio.h> #include <math.h> main () { float a, b, c, delta; printf("Inserisci il valore di a:\t"); scanf("%f\n", &a ); printf("Inserisci il valore di b:\t"); scanf("%f\n", &b ); printf("Inserisci il valore di c:\t"); scanf("%f\n", &c ); printf("I valori da te inseriti sono:\t%f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti }
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Io mettere il New Line al di fuori dello scanf, ma dentro le printf e basta
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Si può fare, esempio:
Codice:
#include <stdio.h> #include <math.h> main () { float a, b, c, delta; printf("Inserisci il valore di a, b e c:\t"); scanf("%f%f%f", &a, &b, &c ); printf("I valori da te inseriti sono:\t%f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti } |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Ok, grazie funziona!
![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
![]()
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Ok, il programma dal punto di vista sintattico sembra andare. Il guaio è che essendo sotto linux e facendo tutto da editor di testo + riga di comando, non so come fare un debug.
Questo è il codice quasi finito: Codice:
#include <stdio.h> #include <math.h> main () { float a, b, c, x1, x2, delta; printf("Inserisci il valore di a:\n"); scanf("%f", &a ); printf("Inserisci il valore di b:\n"); scanf("%f", &b ); printf("Inserisci il valore di c:\n"); scanf("%f", &c ); printf("I valori da te inseriti sono:\t%f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti if ( a == 0 ) { if ( b != 0 ) { x1 = -c/b; printf("Il risultato di quest'equazione di primo grado è:%f\t", x1 ); } else { if ( c == 0 ) { printf("L'equazione esiste per qualunque x uguale a 0\n"); } else { printf("L'equazione non ha soluzioni\n"); } } } else { delta = (b * b) - (4.0 * a * c ); x1 = (-b + delta)/(2.0 * a); x2 = (-b - delta)/(2.0 * a); printf("Il primo risultato dell'equazione è: %f\n", x1); printf("Il secondo risultato dell'equazione è: %f\n", x2); } } Ho usato i valori 2, 6 e 1 rispettivamente per a, b e c . Mi manca da implementare i casi in cui il delta sia = e < di 0.
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Ma non va fatta la radice quadrata del delta qui?
x1 = (-b + delta)/(2.0 * a); x2 = (-b - delta)/(2.0 * a); ![]() e' per questo che non ti torna? |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
Comunque per fare il debugging puoi compilare con l'opzione -g e poi lanciare "dbg nomefile". Cerca su google i comandi di dbg |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Cosi' va..
![]() Codice:
#include <stdio.h> #include <math.h> int main () { float a, b, c, x1, x2, delta; printf("Inserisci il valore di a:\n"); scanf("%f", &a ); printf("Inserisci il valore di b:\n"); scanf("%f", &b ); printf("Inserisci il valore di c:\n"); scanf("%f", &c ); printf("I valori da te inseriti sono:\t%f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti if ( a == 0 ) { if ( b != 0 ) { x1 = -c/b; printf("Il risultato di quest'equazione di primo grado è:%f\t", x1 ); } else { if ( c == 0 ) { printf("L'equazione esiste per qualunque x uguale a 0\n"); } else { printf("L'equazione non ha soluzioni\n"); } } } else { delta = ((b * b) - (4.0 * a * c )); printf("Il delta e': %f\n",delta); delta= sqrt(delta); printf("La radice del delta e': %f\n",delta); x1 = (-b + delta)/(2.0 * a); x2 = (-b - delta)/(2.0 * a); printf("Il primo risultato dell'equazione è: %f\n", x1); printf("Il secondo risultato dell'equazione è: %f\n", x2); } return 0; } |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
#16 |
Registered User
Iscritto dal: May 2009
Messaggi: 300
|
Prova Nemiver è un debugger con interfaccia grafica...
|
![]() |
![]() |
![]() |
#17 |
Junior Member
Iscritto dal: Sep 2007
Messaggi: 17
|
Ciao, ho provato a scrivere il codice, cercando di includere anche il caso di equazione di primo grado.
Ho dato una occhiata veloce e dovrebbe funzionare. Posto il codice qui sotto: Codice:
#include <stdio.h> #include <math.h> int main () { double a, b, c; // eq: ax^2 + bx + c double r1, r2; // risultato 1 e risultato 2 double delta; printf("\nInserisci coeffic. x^2:\t\t"); scanf("%lf", &a); printf("\n\nInserisci coeffic. x : \t\t"); scanf("%lf", &b); printf("\n\nInserisci term. noto :\t\t"); scanf("%lf", &c); // calcolo il delta se l'equazione e' di secondo grado if(a!=0){ printf("\n\nL'eq. e': %.2lfx^2 ", a); if(b>=0) printf("+"); printf("%5.2lfx ", b); if(c>=0) printf("+"); printf("%5.2lf = 0",c); delta = b*b - 4*a*c; if(delta>0){ printf("\n\nIl delta e' positivo\n"); r1 = (-b + sqrt(delta))/(2*a); r2 = (-b - sqrt(delta))/(2*a); printf("\nLe due soluzioni sono: %.2lf e %.2lf\n", r1, r2); } if(delta<0){ printf("\n\nIl delta e' minore di zero\n"); delta = -delta; r1 = sqrt(delta)/(2*a); printf("\nLa prima soluzione e': %.2lf + %.2lf i\n", -b/(2*a), r1); printf("\nLa seconda soluzione e': %.2lf - %.2lf i\n", -b/(2*a), r1); } if(delta==0){ printf("\n\nIl delta e' uguale a zero\n"); r1 = (-b/(2*a)); printf("\nLe due soluzioni coincidono e sono: %.2lf\n", r1); } } // se invece l'equazione è di primo grado if(a==0){ printf("\nL'equazione e' di primo grado: %.2lfx", b); if(c>=0) printf(" + "); printf(" %.2lf = 0", c); if(b<0){ // Invertiamo i segni sia del coeff di x che del termine noto b = -b; c = -c; } r1 = -c/b; printf("\nIl risultato dell'equazione di primo grado e': %.2lf\n", r1); } printf("\n\nArrivederci e grazie\n\n"); getchar(); getchar(); return 0; } Ultima modifica di aReYoUnUtS?? : 27-10-2009 alle 11:22. |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Ma nel mio prog c'è già l'equazione di primo grado
![]()
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Perchè rompe il cacchio sulla riga della radice?
Codice:
#include <stdio.h> #include <math.h> main () { float a, b, c, x1, x2, delta; printf("Inserisci il valore di a:\n"); scanf("%f", &a ); printf("Inserisci il valore di b:\n"); scanf("%f", &b ); printf("Inserisci il valore di c:\n"); scanf("%f", &c ); printf("I valori da te inseriti sono:\t%f\t%f\t%f\n", a, b, c); // verifichiamo i valori inseriti if ( a == 0 ) { if ( b != 0 ) { x1 = -c/b; printf("Il risultato di quest'equazione di primo grado è:%f\t", x1 ); } else { if ( c == 0 ) { printf("L'equazione esiste per qualunque x uguale a 0\n"); } else { printf("L'equazione non ha soluzioni\n"); } } } else { delta = sqrt((b * b) - (4.0 * a * c )); x1 = (-b + delta)/(2.0 * a); x2 = (-b - delta)/(2.0 * a); printf("Il primo risultato dell'equazione è: %f\n", x1); printf("Il secondo risultato dell'equazione è: %f\n", x2); } }
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Forse hai passato dei valori di a, b e c tale che il delta è negativo e quindi la radice non può restituirti un valore corretto (non so cosa fa in questo caso)
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:03.