View difference between Paste ID: drJsfZGq and V7LGt5tj
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
*/