buna bakabilecek var mı?

SKS
26-12-2011, 10:05   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
12 mesaj
Kayıt Tarihi:Kayıt: Haz 2011

Alttaki soruya sorunun atkındaki kod olur mu?yani yaklaşıkolarak…
typedef struct Satir
{
int numara;
char ad[20], soyad[20];
struct Satir *sonraki;
struct Satir *onceki;


} Satirlar;


Yukarıdaki yapıda olan ve bilgileri text dosyada "#"karakteri ile ayrılmış olarak tutulan "Ogrenciler.txt" dosyasındakikayıtları öğrenci numarasına göre kendiniz belirleyeceğiniz en az 2 farklı hashfonksiyonu kullanarak:

1) Hash tablosunaekleyiniz.

2) Hash tablosu üzerinde öğrenci numarasına göre arama yapacakbir Hash_Arama() fonksiyonu yazınız. Yazacağınız fonksiyon, aranan kayıdakullandığınız farklı hash fonksiyonlarına göre kaç adımda ulaştığıbilgilerinide listeleyecektir.

3) Her hash fonksiyonuiçin Hash tablosu üzerindeki tüm kayıtlara ortalama kaç adımda ulaşıldığınıhesaplayacak bir fonksiyon yazınız.


(Not: Çakışmaya çözümolarak çift yönlü bağlı liste tekniği kullanılacaktır.)

#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
FILE *file;

typedef struct Satir
{

int number;

int index;
char ad[20], soyad[20];
struct Satir *sonraki;
struct Satir *onceki;


} Satirlar;


typdef struct _Table{

Satirlar str[20];


}Table;


Table table;






voidinitialize_Table(){


int i;


for(i=0;i<20;i++){


table.str.index=-1;


table.str.sonraki=NULL;


table.str,onceki=NULL;


}}







voidcreatNewFile()//dosya yoksa ilk defa yaratmak için

{

int i;


FILE *file;


if ( ( file =fopen( "data.dat", "wb" ) ) == NULL )//dosya ilk defayaratılacak


{


printf("File could not be created.\n" );


}


else


{


printf("File creating...\n" );






structSatir new_satir;


for(i=0;i<20;i++){


fwrite(&new_satir,sizeof(structSatir),1,file);}


fclose(file);


return;

}

int has1(int number){



return number%20;


}








void printAllFile()

{

struct Satirnew_satir;


int i;


system("cls");


fseek(file, 0,SEEK_SET);


for(i=0;i<20;i++)


{


if(i==20)


printf("----------------------------------------------------------------\n");


fread(&new_satir,sizeof(structSatir),1,file);


printf("%d%d %s %d\n",i,new_ogrenci.number,new_ogrenci.ad,new_ogrenci.index);


}



}







voidprintToFile(struct Satir str)

{

struct ogrencitemp;


struct ogrenciorigin;//probe 1 olan öğrenci


int hashing;


int adress;


intfp_counter;//file pointer counter


hashing=hash(ogrenci.number);


fseek(file,sizeof(struct Satir)*hashing, SEEK_SET);


fread(&origin,sizeof(structSatir),1,file);


if(origin.number==-1)//hashfonksiyonundan çıkan home adress boş ise direk yerine yazar


{


ogrenci.next=-1;


fseek(file,sizeof(struct Satir)*hashing, SEEK_SET);


fwrite(&ogrenci,sizeof(structogrenci),1,file);


}


else//homeadress dolu ise


{


ogrenci.next=origin.next;


fseek(file,sizeof(struct Satir)*(REALSIZE-1), SEEK_SET);


fread(&temp,sizeof(structSatir),1,file);


fp_counter=REALSIZE-1;//dosyasonu


while(temp.number!=-1&& fp_counter>=0)//dosya sonundan boş buluncaya kadar geri geliyoruzve dosyanın en başına gelirsek artık dosyanın dolu olduğu uyarısı veriyoruz.


{


fp_counter--;


fseek(file,sizeof(struct Satir)*fp_counter, SEEK_SET);


fread(&temp,sizeof(structSatir),1,file);


}


if(fp_counter>=0)//whiledan çıkma sebebi boş yer bulması ise


{


fseek(file,sizeof(struct Satir)*-1, SEEK_CUR);


fwrite(&ogrenci,sizeof(structSatir),1,file);


origin.next=fp_counter;


fseek(file,sizeof(struct Satir)*hashing, SEEK_SET);


fwrite(&origin,sizeof(structSatir),1,file);




}


else//whiledan çıkma sebebinin dosyanın en başına kadar ulaşmış ancak yer bulamamış olması


{


printf("Fileis full!!!\n");


}



}





}






int find(intnumber)//girilen bi numaralı öğrencinin kayıtlarda olup olmadığı

{

struct ogrencistır;


inthashing=hash(number);


fseek(file,sizeof(struct Satir)*hashing, SEEK_SET);


fread(&ogrenci,sizeof(structSatir),1,file);


while(ogrenci.number!=number&& stır.next!=-1)


{


fseek(file,sizeof(struct Satir)*stır.next, SEEK_SET);


fread(&stır,sizeof(structSatir),1,file);


}


if(stır.number==number)


{




return1;


}


else


{




return0;


}


}






nt main()

{

int key=0;//menüde seçim


intnumber;//find fonksiyonu için numara alma


struct Satirnew_satir;


if ( ( file =fopen( "data.dat", "rb+" ) ) == NULL )//dosya varsaaçılıyor


{


//dosyayoksa yaratılıyor


printf("File could not be opened.\n" );


creatNewFile();//yoksayaratılıyor


if ( (file = fopen( "data.dat", "rb+" ) ) == NULL )//tekraraçmaya çalışıyor


{


printf("File could not be opened. Program stops\n" );


}


else


{


printf("File is opened now.\n" );


}


}






///////


printf("------------------\nMenu:\n1-InsertRecord\n2-Print File\n3-FindRecord\n4-Exit\n------------------\nChoice:");


scanf("%d",&key);


while(key!=4)


{


switch (key)


{


case 1:


printf("StudentNumber:");


scanf("%d",&(new_satir.number));


while(find(new_satir.number))


{


printf("Thereis student with this number,Enter new number!\nStudent Number:");


scanf("%d",&(new_satir.number));


}


printf("StudentName:");


scanf("%s",&(new_ogrenci.name));


printf("StudentMidterm1:");





break;


case 2:


printAllFile();


break;


case 3:


printf("Enternumber:");


scanf("%d",&number);


if(find(number))


printf("Studentis found!\n");


else


printf("Studentis not found!\n");


break;


default:


printf("WrongChoice!\n");


break;


}


printf("------------------\nMenu:\n1-InsertRecord\n2-Print File\n3-FindRecord\n4-Exit\n------------------\nChoice:");


scanf("%d",&key);


system("cls");


}


}











Kapalı Hesap (153334)
26-12-2011, 11:07   |  #2  
Kapalı Hesap
Teşekkür Sayısı: 186
6,419 mesaj
Kayıt Tarihi:Kayıt: Eki 2009

konusan bilgisayarimi tasarliyon bune boyle uzun bir kod.

dervipasa
26-12-2011, 23:41   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
650 mesaj
Kayıt Tarihi:Kayıt: Tem 2010

soryyyy