C Programlama diliyle şamatalar

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

mir_as82

olur ama sayının tam kısmını alırsın

mufitsozen

Alıntı yapılan: unknownperson - 23 Mart 2015, 15:01:40
islemlerde su sekilde donusum yapiyoruz ya : a=(float) b*1

Peki bunu floattan integera gecirirken yapabilir miyim su sekilde

b=(integer) a*1

?

yapilabilir ama sizin yazdiginiz gibi degil:
    b=(int)a;
seklinde sadece float sayinin tamsayi kismini b ye yuklersiniz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

unknownperson

Bitler konusunda sıkıntılarım var aslında konuyu biliyorum fakat bu programı yazarken aldığım hatayı bir türlü çözemedim :

//Bu programda diyelim kullanıcı CD girdi C ve D yi diziye koyup sonra bu harfleri fonksiyona gönderip fonksiyonda unsigned bir sayının ilk 16 bitine ilk //sayıyı diğer 16 bitine ikinci sayıyı koyup yeni bir sayı oluşturmak. Ben iki harfi fonksiyona yolladım baktım number ve number2 diye iki sayıyada //aktarabildim fakat bu iki sayıyı decimal yazdırınca tamam diyorum harf karşılığı doğru ama binary yazdırınca sıkıntı var.
#include<stdlib.h>
#include<stdio.h>

void packCharacters(char,char);
void packCharacters(char x,char y){
	int i;
	unsigned number=0,number2=0;
	number=x;
	number2=y;
	printf("Number 1 is %u\n",number);
	printf("Number 2 is %u\n",number2);
	number=number<<16;

	
	
	printf("After packing Characters: \n");


	for(i=1;i<=32;i++){
	
	putchar(number | number2 ?'1':'0');
	number=number<<1;
	number2=number2<<1;
	
	if(i%8==0){
		printf(" ");
	}
}

	
	
}


main(){
	
	char array[2];
	
	printf("Please enter 2 characters : ");
	scanf("%s",&array);
	
	packCharacters(array[0],array[1]);
	
	
	return 0;
}

Burak B

putchar(number | number2 ?'1':'0');


yerine

putchar(number | (number2 ?'1':'0'));


yada bunu demek istemiyorsan

putchar((number | number2) ? '1' : '0' );


yazmalısın.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

unknownperson

@Burak BAYRAK yok onunla ilgili bir hata yok her ihtimale karşı gene dediğin gibi denedim çözülmedi sorun hala yanlış çalışıyor.

yamak

#920
Hocam aşağıdaki kodları
putchar(number | number2 ?'1':'0');
    number=number<<1;
    number2=number2<<1;


Aşağıdaki gibi değitirip deneyebilir misiniz?

putchar((((number | number2)>>i)&0x01) ?'1':'0');


Eğer ekranda doğru sıralamada görünmesini istiyorsanız for döngüsü de aşağıdaki gibi olmalı
    
for(i=31;i>=0;i--){
putchar((((number | number2)>>i)&0x01) ?'1':'0');
if(i%8==0)
    printf(" ");
}

Gökhan BEKEN

unsigned number=0,number2=0;
demişsin unsigned int diye tanımla.
Özel mesaj okumuyorum, lütfen göndermeyin.

yamak

Hocam standart C de 'unsigned' 'unsigned int' demek zaten

Gökhan BEKEN

Bunu bilmiyordum, bir kaç kaynağa baktım şimdi göremedim.
Özel mesaj okumuyorum, lütfen göndermeyin.


Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

unknownperson

Öncelikle emeğiniz için hepinize tek tek teşekkür ederim, sorunu dün halledemeyince programı internette biraz araştırarak %100 kendi kodlarımla yazdığımdan vazgeçip başka kodlar ekleyerek tamamladım, programı herkese yararlı olması için bu ileti sonuna ekleyeceğim.

Şuan şöyle merak ettiğim bir konu var deitel kitabındaki enum örneğini aynı şekilde yazdım çalıştırdım fakat hata verdi :
for(month=JAN;month<=DEC;month++) bu döngüdeki month'u ++ operatörüyle kullanamazsın diyor ve bu sorun internette araştırdım month önüne int yazarak çözülebiliyor fakat bu şekilde de enum kullanmanın bir mantığı kalmıyor buradaki hatayı başka nasıl çözebiliriz ve sizce deitelin bile kitabında bu şekilde tanımladığı bir program nasıl olur da hata verir yani nedeni nedir ?

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

void packCharacters(char,char);
void packCharacters(char x,char y){
	int i;
	unsigned number=0<<31; //bits was been zero.
	unsigned mask=1<<31;  //creates mask variable.
	unsigned a=x,b=y;   //assigning for printing type of binary 
	
	printf("%7u = ",x);  // x displays type of binary 
for (i = 0; i < 32; i++)
	{
		if (a&mask){
			printf("1");

		}
		else{
			printf("0");
		}

		if ((i+1)%8==0){
			printf(" ");
		}
		a=a<<1;
	}
	printf("\n%7u = ",y);   // y displays type of binary 
	for (i = 0; i < 32; i++)
	{
		if (b&mask){
			printf("1");
		}
		else{
			printf("0");
		}
		
		if ((i+1)%8==0){
			printf(" ");
		}
		b=b<<1;
	}
	
	
	number=number |x; //x assigning to number
	number=number<<16;  //x values shift to left by 16 at number
	number=number |y; //y assinging to number 
	
printf("\nAfter packing Characters: \n%u = ",number); 

	for (i = 0; i < 32; i++) //print number type of binary
	{	
		if (number&mask){
			printf("1");

		}
		else{
			printf("0");
		}

		if ((i+1)%8==0){
			printf(" ");
		}
    number=number<<1;
	}
}


main(){
	char array[2];
	
	printf("Please enter 2 characters : "); //takes two letter 
	scanf("%s",&array); //assinging to array 
	packCharacters(array[0],array[1]);

	return 0;
}

mufitsozen

eger kullandiginiz enum degerleri atlamadan sirali ise:

    int ndx;

    enum {jan, feb,mar,apr,may,jun,jul,agu,sep,oct,nov,dec} aylar;

    for(ndx=jan;ndx<= dec; ndx++)printf("\nndx=%d",ndx);


eger sirali gitmiyorsa .....(devam edecek..)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Gökhan BEKEN

#928
Aşağıdaki kodlar, temsilidir, normalde programımda farklı ama mantık olarak benzer bir şekilde kullanıyorum.
free yi iptal edersem düzgün, ama etmezsem bellek hatası yazıyor.
Ben de freeyi iptal ettim programım sorunsuz çalıştı. Bu hata beni 3-4 saat uğraştırdı, yani hiç beklemezdim böyle bir hatayı, hatayı başka yerlerde aramıştım.
Bu yüzden merak ettim neden bu sorun oluyor.
unsigned int *tampon;
unsigned int len=1024;
while(1){
		  		tampon=realloc(tampon,len*sizeof(int));
				if(tampon== NULL ) printf("Bellek hatasi\r\n");
				else printf("ok \r\n");

				free(tampon);
					
}


Önce calloc ile bir alan ayırıp, sonra realloc ile düzenleme yapmak mı gerekiyor yoksa?
Özel mesaj okumuyorum, lütfen göndermeyin.

z

calloc yada malloc ile sahiplendiğin ram alanında yeniden tanımlama yapacaksan realloc kullanmalısın.

realloc yerine malloc yada calloc yazsan olurdu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com