Patey

Untitled

Oct 10th, 2021
869
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define _CRT_SECURE_NO_WARNINGS
  4.  
  5. /* FUNCTIA RETURNEAZA NUMARUL DE PASI ADICA DE COMPARATII, SE CAUTA x */
  6. int cautare_binara(float x, float* y, int n, int epsilon)
  7. {
  8.     int contor = 0, s, d, m;
  9.     s = 0;
  10.     d = n;
  11.  
  12.  
  13.     while (s < d)
  14.     {
  15.         contor++;
  16.         m = (s + d) / 2;
  17.  
  18.         if (fabsf(x - y[m]) <= epsilon)
  19.             break;
  20.  
  21.         if (x < y[m])
  22.             d = m - 1;
  23.         else s = m - 1;
  24.     }
  25.     return contor;
  26. }
  27.  
  28. /* FUNCTIA RETURNEAZA NUMARUL DE PASI ADICA DE COMPARATII, SE CAUTA x */
  29. int cautare_liniara(float x, float* y, int n, int epsilon)
  30. {
  31.     int contor = 0;
  32.     for (int i = 0; i < n; i++)
  33.     {
  34.         contor++;
  35.         if (y[i]==x)
  36.             return contor;
  37.     }
  38. }
  39.  
  40. int sortat(float* y, int n)
  41. {
  42.     for (int i = 0; i < n - 2; i++)
  43.     {
  44.         for (int j = i + 1; j < n - 1; j++)
  45.         {
  46.             if (y[i] > y[j])
  47.                 return 0;
  48.         }
  49.     }return 1;
  50.  
  51. }
  52.  
  53. int main(void) {
  54.  
  55.     FILE* f, * g;
  56.     unsigned n;
  57.     float *y, epsilon;
  58.     int  i = 0, x;
  59.  
  60.     f = fopen("Prom.txt", "rt");
  61.     g = fopen("stud.txt.txt", "wt");
  62.  
  63.     fscanf(f, "%d", &n);//memoram in n numarul numerelor din fisier
  64.  
  65.     y = (float*)malloc(n * sizeof(float*));
  66.     while (!feof(f) && i < n)
  67.     {
  68.         fscanf(f, "%f", &y[i]);
  69.         i++;
  70.     }
  71.     fscanf(f, "%d", &x);
  72.     fscanf(f, "%f", &epsilon);
  73.  
  74.  
  75.     if (sortat(y,n))
  76.             fprintf(g, "%d", cautare_binara(x, y,  n, epsilon));
  77.     else
  78.             fprintf(g, "%d", cautare_liniara(x, y,n,epsilon));
  79.  
  80. }
RAW Paste Data