السلام عليكم ورحمة الله وبركاته....
أخواني طلب منا مشروع تطبيق خوارزمية البحث الثنائي على الملفات
سويت البرنامج بس بافي فيه بعض المشاكل عجزت عن حلها
أرجوا أن أجد لديكم حلا لهذه المشاكل
هذا هو البرنامج
#include <iostream.h>
#include <fstream.h>
#include <string.h>
struct Student
{
public:
char ID[9];
char name[15];
float GPA;
};
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class stdent{
public:
Student a;
fstream file;
int n;
int lo;
int hi;
stdent(){
file.open("Student.DAT", ios::app | ios::out | ios::in | ios::binary );
n=Get_Size();
int lo=0;
int hi= (n-1) * sizeof(Student);
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
int Get_Size(){
int size;
fstream file("Student.DAT", ios::app | ios::out | ios::in | ios::binary );
file.seekg(0,ios::end);
size=file.tellg();
n = (size/sizeof(Student) ) -2;
return n;
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
void disbly(void){
file.seekg( 0 , ios::beg);
for(int i=1; i<=n; i++ ){
file.read( (char*) &a , sizeof(Student) );
cout << a.ID << "\t"<< a.name << "\t"<< a.GPA << endl;
}
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
void disbly(int n){
currency(n);
file.read( (char*) &a , sizeof(Student) );
cout << n <<"\t"<< a.ID << "\t"<< a.name << "\t"<< a.GPA << endl;
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
void disbly(char key[9]){
file.seekg( 0 , ios::beg);
for(int i=1; i<=n; i++ ){
file.read( (char*) &a , sizeof(Student) );
if( strcmp( key, a.ID )== 0 )
cout << a.ID << "\t"<< a.name << "\t"<< a.GPA << endl;
}
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
int Binary_Serch (int lo, int hi , char key[]){
int md;
while( lo <= hi ){
md = (lo + hi )/2;
currency(md); //äÞá ÇáãÄÔÑ Åáì ÇáÓÌá ÇáÍÇáí
if( strcmp(key , a.ID ) == 0 ) return md;
else if( strcmp(key , a.ID ) > 0 ) lo = md+1;
else if( strcmp(key , a.ID ) < 0 )hi= md-1;
}
return -1;
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
void currency(int n){
int byte;
byte = ( n-1 ) * sizeof(Student);
file.seekg( byte , ios::beg);
}//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
};
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void main(){
stdent x;
char key[9];
cout<<"The number Recoured is : "<< x.n <<"\n\n";
cout<<"\n\n"; x.disbly();
cout<<"\n\n"; x.disbly(5);
cout<<"\n\n"; x.disbly("42400075");
cout<<"\n\nBinary Serch \n Enter ID :"; cin>> key;
int f= x.Binary_Serch( x.lo , x.hi , key );
if ( f != -1 )
x.disbly(f);
else cout<< "Not found ";
for(;;);
}
/*************************************************************/
دمتم في رعاية الله،،،

