#include <stdio.h>
#include <stdlib.h>
#define NDATA 10
struct ivdata {
float volt;
float amp;
};
int seqSearch(float, struct ivdata [], int);
int binSearch(float, struct ivdata [], int, int);
void readData(struct ivdata [], int);
void printData(struct ivdata [], int);
FILE * in;
int main(void) {
int res1, res2;
float input;
struct ivdata data[NDATA];
in = fopen("t8data", "r");
if (in == NULL) {
fprintf(stderr, "Error opening file\n");
exit(1);
}
readData(data, NDATA);
printData(data, NDATA);
printf("Enter the voltage value to search>> ");
scanf("%f", &input);
res1 = seqSearch(input, data, NDATA);
res2 = binSearch(input, data, 0, NDATA-1);
if (res1 != -1)
printf("Sequential search: V=%2.2f, I=%2.2f\n",
data[res1].volt, data[res1].amp);
else
printf("Not found!\n");
if (res2 != -1)
printf("Binary search: V=%2.2f, I=%2.2f\n",
data[res2].volt, data[res2].amp);
else
printf("Not found!\n");
fclose(in);
return 0;
}
void readData(struct ivdata dir[], int n) {
int j=0;
float i,v;
while (j<n) {
fscanf(in, "%f %f", &v, &i);
dir[j].volt = v;
dir[j].amp = i;
j++;
}
}
void printData(struct ivdata dir[], int n) {
int j;
for (j=0; j<n; j++)
printf("%2.2f ; %2.2f\n", dir[j].volt, dir[j].amp);
}
int seqSearch(float x, struct ivdata dir[], int n) {
int i;
for (i=0; i<n; i++)
if (x == dir[i].volt)
return(i);
return(-1);
}
int binSearch(float x, struct ivdata dir[], int start, int end) {
if(start > end)return(-1);
int mid = (start+end)/2;
if(dir[mid].volt==x)return mid;
if(dir[mid].volt > x)return binSearch(x,dir,start,mid-1);
if(dir[mid].volt < x)return binSearch(x,dir,mid+1,end);
}
/*Iteration
int mid;
while(start <= end);
{
mid=(start+end)/2;
if(dir[mid].volt==x)return mid;
if(dir[mid].volt > x)= mid-1);
if(dir[mid].volt < x)= mid+1);
}
return -1;
*/
Comments