donmike25 icon

Untitled

donmike25 | PRO | 02/13/14 08:49:56 PM UTC | 0 ⭐ | 191 👁️ | Never ⏰ | []
C |

1.86 KB

|

None

|

0 👍

/

0 👎

#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