C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

AsHeS

#480
Aşağıda ki gibi bir döngüde pow() fonksiyonu düzgün çalışmıyor şöyle ki;
for (index=0;index<6;index++){
             y=index*(pow(10,index));
k=k+y;
}

y değişkenine debug ile bakınca  mesela index=2 olunca 200 döneceğine 199 dönüyor sebebini çözemedim.

JKramer

Casting'le ilgili olabilir, pow fonksiyonu double döndürmüyor mu?

Erol YILMAZ

float integer dönüşümünden kaynaklanıyor gibi geldi bana da....

AsHeS

#483
O zaman daha ilginç birşey söyleyeyim döngü yapmadan
2*pow(10,2) kullanınca temiz 200 veriyor bende castingde düşünümüştüm en başta ama bu daha da kafamı karıştırdı.
Fonksiyon lazım olduğundan değilde merak uyandırdı böyle olması.
    int x=4,y,index,k=0,m=0,sayi=3;
char degisken[]="123";
for (index=0;index<sayi;index++){

  k+=(degisken[index]-0x30)*pow(10.00,index);
}
  m=1*pow(10,0)+2*pow(10,1)+3*pow(10,2);
printf("\nk=%d m=%d",k,m);
system("pause");
}

Bu kodla k=320 çıkıyor. m=321 çıkıyor :)

jackal183

Alıntı yapılan: AsHeS35 - 14 Mayıs 2013, 13:15:52
Aşağıda ki gibi bir döngüde pow() fonksiyonu düzgün çalışmıyor şöyle ki;
for (index=0;index<6;index++){
             y=index*(pow(10,index));
k=k+y;
}

y değişkenine debug ile bakınca  mesela index=2 olunca 200 döneceğine 199 dönüyor sebebini çözemedim.

hocam y'nin ve indexin ne şekilde tanımlandığına bağlı galiba. c++ da pow fonksiyonunu parametrelerini şu linkte açıklamış. http://www.cplusplus.com/reference/cmath/pow/

buna göre ben ufak bir deneme yaptım. y'yi double tanımladığım zaman doğru çalışıyor ancak integer tanımladığım zaman hatalı sonuç veriyor


z

#485
C'de 24 bitlik bir değişken tanımlayabiliyormuyuz?  Ramda 3 x 8 byte yer kaplayacak. (!!!! 32 bit değil !!!)

Yada 40 bit değişken tanımlayabiliyormuyuz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

AsHeS

#486
unsigned short long int XC8 derleyicisinde 24-bit değişkeni tanımlamada kullanılıyor. 40 bit için structtan başka bir yol düşünemedim (8-bit için).
hem 24 bit hem 40 bit tanımlayabiliriz bir structın içinde mesela struct içinde bir adet unsigned short long int ve 5 adet unsigned char ile __packed anahtar sözcüğü ile yapılabilir gibi z hocam (32 bit için).
24+16 veya 32+8 şeklindede kombine edilebilir 40 bit sayımız.

z

Örneğin 24 bitlik i değişken tanımlayabileyim ve i++; şeklinde kullanabileyim isterim. (32 Bit tanımla gitsin cevap olmayacak)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

jackal183

microchipin generictypedef.h dosyasında adam şöyle birşey tanımlamış

/* 24-bit type only available on C18 */
#if defined(__18CXX)
typedef union
{
    UINT24 Val;
    UINT8 v[3] __PACKED;
    struct __PACKED
    {
        UINT8 LB;
        UINT8 HB;
        UINT8 UB;
    } byte;
    struct __PACKED
    {
        __EXTENSION UINT8 b0:1;
        __EXTENSION UINT8 b1:1;
        __EXTENSION UINT8 b2:1;
        __EXTENSION UINT8 b3:1;
        __EXTENSION UINT8 b4:1;
        __EXTENSION UINT8 b5:1;
        __EXTENSION UINT8 b6:1;
        __EXTENSION UINT8 b7:1;
        __EXTENSION UINT8 b8:1;
        __EXTENSION UINT8 b9:1;
        __EXTENSION UINT8 b10:1;
        __EXTENSION UINT8 b11:1;
        __EXTENSION UINT8 b12:1;
        __EXTENSION UINT8 b13:1;
        __EXTENSION UINT8 b14:1;
        __EXTENSION UINT8 b15:1;
        __EXTENSION UINT8 b16:1;
        __EXTENSION UINT8 b17:1;
        __EXTENSION UINT8 b18:1;
        __EXTENSION UINT8 b19:1;
        __EXTENSION UINT8 b20:1;
        __EXTENSION UINT8 b21:1;
        __EXTENSION UINT8 b22:1;
        __EXTENSION UINT8 b23:1;
    } bits;
} UINT24_VAL, UINT24_BITS;
#endif

