C Programlama diliyle şamatalar

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

ErsinErce

aşağıaki yöntemin olması lazım

unsigned char xxxx(volatile unsigned char * port, unsigned char x){
return ((*port)&x);
}

baran123

Merhaba arkadaşlar ben ccs ıle pıc ogrenıyorum kendımı c de gelıstırmek ıcın visual studıo da c kodları yazmaya basladım fakat her seferinde aynı hatayı alıyorum bi başlayabilsem süper olcakda bu hata nedir ?
#include<stdio.h>
main()
{
int r;
float pi,alan;
pi=3.14;
printf("dairenin yari çapini gir=");
scanf("%d",&r);
alan=pi*(r*r);
printf("alan=%f\n",alan);
}


hata
Error	1	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\users\ekrem\documents\visual studio 2012\projects\project1\project1\main.cpp	3	1	Project1

AsHeS

Dev-C++ indirirsen başlangıçta seni daha az üzer.

aşağıda ki gibi bir dene
#include<stdio.h>
int main()
{
int r;
float pi,alan;
pi=3.14;
printf("dairenin yari çapini gir=");
scanf("%d",&r);
alan=pi*(r*r);
printf("alan=%f\n",alan);
return 1;
}

baran123

dev c++ kurdum tesekkurler cok ısıme yaradı kolay gelsın :)

unknownperson

Arkadaşlar void olarak fonksiyon tanımlıyorum fakat aşağıda çağırma kısmının 2. printf de bir hata veriyor sanırım %d olmayacak fakat void'e ne karşılık geliyor bilmiyorum, yardımcı olursanız sevinirim.

