Dikdörtgenlerin alanlarını hesaplama

Bu yazıyı beğendiniz mi?
Evet (6) Hayır (1)
Kategori Algoritma Örnekleri Yazar cunneyt Tarih Dün 02:02
Yorum(lar) Henüz yorum yazılmadı Yorum yaz Yorum Yaz
Bu yazi 3783 kez okundu.
derste hocamızın sorduğu bir soruyu sizinle paylaşayım istedim..kodlar bana aittir.



Kenarları X ve Y eksenine paralel olacak şekilde bir çok dikdörgen çizilmiş. Bu dikdörtgenlerin kapladığı toplam alanı hesaplayınız. Eğer bir alan birden çok dikdörtgen tarafından kaplanmışsa, toplam alan hesaplanırken sadece bir defa hesaba katılacak. Yani eğer iki dikdörtgen çakışıyorsa, bu iki dikdörtgenin kapladığı alan hesaplanırken kesişim alanı iki dikdörtgenin alanları toplamından çıkarılacak.

Giriş Dosyası
Giriş dosyasının birinci satırında dikdörtgen sayısını gösteren bir N tamsayısı var. (1<= N <= 100). Takip eden N satırın herbirinde bir dikdörtgenin sol alt ve sağ üst köşelerinin kordinatlarını dösteren dört tamsayı var (x1, y1) ve (x2, y2). (0<= x1, y1 <= 100, x1 <= x2, y1 <= y2).

Çıkış Dosyası
Toplam alanı gösteren bir tamsayı.

Örnek Girdi
2
3 4 8 8
6 1 13 5
Örnek Çıktı
46


            int dikdortgenSayisi = 0;
            int xAraligi, yAraligi, enKucukX, enBuyukX, enKucukY, enBuyukY;
            int kesisenAlan = 0;
            int toplamAlan = 0;
            int toplamXKenarUzunlugu = 0;
            int toplamYKenarUzunlugu = 0;
            Console.WriteLine("Dikdörtgen adedini giriniz");
            dikdortgenSayisi = Int16.Parse(Console.ReadLine());
            if (dikdortgenSayisi <= 100 & dikdortgenSayisi >= 1)
            {
                int[] dikdortgenlerinXKenarUzunluklari = new int[dikdortgenSayisi];
                int[] dikdortgenlerinYKenarUzunluklari = new int[dikdortgenSayisi];
                int[] dikdortgenlerinAlanlari = new int[dikdortgenSayisi];
                //birden fazla alan olacağı için,dikdörtgen sayısı kadar dizi tanımladık.
                int[,] koordinat = new int[dikdortgenSayisi, 4];
                //koordinat düzlemi 2 boyutlu olduğundan,noktalar için 2 boyutlu bir dizi tanımladık.
                Console.WriteLine("Noktaları girin.");
                for (int i = 0; i < dikdortgenSayisi; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        koordinat[i, j] = Int16.Parse(Console.ReadLine());
                    }
                    dikdortgenlerinXKenarUzunluklari = koordinat[i, 2] - koordinat[i, 0];
                    dikdortgenlerinYKenarUzunluklari = koordinat[i, 3] - koordinat[i, 1];
                    //dikdörtgenin alanı için hesaplama yapıyoruz.
                    dikdortgenlerinAlanlari = ((koordinat[i, 2] - koordinat[i, 0]) * (koordinat[i, 3] - koordinat[i, 1]));
                    if (i < dikdortgenSayisi - 1)
                    { Console.WriteLine("{0}. dikdörtgenin noktalarını girdiniz.Şimdi {1}. dikdörtgenin noktalarını girin.", i + 1, i + 2); }
                }
                for (int i = 0; i < dikdortgenSayisi; i++)
                {
                    toplamAlan += dikdortgenlerinAlanlari;
                }
                enBuyukX = koordinat[0, 2];
                enBuyukY = koordinat[0, 3];
                enKucukX = koordinat[0, 0];
                enKucukY = koordinat[0, 1];
                for (int i = 1; i < dikdortgenSayisi; i++)
                {
                    if (koordinat[i, 2] > enBuyukX)
                        enBuyukX = koordinat[i, 2];
                    if (koordinat[i, 0] < enKucukX)
                        enKucukX = koordinat[i, 0];
                    if (koordinat[i, 1] < enKucukY)
                        enKucukY = koordinat[i, 1];
                    if (koordinat[i, 3] > enBuyukY)
                        enBuyukY = koordinat[i, 3];
                }
                xAraligi = enBuyukX - enKucukX;
                yAraligi = enBuyukY - enKucukY;
                for (int i = 0; i < dikdortgenSayisi; i++)
                {
                    toplamXKenarUzunlugu += dikdortgenlerinXKenarUzunluklari;
                    toplamYKenarUzunlugu += dikdortgenlerinYKenarUzunluklari;
                }
                if (toplamXKenarUzunlugu > xAraligi || toplamYKenarUzunlugu > yAraligi)
                {
                    kesisenAlan = ((toplamXKenarUzunlugu - xAraligi) * (toplamYKenarUzunlugu - yAraligi));
                }

                toplamAlan = toplamAlan - kesisenAlan;
                Console.WriteLine(toplamAlan);
            }





Yorum Yaz

Yorum yazabilmeniz için üye girişini yapmalısınız.

Üye Girişi

Yazı Seçenekleri

Linkx.me URL Kısalt
Yorum yaz Yorum yaz/oku
Yazıcı uyumlu sayfa Yazıcı uyumlu sayfa Favorilere ekle Favorilerime ekle
RSS RSS Arkadaşıma bildir Arkadaşıma bildir

Diğerleri

Yazar: cunneyt



Adı Soyadıcüneyt atalay yardım
E-postacuneytyardim@hotmail.com
Kayıt Tarihi3/28/2012

Yazar profili için tıklayınız

Etiket Bulutu

Benzer Diğer Yazılar

Başa dön
Anahtar Kelimeler
Kategoriler
Etiketler
Kullanım Şartları
Gizlilik
Dost Siteler
Anasayfa  |  Hakkımızda  |  Reklam  |  İletişim
Her hakkı saklıdır © 2009 Algoritmalar.com
Tasarım & Programlama: Devrim Altınkurt