Originariamente inviato da blackdemonbd
Ecco qui il pezzo di codice da sistemare

codice:
int main()
{
  int a[SIZE];
  int i;
  int key;
  
  for (i=0; i<SIZE; i++) 
    {
      a[i]=2*i;
    }
  
      /*assegnazione temporanea per modificare l'array*/
     a[1]=10;

      printf("Immetti un numero tra 0 e 38: ");
      scanf("%d", &key);

      for (i=0; i<SIZE; i++)
	{
	  if(a[i]<a[i+1])
	    {
	      binary(a, key, 0, SIZE-1);
		}
	  else
	    {
	      linear(a , key, SIZE);
	    }
	  return 0;
	}
}
allora... SIZE è 5 quindi l'array in fine risulta:
0, 10, 4, 6, 8

il mio problema è quando devo eseguire il controllo per vedere se l'array è ordinato dunque...

codice:
for (i=0; i<SIZE; i++)
	{
	  if(a[i]<a[i+1])
	    {
	      binary(a, key, 0, SIZE-1);
		}
	  else
	    {
	      linear(a , key, SIZE);
	    }
il primo controllo che fa è se 0<10 e siccome è vero esegue
binary(a, key, 0, SIZE-1); però il programma dovrebbe eseguire quell'istruzione solo se TUTTO l'array è ordinato...come potrei fare?
Allora facciamo un po d'ordine:
innanzitutto metti il codice che verifica se l'array è ordinato oppure no all'interno di una funzione a parte che fa solo quello, chiamiamola isOrdered.Questa funzione sarà della forma
codice:
int isOrdered(int a[],int len);
Quindi tu nella tua main avrai questo codice
codice:
int main()
{
  int a[SIZE];
  int key;
  ...codice per acquisire i dati nell'array e il valore di key
  if(isOrdered(a,SIZE) == 1) 
  {
    binary(a, key, 0, SIZE-1);
  }
  else
  {
    linear(a , key, SIZE);
  }
}
Il codice per la fnzione isOrdered lo lascio a te dandoti questo suggerimento:

usa una variabile flag (bandierina).La variabile la inizializzi col valore 1 (vero, cioè è ordinato), poi fai un ciclo for in cui scandisci l'array e metti il flag a 0 (falso,cioè non è ordinato) solo se trovi una coppia elemento -successore che non verifica la condizione di ordinamento.Al termine del ciclo ritorni il valore della variabile flag.
Ciao