Java Eğitimi 37-Algoritma Örnekleri II

Merhabalar,

Kısa bir aradan sonra tekrar karşınızdayım. Algoritma örnekleri ile devam edelim.

4. İki Tarih Arasındaki Farkı Belirleme

Girmiş olduğumuz iki tarih arasındaki farkı bize veren bir program yazmaya ne dersiniz? Hadi öncelikle bu algoritmayı kuralım.

Yukarıdaki algoritmaya göre programımızı oluşturmaya başlayalım. 

import java.util.Scanner;

public class tarih {
public static void main(String[] args){
int a_yıl,a_ay,a_gün,b_yıl,b_ay,b_gün,c_yıl,c_ay,c_gün;
Scanner scan=new Scanner(System.in);
System.out.print("Lütfen ilk yılı giriniz: ");
a_yıl = scan.nextInt();
System.out.print("Lütfen ilk ayı giriniz: ");
a_ay = scan.nextInt();
System.out.print("Lütfen ilk günü giriniz: ");
a_gün = scan.nextInt();

Bu şekilde ikinci kısmı da tamamlarsak;

System.out.print("Lütfen ikinci yılı giriniz: ");
b_yıl = scan.nextInt();
System.out.print("Lütfen ikinci ayı giriniz: ");
b_ay = scan.nextInt();
System.out.print("Lütfen ikinci günü giriniz: ");
b_gün = scan.nextInt();

Hesaplama kısmı da normal çıkarma işlemi şeklinde olur:

c_yıl=a_yıl-b_yıl;
c_ay=a_ay-b_ay;
c_gün=a_gün-b_gün;
System.out.println("İki tarih arasındaki fark= " + c_gün + " gün" + "/" + c_ay + " ay" + "/" + c_yıl + " yıl");

Kodların tamamı şu şekildedir:

5. Sayaç Mantığı

Daha önceki konularda yer alan bir yapı ile devam edelim. Sayıları tek tek artırma durumunu şimdi algoritma mantığı ile ele alalım. Algoritma şu şekilde olacaktır:

Kodları yazmak da çok kısa ve kolay. For döngü mantığı ile bu işlemleri yapalım.

public class dongu {
public static void main(String[] args){
int sayac;
for(sayac=0;sayac<11;sayac++){
if(sayac==10){
System.out.println("Saydırma işlemi sona erdi.");
}
else{
System.out.println("İşlem devam ediyor...");
}
}
}
}

6.Armstrong Sayı Bulma

Şimdi matematiğin gizli dünyasına dalmaya ne dersiniz? Gelin hep birlikte Armstrong sayıları Java programına uyarlayalım ve bu sayıları bulan programı yazalım. Bunun için öncelikle Armstrong sayının ne anlama geldiğini sizlerle paylaşacağım.

Bir sayının her basamağının, sayının basamak sayısı kadar üssünün toplamının sayının kendisine eşit olması durumunda bu sayıya “armstrong sayı” adı verilir. Eğer sayı 3 basamaklı ise, her basamağın küplerinin toplamı elimizdeki sayıyı verirse buna armstrong sayıdır diyebiliriz. Aynı şekilde sayı 4 basamaklı ise tüm basamakların dördüncü kuvvetlerinin toplamına bakılarak armstrong sayı olup olmadığına karar verilebilir. Örneğin 407 sayısını ele alalım. 4³+0³+7³ = 64+0+343 = 407 sonucunu verir. Bu da 407 sayısının armstrong bir sayı olduğunu gösterir. 1342 sayısına da bakalım. 14+34+44+24  =1+81+256+16=354 sayısı 1342’ye eşit olmadığı için armstrong sayı olmaz.O halde şimdi kod kısmına geçebiliriz. 

Kullanıcıdan sayı girişi istediğimiz için Scanner sınıfı ile başlarız:

import java.util.Scanner;
public class ornek {

public static void main(String arg[]){
Scanner scan = new Scanner(System.in);
System.out.print("Bir sayı giriniz: ");
int sayi = scan.nextInt();
}
}

Önce sayının kaç basamağı olduğunu belirlememiz gerek. Daha sonra o basamakların üssünü alacağız. Basamaklar için “deger” adında bir değişken tanımlayıp değerini “sayi” değişkenine eşitlememiz gerekir. Ayrıca basamakların toplamı da “cikan_sayi” adlı değişkene atanır ve bu toplam da “sayi” değişkenine eşitlenir.

int basamak=0;
int toplam=0;
int deger=sayi;
int cikan_sayi=sayi;

Sıra geldi basamakları yani “deger” i incelemeye. Matematikten hatırlayacak olursak; basamak değerlerini 10’a bölerek basamak değerini buluyorduk. Burada da aynı işlemi kullanacağız. Klavyeden girilen sayının kaç basamaklı olduğunu bilmediğimiz için while döngüsü kullanabiliriz. 

while(deger>0){
deger/=10;
basamak++;
}

Diğer değişkene de aynı işlemi uygularız. 

while(cikan_sayi>0){
int basamak_degeri = cikan_sayi % 10;
cikan_sayi /= 10;
toplam += Math.pow(basamak_degeri,basamak);
}

Ama bir fark var. Gördüğünüz gibi yukarıdaki while döngüsünü kapatmadan önce üs işlemini de yapmamız gerekiyor. 

Artık işlemlerinin son aşamasına geldik. Armstrong sayı olup olmadığına nasıl karar veriyorduk? Basamak toplamlarının sayıya eşit olup olmadığına bakarak değil mi? O halde bunu da if döngüsü ile kontrol edebiliriz. 

if (toplam == sayi) {

System.out.println(sayi + " sayısı armstrong sayıdır.");
}
else {
System.out.println(sayi + " sayısı armstrong sayı değildir.");
}

Artık bu kodları sayıların armstrong sayı olup olmadığını bize veren bir programa dönüştürmüş olduk. Kodların tamamı şu şekildedir:

Bir sonraki algoritma yazısında görüşmek dileğiyle. Hoşça kalın.

Yorum bırakın