Advertisement
u53r

Ricerca dicotomica in un vettore caricato da file

Mar 19th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. /*
  2. Caricare un vettore di 10 interi da un file e ricercare un elemento al suo interno con la ricerca dicotomica (comunicare la posizione)
  3. */
  4.  
  5. #include <stdio.h>
  6.  
  7. int main() {
  8.   FILE *f1;
  9.   int v[10],i,j,swp,srch,p,u,m; // v = vettore, i,j = contatori swp = variabile di scambio p,u,m = primo elemento, ultimo elemento, elemento mediano
  10.   f1 = fopen("input.txt","r");
  11.   if(f1 == NULL){
  12.     printf("Errore\n");
  13.     return 1;
  14.   }else{
  15.  
  16.     // Caricamento del vettore
  17.     for (i = 0; i < 10; i++) {
  18.       fscanf(f1,"%d",&v[i]);
  19.     }
  20.  
  21.     // Ordinamento crescente con Bubble Sort
  22.     for (i = 0; i < 10; i++) {
  23.       for (j = 0; j < 9; j++) {
  24.         if(v[j] > v[j+1]){
  25.           swp = v[j];
  26.           v[j] = v[j+1];
  27.           v[j+1] = swp;
  28.         }
  29.       }
  30.     }
  31.  
  32.     // Ricerca dicotomica
  33.     printf("Cosa vuoi cercare? --> ");
  34.     scanf("%d", &srch);
  35.     p = 0;
  36.     u = 9;
  37.     while(1){ // Ciclo infinito, le condizioni di uscita sono all'interno del ciclo
  38.       m = (p+u) / 2; // Posizione media, approssimata per difetto in caso di risultato p+u dispari
  39.       if(v[m] == srch){
  40.         printf("Termine Cercato: %d \n", srch);
  41.         printf("Posizione: %d\n", m);
  42.         break; // Esco dal ciclo
  43.       }else if(srch > v[m]){ // Se il termine cercato รจ maggiore dell'elemento mediano, escludo tutti quelli precedenti e il mediano stesso
  44.         p = m+1;
  45.       }else{ // Se il termine cercato รจ minore dell'elemento mediano,escludo tutti quelli successivi e il mediano stesso
  46.         u = m-1;
  47.       }
  48.       if(p > u){ // Se ho scorso tutto il vettore e non ho trovato nulla, stampo un messaggio di errore ed esco
  49.         printf("L'elemento non รจ presente nel vettore\n");
  50.         break;
  51.       }
  52.     }
  53.   }
  54.   fclose(f1); // Chiudo il file f1
  55.   return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement