fork download
  1. #include <stdio.h>
  2.  
  3. char *input_argv[] = { "prog.c", "11", "5", "7", "11", "22" }; // al posto di argv[]
  4. int input_argc = sizeof (input_argv) / sizeof (input_argv[0]); // al posto di argc
  5.  
  6. int
  7. ricercabin (int lista[], int x, int a, int z)
  8. {
  9. int m;
  10.  
  11. // Determina l'elemento centrale.
  12.  
  13. m = (a + z) / 2;
  14.  
  15. if (m < a)
  16. {
  17. // Non restano elementi da controllare: l'elemento
  18. // cercato non c'è.
  19.  
  20. return -1;
  21. }
  22. else if (x < lista[m])
  23. {
  24. // Si ripete la ricerca nella parte inferiore.
  25.  
  26. return ricercabin (lista, x, a, m-1);
  27. }
  28. else if (x > lista[m])
  29. {
  30. // Si ripete la ricerca nella parte superiore.
  31.  
  32. return ricercabin (lista, x, m+1, z);
  33. }
  34. else
  35. {
  36. // La variabile m rappresenta l'indice dell'elemento
  37. // cercato.
  38.  
  39. return m;
  40. }
  41. }
  42.  
  43. int main (int argc, char *argv[])
  44. {
  45. int lista[input_argc - 2];
  46. int x;
  47. int i;
  48.  
  49. // Acquisisce il primo argomento come valore da cercare.
  50.  
  51. sscanf (input_argv[1], "%i", &x);
  52.  
  53. // Considera gli argomenti successivi come gli elementi
  54. // dell'array da scandire.
  55.  
  56. for (i = 2; i < input_argc; i++)
  57. {
  58. sscanf (input_argv[i], "%i", &lista[i-2]);
  59. }
  60.  
  61. // Esegue la ricerca.
  62.  
  63. i = ricercabin (lista, x, 0, input_argc-2);
  64.  
  65. // Emette il risultato.
  66.  
  67. printf ("%i si trova nella posizione %i\n", x, i);
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0.01s 1720KB
stdin
Standard input is empty
stdout
11 si trova nella posizione 2