Ev Sorusu - JAVA
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);Buraya kadar yaptığımız kısım Çatı kısmı. Ekran Görüntüsü şöyle olmalı :
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();
}
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++)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.
{
System.out.print(" ");
}
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++)Ş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 :
{
for(int y = 1 ; y<= Genislik;y++)
{
System.out.print("0");
}
System.out.println();
}
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ı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.
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();
}
Program Linki :
Ev
Yazan : Heaven
0 yorum:
Yorum Gönder