void menu1(int height);
void menu1(int height){
int i,j;
for(i=1;i<=height;i++){
    for(j=1;j<=i;j++){
        printf("*");
    }
    printf("\n");
}

//Yukarıdaki gibi bir fonksiyon tanımladım.

int main()
{
    int height;

    printf("Please enter the height");
    scanf("%d",&height);
    printf("%d",menu1(height));
}

//Burada 2. printfde hata veriyor sanırım %d olmayacak peki ne olacak void'e karşılık gelen nedir ?

Tagli

void'e karşılık gelen bir şey yok. Adı üstünde zaten void = hiçlik. Dönüşü void olan fonksiyonu bir değer gibi kullanamazsın. Bu durumda printf("%d",menu1(height)); hatalı. menu1 fonksiyonu zaten yazdırma işi yapıyor, onu tekrar printf içinde kullanmaya çalışmak mantıksız. Doğrudan menu1(height); şeklinde kullanmalısın.
Gökçe Tağlıoğlu

mufitsozen

Alıntı yapılan: unknownperson - 11 Nisan 2014, 20:20:44
Arkadaşlar void olarak fonksiyon tanımlıyorum fakat aşağıda çağırma kısmının 2. printf de bir hata veriyor sanırım %d olmayacak fakat void'e ne karşılık geliyor bilmiyorum, yardımcı olursanız sevinirim.


sayin @unknownperson:

  • void' turkce karsiligi sifat olarak gecersiz, bos hukumsuz demek. menu1 fonksiyonundan printf icinde %d ile kullanilabilecek ne gibi bir deger donmesini bekliyordunuz?
  • menu1 fonksiyonundan cikarken geriye bir deger dondurmuyorsunuz! printfde ne degeri basacak diye dusundunuz? (1, 2, 5, 102, 11234, 32176, -345 ....?)
  • program yazmadan once C programlama dili ile ilgili bir kitap okumayi hic dusundunuzmu?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

AsHeS

#802
Alıntı yapılan: unknownperson - 11 Nisan 2014, 20:20:44
Arkadaşlar void olarak fonksiyon tanımlıyorum fakat aşağıda çağırma kısmının 2. printf de bir hata veriyor sanırım %d olmayacak fakat void'e ne karşılık geliyor bilmiyorum, yardımcı olursanız sevinirim.

void menu1(int height);
void menu1(int height){
int i,j;
for(i=1;i&amp;amp;amp;lt;=height;i++){
    for(j=1;j&amp;amp;amp;lt;=i;j++){
        printf("*");
    }
    printf("\n");
}

//Yukarıdaki gibi bir fonksiyon tanımladım.

int main()
{
    int height;

    printf("Please enter the height");
    scanf("%d",&amp;amp;amp;amp;height);
    printf("%d",menu1(height));
}

//Burada 2. printfde hata veriyor sanırım %d olmayacak peki ne olacak void'e karşılık gelen nedir ?

İlacının adı Deitel;Deitel C ve C++

unknownperson

Alıntı yapılan: Tagli - 11 Nisan 2014, 20:59:54
void'e karşılık gelen bir şey yok. Adı üstünde zaten void = hiçlik. Dönüşü void olan fonksiyonu bir değer gibi kullanamazsın. Bu durumda printf("%d",menu1(height)); hatalı. menu1 fonksiyonu zaten yazdırma işi yapıyor, onu tekrar printf içinde kullanmaya çalışmak mantıksız. Doğrudan menu1(height); şeklinde kullanmalısın.
Fonksiyonun içinde saten printf ile bastırıyorum , bu yüzden sadece fonksiyonu çalıştırmam yeterli çok teşekkür ederim net bir şekilde anlattığınız için.Emeğinize sağlık.

Alıntı yapılan: mufitsozen - 11 Nisan 2014, 21:04:50
sayin @unknownperson:

  • void' turkce karsiligi sifat olarak gecersiz, bos hukumsuz demek. menu1 fonksiyonundan printf icinde %d ile kullanilabilecek ne gibi bir deger donmesini bekliyordunuz?
  • menu1 fonksiyonundan cikarken geriye bir deger dondurmuyorsunuz! printfde ne degeri basacak diye dusundunuz? (1, 2, 5, 102, 11234, 32176, -345 ....?)
  • program yazmadan once C programlama dili ile ilgili bir kitap okumayi hic dusundunuzmu?
1. Void'i şuana kadar ilk defa kullanıyorum ki hiçbir programda ya da başka bir yerde görmedim , okulda anlatılandan daha ilerde gidiyorum daha fonksiyonlar konusunu dahi görmedik kendi başıma bu programı yazmaya çalışıyorum hocamın sadece bana dediği void kullanmam bende o yüzden bu şekilde kullandım.
2.Aynı şekilde return satırını da ilk defa kullanıyorum, o yazdığım kodlar programın bitmiş hali değildi ben size sadece printf deki hatayı sordum.
3.Daha önce 2 kitap bitirdim şimdi Deitel'e başladım okul ile beraber okuyarak ilerliyorum, ama C programlamada olay okumakla olmuyor deneme yanılma yöntemiyle hata yapa yapa öğreniliyor.
İyi Akşamlar.
Alıntı yapılan: AsHeS - 11 Nisan 2014, 21:29:32
İlacının adı Deitel;Deitel C ve C++
Evet haklısınız Deitelde 5. ünite fonksiyonları okuyup tamamıyla anlayıp bu işe girişmem daha doğru olacak  ;D

Huzame

%d yanlış sanırım int değişken tanımlamışsın printf ile desimal deger basmasını istiyorsun %lu'yu dene istersen. Kolay gelsin

unknownperson

Alıntı yapılan: Huzame - 12 Nisan 2014, 02:51:08
%d yanlış sanırım int değişken tanımlamışsın printf ile desimal deger basmasını istiyorsun %lu'yu dene istersen. Kolay gelsin
Yok Tagli'nin dediği gibi olacak sizin dediğinizi de alternatif olarak deneyim dedim hata verdi.

Huzame

Alıntı yapılan: z - 25 Ekim 2011, 01:46:12
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 değil 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. değil, 1. hic değil, 2. de değil, 3. de değil 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 değilsiniz. Reg=a<<b; de yazarak parametrik deger verebilirsiniz.

Hocam reg = 0<<5 dersek 5. biti 0 mı yapmış oluruz?

z

#807
Alıntı yapılan: Huzame - 13 Nisan 2014, 01:38:55
reg = 0<<5 dersek 5. biti 0 mı yapmış oluruz?

reg=0<<5 demek reg=0 ile ayni anlama gelir.

Eger 5 nolu biti 0 yapmak istiyorsan reg'in diger bitlerine dokunmak istemiyor sadece 5. biti 0 yapmak istiyorsun demektir.

reg degiskenini 8 bit varsayalim;

Bu durumda reg = reg & 0xDF yapilir.

Ya da reg &=0xDF

Yada reg & = ~0x20

Yada reg &=~(1<<5) yapabilirsin.

Bunlarin hepsi de reg degiskenini 0xDF ile and yapmakla esdegerdir.

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

Huzame

Hocam gecenin bu saatinde bu kadar kısa bir sürede cevap için soğolun. Bu inanılmaz bir şey ben gelecekten çok ümitvarım. Emeğinize sağlık

mfurkan7

Ne zaman OR ne zaman AND?

A adında degişkenimiz olsun. Bunun en düşük 2 bitine 10 verisi yükleyelim. Fakat A nın diğer bitleri değişmesin. -> Burdaki yeni A sayımız 0xFFFFFF10 mi?


A= A & 0xFFFFFFFC;  yada  A&= 0xFFFFFFFC; En düşük bitleri sil -Burda en düşük 2 biti sileceğiz değil mi? Yani 0xFFFFFF10 olacak?- (Diğer bitleri 1 ile AND'lediğimiz için değişmez) -Diğer bitleri nasıl 1 ile end'liyoruz? Bir de and'lemek demek çarpma oluyor değil mi?-

A= A | 0x00000002;  yada   A|= 0x00000002; Silinmiş bitler 00, bunu 10 ile OR'la ve yerine yaz. -Silinmiş bitler 00 kısmında neyi kastettiğinizi tam olarak anlayamadım hocam.  :( Burada  benim anladığım şekli A sayısı 0x00000010 olacak en başta dediğimiz üzere sonra bunu or'larsak yani yeni A sayımız ile 0x00000002'i çarparsak mı sonuca ulaşırız? Doğru mudur hocam-

Böylece diğer bitler aynen kaldı fakat en düşük bitler 10 yapılmış oldu.

Eğer A registerine doğrudan A=0x00000002 yazsaydık en düşük 2 bit 10 olacaktı fakat diğerleri de 0 olacaktı. (Bunu istemeyiz) -Bu kısımda da aklıma takılan yer A'ya doğruda 0x00000002 yazsaydık aynı sayı ile and'leseydik yani çarpsaydık nasıl en düşük iki biti 10 olacaktı?-

----------------------------------- Hocam çok eksiğim var valla yardımcı olursanız çok sevinirim.

Şimdiye kadar görmediğimiz NOT operatörü ile de aynı işlemi yapabiliriz.

A&= ~0x00000003; En düşük 2 biti (A1 A0) sil (Diğer bitleri 1 ile AND'lediğimiz için değişmez)
A|=    0x00000002; Silinmiş bitler 00, bunu 10 (Decimal 2) ile OR'la ve yerine yaz.