->C<- Soru Çözümü

Başlatan Sh4oTT, 22 Ağustos 2015 - 03:48:39

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Sh4oTT

Arkadaslar ufak bir sorum olacak sizlere kafama takılan bir kısım var simdi bir program yazarken sonuna return 0; ifadesini bırakıyoruz biz burda return 2323; de bıraksak bir şey değişmiyor bunun 0 veya herhangi bir sayı olmasındaki fark nedir bir fark varmıdır?
Ör:
#include <stdio.h>


int main () {



printf("Hello World!\n");


return 0;

}

Kodu ile asagıdaki kod aynı cıktıyı veriyor :/

#include <stdio.h>


int main () {



printf("Hello World!\n");


return 1500;

}

Reverser

kimisi nedenini integer fonksiyona bağlar, kimisi bu kuraldır der, kimisi de bu durumu Unix sistemler üzerindeki syscall macrolarına bağlar.
main fonksiyonda bu şekilde return kullanıp kafanı karıştırma derim ben..

XFCE ROCKS !
Powered by Thunar & XFWM4



Sh4oTT

Biraz daha acıklayabılırmsıınız hocam mesela ınteger fonksıyonuna baglı olarak 0 olsa ne olur 3446 olsa ne olur ?

lnxdev

Evet farkı var return 0 dediğinde programın işletim sistemine herhangi bir sorun olmadan bittiğini söylüyorsun bunun dışındaki değerler örneğin -1 yada 1 vb. programın hatalı olarak bittiğini söylüyorsun.

Sh4oTT

-1 olarak yazdım yine calıstı program hatalı olarak belirtiyorsak niye calıstırıyor programı? :)

lnxdev

İşletim sistemlerinde değişerek bu hata kodlarının farklı anlamları var. C standarlarına göre 0 dan başka tüm değerleri hata olarak kabul ediyor örneğin bir dosya yazmaya çalışıyorsun yazamıyorsun bu durumda hata meydana geliyor ve programın orada bitiyorsa dönmen gereken 0 dan farklı bir değer olmuş oluyor. Bazı işletim sistemlerinin özel hata dönme sayıları var. Ben bilmyiorum sistem olarak birşey yazmadığım için gerekte duymuyorum. Ama ne olduğunu merak ediyorsan internette linuxa özgü dönme kodları var mesela 77 dönünce "permission denied" yani izin verilmeme hatası yada 72 olunca işletim sisteminin kritik bir dosyayı eksik demek oluyormuş.

Sh4oTT

@devbaris anladım hocam tesekkurler

lnxdev

Bunun için bir kütüphane varmış kütüphanenin olup olmadığını şu komutla bakıp(bulursa dosya yolunu yazıyor):

find /usr -name sysexits.h

bulursada cat le okuyup bak istersen

cat /bulduğu/klasördeki/sysexits.h

sanırım direk yolu bu:

cat /usr/include/sysexits.h

Sh4oTT

Nasıl kullanıldıklarını pek anlayamadım acıkcası ama kullanım amacını anladım. Anladıgım kadarıyla programcıya gereklı bılgılerı donduruyor. Örnegin isalpha(); fonksiyonun arguman olarak  gönderilen karakterin bir harf karakteri olup olmadığını test ediyor. Eğer harf  karakteriyse, isalpha fonksiyonu 0 dışı bir
değer  geri döndürecek, eğer harf karakteri değilse 0 değerini geri
döndürecek. Çağıran  fonksiyonda da geri dönüş değerine göre farklı işlemler yapacak.

İnşaAllah dogru anlamısımdır :)

betseg

Mesela && veya || ile kullanılan bir komut dizisi varsa fark eder. && ve demektir ve ilk komut 0 döndürdüyse ikinci komutu çalıştır der. || veya demektir ve ilk komut 0 döndürmediyse ikinci komutu çalıştır der.
ilkkomut && ikincikomut
ilkkomut || ikincikomut

Reverser

Arkadaşlar tabii ki duruma göre ve kullanılan fonksiyona göre değişir örneğin strcmp fonksiyonu ya da akışı durdurmak için kullanılan -1 değeri gibi fakat main fonksiyonda bu şekilde random değer döndürmenin bir anlamı yok.

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Alıntı yapılan: ReverserArkadaşlar tabii ki duruma göre ve kullanılan fonksiyona göre değişir örneğin strcmp fonksiyonu ya da akışı durdurmak için kullanılan -1 değeri gibi fakat main fonksiyonda bu şekilde random değer döndürmenin bir anlamı yok.
Aksi belirtilmediği sürece -1, 0 ve 1 değerleri kullanılmalıdır. Zaten diğer rakamların da bunlardan farkı yok..
Yalnız benim anlamadığım olay şu;

int main()
{
}
Bu satırları derledikten sonra 155 gibi bir değer atıyor ama C++ ve D dilinde böyle değil.. Direk 0 atıyor..
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

ekremsenturk

Derleyiciye göre veya sürüme göre değişiyor olabilir. Bende OpenWatcom (C 99) main() fonksiyonu içinde "return 0;" kullanılmadığı durumlarda derlemeyi durduruyor.

