Mi controllate se questo codice è esatto

franbisc
In pratica devo trovare il minimo tra tre interi
#include<iostream>
using namespace std;

int a,b,c,min;

int main()   {
  cout << "inserisci tre numeri interi\n";
  cout<<"primo:\n";
  cin >> a;
  cout<<"secondo:\n";
  cin >> b;
  cout<<"terzo:\n";
  cin >> c;

  if (a<b) {
      if (a<c) min=a;
      }
      [else min=c];
  else 
     if (b<c) min=b;
     else min=c;
}
  cout<< min;

  system("pause");
  return 0;
}

Risposte
hamming_burst
vediamo un po' :-)
"Mifert4":
In pratica devo trovare il minimo tra tre interi
#include<iostream>
using namespace std;

int a,b,c,min;


perchè le dichiari globali?

  if (a<b) {
      if (a<c) min=a;
      }
      [else min=c];
  else 
     if (b<c) min=b;
     else min=c;
}


è ok nelle condizioni, ma non mi piace molta la strutturazione che hai fatto dello scoping... es:

[else min=c];

non usare cose strane per scrivere codice, se sei alle prime armi utilizza strutture semplici (questa io non lo ho mai vista)

  system("pause");
  return 0;
}


usi DEV-C++? se passa di qui apatriarca ti mangia :D

EDIT:
corretto svarione momentaneo :-)

franbisc
perchè le dichiari globali?

in che senso,che significa globali e perchè non vanno bene?
se due numeri sono uguali allo stato attuale cosa pensi accada?

si,mi rendo conto che il programma non è perfetto,perchè se inserissi 2 o tre numeri reali non saprebbe che fare,ma non è importante questo per me,quanto il capire la struttura generale dell'esercizio.
un suggerimento è la definizione di "scoping" in questo caso delle condizioni

cioè...?
usi DEV-C++?

no,scrivo su gedit e poi compilo da terminale con g++(uso ubuntu).
Beh,come puoi intuire è uno dei primi esercizi che svolgo di programmazione,fino a una settimana fa non sapevo nemmeno cosa fosse l'informatica,e non avevo idea che un sofware si creasse "scrivendo"... :oops:

hamming_burst
"Mifert4":
perchè le dichiari globali?

in che senso,che significa globali e perchè non vanno bene?

ok, per il momento va bene così penso che lo vedrai (ad un corso?)
Solo per la tua intuizione:
- dichiarazione globale:
int a;
int main(){
...
}

- dichiarazione locale:
int main(){
int a;
}



se due numeri sono uguali allo stato attuale cosa pensi accada?

si,mi rendo conto che il programma non è perfetto,perchè se inserissi 2 o tre numeri reali non saprebbe che fare,ma non è importante questo per me,quanto il capire la struttura generale dell'esercizio.
un suggerimento è la definizione di "scoping" in questo caso delle condizioni 


Allora te metti delle parentesi {} che sono lo scoping, cioè racchiudi il codice. Lascia stare lo vedrai anche questo. Intanto concentriamoci solo sul programma :-)
tolgo
[else min=c];
che mi da fastidio :-)
  if (a<b) {
      if (a<c) min=a;
      }
      else min=c;
  else
     if (b<c) min=b;
     else min=c;
   }

in questo momento non dovrebbe nemmeno essere compilabile, perchè non c'è corrispondenza delle parentesi graffe (ricordati che se ne apri una devi anche chiuderla). Basta aprirne una e spostarne un'altra:
  if (a<b) {
      if (a<c) min=a;
      else min=c;
  }
  else {
     if (b<c) min=b;
     else min=c;
   }

per farlo bene avresti potuto scriver così:
   if (a<b) {
      if (a<c){
          min=a;
      }
      else {
             min=c;
      }
  }
  else {
     if (b<c) {
         min=b;
      }
     else {
            min=c;
     }
   }

ma diventa illeggibile :-) oppure:
 if (a<b) {
      if (a<c){
          min=a;
      }
      else {
             min=c;
      }
  }
  else if (b<c) {
         min=b;
  }
  else {
            min=c;
  }
   


si può scrivere in vari modi come vedi :-)
ti è chiaro?


usi DEV-C++?

no,scrivo su gedit e poi compilo da terminale con g++(uso ubuntu).
Beh,come puoi intuire è uno dei primi esercizi che svolgo di programmazione,fino a una settimana fa non sapevo nemmeno cosa fosse l'informatica... :oops:

allora system(PAUSE) è INUTILE...
non preoccuparti utti partono da qualche parte :-)

apatriarca
Il tag corretto per inserire delle citazioni è quote e non code. Per questa volta ti ho corretto io stesso il post.

no,scrivo su gedit e poi compilo da terminale con g++(uso ubuntu).
Beh,come puoi intuire è uno dei primi esercizi che svolgo di programmazione,fino a una settimana fa non sapevo nemmeno cosa fosse l'informatica,e non avevo idea che un sofware si creasse "scrivendo"... :oops:

:shock: :shock: :shock: Elimina immediatamente quella riga dal tuo codice... :shock: :shock: :shock:
Ma non ti scrive qualcosa tipo "Comando sconosciuto" sul terminale? Lo scopo di system è quello di richiamare un qualche comando da terminale mettendo nel frattempo in pausa il processo. In Windows "PAUSE" stampa qualcosa come "Premi un tasto per terminare..." e aspetta la pressione di un tasto prima di chiudersi. In Linux questo comando NON esiste e non ha quindi alcun senso inserire quella funzione nel tuo codice. :cry: Odio i professori che insegnano queste oscenità..

EDIT: Per quanto riguarda il problema, ci sono troppi if. È infatti sufficiente ricorrere all'identità: \(\min (a, b, c) = \min( \min(a, b), c) \). È cioè sufficiente scrivere:
int min;

if (a < b) min = a;
else min = b;

if (min > c) min = c;

Nota che il ramo else del secondo if non è necessario.

Piz1
Molto elegante!

franbisc
"Piz":
Molto elegante!

Si infatti,che differenza fra la mia versione contorta e questa.Ma per arrivare a questo punto ci vogliono anni di esperienza,vero?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.