SHOW:
|
|
- or go back to the newest paste.
| 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); |
| 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); |
| 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); |
| 93 | + | if(dir[mid].volt < x)= mid-1); |
| 94 | - | if(dir[mid].volt < x)= mid+1); |
| 94 | + | if(dir[mid].volt > x)= mid+1); |
| 95 | } | |
| 96 | return -1; | |
| 97 | */ |