fel
le

Téglalap és uralkodók

Fel kell idézni a múlt féléves

  • rekordok és listák témaköröket.
  • rekordok létrehozását és kezelése,
  • a rekordok listákba szervezése.

Téglalapok a koordinációs rendszerben

Egy téglalapot 2D-ben jellemez a bal felső sarkának koordinátái, valamint a szélessége (width) és magassága (height). Készítsünk rekordot, amely ezen mezőkből épül fel. Készítsünk rekordokat fix adatokkal. Készítsünk függvényt, amely két rekord paraméter alapján megállapítja, hogy a két téglalap egymást átfedő-e (valamelyik belelóg-e a másikba).

Készítsünk 30 elemű téglalapokból álló listát oly módon, hogy véletlen adatokkal inicializáljuk a téglalap rekordokat. A listába csak akkor vegyünk fel egy rekorodt, ha semelyik korábban felvett téglalapba nem lóg bele.

HF: uralkodók

Egy uralkodót jellemez uralkodásának kezdete (év), hossza (években), és a nép elégedettsége (0..10 skálaérték, 0=zsarnok gyűlölt uralkodó, 10=kedvelt jóságos és igazságos). Készítsünk véletlen értékekkel inicializált listát 30 uralkodóval. Határozzuk meg a leghosszabban uralkodó királyunk adatait, valamint hogy van-e átfedés az uralkodások között (valaki még uralkodása folyamatban volt, mikor egy másik is elkezdte az uralkodását). Írassuk ki az átfedő uralkodások adatait egymás mellé a képernyőre.


Téglalapos feladat megoldása

using System;
using System.Collections.Generic;

namespace TeglalaposFeladatMegoldasaHZ
{
    //.....................................................................................
    class Teglalap
    {
        public int x;
        public int y;
        public double width;
        public double height;
    }
    //.....................................................................................
    class Program
    {
        static void Main(string[] args)
        {
            List<Teglalap> L = new List<Teglalap>();
            Random rnd = new Random();
            Console.Write("Lista generalas indul: ");
            while (L.Count < 30)
            {
                Console.Write("{0} ",L.Count);
                Teglalap p = new Teglalap(); ;
                p.x = rnd.Next(-20, 20);
                p.y = rnd.Next(-20, 20);
                p.width = rnd.Next(10, 999) / 10.0;
                p.height = rnd.Next(10, 999) / 10.0;
                if (egyikbeSemLogBele(L, p)) L.Add(p);
            }
            Console.Write("Lista generalas kesz !!");
            // --
            foreach (Teglalap p in L)
                Console.WriteLine("x={0}, y={1}, w={2}, h={3}", p.x, p.y, p.width, p.height);
            // --
            Console.Write("<Enter> a befejezéshez");
            Console.ReadLine();
        }
        //.....................................................................................
        static bool egyikbeSemLogBele(List<Teglalap> L, Teglalap r)
        {
            foreach (Teglalap p in L)
            {
                if (belelog_e(p, r)) return false;
            }
            return true;
        }
        //.....................................................................................
        static bool belelog_e(Teglalap t1, Teglalap t2)
        {
            bool v=bv(t1,t2.x,t2.y) ||
                bv (t1,t2.x,t2.y-t2.height) ||
                bv(t1,t2.x+t2.width,t2.y) ||
                bv(t1,t2.x+t2.width,t2.y-t2.height) ||
                bv(t2,t1.x,t1.y) ||  
                bv (t2,t1.x,t1.y-t1.height) ||
                bv(t2,t1.x+t1.width,t1.y) ||
                bv(t2,t1.x+t1.width,t1.y-t1.height);
        return v;
        }
        //.....................................................................................
        static bool bv(Teglalap t, double x, double y)
        {
            bool vx = (t.x <= x && x <= t.x + t.width);
            bool vy = (t.y - t.height <= y && y <= t.y);
            return (vx && vy);
        }
        //.....................................................................................
    }
}
 
Hernyák Zoltán
2013-04-30 17:53:02