Sh4oTT

#38
@Reverser hocam dediginiz gibi fazla kafa karıstırmaya gerek yok :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Aralık 2015 - 00:39:11


-----------------------------------------------------------------------------------


Asagıdakı programı daha basıt sekılde yazabılırmsıınız? Yoksa en basıtı bu sekıldemıdır?

Kaynak kod:
#include <stdio.h>



int main() {
int i,j,k,n;
printf("n: ");
scanf("%d",&n);
for(i=1; i<=(n+1)/2; )
{
for(k=1; (n+1)/2-i+1>=k; k++)
printf(" ");
for(j=1; j<2*i; j++)
printf("*");
printf("\n");
i++;
}
if(2*i-1>=n)
{
for(i=(n+1)/2-1; i>=1; i--)
{
for(k=1; (n+1)/2-i+1>=k; k++)
printf(" ");
for(j=1; j<2*i; j++)
printf("*");
printf("\n");
}
}


}

Reverser


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

int main(int argc, char *argv[])
{
  int n, c, k, space = 1;

  printf("Enter number of rows\n");
  scanf("%d", &n);

  space = n - 1;

  for (k = 1; k <= n; k++)
  {
    for (c = 1; c <= space; c++)
      printf(" ");

    space--;

    for (c = 1; c <= 2*k-1; c++)
      printf("*");

    printf("\n");
  }

  space = 1;

  for (k = 1; k <= n - 1; k++)
  {
    for (c = 1; c <= space; c++)
      printf(" ");

    space++;

    for (c = 1 ; c <= 2*(n-k)-1; c++)
      printf("*");

    printf("\n");
  }

  return 0;
}

kaynak: [1] http://www.programmingsimplified.com/c/source-code/c-program-print-diamond-pattern
daha kolay mı emin değilim fakat daha okunur bir kod öbeği ondan eminim. :)

XFCE ROCKS !
Powered by Thunar & XFWM4



Sh4oTT

#40
Daha okunur oldugu kesin hocam :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Aralık 2015 - 01:06:58

@Reverser hocam verdıgınız sıtedı bır programı derlemek ıstedımde termınal uzerınden gcc ıle graphics.h kutuphanesı yok dıyor bunu nasıl eklerız?
http://www.programmingsimplified.com/c/program/draw-3d-bar-chart

gcc -o prg prg.c
prg.c:1:22: fatal error: graphics.h: Böyle bir dosya ya da dizin yok
compilation terminated.

Amenofis

@ShaoTT

graphics.h dos zamanından kalma antika bir kütüphane. Ayrıca sadece windowsta çalışır.

Sh4oTT


-DıLgEş-

Alıntı yapılan: ShaoTT Tamam hocam
Bu arada eğer isterseniz başka kütüphaneleri de deneyebilirsiniz..
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Sh4oTT

Sadece o programın cıktısını merak etmıstım o yuzden sordum :)

7hr33l3t73r

#45
Alıntı yapılan: ShaoTT - 09 Aralık 2015 - 19:48:53
Sadece o programın cıktısını merak etmıstım o yuzden sordum :)
Cikti goruntusu resimde.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT


7hr33l3t73r

#47
Rica ederim. :)
Son olarak.Graphics.h kutuphanesi degil de SDL kutuphaneleri ile nesnelerin ici de renklendirildi.
Adreste  ki verilen  kodlari calistirdiginiz da alacaginiz asil goruntu asagidakidir.Zira ilk paylastigim da nesne ici renklendirme  kullanilmadi.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Sh4oTT

Saygı deger üstadlarım :) integer bir dizide dizinin sonuna geldigimizi nasıl kontrol edebiliriz. char bir dizi de '\0' NULL olarak kontrol ediyoruz da integer da nasıl yaparız bu işlemi.
Ör:

int dizi[50]={1,5,6,9,23,5,44,1,66,45,34,23,6,9,34,23,11,32,76,99,34,2,6,7,8,91,3,45,6,7,3,32,45,6,7,2,5,3,2,4,23,1,6,62,34,23,4,3,5,2}; boyle bır dızı tanımladık dıyelım ama tek tek ben saymak ıstemıyorum bunları bu dızının sonuna geldıgımızı nasıl kontrol edebılrıım?
Cevaplarınız ve yardımlarınız ıcın tesekkur ederım :)

Reverser

anlatmak istediğini doğru anladıysam eğer şu şekilde olabilir @ShaoTT

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

int main(int argc, char *argv[])
{
   int arr[50]={1,5,6,9,23,5,44,1,66,45,34,23,6,9,34,23,11,32,76,99,34,2,6,7,8,91,3,45,6,7,3,32,45,6,7,2,5,3,2,4,23,1,6,62,34,23,4,3,5,2};
   int last = arr[ sizeof arr / sizeof *arr - 1 ];
   printf("last element: %d\n", last);
   return 0;
}

XFCE ROCKS !
Powered by Thunar & XFWM4