Merhaba arkadaşlar. Öncelikle Eren SARIGÜL'e bana bu blogta yazma fırsatı verdiği için teşekkür etmeyi borç bilirim. Geçenlerde bir soru görmüştüm ara ara orada burada gördüğüm beğendiğim soruları çözer bloguma koyarım. Bugün yapacağımız şey Javada evsorusu. Resme tıklayınız.
Facede
görmüştüm. Fakat hangi sitede, hangi grupta olduğunu bilmiyorum. Ondan
dolayı eğer ki birisi kızarsa bu görseli kullandığım için affola. Neyse
Başlayalım.
İlk önce çatı kısmı için. Kaç tane for döngüsü
kullanacağımızı belirtelim. Sağ taraf için 2 tane, birisi boşluklar için
diğeri "/" için. Sol taraf içinse 1 tane o da "\" işareti için. Boşluğa
zaten gerek yok.
Not : Dikkat ederseniz ortada "+" işareti var. Yani çift sayı girilirse otomatik olarak program bozulabilir.
Yapalım biz :
Klavyeden girileceği için Scanner sınıfını tanımlamalıyız. O halde Package'nin altına şu kodu yazıyoruz.
import java.util.Scanner;
Public void main altında :
Scanner klavye = new Scanner(System.in);
System.out.println("Evin Genişliğini Giriniz");
int Genislik = klavye.nextInt();
for(int i = 0 ; i<=Genislik/4; i++)
{
for(int y = 0 ; y <= Genislik/2 - 1 - i*2; y++)
{
System.out.print(" ");
}
for(int y = Genislik/2-i; y<=Genislik/2-1;y++)
{
System.out.print("//");
}
System.out.print("+");
for(int y = Genislik/2-i; y<=Genislik/2-1;y++)
{
System.out.print("\\\\");
}
System.out.println();
}
Buraya kadar yaptığımız kısım Çatı kısmı. Ekran Görüntüsü şöyle olmalı :
3.
sırada ben tıkladığım için öyle bir görüntü vermiş sonradan farkettim.
Neyse. Kodların mantığını zaten az çok anlamışsınızdır.
Sadece şu kodta dikkatinizi çekmek istiyorum :
for(int y = 0 ; y <= Genislik/2 - 1 - i*2; y++)
{
System.out.print(" ");
}
i*2
peki neden böyle oldu? Hesaplama yapalım : iki tane "/" işaretimiz
var. Ve 2'nin katları şeklinde gidiyor dikkat edin. Bu nedenden dolayı. 2
ile çarptık.
Peki -1 nereden geldi diye soracak olursanız :
15/2=7,5 olduğu için java bunu 8 olarak alır. Deneyebilirsiniz.(ki
ileride farklı farklı çözümler göreceğiz, ama en pratik çözümü bu. ya da
y = 0'ı y = 1 yapmak.)
Alt kısma geçelim. Alt kısımda kaç tane for döngüsü kullanacağız bir bakalım.
Pencerelerin üstü : + 1
Pencereler için : +4 (sağ, sol, alt, üst)
Pencerelerin yanı için : +2
Kapı ile pencere arası için : +1
Sol taraftan kapıya kadar : +1
Kapı : +2
Kapıdan sonrası için : +1
Toplam : 12 tane(bayağı varmış)
İlk önce kapısız ve penceresiz yapalım :
for(int i = 1 ; i <= Genislik/2;i++)
{
for(int y = 1 ; y<= Genislik;y++)
{
System.out.print("0");
}
System.out.println();
}
Şimdi
hesaplamaya gelelim. Resimde gördüğünüz üzere çatıdan pencerelere kadar
3, pencerelerden kapıya kadar da 4 birim mesafe var. Gelelim işlemimize
:
3 + 4 = 7
35 / 7 = 5
Bu işlemi yapma nedenimiz,
algoritmayı tam olarak oturtmak.(Bu matematiğe göre de : Üst kısmı 9'a
bölersek, alt kısmı da 8'e bölersek istediğimizi elde etmiş
oluyoruz.Hileye ya da kolaya kaçmaya girebilir.)Devam edelim :
Not : Alt kısmı bayağı bayağı yorucu.
//yüksekliğin üst kısmı
for(int i = 1 ; i <= Genislik/9;i++)
{
for(int y = 1 ; y<= Genislik;y++)
{
System.out.print("0");
}
System.out.println();
}
//yüksekliğin üst kısmı bitti
//pencerelerin üst kısmı
for(int i = 1 ; i<= Genislik/16;i++)
{
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
System.out.print("+");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.print("0");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
System.out.print("+");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.println();
}
//pencerelerin orta kısmı
for(int i = 1 ; i<= 1;i++)
{
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 0 ; y<=Genislik/4; y++)
{
System.out.print("+");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.print("0");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 0 ; y<=Genislik/4; y++)
{
System.out.print("+");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.println();
}
//pencerelerin orta kısmı bitti
//pencerelerin alt kısmı
for(int i = 1 ; i<= Genislik/16;i++)
{
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
System.out.print("+");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.print("0");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
System.out.print("+");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print("0");
}
System.out.println();
}
//yüksekliğin orta kısmı
for(int i = 1 ; i <= Genislik/8;i++)
{
for(int y = 1 ; y<= Genislik;y++)
{
System.out.print("0");
}
System.out.println();
}
//yüksekliğin orta kısmı bitti
//kapı kısmı
for(int i = 0 ; i<= Genislik/8;i++)
{
for(int y = 0 ; y<=Genislik/8*3; y++)
{
System.out.print("0");
}
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
System.out.print("+");
for(int y = 1 ; y<=Genislik/8; y++)
{
System.out.print(" ");
}
for(int y = 0 ; y<=Genislik/8*3; y++)
{
System.out.print("0");
}
System.out.println();
}
Not
: bu kod 35 girildiğinde sağlam çalışıyor. Daha doğrusu resimdeki
şartları sağlayan herhangi bir değer girildiğinde sağlam çalışıyor. Yani
20, 18 ,5 vs girerseniz kötü bir görüntü ortaya çıkar.
Program Linki :
Ev
Yazan : Heaven