C Programlama diliyle şamatalar

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

z

#30
int main()
{    .....
     .....
}


Bu C kodlarimizin calismaya baslayacagi ana (ilk) fonksiyon.

ARM CM3 ve CM4 islemcilerde main fonksiyonunun donusu int tanimlanmalidir. Yani, int main()  olmali.

En son satira return(0) yazabilirsiniz. Yazdigimiz programlarda mainden hic cikmayiz. Dolayisi ile return degeri olarak istediginizi yazabilirsiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Su ana kadar yazilanlardan sonra asagidaki programi anlamis ve Y degerinin ne olacagini bulabilmeniz gerekiyor.

int f1(int i);
int f2(int i);

void main()
{
int A,Y;

    A=f1(1);
    Y=f2(A);
    return(0);
}

int f1(int i)
{
    return(2*i);
}

int f2(int i)
{
int k;
       k=5+i;
       return(3*k);   
}

Eger Y yi dogru bulabiliyorsaniz C nin gerisi corap sokugu gibi gelir.

Tabiki cevap yazacaklarin C ile hic ugrasmamis arkadaslar olmasini bekliyorum.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

M_B

Alıntı yapılan: bunalmis - 24 Ekim 2011, 23:27:46
En son satira return(0) yazabilirsiniz. Yazdigimiz programlarda mainden hic cikmamayiz. Dolayisi ile return degeri olarak istediginizi yazabilirsiniz.

Hocam return() yazmanın bize ne tur bir avantajı olurki. Benim duşuncem hiç bir faydası olmayacağı yonunde.

Program ana donguye (main) girdimi daha cıkmayacaktır. cıksa bile gittiği yerden geri donecektir. Tabi gittiği yerde kısır donguye girmediyse.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

ilhan_mkp

#33
21 sanıyorum umuyorum galiba

yanlış yaptım sanıp düzelttim ama son kararım 21

eistain_54

hocam biraz c ile çalışmıştım ama olanda gitti.şimdi main fonsyonundan önce belirtilen fonsiyonlar bir nevi alt program.?main içinde onları dahil edebiliriz.tıpkı #include gibi.dosya değiilde komut dizilerini çağırıyoruz.peki örneğin int f1() nedir?gördüğüm kadarıyla fonksiyon için void oluyor.birde
Alıntı Yapf1(int i);
int f2(int i);
f1(int i) olayı nedir?
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

fatihinanc

#35
Alıntı yapılan: eistain_54 - 25 Ekim 2011, 00:36:49
hocam biraz c ile çalışmıştım ama olanda gitti.şimdi main fonsyonundan önce belirtilen fonsiyonlar bir nevi alt program.?main içinde onları dahil edebiliriz.tıpkı #include gibi.dosya değiilde komut dizilerini çağırıyoruz.peki örneğin int f1() nedir?gördüğüm kadarıyla fonksiyon için void oluyor.birde f1(int i) olayı nedir?

Eğer bir fonksiyon f1(int i); şeklinde tanımlanmışsa başına otomatik olarak int belirleyicisi eklenir ve şu anlama gelir;

int f1 (int i);
Dışarıdan int türünde bir parametre al ve geriye de int türünde bir değer döndür.

void f1 (int i);
Dışarıdan int türünde bir parametre al ve geriye değer döndürme

Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

eistain_54

Yani i türünde bir veri al.buda ana fonksiyonda bir yerdemi?birde geri değer döndürme işlemi nedir?
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

mozkan87

Geri değer döndürme
return() konutu ile yapılır ve () içine yazılan değer geri döndürülür.

yamak

#38
şimdi int f1(int i) gibi bir fonksiyon tanımlamışsa bu fonksiyon çalışıp bittiğinde geriye bir değer döndürecek demektir. Örneğin
int f1(int i)
{
    return(2*i);
}

bu fonksiyon gibi. Bu fonksiyon görüldüğü gibi return komutu aracılığı ile parametre olarak girilen değerin 2 katını geriye döndürmektedir. Ama bir de
void f1(int i) gibi bir fonksiyon olsun bu fonksiyonsa geriye hiç bir değer döndürmez. Buna bir örnek verirsek.
void delay(int i)
{
  int a;   
  for(a=0;a<i;a++);
}

bu fonksiyon çağırıldığında girilen parametreye kadar for döngüsü aracılığı ile sayılır ve böylelikle program da bekleme yapmış olurruz.Tıpkı led in yanıp sönmesinde kullanılan delay gibi.

z

