Algoritma Geliştirme

Son günlerde süregelen 2 boyutlu algoritma sorunum sebebiyle kolları sıvamak durumunda kalmıştım. Şükür sorunu çözdük ve uzunca süredir kütüphanemde gözüme çarpan Seçkin kitabevinin yayınladığı “Algoritma Geliştirme ve Programlamaya Giriş” kitabının da tozunu almış oldum. Elimde 10. baskısı bulunan ve Dr. Fahri Vatansever tarafından ele alınan bu kitabın şu sıralar 12. baskısı piyasada.

Genişletilmiş 12. baskısını yapan bu kıymetli kitap, daha önce programlama ile ilgili bilgisi bulunmayan başlangıç seviyesinden ileri seviyelere kadar, adım adım “Algoritma Geliştirme” ve “Programlama Teknikleri”ni anlatmaktadır. Programlama merakı olan herkesinde kütüphanesinde bulunması gerektiğini düşünüyorum. Kitapta “algoritma geliştirme” ve “program yazma” tekniklerinin kazandırılması amaçlanmış.

Konuya dönersek, temel sorunumu çözdükten sonra kitabı biraz inceledim ve böylece kendimi  biraz tazeleme fırsatı buldum (bir çeşit sudoku). Ara ara buradan sizlerle yaptıklarımı paylaşmaya çalışacağım. Algoritmaları çizmeyeceğim ama çizmek isteyenler için sıkı bir tool olduğunu düşündüğüm cross-platform bir uygulama olan Pencil‘ı tavsiye edebilirim.

Sırasıyla algoritmaları aşağı doğru ekleyeceğim, zaman içinde ekledikçe de konu aşağı doğru uzayacak ve sayfalanacaktır. Benim gibi meraklıysanız göz atmanızı önereceğim.

Sınıf isimlerinin 10.baskıya göre kitaptaki örnek numaraları ile isimlendirildiğini belirterek başlayayım;

Örnek 6.1  // 2015.12.27

Sayfa 165’de göreceğiniz bu örnekte taban ve yükseklik verileri ile üçgenin alan hesaplaması yapılıyor.

Algoritmalar.java

package org.mustak.algoritmagelistirmekitabi;

/**
 * @author Hakan Müştak
 * 2015/12
 */

//Gereken Paket/Sınıflar
import java.util.Scanner;
import kitap.AltiyaBir;

public class Algoritmalar {

	// Kullanıcı giriş değişkenleri
	private static Scanner scCikis;
	private static Scanner scTaban;
	private static Scanner scYukseklik;

	public static void main(String[] args) {

		// Taban ve Yükseklik
		scTaban = new Scanner(System.in);
		scYukseklik = new Scanner(System.in);

		// Ucgen sınıfını çağırıyoruz
		AltiyaBir ucgen = new AltiyaBir();

		// Programın tekrar edileceği alan
		do {
			// Taban girişi
			try {
				System.out.print("Üçgenin taban değerini giriniz :");
				ucgen.setTaban(scTaban.nextFloat()); // Taban değeri Set
			} catch (Exception e) {
				hata();
			}

			// Yukseklik girisi
			try {
				System.out.print("Üçgenin yükseklik değerini giriniz :");
				ucgen.setYukseklik(scYukseklik.nextInt()); // Yukseklik degeri
															// Set
			} catch (Exception e) {
				hata();
			}

			ucgen.AlanHesapla(); // Alan hesaplatalım
			ucgen.ekranaYaz(); // Sonucu Yazalım
			System.gc(); // Garbage Collector

		} while (programCikisKontrolu());
		System.out.println("Program sonlandırılmıştır...\n\n");
	}// main

	// Çıkışı kontrol eden metod
	public static boolean programCikisKontrolu() {
		// Kullanıcı çıkış bilgisi
		scCikis = new Scanner(System.in);
		System.out.print("Tekrar denemek ister misiniz? (E/H)");
		// Kullanıcı çıkmak istiyor mu?
		if (scCikis.nextLine().equalsIgnoreCase("e")) {
			return true;
		} else {
			return false;
		}
	}// programCikisKontrolu()

	// Hatalı giriş yapılırsa, çıkış ve öncesindeki uyarı
	public static void hata() {
		System.out.printf("Giriş hatası yapıldı : %s\n", "Sayısal değer girilmedi!");
		System.out.println("Hatalı giriş sebebiyle uygulama sonlandırılmıştır.!\n\n");
		System.exit(0); // Konsolu durdur
	}// hata()

}// class

AltiyaBir.java (Sınıf isimleri package içinde kolaylıkla bulunabilmesi için örnek numaraları ile aynıdır.)

package kitap;

/**
 * @author Hakan Müştak
 * 2015/12
 */

public class AltiyaBir {

	// Değişkenler-----------------------------------
	private float taban, yukseklik, alan;

	// Getter-Setter---------------------------------
	public float getAlan() {
		return alan;
	}

	private void setAlan(float alan) {
		this.alan = alan;
	}

	private float getTaban() {
		return taban;
	}

	public void setTaban(float taban) {
		this.taban = taban;
	}

	private float getYukseklik() {
		return yukseklik;
	}

	public void setYukseklik(float yukseklik) {
		this.yukseklik = yukseklik;
	}

	// Metodlar------------------------------------
	public void AlanHesapla() {
		setAlan((getTaban() * getYukseklik()) / 2);
	}
	
	public void ekranaYaz() {
		System.out.println("\n---------------------------------------");
		System.out.printf("Taban %,33.1f\n"		,getTaban());
		System.out.printf("Yukseklik %,29.1f\n"	,getYukseklik());
		System.out.printf("Alan %,34.1f\n"		,getAlan());
		System.out.println("---------------------------------------\n");
	}

}

Örnek 6.1 sonu

 

Mail, yorum ve olumlu/olumsuz eleştirilerinizi bekliyorum.

Hakan Müştak @2015/12

 

   

2 yorum

  1. JavaAktivist dedi ki:

    Yaptığı İŞ düşünülecek olursa gereğinden fazla uzun olmuş gibi görünüyor. Algoritmayı test eden kodu yazıp bitirmekdaha uygun olurdu. Gene de emeğinize sağlık.

    • hmustak dedi ki:

      Eleştriniz için teşekkür ederim. Matematiksel işlevin algoritması için yeterli olabilirdi söylediğiniz. Ama bunun için hesap makinesi yeterli olacaktı; fakat amacımızın programcı kimliğimizle algoritmayı denemek olduğu için kısa yada uzun olduğuna bakmadan, kontrollerimizle oluşturduğumuz programımıza algoritmanın hesap sınıfını entegre etmek olmalı diye düşünüyorum. Bir çeşit kod antremanı olarak görmek lazım.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*

Captcha Kontrolü * Zaman aşımı, sayfayı tekrar yükleyin


Top