fatih6761

Alıntı yapılan: jackal183 - 18 Haziran 2013, 10:20:58
microchipin generictypedef.h dosyasında adam şöyle birşey tanımlamış

/* 24-bit type only available on C18 */
#if defined(__18CXX)
typedef union
{
    UINT24 Val;
    UINT8 v[3] __PACKED;
    struct __PACKED
    {
        UINT8 LB;
        UINT8 HB;
        UINT8 UB;
    } byte;
    struct __PACKED
    {
        __EXTENSION UINT8 b0:1;
        __EXTENSION UINT8 b1:1;
        __EXTENSION UINT8 b2:1;
        __EXTENSION UINT8 b3:1;
        __EXTENSION UINT8 b4:1;
        __EXTENSION UINT8 b5:1;
        __EXTENSION UINT8 b6:1;
        __EXTENSION UINT8 b7:1;
        __EXTENSION UINT8 b8:1;
        __EXTENSION UINT8 b9:1;
        __EXTENSION UINT8 b10:1;
        __EXTENSION UINT8 b11:1;
        __EXTENSION UINT8 b12:1;
        __EXTENSION UINT8 b13:1;
        __EXTENSION UINT8 b14:1;
        __EXTENSION UINT8 b15:1;
        __EXTENSION UINT8 b16:1;
        __EXTENSION UINT8 b17:1;
        __EXTENSION UINT8 b18:1;
        __EXTENSION UINT8 b19:1;
        __EXTENSION UINT8 b20:1;
        __EXTENSION UINT8 b21:1;
        __EXTENSION UINT8 b22:1;
        __EXTENSION UINT8 b23:1;
    } bits;
} UINT24_VAL, UINT24_BITS;
#endif

Hocam adamlar zaten halihazırda UINT24 tipini kullanmışlar. Sadece C18 de mevcut demişler...

Mr.Java

Benim sorum basittir.

struct birlik
{
    int *a;
    int *b;
    float *c;
};
typedef struct birlik ADC;


diye bir tanımlama yaptim.Oluşturulan sınıftaki değişkenlere değer nasıl veriliyor ? İlk değer ve fonksyon içerisinde kullanmaya yönelik ?

Teşekkürler..

Klein

int x,y;
float z[10];

typedef struct
{
    int *a;
    int *b;
    float *c;
}birlik;

birlik ADC = { &x, &y, z};

muhittin_kaplan


Gökhan BEKEN

Alıntı yapılan: Fkarizmatik - 18 Haziran 2013, 17:43:44
Benim sorum basittir.

struct birlik
{
    int *a;
    int *b;
    float *c;
};
typedef struct birlik ADC;


diye bir tanımlama yaptim.Oluşturulan sınıftaki değişkenlere değer nasıl veriliyor ? İlk değer ve fonksyon içerisinde kullanmaya yönelik ?

Teşekkürler..

Değişken gruplamaktan bahsediyorsanız c++ da böyle kullanılıyor
struct birinci_grup { 
	int ilk_sayi;
	int ikinci_sayi;
}; 

int main()
{
	struct birinci_grup, hesapla;

	hesapla.ilk_sayi=5;
	hesapla.ikinci_sayi=10;
}
Özel mesaj okumuyorum, lütfen göndermeyin.

Klein

Alıntı yapılan: muhittin_kaplan - 19 Haziran 2013, 13:08:16
Doğrudan Ulaşamıyormuyuz ?
soruyu tam anlamadım?
sorduğun doğrudan ulaşma şöyle bir şey mi

struct MyStruct
{
int a;
int b;
int c;
} = { 1,2,3}

bu şekilde de tip tanımı yapmadan , doğrudan yapıyı tanımlayıp erişebilirsiniz.