Merhaba arkadaşlar,
Bu örneğimizde konsolda girilen dört sayıyı dizi kullanmadan, sadece if-else bloklarını kullanarak büyükten küçüğe sıralama yapmayı inceleyeceğiz.
Bu ve bunun gibi örnekler genelde Algoritma derslerinde döngü bloklarını öğretmek amacıyla ödev olarak veriliyor. Bizde bu örneği bu gibi durumlara yardımcı olması amacıyla işleyeceğiz.
Kullanıcıdan dört sayı aldırma işlemini yaptırmak için dört farklı değişkenimiz olduğunu var sayalım (a,b,c,d)
Sıralama işlemini yapmak için dört farklı değişkenimiz olduğunu var sayayalım(s1,s2,s3,s4)
int s1,s2,s3,s4; int a,b,c,d; printf("Birinci sayiyi giriniz:"); scanf("%d",&a); printf("Ikinci sayiyi giriniz:"); scanf("%d",&b); printf("Ucuncu sayiyi giriniz:"); scanf("%d",&c); printf("Birinci sayiyi giriniz:"); scanf("%d",&d); printf("\n Tanimlanan Sayilar : %d , %d , %d , %d",a,b,c,d);
Toplamda sekiz adet değişken tanımladık. Sadece if-else bloklarını kullanacağımız için bu işlemler biraz uzun sürecektir.
En büyük sayıyı bulmanın mantığı genel olarak kolay, sayıların hepsinden büyük olan sayı en büyüktür. En büyük sayıyı bulduktan sonra onu s1 değişkeninde depolayıp eski en büyük olan sayıyı da sıfır olarak değiştirmemiz gerekiyor ki bir kez daha büyük bulunup sıralama karışmaması için.
Şimdi ilk olarak en büyüğü bulalım.
if((a>b)&&(a>c)&&(a>d)) { s1=a;//Eğer en büyük a ise a=0; } else if((b>a)&&(b>c)&&(b>d)) { s1=b;//Eğer en büyük b ise b=0; } else if((c>a) && (c>b)&&(c>d)) { s1=c;//Eğer en büyük c ise c=0; } else { s1=d;//En büyük d ise d=0; } //Birinci bulundu.
Bu sayede en büyük sayıyı bulmuş olacağız.
İkinci üçüncü ve dördüncü en büyük sayıları bulmak için ben şöyle bir mantık kurdum, herkes kendine ait algoritmalar oluşutrabilir. En büyük sayımız s1 olarak kayıtlı, sayılar arasında(a,b,c veya d ) en büyük sayı(s1) ile arasındaki fark en az olan ikinci en büyüktür. Bu mantıkla her sayı arasındaki farkı bulup fark en az olan ikinci en büyük olarak işaretlenebilir.
if((s1-a!=0)&&(s1-a<s1-b)&&(s1-a<s1-c)&&(s1-a<s1-d)) { s2=a; a=0; } else if((s1-b!=0)&&(s1-b<s1-a)&&(s1-b<s1-c)&&(s1-b<s1-d)) { s2=b; b=0; } else if((s1-c!=0)&&(s1-c<s1-b)&&(s1-c<s1-a)&&(s1-c<s1-d)) { s2=c; c=0; } else { s2=d; d=0; } //Ikinci bulundu.
Aynı algoritmayı kullanarak yani ikinci en büyük(s2) ile sayılar arasında en az fark olan sayı üçüncü en büyüktür diyebiliriz.
if((s2-a!=0)&&(s2-a<s2-b)&&(s2-a<s2-c)&&(s2-a<s2-d)) { s3=a; a=0; } else if((s2-b!=0)&&(s2-b<s2-a)&&(s2-b<s2-c)&&(s2-b<s2-d)) { s3=b; b=0; } else if((s2-c!=0)&&(s2-c<s2-b)&&(s2-c<s2-a)&&(s2-c<s2-d)) { s3=c; c=0; } else { s3=d; d=0; } //Ucuncu bulundu.
Ve yine aynı şekilde aradaki farklardan yararlanıp, üçüncü en büyük ile arasındaki fark en az olan sayı da en küçük sayı olarak işaretlenebilir.
if((s3-a!=0)&&(s3-a<s3-b)&&(s3-a<s3-c)&&(s3-a<s3-d)) { s4=a; a=0; } else if((s3-b!=0)&&(s3-b<s3-a)&&(s3-b<s3-c)&&(s3-b<s3-d)) { s4=b; b=0; } else if((s3-c!=0)&&(s3-c<s3-b)&&(s3-c<s3-a)&&(s3-c<s3-d)) { s4=c; c=0; } else { s4=d; d=0; }
Ve en sonda yazdırma işlemini yapabiliriz.
printf("\n\n Siralama:\n1.%d \n2.%d \n3.%d \n4.%d",s1,s2,s3,s4);
Yani kodlarımıza toptan bir bakış atacak olursak görüntü aşağıdaki gibi olacaktır.
#include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int s1,s2,s3,s4,yedek; int a,b,c,d; printf("Birinci sayiyi giriniz:"); scanf("%d",&a); printf("Ikinci sayiyi giriniz:"); scanf("%d",&b); printf("Ucuncu sayiyi giriniz:"); scanf("%d",&c); printf("Birinci sayiyi giriniz:"); scanf("%d",&d); printf("\n Tanimlanan Sayilar : %d , %d , %d , %d",a,b,c,d); if((a>b)&&(a>c)&&(a>d)) { s1=a; a=0; } else if((b>a)&&(b>c)&&(b>d)) { s1=b; b=0; } else if((c>a) && (c>b)&&(c>d)) { s1=c; c=0; } else { s1=d; d=0; } //Birinci bulundu. if((s1-a!=0)&&(s1-a<s1-b)&&(s1-a<s1-c)&&(s1-a<s1-d)) { s2=a; a=0; } else if((s1-b!=0)&&(s1-b<s1-a)&&(s1-b<s1-c)&&(s1-b<s1-d)) { s2=b; b=0; } else if((s1-c!=0)&&(s1-c<s1-b)&&(s1-c<s1-a)&&(s1-c<s1-d)) { s2=c; c=0; } else { s2=d; d=0; } //Ikinci bulundu. if((s2-a!=0)&&(s2-a<s2-b)&&(s2-a<s2-c)&&(s2-a<s2-d)) { s3=a; a=0; } else if((s2-b!=0)&&(s2-b<s2-a)&&(s2-b<s2-c)&&(s2-b<s2-d)) { s3=b; b=0; } else if((s2-c!=0)&&(s2-c<s2-b)&&(s2-c<s2-a)&&(s2-c<s2-d)) { s3=c; c=0; } else { s3=d; d=0; } //Ucuncu bulundu. if((s3-a!=0)&&(s3-a<s3-b)&&(s3-a<s3-c)&&(s3-a<s3-d)) { s4=a; a=0; } else if((s3-b!=0)&&(s3-b<s3-a)&&(s3-b<s3-c)&&(s3-b<s3-d)) { s4=b; b=0; } else if((s3-c!=0)&&(s3-c<s3-b)&&(s3-c<s3-a)&&(s3-c<s3-d)) { s4=c; c=0; } else { s4=d; d=0; } printf("\n\n Siralama:\n1.%d \n2.%d \n3.%d \n4.%d",s1,s2,s3,s4); return 0; }
Ve uygulamamız çalıştığında ekran görüntüsü aşağıdaki gibi olacaktır:
Anlayamadığınız, eksik kalan veya yardımcı olmamı istediğiniz konular var ise yorum kısmından veya “[email protected]” adresinden bana ulaşabilirsiniz.
Teşekkürler.