[Çözüldü] istediğim gibi bir veri tipi tanımlayabilir miyim?

Başlatan berat01, 10 Aralık 2012 - 13:13:02

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

berat01

Merhabalar,

f(x)= cx²+dx+e polinomunun a ve b degerleri arasindaki integralini alan hesabi yaparak  bulan allttaki gibi bir program yazdim.

N sayisi kac tane sütun olacagini veriyor. Su bağlantıda nasil oldugu aciklanmis: http://en.wikipedia.org/wiki/Riemann_integral

#include <stdio.h>
void main()
{
float a,b,c,d,e,dx; int N; float I=0; int k =0;
printf("Lütfen a,b,c,d,e ve N değerlerini sırayla giriniz.\n");
scanf("%f", &a);
scanf("%f", &b);
scanf("%f", &c);
scanf("%f", &d);
scanf("%f", &e);
scanf("%d", &N);
dx=((b-a)/N);
while (k<N){
I = (((c*(a*a))+ (d*a) + e) * dx) + I;
a = a + dx;
k++;
}
printf("%f\n", I);
}


Fakat ben buradaki tüm float ve int degerlerini kendi kafama göre bir veri tipinde tanimlamak istiyorum. Veri tipi toplam 32 bit olacak. Sagdaki 8 bit virgülden sonrasini, soldaki 24 bit ise tamsayi kismini tanimlayacak. Bu tarz bir veri tipi yapmam nasıl mümkün?

ct

Sıfırdan nasıl yazarız diye gcc kaynak kodlarına bakındım ama aradığımı bulamadım. Java ve eclipse ile hızlıca Sun'ın kendi kodlarına bakıp en düzgün nasıl yapılabilir diye inceleyebiliyordum. Sanırım C'yi bilmememden kaynaklanıyor bu. Tek tahmin edebildiğim en az bir buffer lazımdır herhalde :) Kaynak kodları şöyle çektim:

svn co svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch gcc

Acaba yanlış mı indirdim?

Kendi sorumu cevaplamış gibi olacağım ama şimdi baktım şurada varmış release sürümü:

ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-4.7.2/

4.7 sürümü 2011 standardına göre.

plymouth

Merhaba
Sadece 1 türde elemanı olan "union" içine 8 bitlik 4 tane char nesne nasıl olurdu acaba???


union OwnDataType {
char first, second, third, fourth;
};


This life is not the real thing.
It is not even in Beta.
If it was, then OpenBSD would already have a man page for it

berat01

Selam Arkadaşlar,

Çok geç döndüm özür dilerim. Şimdilik projeyi askıya aldım. Başka sınavlarım var. Dediklerinizi deneyeceğim. Gelişmeleri tekrar yazarım. Teşekkürler.

XQR4N

struct veritipim{
      int * virgul_once;
      int * virgul_sonra;
}

struct veritipim a;

a.virgul_once  = malloc(3 * sizeof(int));
a.virgul_sonra = malloc(1*sizeof(int));


Hepimiz özgür olana kadar hiçbirimiz özgür değiliz!
-----------------------------------------------------

berat01

Merhaba arkadaslar,

Cok gec cevap verdim kusura bakmayin. Bu sorduklarim, okul ödevi icin gerekliydi. Ödevi 3 arkadas yapiyorduk. Baska bir arkadas bu sordugum sorunu cözdü.

Konu kapatilabilir.

Tesekkürler.

if

@berat01, nasıl çözüldüğünü buraya geçer misiniz?

berat01

Tabi, arkadasa sorup kodlari alabilirim. Anlattigi kadariyla "struct" denilen bir sey kullanmis :)

if

Ben bile biliyorum struct ile veri tipi tanımlanacağını @berat01 :)

Aslında @XQR4N göstermiş.

berat01

:) Arkadaş şimdi mail attı. 24 bit virgul öncesi ve 8 bit virgül sonrasi olarak tanımlamış. Yolladığı kod şöyle:

#include <stdint.h>
#include <stdio.h>


struct sayi24_8{
    uint32_t virgulOncesi : 24;
    uint8_t virgulSonrasi;
} MyDataType;


unint32_t stdint.h içinde tanımlı bir yapıymış. Tanımladığımız data tipine değer vermek için de örneğin şöyle bir kod girilmesi gerekiyormuş:

myDataType.virgulOncesi = 0x0000a9;


Bu arada çarpma ve bölme işlemleri için de ayrıca iki fonksiyon tanımlamak gerekiyor. Çünkü yapılan işlemlerin sonucunda virgül olması gereken yer 8 bit sağa yada sola kayıyor.

XQR4N arkadaş göndermiş evet. Ama dediğim sonra çok ilgilenmedim bu konu ile, benim yerime arkadaş halletti durumu :)

Teşekkürler tekrardan.