I got this error for binary search program in c, although it asked me give inputs and printed the correct output.Below is the error I got in the output window.
binarysearch.c: In function 'sort': binarysearch.c:22:5: warning:
implicit declaration of function 'bin'
[-Wimplicit-function-declaration]
bin(a,size);//invokes bin(int,int) to find element
^~~ binarysearch.c: At top level: binarysearch.c:24:6: warning: conflicting types for 'bin' void bin(int a[],int size)//finds element
using binary sort technique and return its index
^~~ binarysearch.c:22:5: note: previous implicit declaration of 'bin' was here
bin(a,size);//invokes bin(int,int) to find element
^~~
Enter size of array:
- How do I resolve the error?
- What does the error mean?
- Why did it still ask for inputs when an error occurred?
I made 2 functions. First function that is void sort(int a[],int size)
sorted the array using selection sort and printed it and invoked the second function, the function below that or the second function that is void bin(int a[],int size)
used binary search to find an element and printed its position(index 1). Then I wrote the main function.
The program is:
#include<stdio.h>
void sort(int a[],int size)//sorts array in ascending order
{
int min;
for(int i=0;i<size;i )
{
for(int j=0;j<size;j )
{
if(a[j]>a[j 1])//checks if elements at position 'i' is greater than element at position (i 1) and exchanges values if true
{
min=a[j];
a[j]=a[j 1];
a[j 1]=min;
}
}
}
printf("Sorted array:");
for(int i=0;i<size;i )//prints sorted array
{
printf("%d ",a[i]);
}
bin(a,size);//invokes bin(int,int) to find element
}
void bin(int a[],int size)//finds element using binary sort technique and return its index
{
int key;//stores element to be found
printf("\nEnter element to be found:");
scanf("%d",&key);
int sp=0;//stores starting point which is initially 0
int ep=size-1;//stores ending point which is initially one less than size of array
int mid;//stores average of sp and ep
int count=0;//counter
printf("Occurrence is:");
while(sp<=ep)
{
mid=(sp ep)/2;
if(a[mid]>key)//to run loop for elements that are before mid
{
ep=mid-1;
}
else if(a[mid]<key)//to run loop for elements that are after mid
{
sp=mid 1;
}
else if(a[mid]==key)//when element is found
{
printf("%d",mid 1);
count =1;
break;//to stop the loop
}
}
if(count==0)//in case element is not found
printf("ELEMENT NOT FOUND");
}
int main()
{
int n;//stores size of array
printf("Enter size of array:");
scanf("%d",&n);
int arr[n];//creates array of size n
printf("Enter elements:");
for(int i=0;i<n;i )
{
scanf("%d",&arr[i]);
}
sort(arr,n);//invoke sort(int,int) function which later invokes bin(int,int) function
return 0;
}
CodePudding user response:
Declare a routine before using it.
Either move the definition of bin
before the definition of sort
or put this non-definition declaration before sort
:
void bin(int a[], int size);