#39
Alıntı yapılan: M_B - 25 Ekim 2011, 00:07:42
Hocam return() yazmanın bize ne tur bir avantajı olurki. Benim duşuncem hiç bir faydası olmayacağı yonunde.

Program ana donguye (main) girdimi daha cıkmayacaktır. cıksa bile gittiği yerden geri donecektir. Tabi gittiği yerde kısır donguye girmediyse.

Fonksiyonun geri donusunu belirleyen tanimlayici void değilse, derleyici, fonksiyonda return komutunu gormeyi ister, bulamazsa da ve en azindan warning mesaji verir.

main fonksiyonundan hic cikmayacak olsak bile usulen icine return koymak gerekir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Kaydirma operatorleri

a=1<<4  a ya 0x10 yukle demek. 1 degerini 4 kere sola kaydirdi.
a=3<<4  a ya 0x30 yukle demek. 3 degerini 4 kere sola kaydirdi.

a=0x80>>1  a ya 0x40 yukle demek. 0x80 degerini 1 kere saga kaydirdi.
a=0x80>>7  a ya 0x01 yukle demek. 0x80 degerini 7 kere saga kaydirdi.

Ornegin neden a ya 0x10 yuklemek icin a=0x10 degil de a=1<<4 yazariz?

Bir registerin adi REG olsun ve buna ait aciklamalarinin bulundugu dokumanda PortClkOn adindaki bitin sira numarasi 4 olsun.

Yani; 0. degil, 1. hic degil, 2. de degil, 3. de degil 4. bit

Reg=1<<4 yazinca bir bakista regin 4. bitini 1 yaptigimiz anlasilir. reg=0x10 yazarsak da anlasilir.

Fakat Reg=3<<4 yapinca Reg'in 5 ve 4 nolu bitlerinin 1 oldugu daha sempatik anlasilir. Siz isterseniz Reg=0x30 da yazabilirsiniz.

Fakat kaydirma operatorlerinde kayma miktarini hep sabit deger vermek zorunda degilsiniz. Reg=a<<b; de yazarak parametrik deger verebilirsiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

C ile hic ama hic ugrasmamis fakat su ana kadar yazdiklarimizi harfi harfine okumus bir arkadas  ben surayi anlamadim diyebilirmi? Elestiri bekliyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

papsukkal

@Bunalmis hocam yazılarınız net ve anlaşılır (askeri tabirle :) )

birinci sorum..
a=1<<4  ile diyelim ki "a" registerinin 4'üncü bitini set ettik. bu işlemi önce 0 biti set edip sonra 4 defa sola mı kaydırıyor?

eğer böyle ise "a" registerinin 0,1,2,3'üncü bitlerinin önceden barındırdıkları durumlar ne oldu? eğer siliniyor ise bu işlemi belirli bir sıra ve usule göre mi yapmamız gerekiyor?


ikinci sorum..
bir fonksiyondan birden fazla değer ile dönebilirmiyiz?

üçümcü sorum..
işaretli sayı olarak tanımladığımız bir sayıda içerik hangi noktadan sonra (-) değer alır? yada bunun bir kuralı mı var?

dördüncü sorum..
adresiniz nedir? (24 Kasımda size çiçek göndericem  :) )

eistain_54

Hocam fonksiyon olayını kapattım ancak bu kezde yazılan sayılar canımı sıkmaya başladı.Şimdi yazdığımız sayılar hiçde bit düzeyinde gibi gelmedi bana. 0x080 kaydırınca 0x040 oldu.bu kaç bitlik sayı ki hex hali 80 iken kaydırınca 40 oluyor. Birde sanırım Arm işlemcilerde bu değerlerde farklı oluyor.
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

M_B

Alıntı yapılan: eistain_54 - 25 Ekim 2011, 06:34:17
Hocam fonksiyon olayını kapattım ancak bu kezde yazılan sayılar canımı sıkmaya başladı.Şimdi yazdığımız sayılar hiçde bit düzeyinde gibi gelmedi bana. 0x080 kaydırınca 0x040 oldu.bu kaç bitlik sayı ki hex hali 80 iken kaydırınca 40 oluyor. Birde sanırım Arm işlemcilerde bu değerlerde farklı oluyor.


0x80>>1  bir kere sağa kaydırmak demek o sayıyı ikiye bölmek demektir. 
0x80<<1 bir kere sola kaydırmak demek o sayıyı ikiyle carpmak demektir.

0x80 desimel olarak 128 eder
128/2=64
64 desimel sayısıda hex olarak 0x40 eder.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet