donmike25

tuto 8 q1

Jan 8th, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NDATA 10
  4.  
  5. struct ivdata {
  6. float volt;
  7. float amp;
  8. };
  9.  
  10. int seqSearch(float, struct ivdata [], int);
  11. int binSearch(float, struct ivdata [], int, int);
  12. void readData(struct ivdata [], int);
  13. void printData(struct ivdata [], int);
  14. FILE * in;
  15.  
  16. int main(void) {
  17. int res1, res2;
  18. float input;
  19. struct ivdata data[NDATA];
  20.  
  21. in = fopen("t8data", "r");
  22. if (in == NULL) {
  23. fprintf(stderr, "Error opening file\n");
  24. exit(1);
  25. }
  26.  
  27. readData(data, NDATA);
  28. printData(data, NDATA);
  29.  
  30. printf("Enter the voltage value to search>> ");
  31. scanf("%f", &input);
  32.  
  33. res1 = seqSearch(input, data, NDATA);
  34. res2 = binSearch(input, data, 0, NDATA-1);
  35. if (res1 != -1)
  36.     printf("Sequential search: V=%2.2f, I=%2.2f\n",
  37.     data[res1].volt, data[res1].amp);
  38. else
  39.     printf("Not found!\n");
  40.  
  41.  
  42. if (res2 != -1)
  43.     printf("Binary search: V=%2.2f, I=%2.2f\n",
  44.     data[res2].volt, data[res2].amp);
  45. else
  46.     printf("Not found!\n");
  47.  
  48. fclose(in);
  49. return 0;
  50. }
  51.  
  52. void readData(struct ivdata dir[], int n) {
  53. int j=0;
  54. float i,v;
  55. while (j<n) {
  56.     fscanf(in, "%f %f", &v, &i);
  57.     dir[j].volt = v;
  58.     dir[j].amp = i;
  59.     j++;
  60. }
  61. }
  62.  
  63. void printData(struct ivdata dir[], int n) {
  64. int j;
  65. for (j=0; j<n; j++)
  66.     printf("%2.2f ; %2.2f\n", dir[j].volt, dir[j].amp);
  67. }
  68. int seqSearch(float x, struct ivdata dir[], int n) {
  69.  
  70.  
  71.     int i;
  72.     for (i=0; i<n; i++)
  73.         if (x == dir[i].volt)
  74.         return(i);
  75.    
  76.         return(-1);
  77. }
  78. int binSearch(float x, struct ivdata dir[], int start, int end) {
  79.  
  80.    
  81.     if(start > end)return(-1);
  82.     int mid = (start+end)/2;
  83.     if(dir[mid].volt==x)return mid;
  84.     if(dir[mid].volt > x)return binSearch(x,dir,start,mid-1);
  85.     if(dir[mid].volt < x)return binSearch(x,dir,mid+1,end);
  86. }
  87. /*Iteration
  88. int mid;
  89. while(start <= end);
  90. {
  91. mid=(start+end)/2;
  92. if(dir[mid].volt==x)return mid;
  93. if(dir[mid].volt > x)= mid-1);
  94. if(dir[mid].volt < x)= mid+1);
  95. }
  96. return -1;
  97. */
Advertisement
Add Comment
Please, Sign In to add comment