Am incercat sa rezolv problema Cautare Binara; In codeblocks functioneaza ok, cu fisiere cu tot;
Problema e rezolvata in subprograme apelate in functie de caz. Subprogramul face cautarea binara plus cautarea pozitiei maxime sau minime a elementului, in functie de cerinta.
sursa arata asa:
#include <iostream>
#include<fstream>
#include<cmath>
#include<climits>
using namespace std;
int BS1(int v[],int l,int r,int x ){
int mid;
while(l<=r){
mid=l+(r-l)/2;
if(v[mid]<x) l=mid+1;
else if(v[mid]==x){
while(v[mid]==x)
mid++;
return mid-1;}
else if(v[mid]>x) r=mid-1;
}
return -1;
}
int BS2(int v[],int l,int r,int x){
int mid,raux=r,laux=l;
while(raux>=laux){
mid=laux+(raux-laux)/2;
if(v[mid]==x){
while(v[mid]==x)
mid++;
return mid-1;}
else if(x>v[mid])laux=mid+1;
else if(x<v[mid])raux=mid-1;
}
BS2(v,l,r,x-1);
}
BS3(int v[],int l,int r, int x){
int mid,raux=r,laux=l;
while(raux>=laux){
mid=laux+(raux-laux)/2;
if(v[mid]==x){
while(v[mid]==x)
mid--;
return mid+1;
}
else if(x>v[mid])laux=mid+1;
else if(x<v[mid])raux=mid-1;
}
BS3(v,l,r,x+1);
}
int main(){
int n,v[100005],x,m,caz;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
in>>n;
for(int i=1;i<=n;i++)
in>>v;
in>>m;
for(int j=1;j<=m;j++){
in>>caz>>x;
if(caz==0){
out<<BS1(v,1,n,x)<<'\n';
}
if(caz==1){
out<<BS2(v,1,n,x)<<'\n';
}
if(caz==2){
out<<BS3(v,1,n,x)<<'\n';
}
}
return 0;
}
Cu toate ca merge in CodeBlocks, primesc eroare de compilare aici. Una dintre sintagme arata asa. Imi poate explica cineva va rog ce inseamna si ce ar trebui sa fac?
main.cpp: In function 'int BS1(int*, int, int, int)':
main.cpp:12:9: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
while(v[mid]==x)