?

ermess
04-12-2010, 11:27   |  #1  
OP Üye
Teşekkür Sayısı: 0
57 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

c dilinde bit düzeyinde iki sayiyı(0000 0101 ve 0000 0010  gibi) sıkıştırıp t 8 bitte indirirerek tek bir dosyaya kaydetme yardımm lütfen?

ermess
04-12-2010, 11:49   |  #2  
OP Üye
Teşekkür Sayısı: 0
57 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

VE  BİRDE ŞU KODA BAKARMISINIZ CALŞMİIYOR?????
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
   int main()  {
       FİLE *dg;
       const int n=10;
       char ad[10];
       int no,not,i=0;
       dg=fopen("ögrenci.text","w");
       if(dg==NULL)
       puts("ögrenci.text dosyası acılmadı"),exit(1);
      
       puts("10 ögrenciye ait bilgileri giriniz");
       while(i<=n)
       {
           printf("%d.ninci ögrenci numarasi"i); scanf("%d",&no);
           printf("%d.ninci ögrenci adi",i); scanf("%s",&ad);
           printf8"%d.ninci   ögrenci notu",i);  scanf("%d",¬);
           fprintf(dg,"%5d,%4d,%1d\n",no,ad,not);
           }
           fclose(dg);
           puts("bilgiler kaydedildi.\a");
           getch();
           return 0;
           }

muh34
04-12-2010, 13:15   |  #3  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Bir sayının bitler halinde gosterilmesi,ikilik(binary) tabanda belirtilmesi demektir.Bilindigi uzere ikilik tabandaki sayılar 0(false) ve 1(true) dir.Soruda sayıların 8 bitte ifadesi istendigi icin 8 uzunluguna sahip bir dizi(array) tanımlanabilir.Bu bitlerin elde edilmesi icin ise,girilen sayı 1 olana kadar modul(2) işlemine tabi tutulacaktır.
Yukarıdaki soruda,ilk olarak girilen bir sayının kac bitte olması gerektigi belirlenmelidir.Ornegin kullanıcı 5 girdiginde 3 bit,8 girdiginde 4 bit,16 girdiginde 5 bit olması gerekecektir.Burada yakalanan bagıntı 2 uzeri n degerinin,kullanıcının girdigi sayıdan buyuk olması durumunda gereken bit sayısıdır.Buradaki n degeri dongu iterasyon degeridir.Bit sayısının bilinmesinin sebebi,8 uzunluguna sahip diziye kac veri(bit) girişinin yapılması olmasıdır.Aksi takdirde veri(bit) girisi sabit olacak ve ortaya cıkan sonuclarda goruntu ve hesap acısından anomaliler gorulecektir.
Bu asamadan sonra yapılacak hamle,sayının ikilik tabandaki karsılıgını bulmak olacaktır.Daha onceden de bahsedildigi gibi,bir sayının ikilik tabanda gosterilmesi,ilgili sayının 2 den kucuk olana kadar modul(2) degerine tabi tutulması ile gerceklesir.
Algoritmanın son asamasında ise,8 bitte elde edilen sayının dosyaya yazılması kalacaktır.Sonuc olarak bu algoritmanın C dilindeki karsılıgı asagıdaki gibi olabilir.

#include <stdio.h>
#include <math.h>

main() {

       int sayi=0;
       printf("Sayi:");
       scanf("%d",&sayi);

       int bitSayisi=0;
       while(pow(2,bitSayisi) <= sayi) 
       bitSayisi++;

       char bitDizisi[8]={0};

       int i=7;
       while(bitSayisi!=0) {
       bitDizisi=sayi%2;
       sayi/=2;
       i--;bitSayisi--;
       }
       for(i=0;i<8;i++) {
       if(i==4)
       printf(" ");
       printf("%d",bitDizisi);
       }

       FILE *dosya=NULL;
       if((dosya=fopen("Bit.txt","a"))==NULL) {
       printf("Dosya Acilamadi\n");
       return 1;
       }
       for(i=0;i<8;i++) {
       if(i==4)
       fprintf(dosya," ");
       fprintf(dosya,"%d",bitDizisi);
       }

       getchar();
       return 0;
       }
Soruda 2 sayı uzerinden bit hesaplanması istenmiştir.Yukarıdaki algoritmada,2.sayı icin eklemeyi artık rahatlıkla yapabilirsiniz.
Başarılar

muh34
04-12-2010, 13:22   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

2.sorunuza binaen,su onemli noktaya deginecegim,C dilinde 'not' kelimesi reserve edilmiş bir kelimedir.Yani int not,float not,char not gibi degiskenler tanımlayamassınız.Bu keyword ozel bir kelimedir ve tanımlaması yapılamaz.Kodda bulunan diger noktalar gozden kacan ufak hatalardır.
Kodun duzeltilmiş hali asagıdaki gibidir.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

       int main()  {

       FILE *dg; // I harfi
       const int n=10;
       char ad[10];
       int no,nott,i=0;
       dg=fopen("ögrenci.text","w");
       if(dg==NULL)
       puts("ögrenci.text dosyası acılmadı"),exit(1); 

       puts("10 ögrenciye ait bilgileri giriniz");
       while(i<=n)
       {
           printf("%d.ninci ögrenci numarasi",i); scanf("%d",&no);  // virgul yok
           printf("%d.ninci ögrenci adi",i); scanf("%s",&ad);
           printf("%d.ninci ögrenci notu",i);  scanf("%d",nott); // printf(8 ve - karakteri
           fprintf(dg,"%5d,%4d,%1d\n",no,ad,nott);
           }
           fclose(dg);
           puts("bilgiler kaydedildi.\a");
           getch();
           return 0;
           }


Başarılar

ermess
04-12-2010, 15:27   |  #5  
OP Üye
Teşekkür Sayısı: 0
57 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

tşkler:)