Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #define MAX 20 // abbiamo definito una costante MAX con valore 20
  3.  
  4.  
  5. /*
  6.  
  7. 4 2 7 9 14 15 5 0 1 8 17 19 20 22 23 i=dim-l
  8.  
  9. FI: 2 4 7 9 14 15 5 0 1 8 17 19 20 22 (23)  i= dim-2
  10.  
  11. F2: 2 4 7 9 14 5 0 1 8 15 17 19 20 (22) 23  i=dim-3
  12.  
  13. F3: 2 4 7 9 5 0 1 8 14  15  17 19 (20)  22  23  i=dim-4
  14.  
  15. F4: 2 4 7 5 0 1 8 9 14 15   17 (19) 20  22  23  i=dim-5
  16.  
  17. F5: 2 4 5 0 1 7 8 9 14 15   (17) 19 20  22  23  i=dim-6
  18.  
  19. F6: 2 4 0 1 5 7 8 9 14 (15) 17 19   20  22  23  i=dim-7
  20.  
  21. F7: 2 0 1 4 5 7 8 9 (14) 15 17 19 20 22 23  i=dim-8
  22.  
  23. F8: 0 1 2 4 5 7 8 (9) 14 15 17 19 20 22 23  i=dim-9
  24.  
  25. F9: 0 1 2 4 5 7 8 9 14 15 17 19 20 22 23
  26.  
  27. */
  28.  
  29. /* PROTOTIPO DI FUNZIONE */
  30.  
  31. int lettura(int vettore[]);
  32.  
  33. void bubble_sort(int vett[], int dim);
  34.  
  35. int ricerca_binaria(int vettore[],int dim, int x);
  36.  
  37. int main()
  38. {
  39.     int i;
  40.     // questi servono il riordinamento e la ricerca binaria
  41.     int v1[MAX];
  42.     int dim;
  43.     int k;
  44.     int pos; // indichera la posizione ricercata
  45.  
  46.     dim=lettura(v1);
  47.  
  48.     /* STAMPA IL VETTORE */
  49.     /* cioe i=dim-1 */
  50.  
  51.     printf("\nVettore:\n");
  52.  
  53.     for(i=0; i<dim; i++)
  54.     {
  55.         printf("%d ", v1[i]);
  56.     }
  57.  
  58.     /* all'interno del main richiamiamo il bubble_sort */
  59.  
  60.     bubble_sort(v1, dim);
  61.  
  62.     // ristampiamo il vettore ordinato
  63.     printf("\n\nVettore Ordinato:\n");
  64.  
  65.     for(i=0; i<dim; i++)
  66.     {
  67.         printf("%d ", v1[i]);
  68.     }
  69.  
  70.     printf("\n\nInserisci elemento da ricercare: ");
  71.     scanf("%d", &k);
  72.  
  73.     pos=ricerca_binaria(v1, dim, k);
  74.  
  75.     if(pos!=-1) /// quindi se posizione e diverso da -1 allora l'elemento e stato trovato
  76.         printf("\nElemento trovato in posizione %d\n", pos);
  77.  
  78.     else
  79.         printf("\nElemento non trovato\n"); // perche vorra dire che pose=-1
  80.  
  81.     return 0;
  82.  
  83. }
  84.  
  85.  
  86. /* DEFINIZIONE DI FUNZIONE  */
  87.  
  88. /* FUNZIONE DI LETTURA */
  89.  
  90. int lettura(int vettore[])
  91. {
  92.     int i=0;
  93.     FILE *fp;
  94.  
  95.     fp=fopen("numeri.txt", "r");
  96.  
  97.     while(!feof(fp))
  98.     {
  99.         fscanf(fp, "%d", &vettore[i]);
  100.         i++;
  101.     }
  102.  
  103.     fclose(fp);
  104.  
  105.     return i; /* ritorna i che e il numero di elementi letti e inserendola
  106.     nella dimensionedima allinterno del main che sarebbe  ** dim=lettura(v1); */
  107. }
  108.  
  109. void bubble_sort(int vett[], int dim)
  110. {
  111.     int i, j, temp;
  112.  
  113.     for(i=dim-1; i>0; i--)
  114.     {
  115.         for(j=0; j<i; j++)
  116.         {
  117.             /** scambiando > con < otterremo un ordinamento in maniera decrescente cioe dal piu grande al piu piccolo **/
  118.             if(vett[j]>vett[j+1]) // dobbiamo confrontare l'elemento di sinistra con l'elemento di destra
  119.             {
  120.                 temp=vett[j];
  121.                 vett[j]=vett[j+1];
  122.                 vett[j+1]=temp;
  123.             }
  124.         }
  125.     }
  126. }
  127.  
  128. int ricerca_binaria(int vettore[],int dim, int x)
  129. {
  130.     int p;
  131.     int u;
  132.     int m;
  133.  
  134.     p=0; // p indica il primo elemento
  135.  
  136.     u=dim-1; // u indica l'ultimo elemento
  137.  
  138.     while(p<=u)
  139.     {
  140.         m=(p+u)/2;
  141.  
  142.         if(vettore[m]==x)
  143.             return m;
  144.  
  145.         else if(vettore[m]<x)
  146.             p=m+1;
  147.  
  148.         else
  149.             u=m-1;
  150.     }
  151.  
  152.     return -1; /* se la ricerca non ha dato nessun risultato si restituisce -1. perche se uscira fuori dal cilo
  153.      while significa che p sara diventato maggiore di u, qindi l'elemento che stiamo cercando non e presente
  154.      all'inteno del vettore */
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement