Newsgroup: it.comp.lang.c++
Titolo: chiarimento su if-else else if

devo creare una funzione (per esercizio) che, forniti come parametri due
vettori di interi e la loro dimensione, restituisce true se la somma dei
valori di ogni coppia contigua di elementi del primo array č uguale a quella
della corrispondente coppia nel secondo array, valore false altrimenti.
Ad esempio i due seguenti array:
a 0, 1, 2
b 1, 0, 3
soddisfano la condizione.
Ho fatto cosě:
int simileSommaCoppie(int a[], int b[], int lung)
{ int i, cont=0;
 for (i=0; i<lung; i++)
    if ((a[i]+a[i+1])==(b[i]+b[i+1])) cont++;
    else if (cont==lung) return true;
     else if ((i+1)==lung && cont!=lung)return false;
}
questa funzione fa quello che mi aspetto.
La seguente no:
int simileSommaCoppie(int a[], int b[], int lung)
{ int i, cont=0;
 for (i=0; i<lung; i++)
  {
  if ((a[i]+a[i+1])==(b[i]+b[i+1])) cont++;
   if (cont==lung) return true;
      else if ((i+1)==lung && cont!=lung)return false;
  }
}
Perche?
grazie

       else if ((i+1)==lung && cont!=lung)return false;
Invece qui non usi else per la seconda condizione, quindi (cont == lung)
verra' valutata sempre a prescindere dalla verita' di
((a[i]+a[i+1])==(b[i]+b[i+1]))
Ciao

"Noixe" ha scritto

Per dirla altrimenti:
=== Nel primo caso ===
Ritorna true se:
CONDIZIONE FALSA: ((a[i]+a[i+1])==(b[i]+b[i+1]))
CONDIZIONE VERA: (cont==lung)
Ritorna false se:
CONDIZIONE FALSA: ((a[i]+a[i+1])==(b[i]+b[i+1]))
CONDIZIONE FALSA: (cont==lung)
CONDIZIONE VERA: ((i+1)==lung && cont!=lung)
=== Nel secondo caso ===
Ritorna true se:
CONDIZIONE VERA: (cont==lung)
Ritorna false se:
CONDIZIONE FALSA: (cont==lung)
CONDIZIONE VERA: ((i+1)==lung && cont!=lung)
-- 
Gerolamo 

 }
piů corta e piů corretta ;-)
int simileSommaCoppie(int a[], int b[], int lung)
{
   int i, l=lung-1;
   for (i=0; i<l; i++)
     if (a[i]+a[i+1] != b[i]+b[i+1]) return false;
   return true;
}
-- 
Horst

 }
Giochiamo un po'... ancora piu corta :)
int simileSommaCoppie (int a[], int b[], int lung) {
    for (int i = 0; i < lung - 1; i++)
        if (a[i] + a[i + 1] != b[i] + b[i + 1])
            return false;
        return true;
}
Ciao :D

 Ciao :D
Output usando la funzione di cui sopra:
--------------------------------------------------------
Inserisci i valori per  gli array:
Dati primo array a[0]2
Dati primo array a[1]2
Dati primo array a[2]4
Dati secondo array b[0]4
Dati secondo array b[1]0
Dati secondo array b[2]6
Condizione non verificata
Premere un tasto per continuare . . .
-----------------------------------------------------------
risultato: Condizione non verificata = errore!!!

 Horst
usando la funzione di cui sopra:
Inserisci i valori per  gli array:
Dati primo array a[0]12
Dati primo array a[1]0
Dati primo array a[2]7
Dati secondo array b[0]6
Dati secondo array b[1]6
Dati secondo array b[2]1
Condizione non verificata = errore!!!!
altra prova (ho migliorato un po' l'output):
Inserisci i valori per gli array separati da spazi:
Dati array A: 2 2 4
Dati array B: 4 0 6
Condizione non verificata = errore!
ancora...
Inserisci i valori per gli array separati da spazi:
Dati array A: 0 1 2
Dati array B: 1 0 3
Condizione non verificata
Premere un tasto per continuare . . .
con la funzione:
int simileSommaCoppie(int a[], int b[], int lung)
{ int i, cont=0;
 for (i=0; i<lung; i++)
  if ((a[i]+a[i+1])==(b[i]+b[i+1])) cont++;
  else if (cont==lung) return true;
     else if ((i+1)==lung && cont!=lung)return false;
}
Inserisci i valori per gli array separati da spazi:
Dati array A: 0 1 2
Dati array B: 1 0 3
Condizione verificata =ok
boh?

 Condizione non verificata = errore!!!!
#include <iostream>
int simileSommaCoppie(int a[], int b[], int lung)
{
    int i, l=lung-1;
    for (i=0; i<l; i++)
      if (a[i]+a[i+1] != b[i]+b[i+1]) return false;
    return true;
}
int main()
{
   int a[3] = {12,0,7};
   int b[3] = {6,6,1};
   std::cout << (simileSommaCoppie(a,b,3)?"ok":"errore") << std::endl;
   return 0;
}
-> ok
-- 
Horst

 risultato: Condizione non verificata = errore!!!
Ti sbagli, a me funziona.
int simileSommaCoppie(int a[], int b[], int lung) {
 for (int i = 0; i < lung - 1; i++)
  if (a[i]+a[i+1] != b[i]+b[i+1]) return false;
 return true;
};
int main() {
 int a[] = {2, 2, 4};
 int b[] = {4, 0, 6};
 std::cout << simileSommaCoppie (a, b, 3) << std::endl;
 return 0;
}
Stampa 1, ovvero true.
Ciao

 ha scritto nel messaggio
news:4205...@x-privat.org...

La tua funzione e quella di Horst sono chiare. Perň non capisco perché
ottengo risultati errati. Segue il codice che utilizzo per le prove:
#include <iostream>
using namespace std;
/*Rox--------------------------------------------------
int simileSommaCoppie(int a[], int b[], int lung)
{ int i, cont=0;
 for (i=0; i<lung; i++)
  if ((a[i]+a[i+1])==(b[i]+b[i+1])) cont++;
  else if (cont==lung) return true;
     else if ((i+1)==lung && cont!=lung)return false;
}
--------------------------------------------------------*/
//funzione Noixe
int simileSommaCoppie (int a[], int b[], int lung) {
    for (int i = 0; i < lung - 1; i++)
        if (a[i] + a[i + 1] != b[i] + b[i + 1])
            return false;
        return true;
}
/* funzioneHorst---------------------------------------
int simileSommaCoppie(int a[], int b[], int lung)
{
   int i, l=lung-1;
   for (i=0; i<l; i++)
     if (a[i]+a[i+1] != b[i]+b[i+1]) return false;
   return true;
}
-----------------------------------------------------*/
int main()
{ const int lung=2;
  int i, a[lung], b[lung];
  cout <<"Inserisci i valori per gli array separati da spazi: \n";
  cout <<"Dati array A: ";
  for (i=0; i<=lung; i++)
    cin >>a[i];
  cout <<"Dati array B: ";
  for (i=0; i<=lung; i++)
    cin >>b[i];
  cout << (simileSommaCoppie(a,b,lung)?"Cond. verificata\n":"Cond. non
verificata\n");
  return 0;
}
Grazie. Ciao

     cin >>b[i];
I suddetti for presentano un'errore analogo: la condizione deve essere i <
lung altrimenti esci nuovamente dagli intervalli ottenendo comportamenti
indefiniti.
Ciao