•Rmrn56
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« : Februarie 04, 2019, 16:07:12 » |
|
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)
|