animgr
جمعه 29 تیر 1386, 20:02 عصر
با سلام و خسته نباشید!
خوشحال می شوم به من کمک بکنید...من در حال نوشتن یک برنامه برای فاینالم هستم برای درس ذخیره که با ذخیره و بازیابی به شیوه مستقیم می باشد. من تابع ورود insert را نوشتم ولی باید در یک مکان تکراری نرود...وقتی debug را هم چک می کنم حلقه while درست نمی باشد! برنامه را می گذارم ا
گر توانستید اشکالم را بگویید!
#define Maxsize 20
#define Bucsize 2
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct{
char stat;
int en;
}A;
int Hash(A);
void Insert(A);
void main(){
FILE *fp;
A a;
fp=fopen("file.dat","w");
// for(int i=0;i<6;i++){
// printf("write th value: ");
// scanf("%d",&a.en);
a.en=5;
Insert(a);
a.en=15;
Insert(a);
a.en=55;
Insert(a);
}
int Hash(A a){
return a.en=a.en%(Maxsize/Bucsize)+1;
}
void Insert(A a){
A a2={0},a3={0};
int i,j;
int tmp;
FILE *fp;
int t=0,b2=0,k2=0;
int k=Hash(a);
fp=fopen("file.dat","r+");
fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);
printf("ftel1:%d\n",ftell(fp));
printf("adrese avaliye=%d\n",ftell(fp));
fscanf(fp,"%c",&a.stat);
printf("avalin rec:%c %d\n",a.stat, a.en);
fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);
printf("ftel1:%d\n",ftell(fp));
if(a.stat!='f'){
a2.stat='f';
a2.en=a.en;
printf("ftelee=%d\n",ftell(fp));
printf("empty=%d\n",ftell(fp)/sizeof(A));
fwrite(&a2,sizeof(A),1,fp);
}
else if(a.stat=='f'){
while(a.stat=='f'){
printf("ftel%d\n",ftell(fp));
fseek(fp,sizeof(A),SEEK_CUR);
fread(&a,sizeof(A),1,fp);
// fscanf(fp,"%c",&a2.stat);
printf("stat baadi:%c",a2.stat);
// fseek(fp,-sizeof(A),SEEK_CUR);
a.stat=a2.stat;
printf("stat baadi:%c",a.stat);
printf("full=%d\n",ftell(fp)/sizeof(A));
// if(ftell(fp)>=(Maxsize*sizeof(A))){
// rewind(fp);
// fread(&a,sizeof(A),1,fp);
// fseek(fp,-sizeof(A),SEEK_CUR);
// }
continue;
}
a3.stat='f';
a3.en=a.en;
fwrite(&a3,sizeof(A),1,fp);
printf("ftel%d\n",ftell(fp));
fseek(fp,-(sizeof(A)),SEEK_CUR);
t=ftell(fp);
printf("\tt=%d ",t);
printf("final=%d\n",ftell(fp)/sizeof(A));
}
// t=t/sizeof(int);
// k2=floor(t/Bucsize)+1; //number of bucket
// b2=t%Bucsize+1; //which cell of bucket
// printf("k2=%d k=%d b2=%d\n",k2,k,b2);
printf("\n\n");
rewind(fp);
fclose(fp);
}
خوشحال می شوم به من کمک بکنید...من در حال نوشتن یک برنامه برای فاینالم هستم برای درس ذخیره که با ذخیره و بازیابی به شیوه مستقیم می باشد. من تابع ورود insert را نوشتم ولی باید در یک مکان تکراری نرود...وقتی debug را هم چک می کنم حلقه while درست نمی باشد! برنامه را می گذارم ا
گر توانستید اشکالم را بگویید!
#define Maxsize 20
#define Bucsize 2
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct{
char stat;
int en;
}A;
int Hash(A);
void Insert(A);
void main(){
FILE *fp;
A a;
fp=fopen("file.dat","w");
// for(int i=0;i<6;i++){
// printf("write th value: ");
// scanf("%d",&a.en);
a.en=5;
Insert(a);
a.en=15;
Insert(a);
a.en=55;
Insert(a);
}
int Hash(A a){
return a.en=a.en%(Maxsize/Bucsize)+1;
}
void Insert(A a){
A a2={0},a3={0};
int i,j;
int tmp;
FILE *fp;
int t=0,b2=0,k2=0;
int k=Hash(a);
fp=fopen("file.dat","r+");
fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);
printf("ftel1:%d\n",ftell(fp));
printf("adrese avaliye=%d\n",ftell(fp));
fscanf(fp,"%c",&a.stat);
printf("avalin rec:%c %d\n",a.stat, a.en);
fseek(fp,(long)Bucsize*sizeof(A)*(k-1),SEEK_SET);
printf("ftel1:%d\n",ftell(fp));
if(a.stat!='f'){
a2.stat='f';
a2.en=a.en;
printf("ftelee=%d\n",ftell(fp));
printf("empty=%d\n",ftell(fp)/sizeof(A));
fwrite(&a2,sizeof(A),1,fp);
}
else if(a.stat=='f'){
while(a.stat=='f'){
printf("ftel%d\n",ftell(fp));
fseek(fp,sizeof(A),SEEK_CUR);
fread(&a,sizeof(A),1,fp);
// fscanf(fp,"%c",&a2.stat);
printf("stat baadi:%c",a2.stat);
// fseek(fp,-sizeof(A),SEEK_CUR);
a.stat=a2.stat;
printf("stat baadi:%c",a.stat);
printf("full=%d\n",ftell(fp)/sizeof(A));
// if(ftell(fp)>=(Maxsize*sizeof(A))){
// rewind(fp);
// fread(&a,sizeof(A),1,fp);
// fseek(fp,-sizeof(A),SEEK_CUR);
// }
continue;
}
a3.stat='f';
a3.en=a.en;
fwrite(&a3,sizeof(A),1,fp);
printf("ftel%d\n",ftell(fp));
fseek(fp,-(sizeof(A)),SEEK_CUR);
t=ftell(fp);
printf("\tt=%d ",t);
printf("final=%d\n",ftell(fp)/sizeof(A));
}
// t=t/sizeof(int);
// k2=floor(t/Bucsize)+1; //number of bucket
// b2=t%Bucsize+1; //which cell of bucket
// printf("k2=%d k=%d b2=%d\n",k2,k,b2);
printf("\n\n");
rewind(fp);
fclose(fp);
}