Vai al contenuto

Problema in C : I classici tre numeri, trova il maggiore !


Messaggi raccomandati

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 da strowrook
Link al commento
Condividi su altri siti

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

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

@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 da Melo_Wii
Link al commento
Condividi su altri siti

  • 1 mese dopo...
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

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

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

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

#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 da BlackJack4051
Link al commento
Condividi su altri siti

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

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

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

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

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

  • 3 settimane dopo...

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 da Frank2010
Link al commento
Condividi su altri siti

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 account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...