strowrook Inviato 13 Dicembre 2011 Condividi Inviato 13 Dicembre 2011 (modificato) Utilizzo Dev C++ come compilatore e da poco mi sono dato alla programmazione, facendo come da titolo stupidissimi programmi . L'ultimo che ho provato a fare è che inserendo 3 numeri il programma mi stampi a schermo il maggiore . Ho eseguito il seguente procedimento: #include<stdio.h> #include<stdlib.h> main() { int a,b,c; printf("Inserisci primo numero: "); scanf("%d",&a); printf("Inserisci secondo numero: "); scanf("%d",&b); printf("Inserisci terzo numero: "); scanf("%d",&c); if(a>b)and(a>c)printf("Il maggiore è %d ",a; else if(b>c)printf("Il maggiore è %d ",b; else printf("Il maggiore è %d ",c; system("pause"); } Quando vado a compilare mi da errore alla dodicesima riga, quella dove ho inserito la funzione IF . Non si può inserire due funzioni logiche come IF e AND una dientro l'altra come ho fatto io ? Alla tredicesima riga posso inserire il comando ELSE seguito da IF come ho fatto io ? Modificato 27 Febbraio 2015 da strowrook Link al commento Condividi su altri siti Altre opzioni di condivisione...
Melo_Wii Inviato 13 Dicembre 2011 Condividi Inviato 13 Dicembre 2011 ecco il codice corretto #include<stdio.h> #include<stdlib.h> main() { int a,b,c; printf("Inserisci primo numero: "); scanf("%d",&a); printf("Inserisci secondo numero: "); scanf("%d",&b); printf("Inserisci terzo numero: "); scanf("%d",&c); if(a > b || a > c)printf("Il maggiore è %d ",a); else if(b > c)printf("Il maggiore è %d ",b); else printf("Il maggiore è %d ",c); } Invece di and va messo || e mancavano le parentesi (importantissime) Link al commento Condividi su altri siti Altre opzioni di condivisione...
Skyl1ne Inviato 13 Dicembre 2011 Condividi Inviato 13 Dicembre 2011 Lo sto usando anch'io Dev C++ però non sto capendo molto i comandi e le funzioni... Link al commento Condividi su altri siti Altre opzioni di condivisione...
Melo_Wii Inviato 13 Dicembre 2011 Condividi Inviato 13 Dicembre 2011 Come comandi e funzioni intendi proprio quelli di devC++ oppure ti riferisci al linguaggio? Se parli del programma è facile, dai un occhiata qua http://www.google.it/url?sa=t&rct=j&q=devc%2B%2B%20guida&source=web&cd=1&ved=0CCgQFjAA&url=http%3A%2F%2Fwww.dbgroup.unimo.it%2F_domenico%2FFIRE%2FCompilatoreDevC%2B%2B%2FDocumentazione%2FDevC%2B%2B_ManualeUtente.doc&ei=aLznTt2APc704QSh9syVCQ&usg=AFQjCNHguEIQQ2jANOpihTuc4kM58f_Qiw&sig2=XK91XdSaTBouvueaQ6_puA Sostanzialmente cè un tasto per compilare, uno per compilare ed eseguire... poi i soliti menù nuovo e via dicendo... Link al commento Condividi su altri siti Altre opzioni di condivisione...
Skyl1ne Inviato 13 Dicembre 2011 Condividi Inviato 13 Dicembre 2011 Il programma so com'è fatto...io dico proprio il linguaggio. Link al commento Condividi su altri siti Altre opzioni di condivisione...
robilyn Inviato 14 Dicembre 2011 Condividi Inviato 14 Dicembre 2011 @Melo_Wii: L'istruzione corretta è: if (a > b && a > c) Devi mettere AND, non OR. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Melo_Wii Inviato 14 Dicembre 2011 Condividi Inviato 14 Dicembre 2011 @robilyn Ma quante cose sai? lol Devo riscattarmi di questa gaf... stay tuned! @DaNiElEoMaSt Allora ti serve una guida al C, ti consiglio questa http://blacklight.gotdns.org/guidac.pdf è abbastanza semplice e completa, ottima per iniziare a mio dire. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Skyl1ne Inviato 14 Dicembre 2011 Condividi Inviato 14 Dicembre 2011 Grazie melo per la guida...il professore sarà anche bravo ma non lo capisco... P.S.Robilyn ma quanti n00b ci sono nella sezione Wii? asd Link al commento Condividi su altri siti Altre opzioni di condivisione...
wolverine91 Inviato 15 Dicembre 2011 Condividi Inviato 15 Dicembre 2011 daniele anche tu sei ad ingegneria informatica alla federico II? p.s. se usi cin e cout al posto di printf e scanf ho un paio di ottimi libri che spiegano la programmazione Link al commento Condividi su altri siti Altre opzioni di condivisione...
Melo_Wii Inviato 15 Dicembre 2011 Condividi Inviato 15 Dicembre 2011 (modificato) @DaNiElEoMaSt (p.s RIP mod del mention o come si dice) Quella del prof non l' ho capita O.O Poi con wolverine che dice ingegnieria informatica la cosa si fa ancora più oscura e misteriosa.... Manco quella dei n00b ho capito sarò io a questo punto Comunque per non andare in OT... se vuoi qualcosa di veramente serio ci vuole un libro vero, i pdf dopo un po scocciano (asnche se è fatto davvero bene) QUasi dimenticavo CIN e COUT sono di c++ Modificato 15 Dicembre 2011 da Melo_Wii Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 26 Gennaio 2012 Autore Condividi Inviato 26 Gennaio 2012 ecco il codice corretto #include<stdio.h> #include<stdlib.h> main() { int a,b,c; printf("Inserisci primo numero: "); scanf("%d",&a); printf("Inserisci secondo numero: "); scanf("%d",&b); printf("Inserisci terzo numero: "); scanf("%d",&c); if(a > b || a > c)printf("Il maggiore è %d ",a); else if(b > c)printf("Il maggiore è %d ",b); else printf("Il maggiore è %d ",c); } Invece di and va messo || e mancavano le parentesi (importantissime) Ho provato ad utilizzare il tuo codice anche mettendo le correzioni di @Robilin . Lo compila senza problemi, ma quando lo esegue esce fuori la scritta "Premere un tasto per continuare . . ." Come procedo ? Grazie mille Link al commento Condividi su altri siti Altre opzioni di condivisione...
robilyn Inviato 26 Gennaio 2012 Condividi Inviato 26 Gennaio 2012 Premilo... Però se ti esce subito, è perché hai messo l'istruzione system("PAUSE"); all'inizio invece che alla fine. Serve per permetterti di leggere il risultato, prima di chiudere la finestra. Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 26 Gennaio 2012 Autore Condividi Inviato 26 Gennaio 2012 Per sbaglio l'ho cancellato, e m'è toccato riscriverlo: #include <stdio.h> #include <stdlib.h> int main(void) {float a,b,c; printf("Inserisci primo numero: "); scanf("%d",&a); printf("Inserisci secondo numero: "); scanf("%d",&b); printf("Inserisci terzo numero: "); scanf("%d",&c); if(a>b&&a>c)printf("Il maggiore e': %d \n",a); else if(b>c)printf("Il maggiore e': %d \n",b); else printf("Il maggiore e' %d \n", c); system("PAUSE"); return 0; } Il problema è che qualsiasi numero io vada ad inserire esce sempre come risultato "0" Come potrei risolvere ? Grazie infinite ! Link al commento Condividi su altri siti Altre opzioni di condivisione...
robilyn Inviato 26 Gennaio 2012 Condividi Inviato 26 Gennaio 2012 Hai dichiarato le 3 variabili float invece di int, ed hai usato in scanf il parametro "%d", che invece è per gli interi. Se vuoi usare i float, in scanf devi mettere "%f". Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 26 Gennaio 2012 Autore Condividi Inviato 26 Gennaio 2012 Perfetto ! Con int e %d ora funziona Siccome sono un novizio del C/C++ ho seguito alcune guide in cui era scritto che sarebbe stato spiegato poi il significato di %f e %d, invece non c'era nessuna spiegazione . Se non toglie troppo tempo, potresti spiegarmi la differenza tra int e float e tra %f e %d ? Grazie mille, mi sei stato veramente d'aiuto Link al commento Condividi su altri siti Altre opzioni di condivisione...
robilyn Inviato 26 Gennaio 2012 Condividi Inviato 26 Gennaio 2012 int e float sono due dei tipi di dati fondamentali in linguaggio C. int = numero intero float = numero reale in virgola mobile Il primo parametro della funzione scanf, usata per acquisire un input da tastiera, è una stringa di formattazione che stabilisce il tipo di dato acquisito, e varia in base a quest'ultimo. Per gli int devi usare "%d" e per i float "%f". Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 26 Gennaio 2012 Autore Condividi Inviato 26 Gennaio 2012 Grazie mille ora ho capito Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackJack4051 Inviato 29 Gennaio 2012 Condividi Inviato 29 Gennaio 2012 (modificato) #include <stdio.h> int main (void) { int a, b, c; start: printf("Inserire 3 numeri:"); scanf("%d%d%d", &a, &b, &c); if ( a > b && a > c ); printf("%d è il maggiore", a); if ( b > a && b > c ); printf("%d è il maggiore", b); if ( c > a && c > b); printf("%d è il maggiore", c); printf("Continuare con un nuovo numero?1-si 2-no:"); scanf("%d", %d); if ( d == 1 ) { goto start; } else { goto end; } end: return 0; } L'ultima istruzione printf l'ho inserita per permettere di continuare con un nuovo numero, e quindi per evitare di eseguire il programma ogni volta che bisogna confrontare i tre numeri. Ovviamente non serve in questo programma perchè è banale e quel che conta è la struttura del codice sorgente, ma ti servirà la stessa sintassi in altri programmi. Il goto è una istruzione che permette di effettuare salti condizionati in più parti del programma, ma è quasi in disuso, perchè adesso si usano le tre strutture di controllo: sequenziale, selezione, iterazione. In alcuni casi il goto viene ancora usato, almeno a me capita di usarlo qualche volta. Ma per programmi più elaborati è meglio utilizzare le tre strutture di controllo. Di sicuro ci sono metodi più veloci e più semplici per risolvere questo problema in C, ma sono anche io agli inizi. Spero di esserti stato di aiuto. Modificato 29 Gennaio 2012 da BlackJack4051 Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 29 Gennaio 2012 Autore Condividi Inviato 29 Gennaio 2012 Grazie mille Utile come funzione, era un po' di tempo che ne cercavo una simile Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackJack4051 Inviato 30 Gennaio 2012 Condividi Inviato 30 Gennaio 2012 Volevo spiegarti una cose riguardo i tipi di variabile. Tu come sai già all'inizio di una funzione main devi sempre inizializzare le variabili giusto? Tu imposti il tipo int a tutte le variabili scrivi tutte le tue istruzioni che devi scrivere e adesso arriva il bello... Quando stai scrivendo una istruzione di assegnamento: una espressione da eseguire (un calcolo in generale) puoi utilizzando l'operatore di conversione puoi "promuovere", covertire le variabili int nel tipo di dato da te specificato. Ti faccio un 'esempio: Non ti scrivo tutto il programma, ma solo il calcolo, le variabili sono a, b, c sono intere: c = a / b; In questo caso il quoziente sarà un intero se a è un multiplo di b altrimenti la parte decimale o frazionaria del quoziente adrà persa. Adesso ti riscrivo l'istruzione implementado l'operatore di conversione: c = ( float )a / b; In questo caso ho scelto come tipo di dato float, ma puoi scegliere quello che vuoi. L'operatore di conversione è ( float ) e adesso ti spiego il suo funzionamento: Il compilatore quando incontra questo operatore converte le variabili intere in variabili decimali. Visto che l'operatore di conversione è un operatore unario al contrario dei 4 segni delle 4 operazioni che sono, invece, binari opera da destra verso sinistra equindi la conversione sarà effettuata su a, e questo tipo di operazione se ti interessa la teoria si chiama conversione o promozione esplicita. Adesso manca la conversione della variabile b, e qua il compilatore, il mio migliore amico convertirà la variabile b da intera a decimale e questo tipo di operazione si definisce conversione implicita. Ultima cosa altrimenti ti rompo... quando devi stampare a testo con l'istruzione printf una variabile decimale puoi decidere il "tasso" di precisione, cioè quante cifre dopo la virgola visualizzare... in questo modo: %f.5 visualizzerà in questo caso 5 cifre dopo la virgola. Ricorda che la "precisione" di default è di 6 cifre. Spero di esserti stato di aiuto!!!! Scusa ancora per la mega spiegazione. Ciao Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 30 Gennaio 2012 Autore Condividi Inviato 30 Gennaio 2012 Nono non ti devi scusare ! Una spiegazione utilissima . Però non ho capito bene un passaggio: quando hai scritto c = ( float )a / b la funzione float midifica solo la variabile a, giusto ? E di conseguenza anche la variabile b si adatta ? In questo caso anche la variabile c avrà %f.x (dove x è uguale al numero di cifre che io voglio visualizzare), o sto sbagliando ? Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackJack4051 Inviato 30 Gennaio 2012 Condividi Inviato 30 Gennaio 2012 Perfetto hai capito. Praticamente l'operatore di conversione viene definito unario cioè che accetta un solo operando in questo caso la variabile a perché associa da destra. Il compilatore quando incontra questo operatore trasforma anche l'altra variabile la b. Di conseguenza anche la variabile c verra' promossa al tipo float. Questo operatore do solito e' utilizzato per le divisioni, per il calcolo della media etc dove non si sa se il risultato e' intero o meno. Un ultima cosa che adesso mi viene in mente e' questa: Quando effettui una divisione con un programma in c noti a meno che tu non conosca già l operatore binario del resto che il quoziente e' sempre intero anche quando non dovrebbe esserlo? In questo caso puoi usare l'operatore binario del resto cioè che accetta due operandi, per calcolare il resto. Ti faccio un esempio: c = a % b questo di calcola il resto della divisione. Ciao e chiedi qualsiasi cosa sarò felicissimo di risponderti. Link al commento Condividi su altri siti Altre opzioni di condivisione...
strowrook Inviato 31 Gennaio 2012 Autore Condividi Inviato 31 Gennaio 2012 Quindi il segno / e il segno % sono rispettivamente le funzioni DIV e MOD ? a regola se iovolessi fare un programma che mi calcoli il quoziente dovrei scrivere così ? #include <stdio.h> #include <stdlib.h> main() {int a,b,c; printf("inserisci dividendo: "); scanf("%d",&a); printf("inserisci divisore: "); scanf("%d",&b); c=a/b; printf("Il risultato e: %d",&c); system("PAUSE"); return 0; } mentre se volessi il resto e basta dovrei scrivere così ? #include <stdio.h> #include <stdlib.h> main() {int a,b,c; printf("inserisci dividendo: "); scanf("%d",&a); printf("inserisci divisore: "); scanf("%d",&b); c=a%b; printf("Il risultato e: %d",&c); system("PAUSE"); return 0; } Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackJack4051 Inviato 31 Gennaio 2012 Condividi Inviato 31 Gennaio 2012 Si corrisponde agli operatori DIV e MOD (che servono per calcolare il quoziente intero di una divisione e MOD per il resto) I due codici sorgenti sono giusti. Se vuoi fare dei programmi che hanno delle divisioni puoi, unire le due istruzioni di assegnamento in modo tale che il programma visualizzi sia il quoziente intero che il resto. Ma in questo caso è meglio usare l'operatore di conversione float. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Frank2010 Inviato 19 Febbraio 2012 Condividi Inviato 19 Febbraio 2012 (modificato) Scusate l'intromissione ma il C è una cosa che mi affascina da molti anni, ormai da quando ho scritto il mio primo printf("Hello world!") copiato dal Kerningham e Ritchie è passato parecchio tempo ma nonostante abbia scritto tonnellate di codice in mille modi, il C resta sempre una sfida tra l'uomo e la macchina. A disptanza di tanti anni io ed un mio vecchio amico ancora facciamo a gara a chi scrive il programma più ... sintetico. Vorrei dare un piccolo contributo a .. complicare la vita ..asd #include<stdio.h> #include<stdlib.h> main() { int a,b,c; printf("Inserisci primo numero: "); scanf("%d",&a); printf("Inserisci secondo numero: "); scanf("%d",&b); printf("Inserisci terzo numero: "); scanf("%d",&c); printf("Il maggiore è %d \n ",(a>b ? (a>c ? a : (c>b? c : b)) : ( b>c ? b : c))); return (0); } La mia più che una provocazione vuole essere uno stimolo ad approfondire un linguaggio semplice per fare cose 'toste'. Modificato 19 Febbraio 2012 da Frank2010 Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Crea un account o accedi per lasciare un commento
Devi essere un membro per lasciare un commento
Crea un account
Iscriviti per un nuovo account nella nostra community. È facile!
Registra un nuovo accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora