IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   C++ Dersleri (https://www.ircforumlari.net/c-ve-c/285964-c-dersleri.html)

toXic 02 Ocak 2010 14:05

Cevap: C++ Dersleri
 
break Komutu

Bazı durumlarda, döngüyü aniden sonlandırmak isteriz. Bunun için 'break' komutunu kullanırız. Döngüyü aniden sonlandırmak veya döngüyü kırmak işlemini, zaten daha önce switch case'lerde kullanmıştık. Bahsetmediğimiz şey, bunun her döngü içersinde kullanılabileceğiydi.
Aşağıdaki programı inceleyelim:

Kod:

/*
0 ile 99 arasında tesadüfi sayılar üreten
bir programın, kaçıncı seferde 61 sayısını
bulacağını yazan program aşağıdadır.
*/
#include<stdio.h>
int main( void )
{
    int i,tesadufi_sayi;
    int deneme_sayisi = 0;
    //while içinde 1 olduğundan sonsuza kadar döngü çalışır.
    while( 1 ){
        //tesadufi_sayi değişkenine, 0 ile 99 arasında
        //her seferinde farklı bir sayı atanır.
        //rand( ) fonksiyonu tesadüfi sayı atamaya yarar.
        //mod 100 işlemiyse, atanacak sayının 0 ile 99
        //arasında olmasını garantiler.
        tesadufi_sayi = rand() % 100;
        //Döngünün kaç defa çalıştığını deneme_sayisi
        //değişkeniyle buluruz.
        deneme_sayisi++;
        //Eğer tesadufi sayı 61'e eşit olursa,
        //döngü kırılıp, sonlandırılır.
        if( tesadufi_sayi == 61 ) break;
    }
    printf("Toplam deneme sayısı: %d\n",deneme_sayisi);
    return 0;
}


Program için koyulmuş açıklamalar ( comment ) zaten neyin n'olduğunu açıklıyor. Kısaca bir şeyler eklemek gerekirse, bitişinin nerede olacağını bilmediğimiz bir döngüyü ancak, break komutuyla sonlandırabiliriz. Şartlar sağlandığında, break komutu devreye girer ve döngü sonlandırılır. Bunun gibi bir çok örnek yaratmak mümkündür.
continue Komutu

break komutunun, döngüyü kırmak için olduğundan bahsetmiştik. Bunun dışında işlem yapmadan döngüyü devam ettirmek gibi durumlara da ihtiyacımız vardır. Bunun içinde continue ( Türkçe: devam ) komutunu kullanırız.

Kod:

/*
Sadece tek sayıları yazdıran bir
program
*/
#include<stdio.h>
int main( void )
{
    int i;
    for( i = 0; i < 10; i++ ) {
        //i değişkeninin 2'ye göre modu
        //0 sonucunu veriyorsa, bu onun
        //bir çift sayı olduğunu gösterir.
        //Bu durumda ekrana yazdırılmaması
        //için döngü bir sonraki adıma geçer.
        if( i%2 == 0 ) continue;
        printf("%2d\n",i);
    }
    return 0;
}


0 ile 10 arasındaki tek sayıları gösteren program örneğini yukarda görebilirsiniz. Elbette ki bu işi daha farklı ve daha iyi yapan bir program yazabilirdik. Ama şimdilik continue komutunun nasıl kullanıldığını inceleyelim.
Program bir for döngüsü çalıştırmaktadır. Her defasında i değişkenin 2'ye göre modu alınır. Eğer sonuç 0'sa, bu sayının çift olduğunu gösterir. Dolayısıyla, bunun ekrana yazdırılmaması gerekir. Bu yüzden, döngü içersindeki işlemleri sürdürmek yerine, altta kalan kodları atlarız. Burada continue komutu kullanılır ve kullanıldığı noktadan itibaren olan işlemler yapılmaz. Döngü başa döner, aynı işlemleri yapar. Bu sefer i tek sayı olacağından continue komutu çalışmaz ve sayıyı ekrana bastırırız.
goto Yapısı

C programlama dilinde bulunan bir başka yapı, goto deyimidir. Koyacağınız etiketler sayesinde, programın bir noktasından bir başka noktasına atlamanızı sağlar. goto, bir döngü değildir ancak döngü olarak kullanılabilir.
goto, çalışabilmek için etiketlere ihtiyaç duyar. Etiketler, vereceğiniz herhangi bir isme sahip olabilir. Etiket oluşturmak için bütün yapmanız gereken; etiket adını belirleyip, sonuna iki nokta üst üste eklemek ( : ) ve programın herhangi bir yerine bunu yazmaktır. goto deyimi kullanarak bu etiketleri çağırırsanız, etiketin altında bulunan kodlardan devam edilir. goto ve etiketlere dair genel yapıyı, akış diyagramıyla birlikte aşağıda bulabilirsiniz:

Kod:

label_name:
    .
    .
    .
 
if( kosul ) {
    goto label_name
}
    .
    .
    .

NOT: goto deyimi tek başına da kullanılabilir. Fakat mantıksal bir sınama olmadan, goto yapısını kullanmanız, sonsuz döngüye neden olacaktır.
Şimdi goto ifadesiyle basit bir döngü örneği oluşturalım. Önceki seferlerde olduğu gibi ekrana 10 defa "Merhaba Dünya" yazdıralım:

Kod:

#include<stdio.h>
int main( void )
{
    int i = 0;
    // baslangic_noktasi adinda bir etiket koyuyoruz.
    // i degiskeni 10 degerine ulasmadigi surece,
    // program buraya donecektir.
    baslangic_noktasi:
    printf( "Merhaba Dünya\n" );
    // i degerini arttiriyoruz.
    i++;
    // i degeri kontrol ediliyor. Sayet 10'dan kucukse,
    // en basa donuyor.
    if( i<10 ) goto baslangic_noktasi;
 
    return 0;
}

İstediğiniz sayıda etiket koyup, goto kullanarak, programın herhangi bir noktasına ulaşabilirsiniz. Programınız, etiket altında kalan kısımdan itibaren çalışır. goto yapısıyla gelen esneklik, ilk bakışta oldukça güzel görünüyor. Ancak goto için birçok kaynak, "ya hiç kullanmayın ya da olabildiğince az kullanın" demektedir.
Okunup, anlaşılması zor ve üzerinde çalışılması güç bir koddan, herkesin uzak durması gerekir. İngilizce'de, karman çorman koda, "spagetti kod" adı verilmiştir. goto deyimi, kodunuzun spagetti koda dönüşmesine neden olur. Çünkü program akışının takibini zorlaştırıp, kodun okunabilirliğini azaltır. Diliyorsanız, goto deyimini kullanabilirsiniz. Ama zorunlu kalmadıkça kaçınmak en iyisi... ;)

toXic 03 Ocak 2010 13:44

Cevap: C++ Dersleri
 
“While” Döngüsü
for döngüsüyle 0′da 100′e kadar 10′un katları olan bütün sayıları santigrat derece kabul edip bunları fahrenayta çeviren bir program yazalim..
Kod:


#include <stdio.h>
main()
{
    int s;
    float f;
   
    for (s=0;s<110;s=s+10)
    {
        f=(s/0.55)+32;
        printf("%d\t%.2f\n",s,f);
    }
}

Şimdi gelelim while döngüsüne. Yine aynı örnek üzerinden while döngüsünü anlatacağım.

Aşağıdaki program for döngüsüyle aynı işi yapar.
Kod:


#include <stdio.h>
main()
{
    int s=0;
    float f;
   
    while (s<110)
    {
        f=(s/0.55)+32;
        printf("%d\t%.2f\n",s,f);
        s=s+10;
    }
}

Gördüğünüz gibi ilk programla ikincisi arasında çok az fark var.
While komutu şu şekilde kullanılır:

Kod:

while ( [koşul] )
For döngüsünden farklı olarak burada değişkenin başlangıç değerini ve döngü başa döndüğünde yapılacak işlemi yazmadık. Bu yüzden döngü ilk fahrenayt değerini hesaplamaya çalıştığında bir s değerinin olması gerekir. Bu yüzden,

Kod:

int s=0;
yazarak döngüden önce ilk s değerini belirlemiş olduk. Yani değişkenin başlangıç değeri 0 olacaktır.
Döngü başa döndüğünde yapılacak işlemi de döngü sonunda belirliyoruz. Bu da,

Kod:

s=s+10;

işlemidir. Burada s değeri 10 arttırılır ve yeni değer s‘ye eşitlenir.
Bütün bunları göz önüne alırsak program şu şekilde çalışır:
İlk santigrat derecemiz 0′dır (s=0). Program while satırına geldiğinde koşulu dikkate alır. Eğer koşul sağlanıyorsa döngüye girer, aksi halde girmez. İlk durumda s değeri 0 olduğu için s<100 koşulu sağlanmış olur. Döngüye girilir ve döngü içindeki işlemler sırayla yapılır. Önce santigrat dereceye karşılık gelen fahrenayt değeri hesaplanır. Daha sonra bu ekrana yazdırılır ve sonunda s değeri 10 arttırılır. Daha sonra döngü tekrar başa yani while satırına döner. Bu işlemler s=100 durumuna kadar yapılır. s=110 olduğunda ve döngü başa döndüğünde s<100 koşulu sağlanmayacağı için döngüden çıkılır ve program sonlanır..

toXic 04 Ocak 2010 17:00

Cevap: C++ Dersleri
 
Kod:

#include<stdio.h>
int main( void )
{
 int i;
 for( i = 0 ; i < 10; i++ ) {
  printf("%2d: ibrahim\n",(i++));
 }
 return 0;
}


Burada söyle bir sonuc verir, yani 0-2-4-6-8-

ekrana ibrahim yazdirir;
Kod:


 
#include<stdio.h>
int main( void )
{
 int i;
 for( i = 0 ; i < 10; i++ ) {
  printf("%2d: Merhaba Dünya\n",(i+1));
 }
 return 0;
}

Bu Sekilde ise; 10 adet ibram yazdirir.

Kod:

1: ibrahim
 2: ibrahim
 3: ibrahim
 4: ibrahim
 5: ibrahim
 6: ibrahim
 7: ibrahim
 8: ibrahim
 9: ibrahim
10: ibrahim
Devam etmek için bir tuşa basın . . .

Bu Sekilde. 2 program arasindaki tek değişiklik;

1. programda -> printf("%2d: ibrahim\n",(i++));
2. programda -> printf("%2d: ibrahim \n",(i+1));

Bu Sekilde. ;)

Derleyicisiz calismak, okumadan calismaya benzer ;)

ysfm 06 Ocak 2010 04:56

Cevap: C++ Dersleri
 
anlatım biraz c e kaymis mi diyeyim yoksa neredeyse tümü c olmus mu baslıgı c++ yerine c olarak degiştirmeniz daha guzel olacak galiba

ve [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

adresinden aynı konuyu ayrıntılı bicimde devam edebilirsiniz

Caddeci 29 Ocak 2010 18:44

Cevap: C++ Dersleri
 
Alıntı:

toXic Nickli Üyeden Alıntı (Mesaj 890533)
Bunlar Alıntı, Kendimin Çalistiğim bazı yerler ;)

olsun yinede calışman yeter bu işin eğitimini alıyorum bende

Kyo 14 Kasım 2017 20:38

Cevap: C++ Dersleri
 
Alıntı:

toXic Nickli Üyeden Alıntı (Mesaj 853566)
Kod:

#include<stdio.h>
int main( void )
{
    int sayi;
    printf("Değer giriniz> ");
    scanf("%d",&sayi);
    printf("Girilen değer: %d\n",sayi);
    return 0;
}

Gördüğünüz gibi hiçbir zor tarafı yok. Klavyeden girilecek bir tamsayınız varsa, yapmanız gereken önce değişkenin tipini ve adını belirtmek, sonra scanf( ); fonksiyonunu kullanmak. Bu fonksiyonu kullanmaya gelince, scanf(" yazdıktan sonra değişken tipine göre %d, %c, veya %f, yazıp, ardından & işaretini kullanarak atanacak değişkenin adını belirtmekten ibaret. Fark etmişsinizdir, printf(); ve scanf(); fonksiyonlarının her ikisinde de %d koyduk. Çünkü scanf( ); ve printf( ); fonksiyonların değişken tipi simgeleri aynıdır. Aşağıdaki tablodan hangi değişken tipinin nasıl deklare edileceğini, kaç byte yer kapladığını, maksimum/minimum alabileceği değerleri ve giriş/çıkış fonksiyonlarıyla nasıl kullanılabileceğini bulabilirsiniz. Tanımlamalar ve fonksiyon uygulamaları, degisken isimli bir değişken için yapılmıştır.


Kod:

include<stdio.h>
#include<limits.h>
#include<float.h>
int main( void )
{   
    printf( "\nTIP\t\t  BOYUT\t\t MIN\t \tMAX\n" );
    printf("==============================================================\n");
    printf( "char\t\t: %d byte(s)\t%d\t\t%d\n", sizeof(char),CHAR_MIN,CHAR_MAX );
    printf( "short\t\t: %d byte(s)\t%d\t\t%d\n", sizeof(short), SHRT_MIN, SHRT_MAX );
    printf( "int\t\t: %d byte(s)\t%d\t%d\n", sizeof(int), INT_MIN, INT_MAX );
    printf( "unsigned int\t: %d byte(s)\t\t\t%u\n",sizeof(unsigned),UINT_MAX );
    printf( "long\t\t: %d byte(s)\t%ld\t%ld\n", sizeof(long), LONG_MIN, LONG_MAX );
    printf( "float\t\t: %d byte(s)\t%e\t%e\n", sizeof(float), FLT_MIN, FLT_MAX );
    printf( "double\t\t: %d byte(s)\t%e\t%e\n\n", sizeof(double), DBL_MIN, DBL_MAX );
 
    return 0;
}

Programı inceleyip, detaylara girmeyin. Sadece çalıştırıp, sonuçları görmeniz yeterli. Örneğin, Ubuntu yüklü x86 tabanlı bir bilgisayarda, karşınıza şöyle bir ekran gelecektir:


Kod:

TIP              BOYUT          MIN            MAX
==============================================================
char            : 1 byte(s)    -128            127
short          : 2 byte(s)    -32768          32767
int            : 4 byte(s)    -2147483648    2147483647
unsigned int    : 4 byte(s)                    4294967295
long            : 4 byte(s)    -2147483648    2147483647
float          : 4 byte(s)    1.175494e-38    3.402823e+38
double          : 8 byte(s)    2.225074e-308  1.797693e+308

Sanırım hiç istemediğim bir şey yaparak, kafanızı karıştırdım. Dilerseniz, burada keselim ve bunlar ileriye dönük olarak bir kenarda dursunlar. Yine de daha fazla bilgi isterseniz, Teach Yourself C in 21 Days yazısına göz atabilirsiniz. Ama dediğim gibi bunların sonraya bırakılması, uygun olacaktır.

Şu ana kadar öğrendiklerimizle girilen herhangi iki sayısının ortalamasını hesaplayan bir program yazalım. Başlamadan önce, değişkenlerimizin kaç tane ve nasıl olacağını düşünelim. Şurası kesin ki, alacağımız iki sayı için 2 farklı değişkenimiz olmalı. Bir de ortalamayı hesapladığımızda bulduğumuz değeri ona atayabileceğimiz bir başka değişkene ihtiyacımız var. Peki değişkenlerimizin tipleri ne olacak? Başında belirttiğimiz gibi yazmamız gereken program herhangi iki sayı için kullanılabilmeli. Sadece tamsayı demiyoruz, yani virgüllü bir sayı da girilebilir. O halde, girilecek iki sayının değişken tipi float olmalı. Bunu double da yapabilirsiniz, fakat büyüklüğü açısından gereksiz olacaktır. Ortalamaların atanacağı üçüncü değişkene gelince, o da bir float olmalı. İki virgüllü sayının ortalamasının tamsayı çıkması düşünülemez. Oluşturduğumuz bu önbilgilerle programımızı artık yazabiliriz.

Kod:

#include<stdio.h>
int main( void )
{
    float sayi1,sayi2,ortalama;
    printf("İki sayı giriniz> ");
    scanf("%f%f",&sayi1,&sayi2);
    ortalama = ( sayi1 + sayi2 ) / 2;
    printf("Ortalama sonucu: %f'dir",ortalama);
    return 0;
}

Yukarıda yazılı programda, bilmediğimiz hiçbir şey yok. Gayet basit şekilde izah edersek, 2 sayı alınıp, bunlar toplanıyor ve ikiye bölünüyor. Bulunan değerde ortalama isminde bir başka değişkene atanıyor. Burada yabancı olduğumuz, sadece scanf(); kullanımındaki değişiklik. scanf(); fonksiyonuna bakın. Dikkat edeceğiniz gibi, değişkenlerden ikisine de tek satırda değer atadık. Ayrı ayrı yazmamız da mümkündü, ancak kullanım açısından böyle yazmak açık şekilde daha pratiktir. Bu konuda bir başka örnek verelim. Diyelim ki, biri int, diğeri float, sonuncusuysa char tipinde 3 değişkeni birden tek scanf(); ile almak istiyorum. Değişkenlerin isimleri, d1,d2 ve d3 olsun. Nasıl yaparız?

************************************************** *************************************
ustam kolay gelsin. bir soru var sonucunu yada yolunu bulamadım. rica etsem bu soruyu cozermısın. bende mantıgı
anlamıs olurum. yardımcı olsanda olmasanda teşekürler şimdiden hayırlı aksamlar.


#include <stdio.h>
int main()
{
int i,sayi,max=0;
for(i=1;i<=5;i++)
{
printf("sayi giriniz :"); scanf("%d",&sayi);
if(sayi>max)
{
max=sayi;
}
}
printf("En buyuk Sayi %d dir",max);

}

// bu ornekte en buyuk sayıyı buluyoruz.istediğim şu: bu soruda kullanıcının yazdıgı 5 rakamdan en buyugu degılde en kucugunu sorsak nasıl ekrana basardık?

Kyo 15 Kasım 2017 01:12

Cevap: C++ Dersleri
 
Alıntı:

fuat1260 Nickli Üyeden Alıntı (Mesaj 1041878703)
************************************************** *************************************
ustam kolay gelsin. bir soru var sonucunu yada yolunu bulamadım. rica etsem bu soruyu cozermısın. bende mantıgı
anlamıs olurum. yardımcı olsanda olmasanda teşekürler şimdiden hayırlı aksamlar.


#include <stdio.h>
int main()
{
int i,sayi,max=0;
for(i=1;i<=5;i++)
{
printf("sayi giriniz :"); scanf("%d",&sayi);
if(sayi>max)
{
max=sayi;
}
}
printf("En buyuk Sayi %d dir",max);

}

// bu ornekte en buyuk sayıyı buluyoruz.istediğim şu: bu soruda kullanıcının yazdıgı 5 rakamdan en buyugu degılde en kucugunu sorsak nasıl ekrana basardık?

Sorunu Çözdüm kilit.

judith 09 Nisan 2020 16:30

Cevap: C++ Dersleri
 
C++ kolay görünür ama oldukça zorlayıcı sorulara denk geliyorsunki algoritma bile kurmada zorlanabiliyordum tabi aştık artık,üni zamanı keşfetseydim keşke sizi @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] ,güzel anlatım olmuş bu arada:melek:

Kyo 06 Mayıs 2020 03:50

Cevap: C++ Dersleri
 
Alıntı:

toXic Nickli Üyeden Alıntı (Mesaj 1040286877)
Kod:

#include<stdio.h>
int main( void )
{
 int i;
 for( i = 0 ; i < 10; i++ ) {
  printf("%2d: ibrahim\n",(i++));
 }
 return 0;
}


Burada söyle bir sonuc verir, yani 0-2-4-6-8-

ekrana ibrahim yazdirir;
Kod:


 
#include<stdio.h>
int main( void )
{
 int i;
 for( i = 0 ; i < 10; i++ ) {
  printf("%2d: Merhaba Dünya\n",(i+1));
 }
 return 0;
}

Bu Sekilde ise; 10 adet ibram yazdirir.

Kod:

1: ibrahim
 2: ibrahim
 3: ibrahim
 4: ibrahim
 5: ibrahim
 6: ibrahim
 7: ibrahim
 8: ibrahim
 9: ibrahim
10: ibrahim
Devam etmek için bir tuşa basın . . .

Bu Sekilde. 2 program arasindaki tek değişiklik;

1. programda -> printf("%2d: ibrahim\n",(i++));
2. programda -> printf("%2d: ibrahim \n",(i+1));

Bu Sekilde. ;)

Derleyicisiz calismak, okumadan calismaya benzer ;)

Kod:


 
#include<stdio.h>
int main( void )
{
 int i;
 for( i = 0 ; i < 10; i++ ) {
  printf("%2d: Merhaba Dünya\n",(i+1));
 }
 return 0;
}

Bu Sekilde ise; 10 adet ibram yazdirir.

Kod:

1: ibrahim
 2: ibrahim
 3: ibrahim
 4: ibrahim
 5: ibrahim
 6: ibrahim
 7: ibrahim
 8: ibrahim
 9: ibrahim
10: ibrahim
Devam etmek için bir tuşa basın . . .

burayı boyle yapsakta oluyormuş. inceleye inceleye ogrenıcem insallah :D
Kod:

#include<stdio.h>
int main( void )
{
 int i;
 for( i = 1 ; i <= 10; i++ ) {
  printf("%d: Ibrahim\n",i);
 }
 return 0;
}
 1: ibrahim
 2: ibrahim
 3: ibrahim
 4: ibrahim
 5: ibrahim
 6: ibrahim
 7: ibrahim
 8: ibrahim
 9: Ibrahim
10: Ibrahim



Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 08:56.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk