Parentesi
Domande da neofita:
Sia:
int f (double j, double i, double k)
{
if (i > j)
if (i > k)
return i;
else
return k;
else
if (j > k)
return j;
else
return k;
}
LA FUNZIONE RIDÀ IL MASSIMO TRA i,j,k. IL problema sono le parentesi omesse...Io metterei innanzitutto dopo il primo if una parentesi { che racchiuda il blocco fino a else e da else fino alla fine un altro blocco fra parentesi graffe...Così:
int f (double j, double i, double k)
{
if (i > j)
{
if (i > k)
return i;
else
return k;
}
else
{
if (j > k)
return j;
else
return k;
}
}
Ho sempre saputo che se l'ISTRUZIONE si prolunga su più di una riga bisogna mettere le parentesi per delimitare il blocco, sia con l'IF che con il Ciclo FOR...
Dico bene?
Sia:
int f (double j, double i, double k)
{
if (i > j)
if (i > k)
return i;
else
return k;
else
if (j > k)
return j;
else
return k;
}
LA FUNZIONE RIDÀ IL MASSIMO TRA i,j,k. IL problema sono le parentesi omesse...Io metterei innanzitutto dopo il primo if una parentesi { che racchiuda il blocco fino a else e da else fino alla fine un altro blocco fra parentesi graffe...Così:
int f (double j, double i, double k)
{
if (i > j)
{
if (i > k)
return i;
else
return k;
}
else
{
if (j > k)
return j;
else
return k;
}
}
Ho sempre saputo che se l'ISTRUZIONE si prolunga su più di una riga bisogna mettere le parentesi per delimitare il blocco, sia con l'IF che con il Ciclo FOR...
Dico bene?
Risposte
Per prima cosa dovresti dire a quale linguaggio di programmazione stai facendo riferimento: sembra C, ma potrebbe anche essere altro...
Poi, in effetti, le parentesi credo anche io ci vogliano, anzi io le metto sempre, anche quando si tratta di un'unica espressione, perché così il tutto risulta essere molto più chiaro.
Infine se prendi in ingresso dei double dovrai restituire un double...
Poi, in effetti, le parentesi credo anche io ci vogliano, anzi io le metto sempre, anche quando si tratta di un'unica espressione, perché così il tutto risulta essere molto più chiaro.
Infine se prendi in ingresso dei double dovrai restituire un double...
Si scusa, è C++...
Il fatto è che nei vari esami non mettono niente di parentesi per farti sbagliare...Quindi se lo so già in partenza è meglio, se ci vogliono o no...Diciamo che come è presentato il listato nel foglio di compito che ho si capisce anche senza parentesi, visto che dopo il primo IF il suo blocco ha una certa "rientranza" rispetto al listato (cioè è scritto spostato leggermente sulla destra).
Se qualcuno può aiutarmi, grazie.
Se qualcuno può aiutarmi, grazie.
"nirvana":
Il fatto è che nei vari esami non mettono niente di parentesi per farti sbagliare...Quindi se lo so già in partenza è meglio, se ci vogliono o no...Diciamo che come è presentato il listato nel foglio di compito che ho si capisce anche senza parentesi, visto che dopo il primo IF il suo blocco ha una certa "rientranza" rispetto al listato (cioè è scritto spostato leggermente sulla destra).
Se qualcuno può aiutarmi, grazie.
La cosa più semplice da fare sarebbe fare un bel copia-incolla del codice in un file .cpp e compilarlo... se non compila o, una volta compilato. da risultati strani allora vuol dire che ci volevano le parentesi...
Io di solito quando lavoro in C++ mi creo dei mini programmi di prova per controllare la sintassi o per provare altre cose strane in piccolo e velocemente...
"david_e":
[quote="nirvana"]Il fatto è che nei vari esami non mettono niente di parentesi per farti sbagliare...Quindi se lo so già in partenza è meglio, se ci vogliono o no...Diciamo che come è presentato il listato nel foglio di compito che ho si capisce anche senza parentesi, visto che dopo il primo IF il suo blocco ha una certa "rientranza" rispetto al listato (cioè è scritto spostato leggermente sulla destra).
Se qualcuno può aiutarmi, grazie.
La cosa più semplice da fare sarebbe fare un bel copia-incolla del codice in un file .cpp e compilarlo... se non compila o, una volta compilato. da risultati strani allora vuol dire che ci volevano le parentesi...
Io di solito quando lavoro in C++ mi creo dei mini programmi di prova per controllare la sintassi o per provare altre cose strane in piccolo e velocemente...[/quote]
Ok, provo, grazie!
Ho provato a compilare ed è giusto anche senza parentesi...diciamo che mentre scrivo il listato incolonna tutto in modo giusto, a mo di blocco (ma senza parentesi) ...
Io dicevo sopra che se l'iISTRUZIONE (cioè l'espressione con punto e virgola) si estende su più righe allora ci vogliono le parentesi sia con IF che con FOR.
Ora:
Dopo il primo IF c'è un altro IF, ma questo ultimo IF non è un'istruzione! L'istruzione di questo secondo IF in effetti si estende su una riga soltanto (in questo caso l'istruzione è il RETURN) ... Quindi se ho una serie di IF come nell'esempio le parentesi possono anche essere tralasciate perché già si capisce? Però con più CICLI FOR ciò è impossibile, ci vogliono.
Può essere una motivazione valida?
Più che altro vorrei sapere visto che se mi danno un listato con degli IF annidati tra loro almeno capisco quando saltare totalmente il blocco (se l'espressione condizione nell'IF è falsa) e dove andare dopo...
Sembra banale il concetto delle parentesi ma non lo è poi così tanto...
Beh, grazie a chi si interessa...
Ciao.
Io dicevo sopra che se l'iISTRUZIONE (cioè l'espressione con punto e virgola) si estende su più righe allora ci vogliono le parentesi sia con IF che con FOR.
Ora:
Dopo il primo IF c'è un altro IF, ma questo ultimo IF non è un'istruzione! L'istruzione di questo secondo IF in effetti si estende su una riga soltanto (in questo caso l'istruzione è il RETURN) ... Quindi se ho una serie di IF come nell'esempio le parentesi possono anche essere tralasciate perché già si capisce? Però con più CICLI FOR ciò è impossibile, ci vogliono.
Può essere una motivazione valida?
Più che altro vorrei sapere visto che se mi danno un listato con degli IF annidati tra loro almeno capisco quando saltare totalmente il blocco (se l'espressione condizione nell'IF è falsa) e dove andare dopo...
Sembra banale il concetto delle parentesi ma non lo è poi così tanto...
Beh, grazie a chi si interessa...
Ciao.
Mmmm sinceramente sono piuttosto stupito dal fatto che funzioni anche senza parentesi... per cui non posso esserti più di tanto di aiuto...
Non posso esimermi dal commentare circa l'assurdità di questo tipo di esercizi che spesso vengono inseriti nei temi d'esame di certi corsi di informatica: si tratta di cose che poco hanno a che vedere con la reale conoscenza dell'informatica...
Non posso esimermi dal commentare circa l'assurdità di questo tipo di esercizi che spesso vengono inseriti nei temi d'esame di certi corsi di informatica: si tratta di cose che poco hanno a che vedere con la reale conoscenza dell'informatica...
"nirvana":
Ho sempre saputo che se l'ISTRUZIONE si prolunga su più di una riga bisogna mettere le parentesi per delimitare il blocco, sia con l'IF che con il Ciclo FOR...
Dico bene?
È esatto, però il costrutto if ( condizione ) istruzione else istruzione è un'unica istruzione a sua volta, perciò come hai già verificato tu non servono le parentesi, proprio perché il primo if ha come unica istruzione un'altra if. Si può evidenziare la cosa anche sostituendo equivalentemente le if interne ognuna con un return e l'operatore condizionale ? : .
double f(double j, double i, double k) { if (i > j) return (i > k) ? i : k; else return (j > k) ? j : k; }