2020. február 27., csütörtök

Felhasználók, csoportok létrehozása windows szerveren

Telepítés után automatikusan létrejön két speciális csoport (Group): az Administrators (Rendszergazdák) és a Guests (Vendégek), valamint két speciális felhasználó: az Administrator (Rendszergazda) és a Guest (Vendég)
.
Telepítéskor automatikusan létrejövő két speciális felhasználó
Az Administrator olyan felhasználó, amely „gyárilag” különböző „privilégiumokkal” rendelkezik. Alapesetben egyedül jogosult a rendszer működését meghatározó paraméterek lekérdezésére, megváltoztatására. „Privilégiumai” egy részét át sem tudja ruházni. A Guest létrehozásának célja az volt, hogy legyen olyan korlátozott jogosultságú felhasználó, aki eleve nem képes komolyabb feladatok elvégzésére, és ebből a korlátozásból nem tud kilépni sem. A csoportok fogalma később részletesebben tisztázásra kerül. Egyelőre annyit érdemes tudni, hogy engedélyeket, jogokat csoportokhoz is hozzá lehet rendelni, és ezeket az engedélyeket, jogokat a csoport tagjai megkapják.
Érdemes két másik fogalmat is tisztázni, az engedélyt (permission) és a jogot (right). Az engedély erőforrás használathoz kötődik (van engedélyem olvasni egy fájlt, nincs engedélyem törölni egy fájlt, nincs engedélyem nyomtatni, stb.). Jog pedig rendszertevékenység elvégzéséhez kötődik (van jogom módosítani a rendszeridőt, nincs jogom archiválni, nincs jogom lokálisan bejelentkezni, nincs jogom leállítani a rendszert, stb.). A jogosultságok egy része átruházható, illetve a jogot élvezők köre bővíthető, szűkíthető. Több operációs rendszerben ezek a fogalmak összemosódnak.

Felhasználók létrehozása

Felhasználókat kétféleképpen lehet létrehozni: vagy teljesen új felhasználó létrehozásával, vagy egy meglévő felhasználó másolásával. Workgroup esetében (illetve olyan tartománybeli gépeken, amelyek nem tartományvezérlők) felhasználók létrehozására, módosítására a Microsoft Management Console-hoz (mmc) egy hozzáadott alkalmazás (úgynevezett snap-in-ek) szolgál. A szükséges snap-in neve: Local Users and Groups. Domain esetében mindkét célra az Active Directory Users and Computers nevű alkalmazás szolgál (21. ábra).

Az Active Directory Users and Computers indítása
Az MMC segítségével a legtöbb rendszergazdai tevékenység elvégezhető. Tetszés szerint kialakítható MMC-k hozhatók létre, és azokat el lehet menteni. Az operációs rendszer installálásakor több előre kialakított MMC is felkerül, amiket menük segítségével lehet elindítani. Néhány fontosabb Snap-in:
  1. Számítógép kezelő (Computer Management)
  2. Eszköz kezelő (Device Management)
  3. Diszk kezelő (Disk Management)
  4. Eseményfigyelő (Event Viewer)
  5. Helyi felhasználók és csoportok (Local Users and Groups)
  6. Rendszer információk (System Information)
Az installálás témakörénél tisztázásra került a munkacsoport és a tartomány fogalma. Nem tartományvezérlőn csak helyi felhasználót (local user) lehet létrehozni, aki csak az adott számítógépre fog tudni belépni. Tartományvezérlőn pedig csak tartományi felhasználót (domain user) lehet létrehozni, aki a tartomány minden számítógépén be tud lépni (…ha ez nem kerül korlátozásra). Tartományvezérlőn helyi felhasználó nincs. Ezt a helyi felhasználók kezelésére szolgáló program a megfelelő menüben piros X-szel jelzi is.
Egy felhasználó létrehozásakor az operációs rendszer a felhasználóhoz hozzárendel egy azonosítót, amivel sikeres belépés után a felhasználó tevékenységét követi. A Windows-ban ez az azonosító a SID (Security Identification). A SID-et a Windows bizonyos szabályok betartásával generálja, és kiterjedten használja. (pl.: SID-je van a csoportoknak, de SID-je van az installációnak is!) Ha a felhasználó ezek után létrehoz egy fájlt, akkor a Windows nem a felhasználó nevét írja a fájl mellé, mint tulajdonost, hanem a felhasználó SID-jét. Ezért, ha a felhasználót valami ok miatt töröljük a felhasználók közül, majd később ugyanolyan néven létrehozzuk, akkor a generálás véletlenszerű része miatt a felhasználó nem a korábbi SID-jét kapja vissza. A felhasználó SID-jének megváltoztatására nincs lehetőség, korábbi fájljainak tulajdonosánál a törölt SID látszik, de mert a felhasználó törlésre került, ezért az operációs rendszer nem tudja a SID-et feloldani névvel. A felhasználó tehát nem lesz tulajdonosa korábbi fájljainak. A korrigálás igen macerás és időigényes. Elkerülésére a javaslat az, hogy a felhasználókat nem törölni kell, hanem letiltani. A letiltás később bármikor feloldható.
Kisebb vállalatok esetében a másolás viszonylag ritkán kerül használatra. A módszer eleve csak domain esetében áll rendelkezésre, és tulajdonképpen akkor kifizetődő, ha nagyobb létszámú olyan felhasználó van, vagy lesz, akik több jellemzőjükben (például csoporttagságukban) hasonlítanak egymásra.

Új felhasználó létrehozása
Létrehozáskor (22. ábra) tartomány esetében jellemzően meg kell adni a felhasználó nevét (Firstname, Lastname, Fullname), bejelentkezési nevét (User logon name), induló jelszavát (Password),

 Az új felhasználó alapadatainak megadása

majd checkbox-ok segítségével lehet kiválasztani a következőket (23. ábra):
  1. a felhasználónak az első sikeres bejelentkezéskor meg kell változtatnia jelszavát (User must change password at next logon);
  2. a felhasználó nem módosíthatja jelszavát (User cannot change password). Jellemző közösen használt fiók (account) esetében;
  3. a jelszó sohasem jár le (Password never expires);
  4. a fiók le van tiltva (Account is disabled).
Létrehozás után már további jellemzők is megadhatók 

Létező felhasználó adatainak megtekintése, módosítása
  1. telefonszámok (mobil, vezetékes, otthoni, fax, stb)
  2. e-mail cím
  3. web oldal címe
  4. lakcím vagy munkahelyi cím adatok (város, irányítószám, megye, stb)
  5. mely gépekről jelentkezhet be
  6. mely napokon, és azon belül mely időpontokban
  7. az account lejáratának ideje (soha, vagy egy adott nap).
Fontos tisztázni, hogy a felhasználó bejelentkezési nevének egyedinek kell lennie, hiszen két vagy több azonos nevű felhasználó esetében az azonos nevű felhasználókat már csak jelszavuk különböztetné meg egymástól. A felhasználó bejelentkezési nevének bizonyos kötöttségeket kell teljesítenie:
  1. fontos, hogy érvényességi körén belül egyedinek kell lennie (munkacsoport esetében az adott gépen, tartomány esetében az egész tartományban)
  2. a név bár 256 karakter hosszú is lehet, de nem javasolt, hogy hosszabb legyen, mint 64 karakter (minden bejelentkezéskor be kell gépelni…)
  3. ne tartalmazza a következő karakterek egyikét sem:   <  >  ?  =  *  +  ,  \  [  ]  /  |  
  4. nem hiba, de nem javasolt ékezetes karakterek használata, mert ékezet nélküli billentyűzeten problémát okozhat azok bevitele.
Ha a név megadásánál kisbetűk és nagy betűk is használatra kerültek, a Windows megjegyzi azt, de megadásnál nem különbözteti meg. Ennek megfelelően a következő nevek azonosítás szempontjából egymással egyenértékűek: kovacs, KOVACS, Kovacs, stb.

Csoportok létrehozása

A létrehozott felhasználók segítségével szabályozni lehet, kik jelentkezhetnek be a számítógépre. Ezek a felhasználók munkájuk során erőforrásokat fognak használni (nyomtatók, diszkek). A költséges erőforrások használatát célszerű korlátozni. Ugyancsak célszerű korlátozni a diszken tárolt fájlokhoz való hozzáféréseket is, a bennük levő információ miatt. Hozzáférési engedély megadása esetén jellemzően lesznek olyan felhasználók, akik a fájlokat olvashatják, és lesznek olyanok, akik módosíthatják is azokat. Ez a korábban már bevezetett engedélyek segítségével szabályozható. Nagyobb méretű vállalat esetében (bár a felhasználók egyediek) a felhasználók igényeit áttekintve általában kialakíthatók olyan csoportok, amely csoportba tartozó felhasználók jellemzően azonos erőforrásokat fognak használni, azonos módon. Ilyen esetekben ugyan van lehetősége a rendszergazdának arra, hogy mindenkinek egyedileg adja meg az engedélyeket, de sok felhasználó esetében ez időigényes, és többször lehet hibázni is. A feladat leegyszerűsítése érdekében csoportokat lehet létrehozni, és az engedélyeket a csoportokhoz lehet hozzárendelni. Ez után meg kell adni, mely felhasználók mely csoportokba tartoznak. A csoporttagság miatt automatikusan megkapják a csoporthoz rendelt erőforrás használati engedélyeket. Ha később (bármilyen okból) módosítani kell egy erőforrás használatának jellegét (olvasásról olvasás + írásra), akkor nem kell egyesével minden felhasználót módosítani, hanem csak a csoporthoz rendelt engedélyeket kell módosítani, és már a módosított engedélyek fognak a felhasználókra vonatkozni.

Új csoport létrehozása az Active Directory Users and Computers-ben
Tartomány esetében a csoport létrehozásánál (25. ábra) meg kell adni a csoport nevét (hasonló kötöttségekkel, mint a felhasználói név esetében), valamint ki kell választani a csoport hatókörét (hatókör: scope) (Domain Local – Tartományi helyi, Global – Globális, illetve Universal – Univerzális). A hatókör meghatározza, hol lehet hivatkozni a csoport nevére. Ugyancsak meg kejll adni a csoport típusát (típus: type) (Security – Biztonsági illetve Distribution – Terjesztési) (26. ábra). Összefoglalva, e két utolsó adat megadásával tulajdonképpen az kerül meghatározásra, hogy hol, és milyen célokra lehet majd használni a csoportot.
Már létező csoportok esetében kétféle módon lehet megadni a csoporttagságot:
  1. Az első esetben ki kell választani azt a csoportot, amelynek a tagjait módosítani kell, majd a Members (tagok) fül segítségével bővíthető, szűkíthető a tagok listája.
  2. A másik esetben a felhasználók oldaláról lehet megközelíteni a csoporttagságot. Kiválasztva a felhasználót, a Member Of (Tagja ezeknek a csoportoknak) fül segítségével meg lehet adni, mely csoportoknak legyen tagja.

Csoport létrehozásánál megadásra kerülő adatok
Bár mindkét módszer járható, egy konkrét esetben azt érdemes választani, amelyikkel egyszerűbb a feladat megoldása. Ha a csoporthoz kell több felhasználót hozzáadni, akkor a csoport oldaláról javasolt a feladatot elvégezni, ha pedig a felhasználót kell több csoportba beletenni, akkor a felhasználó oldaláról érdemes megoldani a feladatot (27. és 28. ábra).

 Csoporttagság módosítása a felhasználó felől

Csoporttagság módosítása a csoport felől
A felhasználó csoporttagságainak bővítését mutatja be a 29. ábra.

A felhasználó csoporttagságának kibővítése tartomány esetén
(Add. Advanced…, Find Now)
Vegyük a csoport hatókörét. Tételezzük fel, hogy egy konkrét vállalat esetében különböző osztályok vannak: Tervezési Osztály, Bér és Munkaügyi Osztály, Kiszállítási Osztály, stb. Ezeken az osztályokon van egy osztályvezető, akinek van titkárnője, és beosztottjai. Ebben az esetben célszerűnek látszik olyan csoportok létrehozása, amelyek megegyeznek az osztályok nevével. Például: TervO, BMO, KO, stb. A csoportoknak azok a felhasználók lesznek a tagjai, akik az adott osztályon dolgoznak. Ez jól áttekinthető csoporttagságot eredményez. Ugyanakkor érdemes végiggondolni, hogy az egyes osztályokon dolgozó titkárnők valószínűleg ugyanazokat az alkalmazásokat használják, és lesznek közösen használt fájljaik. Emiatt érdemes ilyen jellegű csoportokat is létrehozni (Titkarnok). Ebből adódóan lesznek olyan felhasználók, akik két, vagy még több csoportnak lesznek a tagjai. Ezzel a módszerrel könnyen kialakíthatók lesznek a csoportok, és a tagságok. Fontos tisztázni, hogy ekkor még semmilyen erőforráshoz való hozzáférés nem került meghatározásra. Az erre a célra létrehozott csoportok esetében a csoport hatókörének a Globális csoportot kell megadni.
Az engedélyek hozzárendelése akkor egyszerűsödne, ha a csoportok egymásba ágyazhatók lennének. Az egyik csoportba a felhasználók kerülnek, a másik csoporthoz pedig hozzárendelésre kerülnek az erőforrás használati engedélyek. Az egymásba ágyazás lehetséges, de nem tetszőleges módon. Globális csoportba tartományi helyi csoportot nem lehet beletenni, viszont tartományi helyi csoportba globális csoport (is) beletehető. Nézzük ennek figyelembevételével a tartományi helyi csoportokat.
Sor kerül tehát sor az erőforrásokhoz való hozzáférési engedélyek megadására. Az erőforrások (tartomány esetében) jellemzően valamelyik tartománybeli számítógépen keresztül állnak rendelkezésre. Az erőforráshoz való hozzáféréshez emiatt a felhasználónak olyan felhasználónak kell lennie, aki az adott számítógépen rendelkezik (helyi) felhasználói fiókkal. Korábban ugyanakkor tisztázásra került, hogy tartomány esetében nem célszerű helyi felhasználókkal dolgozni. Helyettük erre a célra a tartományi felhasználók vannak. Az ellentmondás feloldására alakították ki a tartományi helyi csoportokat. A globális csoportok a vállalat felépítésének megfelelően kerülnek kialakításra. A tartományi helyi csoportok pedig az erőforrásoknak megfelelően. Így létezhet például egy Nyomtathatnak nevű csoport. A csoport tagjainak megadjuk egy adott nyomtatóra való nyomtatás engedélyét. Mivel jelenleg még üres a csoport (hiszen most jött létre), ezért (az engedély megadásának ellenére) senki nem fog tudni nyomtatni. A következő lépés az, hogy fel kell tölteni ezt a csoportot.
Bármilyen hatókörű csoportról is beszélünk, csoportba egy felhasználó mindig beletehető. Viszont a globális csoportokban a felhasználók már benne vannak. Annak érdekében, hogy ezt fel lehessen használni, a tartományi helyi csoportokba bele lehet tenni globális csoportokat is. Előtte azonban meg kell vizsgálni a csoportok másik jellemzőjét, a típusát.
A biztonsági csoport rendelkezik a korábban már bevezetett SID-del, ami egyedi azonosításra ad lehetőséget, és így alkalmas hozzáférési engedélyek kezelésére. A terjesztési csoportnak nincs SID-je, ezért terjesztési csoporthoz nem lehet hozzáférési engedélyt rendelni. Az univerzális csoportokat egyelőre elhagyva a lehetséges csoporttok a következők lehetnek:
  1. Tartományi helyi, biztonsági (Domain Local Security - DLS)
  2. Tartományi helyi, terjesztési (Domain Local, Distribution – DLD)
  3. Globális, biztonsági (Global Security – GLS)
  4. Globális, terjesztési (Global Distribution – GLD).
Az előbb bevezetett rövidítések segítségével áttekinthető formában megadható, hogy mely csoportok ágyazhatók egymásba:
  1. DLS-be: DLD, DLS, GLD,
  2. DLD-be: DLD, DLS, GLD, GLS,
  3. GLS-be: GLD, GLS,
  4. GLD-be: GLD, GLS.
A felsorolás segítségével ellenőrizhető, hogy globális csoportba valóban csak globális csoport tehető bele. Ugyancsak a fenti rövidítések segítségével megadható az is, hogy ha hozzáférési engedélyt kell adni egy erőforráshoz, akkor ott csak DLS, illetve GLS fog megjelenni.
Első alkalommal gondot okozhat annak megértése, hogy mi történik olyan esetekben, ha egy felhasználó több csoportnak a tagja, és különböző csoporttagságai révén különböző hozzáférési engedélyekhez jut. Ennek megoldása tulajdonképpen egyszerű: egy adott erőforrás esetén tetszőleges sorrendben venni kell az egyes csoporttagságokkal járó hozzáférési engedélyeket, és azokat összegezni (kumulálni) kell. Példán keresztül: ha egy felhasználó Users csoporttagsága miatt kap egy olvasási engedélyt egy adott fájl esetében, egy másik csoporttagsága miatt pedig kap egy írási engedélyt, akkor ezek eredője az olvasási + írási engedély lesz. Ha a sorrend lenne a meghatározó, akkor az írási (mint másodszor megvizsgált engedély) felülírná az olvasási engedélyt, és az a fura helyzet állna elő, hogy olvasni ugyan nem tudja a felhasználó a fájlt, de írni igen.
A tiltás (egy engedély megvonása) mindent felülír függetlenül attól, hogy milyen sorrendben vizsgáljuk a csoporttagságokat.
Forrás;, https://gyires.inf.unideb.hu/KMITT/c09/ch01s05.html
https://support.google.com/groups/answer/2464926?hl=hu
https://gyires.inf.unideb.hu/KMITT/

Letöltés
https://m-info.hu/sites/default/files/oktatas/Windows_Server_2012_munkakornyezet_Office_365_%282012%29.pdf

2020. február 25., kedd

Java programozás gyakorlati óra

az elsõ 10 egészszám kiíratása
----------- 
public class Szamok {

 public static void main(String[] args) {
  int i,n=10;

  System.out.println("Az elso "+n+" egesz szam:");
  for(i=1;i<=n;i++){
   System.out.println(i);
   }
  }

 }
----------- 
 az elsõ 5 egész szám kiíratása növekvõ és csökkenõ sorrendben
--------------
public class Szamok1 {

 public static void main(String[] args) {
  int i,n=5;

  System.out.println("Az elso "+n+" egesz szam:");
  for(i=1;i<=n;i++){
   System.out.println(i);
   }
  System.out.println("Az elso "+n+" egesz szam visszafele:");
  for(i=n;i>=1;i--){
   System.out.println(i);
   }
  }

 } 
-------------
public class Szamok1a {

 public static void main(String[] args) {
  int i,n=20;

  System.out.println("Az elso "+n+" egesz szam:");
  i=15; //kezdőértékadás
  while(i<=20) {
   System.out.println(i);
   i++; //ciklusváltozó növelése
   }
  i=30;
  System.out.println("Az elso "+n+" egesz szam visszafele:");
  while(i>=25) {
   System.out.println(i);
   i--;
   }
  }

 } 
------------
public class Szamok1b {

 public static void main(String[] args) {
  int i,n=5;

  System.out.println("Az elso "+n+" egesz szam:");
  i=1; //kezdőértékadás
  do { //"do" blokk = a ciklusmag
   System.out.println(i);
   i++; //ciklusváltozó növelése
   } while(i<=n); //ciklusfeltétel: amíg igaz, addig ismétli a ciklusmagot
  i=n;
  System.out.println("Az elso "+n+" egesz szam visszafele:");
  do {
   System.out.println(i);
   i--;
   } while(i>=1);
  }

 } 
----------------
az elsõ 10 páratlanszám kiíratása 
-----------
public class Szamok2 {

 public static void main(String[] args) {
  int i,j,n=10;

  System.out.println("Az elso "+n+" paratlan szam:");
  j=1; //első páratlan szám
  for(i=1;i<=n;i++){
   System.out.println(j);
   j+=2; //következő páratlan szám
   }
  }

 } 
--------------
az elsõ 10 párosszám kiíratása 
--------------
public class Szamok2a {

 public static void main(String[] args) {
  int i,j,n=10;

  System.out.println("Az elso "+n+" paros szam:");
  j=2; //első páros szám
  for(i=1;i<=n;i++){
   System.out.println(j);
   j+=2; //következő paros szám
   }
  }

 } 
----------------
visszafelé
----------
public class Szamok2b {

 public static void main(String[] args) {
  int i,j,n=10;

  System.out.println("Az elso "+n+" paros szam visszafele:");
  j=2*10; //a 10. páros szám
  for(i=1;i<=n;i++){
   System.out.println(j);
   j-=2; //következő paros szám
   }
  }

 } 
------------
az elsõ 10 szám összegének kiszámítása 
-----------
public class Osszeg {

 public static void main(String[] args) {
  int i,sum,n=31;

  System.out.print("Az elso "+n+" egesz szam osszegenek erteke: ");
  sum=0;
  for(i=42;i<=73;i++){
   sum+=i;
   }
  System.out.println(sum);
  }

 } 
---------------
faktoriális
-------------
public class Fakt {

 public static void main(String[] args) {
  int i,n=10;
  long f; //bővebb értéktartomány

  f=1;
  for(i=2;i<=n;i++){
   f*=i;
   }
  System.out.println(n+" faktorialisanak erteke: "+f);
  }

 } 
--------------
az elsõ 10 páratlanszám szorzatának kiszámítása 
------------
public class Fakt3 {

 public static void main(String[] args) {
  int i,j,n=10;
  long f; //bővebb értéktartomány

  f=1;
  j=1;
  for(i=1;i<=n;i++){
   f*=j;
   j+=2;
   }
  System.out.println("Az elso "+n+" paratlan szam szorzatanak erteke: "+f);
  }

 } 
-----------------
az elsõ 5 páratlanszám összegének és szorzatának kiszámítása 
---------------
public class Fakt4 {

 public static void main(String[] args) {
  int i,j,sum,n=5;
  long f; //bővebb értéktartomány

  sum=0;
  f=1;
  j=1;
  for(i=1;i<=n;i++){
   sum+=j;
   f*=j;
   j+=2;
   }
  System.out.println("Az elso "+n+" paratlan szam osszegenek erteke: "+sum);
  System.out.println("Az elso "+n+" paratlan szam szorzatanak erteke: "+f);
  }

 } 
------------------
az elsõ 10 négyzetszámkiíratása 
---------------
public class Negyzet {

 public static void main(String[] args) {
  int i,n=10;

  System.out.println("Az elso 10 negyzetszam:");
  for(i=1;i<=n;i++){
   System.out.println(i+"*"+i+" = "+i*i);
   }
  }

 } 
-------------------
2 elsõ 10 pozitív hatványának kiíratása 
---------------
public class Hatvany {

 public static void main(String[] args) {
  int i,n=10;
  double h=2.0,x;

  x=1.0; //h^0 (h nulladik hatványa)
  System.out.println(h+" elso 10 hatvanya:");
  for(i=0;i<n;i++){
   System.out.println(h+"^"+i+" = "+x);
   x*=h;
   }
  }

 } 
-------------------
5 db véletlen egész szám kiíratása az [1,90] intervallumból ((int)) 
-------------
public class Veletlen3 {

 public static void main(String[] args) {
  int i,veletlen,n=5,min=1,max=90;
  
  System.out.println(n+" darab veletlen egesz szam a(z) ["+
                     min+","+max+"] intervallumbol:");
  for(i=1;i<=n;i++){
   veletlen=(int)(max*Math.random())+min; //típuskényszerítés (int)-re
   System.out.println(veletlen);
   }
  }

 } 
-------------------
Lotto
-----------
import java.awt.*;
import java.awt.event.*;

public class LottoFrame extends Frame implements WindowListener {

 public LottoFrame(String s) { //konstruktor paraméterrel
  super(s); //a Frame osztály konstruktora beállítja az ablak címsorát
  }

 public static void main(String[] args) {
  LottoFrame frame=new LottoFrame("Lottószámok");

  frame.setSize(150,70); //beállítja az ablak méretét
  frame.addWindowListener(frame); //bekapcsolja az ablakesemények figyelését
  frame.show(); //kirajzolja az ablakot
  }

 public void paint(Graphics g) {
  int i;
  Lotto lotto=new Lotto();
  
  g.drawString("A javasolt lottószámok:",5,42);
  for(i=0;i<Lotto.MAXNUM;i++){
   lotto.general();
   }
  for(i=0;i<Lotto.MAXNUM;i++){
   g.drawString(""+lotto.kihuz(),24*i+5,54);
   }
  }

 public void windowOpened(WindowEvent e) {}
 public void windowClosing(WindowEvent e) {
  System.exit(0);
  }
 public void windowClosed(WindowEvent e) {}
 public void windowIconified(WindowEvent e) {}
 public void windowDeiconified(WindowEvent e) {}
 public void windowActivated(WindowEvent e) {}
 public void windowDeactivated(WindowEvent e) {}

 }
---------------
Java tabulás Netbeenben
 
http://java2.uw.hu/ 
http://www.petrik.hu/files/tamop/SZINFO13/SZINFO13_TJ.pdf 
http://ctp.mkprog.eu/hu/java/menu/tipusok_es_valtozok/ 
https://szit.hu/doku.php?id=oktatas:programozas:programozasi_feladatok:java_nyelvhez_kapcsolodo_feladatok 
http://glac.hupont.hu/10/programozas 
https://hu.eferrit.com/category/java-programozas/ 
 
 

Példa CSS tartalmára

body {font-family: Arial, Helvetica, sans-serif; font-size: 100.01%; margin: 0; background-color: #ccc; }
#container {width: 800px; margin-top: 15px; margin-right: auto; margin-left: auto;}

h1 {font-size: 2em; color: #363; text-align: center;}

#fejlec {width: 770px; border-bottom: 2px solid #fc3; margin-left: 5px;}
#jelkep {float: left; width: 60px;}
#cim {width: 660px; text-align: center; margin-top: 5px;  padding-top: 1px;}


#tartalomjegyzek {width: 770px; margin-top: 15px; margin-left: 5px;}
#tartalomjegyzek table {width: 80%; margin-right: auto; margin-left: auto;}
td {padding-left: 30px; font-weight: bold;}

#tartalomjegyzek a {text-decoration: none; font-size: 12px; color: black; line-height: 150%;}
#tartalomjegyzek a:hover { color: blue; border-bottom: 1px solid blue;}

li{font-size: 12px;}

PHP gyakorlófeladatok

Szorzótábla

<?php
session_start();

include('./start.php');

$_GET['meddig']=3;
$_SESSION['meddig']=$_GET['meddig'];

if (!isset($_SESSION['ok']))
{
$_SESSION['ok'] = 0;
}
  
if (isset($_POST['ujra']))
    {
        unset($_SESSION);
        session_destroy();
        header("Refresh: 1; url=./szamol.php");
    }

if (isset($_POST['gomb']))
    {
    if (($_SESSION['V1']*$_SESSION['V2'])==$_POST['ertek'])
        {
         $_SESSION['ok']=$_SESSION['ok']+1;  
        }  
    }

Táblázatként szorzótábla

<?php
print("<table border='1'>");
for ($i=1;$i<3;$i++)
{
print ("<tr>");
for ($x=1; $x<3; $x++)
{
print ("<td>");
print ('adat');
print ("</td>");
}
print ("</tr>");
}
print ("</table>");
?>


Két for ciklussal

<?php
print("<table border='1'>");
for ($i=1;$i<3;$i++)
    {
    print ("<tr>");
    for ($x=1; $x<3; $x++)
        {
        print ("<td>");
        print ('adat');
        print ("</td>");
        }
    print ("</tr>");
    }
print ("</table>");
?>

Kör kerülete területe
<?php
$pi= M_PI;
echo "Pi értéke = $pi <br />";


$r = 10;                 // Kör sugara.
$kerulet= (2*$r)*M_PI;
echo "A kör kerülete = $kerulet <br />";

$terulet= ($r*$r)*M_PI;
echo "A kör területe = $terulet <br />";
?<


3*3-as táblázat  benne adat.

<?php
print("<table border='1'>\n");
for ($i=1;$i<4;$i++)
    {
    print ("<tr>");
    for ($x=1; $x<4; $x++)
        {
        print ("\t<td>");
        print ('adat');
        print ("</td>\n");
        }
    print ("</tr>\n");
    }
print ("</table>");
?>

Szorzótábla

<?php

print("<table border=\"1\">\n");

for ($i=1;$i<11;$i++)
    {
    print ("<tr>\n");

    for ($x=1;$x<11;$x++)
        {
        print ("\t<td>");
        print ($i*$x);
        print ("</td>\n");
        }

    print ("</tr>\n");
    }

print ("</table>");

?>


Ciklusok PHP-ban

FOR: előírt lépésszámú ciklus

WHILE: elöl tesztelő ciklus

DO-WHILE: hátul tesztelő ciklus

CONTINUE: A continue utasítást olyankor használjuk, amikor a ciklusban levő, a contiue utasítás után következő kódrészletet át akarjuk ugrani

BREAK: A break csak cikluson belül használható, és a for, foreach, while, do .. while  ciklusok futását szakítja meg.


Példa

<?php
for ($szam=1;$szam<=10;$szam+=2)
{
print "A szam változó értéke: $szam, négyzete: ";
print $szam*$szam;
print "<br>";
}
?> FOR
<?php
for ($i=1;$i<5;$i++)
{
for ($j=1;$j<4;$j++)
{
print "Az i változó értéke: $i";
print ", a j változó értéke: $j<br>";
}
}
?> FOR DEMO
<?php
$szam=1;
while ($szam<=10)
{
print "A szam változó értéke: $szam<br>";
$szam++;
}
?> WHILE
<?php
$szam=10;
while ($szam>0)
{
print "A szam változó értéke: $szam, négyzete: ";
print $szam*$szam;
print "<br>";
$szam-=2;
}
?> WHILE
<?php
$szam=1;//mindaddig megjelennek a számok amíg meg nem haladják a 10-et
do
{
print "A szam változó értéke: $szam, négyzete: ";
print $szam*$szam;
print "<br>";
$szam+=2;
} while ($szam<=10);
?> DO-WHILE
<?php
for ($i=1;$i<6;$i++)
{
for ($j=1;$j<5;$j++)
{
if ($j==2) continue;//ha ezt sort elhagyjuk j == 2 is megjelenik
print "Az i változó értéke: $i";
print ", a j változó értéke: $j<br>";
}
}
?> CONTINUE
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>A contiune utasítás használata</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>

<body>
<?php
for ($i=10;$i>-11;$i--)
{
if ($i==0) continue;
print(" <br>100 / $i = ". 100/$i);
}
?>
</body>
</html>

CONTINUE
<?php
for ($szam=1;$szam<=10;$szam+=2)
{
if ($szam*$szam<20) break;
print "A szam változó értéke: $szam, négyzete: ";
print $szam*$szam;
print "<br>";
}
?> FOR-BREAK DEMO
<?php
for ($i = 0; $i < 10; $i++) {                     //3. szint     
        for ($j = 0; $j < 10; $j++) {             //2. szint
                for ($z = 0; $z < 100; $z++) {    //1. szint
                        if ($z > 10) {
                                break 2;        //2. szintre tör ki
                        }
                        echo "i: $i, j: $j, z: $z\n";
                }
        }
}
?> BREAK 2
Az utasítás számot is fogadhat el argumentumként: ha meg van adva, akkor ez a szám határozza meg, hogy az egymásba ágyazott ciklusokból milyen szintig kell kitörni.
 




Minta feladatok
Kód
Minta
<html>
<head>
<title>Szorzótábla kiíratása</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>

<body>
<?php
print("<table border=\"1\">\n");
for ($i=1;$i<11;$i++)
{
print ("<tr>\n");
for ($j=1;$j<15;$j++)
{
print ("\t<td>");
print ($i*$j);
print ("</td>\n");
}
print ("</tr>\n");
}
print ("</table>");
?>
</body>
</html>


Szorzótábla

Írj egy programot ciklusutasítást használva, amely az alábbi elrendezésű szöveget írja ki a képernyőre:
2222
222
22
2



<?php
for($a=4;$a>=1;$a--)
{
for($b=1;$b<=$a;$b++)
{
print("2");
}
print("<br>");
}

?>

Írjon egy programot, amelyben egy x elemű tömböt tetszőleges értékekkel tölt fel, majd kiírja, hogy a tömbben hány darab olyan szám van, amely nagyobb, mint a és kisebb b.
<?php
for($i=1;$i<=x;$i++) //tömb feltöltése
{
$t[$i]=rand(5,25);
}

for($i=1;$i<=x;$i++) //teszt
{
print($t[$i]."<br>");
}

$szamlalo=0;

for($i=1;$i<=x;$i++)
{
if (($t[$i]>a) and ($t[$i]<b))
{
$szamlalo++;
}
}
print("A a-b közti számok: ".$szamlalo);
?>


Dátum php-ban
<?php
$maidatum = date ("m" ,time()) . "-hó " . date("d" ,time()) . ". napja " .
$maidatum = "";

echo "<h6>";
echo $maidatum;
echo " van ma!</h6>";

?>


Idő php-ban

<?php
echo date("Y.m.d. H:i",time());
?>


PHP kiterjesztés

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>PHP kiterjesztésű weblap </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<link href="stílus.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="azonosító">
<h1> PHP kiterjesztésű weblap </h1>
<?php
Ide jön, a PHP program leírása!
?>
</div>
</body>
</html>


Kör kerülete
 <?php
print_r($_GET);
print_r($_POST);
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Kerület</title>
    </head>
    <body>
<?php
//beolvasás
$sugar = $_GET['sugar'];
//feldolgozás
$pi = pi();
$ker = 2 * $sugar * $pi;
//kiirás
?>
        <p>Sugár = <?php echo $sugar; ?></p>
        <p>Kerület = <?php echo $ker; ?></p>
    </body>
</html>

---------------


 <?php
//nyomkövetés
print_r($_GET);
print_r($_POST);
 
$hiba = '';
if ($_POST) {
 
    //beolvasás
    $sugar = null;
    if (isset($_GET['sugar'])) {
        $sugar = $_GET['sugar'];
    }
 
    //előfeltétel ellenőrzése
    $hiba = '';
    if (is_null($sugar)) {
        $hiba = 'Sugár hiányzik!';
    }
    else if ($sugar == '') {
        $hiba = 'Sugár üres!';
    }
    else if (!is_numeric($sugar)) {
        $hiba = 'Sugár nem szám!';
    }
    if (!$hiba) {
 
        //feldolgozás
        $pi = pi();
        $ker = 2 * $sugar * $pi;
    }
}
 
//kiírás
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Kerület</title>
    </head>
    <body>
        <?php if ($hiba) : ?>
            <p><?php echo $hiba; ?></p>
        <?php endif; ?>
 
        <form action="kerulet.php" method="post">
            Sugár: <input type="text" name="sugar">
            <input type="submit">
        </form>
 
        <?php if (isset($ker)) : ?>
            <p>Sugár = <?php echo $sugar; ?></p>
            <p>Kerület = <?php echo $ker; ?></p>
        <?php endif; ?>
  </body>
</html>

------------














Terület kiszámítása

<?php
function terulet($aoldal, $boldal)
    {
        print("Terület $aoldal * $boldal= ". $aoldal * $boldal. "<br>");
    }
// Következik a paraméter átadás.
terulet(4, 8);
terulet(6, 7);
?>

Java programozás játék forrása

Bemelegitésnek

Példa ciklusra
for( int i = 0; i < 20; i++ ) {  System.out.println(i);}
vagy
for( int i = 0; i < 50; i++ ){  System.out.println(i + 1);}
Lottó sorsolás véletlen
for( int i = 0; i < 5; i++ ){  System.out.println( (int)(Math.random() * 90) + 1 );}
Páros számok
for( int i = 1; i <= 20; i++ ){  System.out.println(i * 2);}
Másik módszer
for( int i = 0; i < 20; i++ )
{
  System.out.println((i + 1) * 2);
}
És ha az 1-től indulva kell 20 páratlan?

for( int i = 1; i <= 20; i++ )
{
  System.out.println(i * 2 - 1);
}
A párosokból 1-et kivonva páratlanokat kapunk. Vagy 0-tól indulva:

for( int i = 0; i < 20; i++ )
{
  System.out.println(i * 2 + 1);
}
De csak hogy lássuk milyen rugalmas is a for ciklus, lássunk a párosokra egy másik megoldást:

for( int i = 2; i <= 40; i += 2 )
{
  System.out.println(i);
}

Elől tesztelő ciklusra példa
int db = 0;
int szam;
while( db != 10 )
{
  szam = (int)(Math.random() * 100) + 1;
  if( szam % 2 != 0 )
  {
    System.out.println(szam);
    db++;
  }
}

Értelmezzük a programot
kell egy változó, ami azt számolja majd, hogy hány páratlan számot sorsoltunk, mert a párosokkal nem foglalkozunk deklaráltam egy szam nevű változót, ahol az aktuálisan kisorsolt számot tároljuk
a ciklust futási feltétele az, hogy amíg nincs 10 páratlan szám, addig sorsolgasson a ciklusban sorsolok egy számot, és eltárolom miután kisorsoltam, megvizsgálom, hogy páratlan-e ha páratlan, akkor kiírom a sorsolt számot, és növelem eggyel a számlálót ha nem páratlan, akkor a ciklusmagból semmi nem hajtódik végre, mert nem megfelelő a szám és ismét próbálkozik egy sorsolással.

 Számítsuk ki két egész szám osztóját
Nem, nem a prímtényezős alakra bontással oldjuk meg

int szam1 = 660;
int szam2 = 366;
while( szam1 != szam2 )
{
  if( szam1 > szam2 )
  {
    szam1 = szam1 - szam2 ;
  }
  else
  {
    szam2 = szam2 - szam1 ;
  }
}
System.out.println("A ket szam legnagyobb kozos osztoja: " + szam1);

Értelmezzük elsőnek deklarálunk 2 változót a vizsgált számoknak kell egy ciklus azzal a futási feltétellel, hogy addig kell a kivonásokat ismételni, amíg a két szám nem egyenlő ha a szam1 a nagyobb, akkor abból vonjuk ki a szam2-őt fordított esetben a szam2-ből vonjuk ki a szam1-et
amikor a ciklus befejeződik, akkor a két szám bármelyike (mivel egyenlőek) a legnagyobb közös osztót jelenti, amit ki is íratunk Ha észrevetted, az is előfordulhat, hogy a ciklus egyszer sem fut le. Mi van akkor, ha a két szám alapból egyenlő? Akkor is kiírathatom bármelyiket, vagyis a ciklus utáni sorra lép a program és kiírja az egyiket. Az elöl tesztelő ciklusnál lehetséges, hogy a ciklus egyszer sem fut le!!!

Sorsolj ki egy páros számot a [10;50] intervallumból. Azt még egyszerűen megoldjuk, hogy az adott intervallumból sorsoljunk, de azzal a plusz feltétellel már nem tudunk mit kezdeni, hogy ez páros is legyen. Ezért addig sorsolunk, hogy a feltételnek megfelelő számot kapjunk:

int szam;
do
{
  szam = (int)(Math.random() * 41) + 10;
}
while( szam % 2 != 0 );

Nézzük akkor a programot részenként:
sorsolunk egy számot ha a szám 2-vel osztva nem 0 maradékot ad (páratlan), akkor a ciklus újraindul, vagyis megint sorsol egyet a ciklus akkor áll meg, ha a feltétel hamis lesz (páros) Azért jó itt a do-while ciklus, mert mindenképpen sorsolnom kell egy számot ahhoz, hogy megvizsgálhassam, meg kell-e ismételni a sorsolást. Természetesen összetett feltételt is megadhatok. Mondjuk olyan számot sorsoljunk az adott intervallumból, ami 2-vel és 5-tel is osztható:

int szam;
do
{
  szam = (int)(Math.random() * 41) + 10;
}
while( !(szam % 2 == 0 && szam % 5 == 0) );

Itt a ciklus futási feltételeként a kiemelt sorban egy összetett feltételt láthatsz, ami azért nem biztos, hogy annyira egyértelmű, mint amilyennek elsőre tűnik. A ciklus ugye akkor működik, ha a feltétel igaz. De itt eredetileg két részfeltételünk van, 2-vel és 5-tel osztható szám kell. Az már nem jó, ha esetleg egyik, vagy az sem, ha mindkét részfeltétel hamis. Igen ám, de a ciklus futási feltételeként nem azt kell megadni nekünk, amilyen számra nekünk szükségünk van, hanem pont az ellenkezőjét. Azt kell megadni, hogy milyen szám nem jó nekünk! Nézzük akkor lépésenként: szerkesszük meg azt a feltételt, ami nekünk megfelelő (ami összetett feltétel is lehet) negáljuk az egészet Természetesen itt is igaz, hogy ha akarjuk, egyszerűsíthetjük az összetett feltételt a már tanult módon:

while( !(szam % 2 == 0 && szam % 5 == 0) );

vagy ez

while( szam % 2 != 0 || szam % 5 != 0 );   





























Értelmezzétek a program forrását!

     import java.applet.*;
     import java.awt.*;
     public class Game extends Applet implements Runnable
     {
     }
     Thread gameThread;
     int width=400, height=400, MAX=1;
     int currentX[] = new int[MAX];
     int currentY[] = new int[MAX];
     public void start()
     {
          Thread gameThread = new Thread(this);
          gameThread.start();
     }
     public void init()
     {
          currentX[0]=0;
          currentY[0]=0;
     }
     public void run()
     {
     }
     public void paint(Graphics g)
     {
          update(g);
     }
     public void update(Graphics g)
     {
          Graphics2D g2 = (Graphics2D)g;

          // Háttérszín.

          g2.setBackground(Color.black);
          // Clear the applet.
          g2.clearRect(0, 0, width, height);
          // Rajzolószín zöld.
          g2.setColor(Color.green);
          //(X pos, Y pos, Width, Height)
          g2.fillOval(currentX[0], currentY[0], 20,20);
    }
     int speed=10; // Speed at which we will move the objects
     // Mozgatás
     int directionX[] = new int[MAX];
     int directionY[] = new int[MAX];
     long start=0;
     long tick_end_time;
     long tick_duration;
     long sleep_duration;
     static final int MIN_SLEEP_TIME = 10;
     static final int MAX_FPS = 20;
     static final int MAX_MS_PER_FRAME = 1000 / MAX_FPS;
     float fps=0;
     public void init()
     {
          currentX[0]=100;
          currentY[0]=0;
          directionX[0]=1;
          directionY[0]=0;
     }
     public void run()
     {
          while(true){
               start = System.currentTimeMillis();
               for(int i=0; i < MAX; i++){
                    if(directionX[i]==1)
                         currentX[i]+=speed;
                    if(directionX[i]==0)
                         currentX[i]-=speed;
                    if(currentX[i] <= 0)
                         directionX[i]=1;
                    if(currentX[i]+20 >= width)
                        directionX[i]=0;


                    if(directionY[i]==1)

                         currentY[i]+=speed;



                    if(directionY[i]==0)

                         currentY[i]-=speed;



                    if(currentY[i] <= 0)

                         directionY[i]=1;



                    if(currentY[i]+20 >= height)

                         directionY[i]=0;

               }



               repaint();



               tick_end_time = System.currentTimeMillis();

               tick_duration = tick_end_time - start;

               sleep_duration = MAX_MS_PER_FRAME - tick_duration;



               if (sleep_duration < MIN_SLEEP_TIME)

               {

                    sleep_duration = MIN_SLEEP_TIME;

               }

               fps = 1000 / (sleep_duration + tick_duration);



               try{

                    Thread.sleep(sleep_duration);

               } catch(InterruptedException e) {}



          }

     }




     start = System.currentTimeMillis();




     if(directionX[i]==1)

          currentX[i]+=speed;





     if(directionX[i]==0)

          currentX[i]-=speed;






These last two detect if the object has hit the side of the applet and if so change the direction:

     if(currentX[i] <= 0)

          directionX[i]=1;





     if(currentX[i]+20 >= width)

          directionX[i]=0;





     currentX[i]+20



     repaint();






     tick_end_time = System.currentTimeMillis();

     tick_duration = tick_end_time - start;

     sleep_duration = MAX_MS_PER_FRAME - tick_duration;



     if (sleep_duration < MIN_SLEEP_TIME)

     {

          sleep_duration = MIN_SLEEP_TIME;

     }

     fps = 1000 / (sleep_duration + tick_duration);





     try{

          Thread.sleep(sleep_duration);

     } catch(InterruptedException e) {}



     g.drawString("FPS: "+fps,1,400);


:




     java.awt.image.*;







     BufferedImage bufferdImg;

     Graphics2D bufferdImgSurface;






     bufferdImg = (BufferedImage)createImage(width, height);

     bufferdImgSurface = bufferdImg.createGraphics();






     public void update(Graphics g)

     {

          Graphics2D g2 = (Graphics2D)g;

          // Set the background color.

          bufferdImgSurface.setBackground(Color.black);



          // Clear the applet.

          bufferdImgSurface.clearRect(0, 0, width, height);



          bufferdImgSurface.setColor(Color.green);

          //(X pos, Y pos, Width, Height)

          bufferdImgSurface.fillOval(currentX[0], currentY[0], 20,20);



          g2.drawImage(bufferdImg, 0, 0, this);

     }


     g2.drawImage(bufferdImg, 0, 0, this);




     boolean collided=false;

     float dist;



     currentX[1]=0;

     currentY[1]=100;



     directionX[1]=0;

     directionY[1]=1;




     dist = (int)(Math.sqrt(Math.pow((currentX[0]+20)-(currentX[1]+20),2) + Math.pow((currentY[1]+20)-(currentY[1]+20),2)));



     if(dist < 20)

          collided = true;

     else

          collided = false;


     sqrt(pow((X1)-(X2),2) + pow((Y1)-(Y2),2)))



     bufferdImgSurface.fillOval(currentX[1], currentY[1], 20,20);



     if(collided==true)

          bufferdImgSurface.drawString("Collided",10,10);



     g2.drawImage(bufferdImg, 0, 0, this);




     public class Game extends Applet implements Runnable, MouseMotionListener, MouseListener



     int directionX[] = new int[MAX];

     int directionY[] = new int[MAX];



     BufferedImage bufferdImg;

     Graphics2D bufferdImgSurface;



     Thread gameThread;



     int width=400, height=400, MAX=50, speed=10;



     int currentX[] = new int[MAX];

     int currentY[] = new int[MAX];



     int step=0,          // Number of movements left/right

     direction=1,          // Current left/right direction (0=left, 1=right)

     shipX=width/2-10,          // Current player X possition

     shipY=height-45,          // Current player Y possition

     mbx=-10,          // The mouse position after mouse down, sets the_

     mby=-10,          // enemy bullet position to this.

     randomShoot=0,          // Used to work out which enemy is shooting

     health=50,          // The players health

     BNUM=10,          // Number of bullets

     playing=0;          // Are is the game playing (0=Playing, 1=Paused, 2=Game Over, 3=Win)



     int bX[] = new int[BNUM]; // Bullet X pos.

     int bY[] = new int[BNUM]; // Bullet Y pos.



     int ebX[] = new int[BNUM]; // Enemy Bullet X pos.

     int ebY[] = new int[BNUM]; // Enemy Bullet Y pos.



     long start=0,     // Frame start time

     tick_end_time,     // End frame time

     tick_duration,     // Time taken to display the frame

     sleep_duration;     // How long to sleep for



     static final int MIN_SLEEP_TIME = 10,                    // Min time to sleep for

                              MAX_FPS = 20, // Max frame rate.

                              MAX_MS_PER_FRAME = 1000 / MAX_FPS; // MS per frame



     float fps=0, // Current frame rate

               dist; // Distance between 2 points




     int row=10,     // Current Y position

     col=10,     // Current X position

     count=0;     // How many circles have been drawn



     currentX[0]=col;

     currentY[0]=row;





     for(int i=0; i < 50; i++) {

          count++;

          currentX[i]=col;

          col+=25;



          currentY[i]=row;



          if(count==10){

               row+=25;

               col=10;

               count=0;

          }

     }




The following two lines of code are used to start the mouse listener �listening� on the applet:

     addMouseMotionListener(this);

     addMouseListener(this);



     for(int i=0; i < BNUM; i++){

          bX[i]=-10;

          bY[i]=-10;

          ebX[i]=0;

          ebY[i]=height+10;

     }





     while(true){     // Starts the game loop

          start = System.currentTimeMillis(); // Sets the current time



          if(playing==0){     // Are we playing or is the game over?





     step++;

     for(int i=0; i < MAX; i++){

          if(step > 15) {

               if(direction==1){

                    direction=0;

               } else {

                    direction=1;

               }

          step=0;

          for(int j=0; j < MAX; j++)

               currentY[j]+=speed;

          }

          if(direction==1)

               currentX[i]+=speed;

          else

               currentX[i]-=speed;

     }





     for(int i=0; i < BNUM; i++){

          if(bY[i] <= 0) {

               bX[i]=mbx;

               bY[i]=mby;

               mbx=-10;

               mby=-10;

          }

          bY[i]-=speed;

     }





     for(int i=0; i < MAX; i++){

          for(int j=0; j < BNUM; j++) {

               if(!(bY[j]<=0)){

                    dist = (int)(Math.sqrt(Math.pow((currentX[i]+10)-bX[j],2) + Math.pow((currentY[i]+10)-bY[j],2)));

                    if(dist <= 20){

                         bY[j]=-50;

                         currentY[i]=-500;

                    }

               }

          }

     }





     for(int k=0; k < MAX; k++){

          randomShoot=(int)(Math.random()*MAX);

               if(currentY[randomShoot] >= 0){

                    for(int i=0; i < BNUM; i++){

                         if(ebY[i] >= height) {

                              ebX[i]=currentX[randomShoot];

                              ebY[i]=currentY[randomShoot];

                              break;

                         }

                    }

               }

     }







     for(int j=0; j < BNUM; j++) {

          if(!(ebY[j]>=height)){

               dist = (int)(Math.sqrt(Math.pow((shipX+10)-ebX[j],2) + Math.pow((shipY+10)-ebY[j],2)));

               if(dist <= 20){

                    ebY[j]=height+10;

                    health-=10;

               }

          }

     }






     for(int i=0; i < BNUM; i++){

          if(ebY[i] < height) {

               ebY[i]+=speed;

          }

     }







     if(health <=0)

          playing=2;






          int count=0;

          for(int j=0; j < MAX; j++){

               if(currentY[j]<0)

                    count++;



               if(currentY[j]>=340)

                    playing=2;

          }



          if(count==MAX)

               playing=3;





     } else { }



     repaint(); // Redraw the screen






               tick_end_time = System.currentTimeMillis();

               tick_duration = tick_end_time - start;

               sleep_duration = MAX_MS_PER_FRAME - tick_duration;



               if (sleep_duration < MIN_SLEEP_TIME)

               {

                    sleep_duration = MIN_SLEEP_TIME;

               }

               fps = 1000 / (sleep_duration + tick_duration);



               try{

                    Thread.sleep(sleep_duration);

                    } catch(InterruptedException e) {}

          }

     }




     public void paint(Graphics g)

     {

          update(g);

     }



     public void update(Graphics g)

     {

          Graphics2D g2 = (Graphics2D)g;



     // Set the background color.

     bufferdImgSurface.setBackground(Color.black);



     // Clear the applet.

     bufferdImgSurface.clearRect(0, 0, width, height);



     bufferdImgSurface.setColor(Color.green);

     //(X pos, Y pos, Width, Height)

     for(int i=0; i < MAX; i++)

          bufferdImgSurface.fillOval(currentX[i], currentY[i], 20,20);



     // Draw the read ship (a square)

     bufferdImgSurface.setColor(Color.red);

     bufferdImgSurface.fillRect(shipX, shipY, 20, 20);





     for(int j=0; j < BNUM; j++){

          bufferdImgSurface.setColor(Color.yellow);

          bufferdImgSurface.fillOval(bX[j], bY[j], 5,5);



          bufferdImgSurface.setColor(Color.blue);

          bufferdImgSurface.fillOval(ebX[j], ebY[j], 5,10);

     }

     // Draw a bottom line to our window

     bufferdImgSurface.setColor(Color.red);

     bufferdImgSurface.drawString("_________________________________________________________",0,375);






     if(playing==1)

          bufferdImgSurface.drawString("PAUSED", width/2-10, 390);

     else if(playing==2)

          bufferdImgSurface.drawString("****Game Over****", width/2-10, 390);

     else if(playing==3)

          bufferdImgSurface.drawString("****You Win!****", width/2-10, 390);






          for(int i=0; i < health; i++)

               bufferdImgSurface.drawString(" |", (2*i), 390);



          // Draw the buffered image to the screen.

          g2.drawImage(bufferdImg, 0, 0, this);

     }



     public void mouseMoved(MouseEvent e) { shipX=e.getX()-5; }



     public void mouseDragged(MouseEvent e) { shipX=e.getX()-5; }






     public void mouseClicked(MouseEvent e) {

          mbx=e.getX();

          mby=shipY;

     }



     public void mousePressed(MouseEvent e) {

     mbx=e.getX();

     mby=shipY;

     }






     public void mouseEntered(MouseEvent e) { playing=0; }



     public void mouseExited(MouseEvent e) { playing=1; }






     public void mouseReleased(MouseEvent e) { }

MAi órán tanult TAG-ek 9B

html head title align center left right p, h1-h6, b, i, u, <tt> br strong, sub

html head title align center left right p, h1-h6, b, i, u, <tt> br strong, sub

Betűformázó utasítások
Kód     Eredmény

<b>bold</b>

       bold

<i>italic</i>

       italic

<u>underline</u>

       underline

<b><i><u>Szöveg</u></i></b>

      Szöveg (Egyszerre több kód is használható)
Bekezdés
Kód     Eredmény

 <br />

     Ez után új sor kezdődik, az adott paragrafuson belül (vizuálisan a Shift+Enter gomb)

 <p>Szöveg, szöveg, szöveg.</p>

     Ez is új sor, de egyben új bekezdés (előtte utána térköz)

 <p align="center">Középre zárt bekezdés.</p>

     Ez a középre igazított bekezdés.
A “left” balra, a “right” jobbra igazított bekezdést eredményez.

 <h1>Főcím jellegű bekezdés</h1>

   
 Címsorok

<h2>Alcím jellegű bekezdés </h2>

   
  Alcím
Link készítése

<a href="http://weboldal.html">Szöveg vagy kép, amire kattintani lehet</a>

Pl:

<a href="http://semmelweis.hu/valami/"  target="_blank">Semmelweis Egyetem</a>

vizuális megjelenése: Semmelweis Egyetem amely linkre kattintva új ablakban fog a link megnyílni (target). Ha a target kódot nem írjuk bele, akkor ugyanabban a böngésző lapban (ablakban) nyílik meg a belinkelt weboldal, így a saját oldalunkról elirányítjuk a látogatót.

A href hivatkozás és az egyenlőségjel után mindig idézőjelben a teljes URL következik. Képnek és fájlnak is van URL-je, ha már a Médiatárba feltöltöttük, illetve külső webcímeket is használhatunk. Középre helyezett képre így hivatkozunk:

<img src="http://a_kep_url-je" align="center">

E-mail címet hasonló módon linkelünk be, de használni kell a mailto: kódot is, így:

valaki@valami.hu címet ezen a módon tudunk linkké alakítani

<a href="mailto:valaki@valami.hu">valaki@valami.hu</a>

http://pcsysak.uw.hu/html2.html

2020. február 24., hétfő

Arcfelismerés Pytonban


A Python egy általános célú, nagyon magas szintű programozási nyelv.
A Python többek között a funkcionális, az objektumorientált, az imperatív és a procedurális programozási paradigmákat támogatja. Dinamikus típusokat és automatikus memóriakezelést használ, ilyen szempontból hasonlít a Scheme, Perl és Ruby nyelvekhez, emellett szigorú típusrendszerrel rendelkezik. Interpreteres nyelv, ami azt jelenti, hogy nincs különválasztva a forrás- és tárgykód, a megírt program máris futtatható, ha rendelkezünk a Python értelmezővel. A Python értelmezőt számos géptípusra és operációs rendszerre elkészítették, továbbá számtalan kiegészítő könyvtár készült hozzá, így rendkívül széles körben használhatóvá vált.

Program forrása;
----------------------
import numpy as np
import cv2

# multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades

#https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
     
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()
--------------------------

Terminálszerver és a vékonykliensek (13B)

A vékonykliens

A terminálszolgáltatás mindenki által látható eleme a vékony kliens (thin client). Terminálszolgáltatás esetén a vékony kliens fogalom egy hálózatra kapcsolt grafikus terminált jelent, amely lényegesen különbözik a munkaállomástól. Míg a munkaállomások teljes konfigurációt jelentenek, ahol a gépen futnak az alkalmazások (például webes böngészők, dokumentumszerkesztők), a gép tárolja a felhasználók minden adatát, fájlját. Ezzel szemben a vékony kliens csak egy beviteli/kiviteli funkciókat megvalósító eszköz. A billentyűzet és az egér által kibocsátott jeleket feldolgozás nélkül továbbítja egy központi szervernek; az onnan érkező jeleket a monitoron megjeleníti, illetve a hangszórókon lejátssza. Az alkalmazások a távoli szerveren futnak, a vékony kliens nem tárol semmilyen fájlt.

A vékony kliens hardverigénye kicsi (nincs semmilyen lemez- vagy CD-meghajtója, kevés memóriára, a hálózati kapcsolathoz billentyűzetre és az egértől érkező jelek fogadására, esetleg USB csatlakozási lehetőségre van szüksége). A vékony kliens súlya, mérete jóval kisebb a munkaállomásokénál. Az ilyen hardveres vékony kliensek mellett egy régebbi PC-ből vagy munkaállomásból szoftveres vékony kliens alakítható ki. Ehhez minimális operációs rendszert kell a merevlemezre, CD-re vagy egy USB tárolóra írni. A gép bekapcsolásakor ezt az operációs rendszert tölti be, így vékony kliensként tud üzemelni.

A vékony kliensek egyszerű operációs rendszerét egy megfelelő hálózati hardvereszköz segítségével letöltheti a gép a szerverről is a bekapcsolás után, ahogyan a hardveres vékony kliensek teszik. A vékony kliens kifejezést olyan otthoni PC-kre is használják, amelyeknek nincs lemez- vagy CD-meghajtójuk, és a normál PC-nél kisebb a méretük, kevesebb az áruk.

A terminálszerver
A terminálszerver egy nagy teljesítményű szerver, amelyen a vékony klienssel bejelentkezett felhasználók alkalmazásai futnak. A bejelentkezéstől a kijelentkezésig ez a szerver vezérel minden felhasználói folyamatot. A terminálszolgáltatás több terminálszerver együttműködésével is megoldható.

A kevés munkaállomásból kialakított vékony klienseket – például kisebb könyvtárakban – egyetlen terminálszerver, más néven alkalmazásszerver szolgálhatja ki. Nagyobb könyvtárak esetén már érdemes az egyenletes terheléselosztás, illetve az alkalmazások hardverigényének figyelembevételével több terminálszervert kialakítani úgy, hogy a különböző nagyobb alkalmazások külön szerveren fussanak.

A terminálszolgáltatás

A terminálszolgáltatás koncepciója rendkívül egyszerű: lényegében több billentyűzet, egér és monitor van egyetlen szerverrel összekötve. A felhasználók ezt a gépet egyszerre használják, de mindenki úgy látja, mintha az egész gépet csak ő használná, és nincs tudomása a többiekről. A felhasználó szemszögéből tehát nincs különbség a vékony kliens és egy munkaállomás között. A valóságban a különbség lényeges. Egy munkaállomás használatakor a következő folyamatok sorozata történik:

A felhasználó leüt egy billentyűt, vagy kattint egyet az egérrel.

A billentyűzet vagy az egér a megfelelő jelet a számítógépnek kábelen vagy rádióhullámokon továbbítja.
A munkaállomás operációs rendszere értelmezi a jelet, és továbbítja az alkalmazásnak a megfelelő információt.
Az alkalmazás feldolgozza a kapott információt, és ennek megfelelően elkészíti a monitor képének frissítését.
Az operációs rendszer elküldi a monitornak az új képernyőképet.
A monitor megjeleníti az új képet, azt a felhasználó érzékeli.
A vékony kliens használatakor a harmadik, a negyedik és az ötödik lépés a következőképpen módosul:

A vékony kliens továbbküldi a beérkezett jelet a terminálszervernek, amely a felhasználó folyamatához tartozó alkalmazásnak továbbítja a megfelelő információt.
A terminálszerveren futó alkalmazás feldolgozza a kapott információt, és ennek megfelelően elkészíti a monitor képének frissítését.
A terminálszerver visszaküldi a felhasználó folyamatához tartozó hálózati kapcsolaton a frissített monitorképet a vékony kliensnek.
Ezt az eltérést a felhasználók nem érzékelik, valóban nem veszik észre a különbséget a munkaállomások és a vékony kliensek között.

A vékony kliensekben elegendő csak egy kis teljesítményű processzor a beérkező jelek továbbításához, és a terminál felől jövő jelek monitorra küldéséhez. Másrészt a terminálszervereknek nemcsak az alapvető be- és kiviteli funkciókat kell ellátniuk, hanem komoly operációs rendszerrel több folyamatot kell kezelniük egyszerre, és több, esetenként nagy memóriaigényű alkalmazást kell futtatniuk. Ez persze csak egy lehetőség, ugyanis ha a vékony kliens egy régebbi, gyengébb teljesítményű munkaállomás, akkor a kisebb alkalmazások azon is futhatnak. Mivel az újabb és újabb alkalmazások egyre komolyabb teljesítményű gépet igényelnek, a terminálszerver(eke)t időközönként fejleszteni kell. A terminálszolgáltatás egyik kézenfekvő előnye az, hogy csak a terminálszerver(ek) fejlesztésére van szükség, a vékony kliensek fejlesztésére nem kell költeni.

A vékony kliensek alkalmazásának előnyei

A munkaállomásokkal szemben, amelyeket állandóan fejleszteni kell, a vékony kliensek alkalmazásának a következő előnyei vannak.
Hosszabb élettartam, kisebb beszerzési költségek
Régebbi, vagy leselejtezett munkaállomásból szoftveres vékony kliens alakítható ki, megnövelve a munkaállomás használati idejét. Egy hardveres vékony kliens beszerzési költsége 50–60%-a egy munkaállomásénak. Lényeges ráfordítás csak a terminálszerver esetében van, esetleg a hálózat kialakításánál. A hardverköltségeken kívül a szoftverek beszerzése is kevesebbe kerül. A vékony kliensekre nem kell alkalmazásokat vásárolni, és nincs szükség vírusirtó, vagy egyéb biztonsági szoftver beszerzésére sem.

Kisebb karbantartási költség

Terminálszolgáltatás bevezetésével a karbantartási költségek a következők miatt csökkennek:

a hardveres vagy hálózatról bootoló vékony kliensben nincs merevlemez, tehát nem mehet tönkre;
az alkalmazások, biztonsági szoftverek újabb verzióját csak a terminálszerverre kell telepíteni, azok a vékony kliensek számára bejelentkezés után azonnal elérhetők;
a vékony kliensek beállításai megoldottak a terminálszerveren;
a vékony kliensek – operációs rendszer hiányában – nincsenek kitéve vírusveszélynek vagy egyéb fenyegetésnek, ezért elegendő csak a terminálszervereket védeni.
A rendszer karbantartási ideje jelentősen csökken, mivel a vékony kliensek jóval kevesebb karbantartást igényelnek egy munkaállomáshoz képest.

Biztonságosabb rendelkezésre állás
Mivel a régebbi munkaállomások vékony kliensként használhatók, a könyvtáraknak adományozott gépek „hideg” tartalékot képeznek, így egy leállás esetén a szolgáltatások rövid időn belül újra indíthatók.

Jobb adatvédelem a felhasználóknak
A böngésző által ideiglenesen letöltött fájlokat, sütiket csak a terminálszerver merevlemeze tárolja, ezért ezeknek az adatoknak a törlése egyszerűbb, és pontosabban időzíthető.

Adatbiztonság a személyzetnek
A könyvtár alkalmazottai számára is megvalósítható a terminálszolgáltatás; ez esetben a belső fájlok csak egy helyen tárolódnak a szerveren, így a különböző biztonsági mentések is egyszerűbbek és biztonságosabbak.

Kisebb energiafogyasztás, kevesebb hő és zaj
A vékony kliensek egyszerűbb felépítésük miatt kevesebb energiát igényelnek, és kevesebb zajt bocsátanak ki. Mivel nincs, vagy csak kis teljesítményű processzoruk, tárolólemezük van, kevesebb hőt bocsátanak ki, ezért kevesebb légkondicionálót kell használni, ami még kisebb áramfogyasztást és zajkibocsátást jelent. Összességében tehát a könyvtárban a zajkibocsátás és a fogyasztás drasztikusan csökken.

Egyre csökkenő helyigény
Az LCD monitorok bevezetésével a könyvtárakban kisebb helyen férnek el a munkaállomások, ami tovább csökkenthető, azaz még több hely nyerhető a munkaállomásnál kisebb méretű hardveres vékony kliensek üzembe állításával.

Terminálszerver felügyelet


  • Kezelőfelület

  • Felhasználók felvitele 

  • Terminálszolgáltatások konfigurálása

  • Bejelentkezési beállítások

  • Kiszolgáló beállításai

  • Ügyfél beállításai

Külső css készítése


Külső css-re hivatkozás az index.html head részében a következő képpen;


például
 ---------------------
<link rel="stylesheet" type="text/css" href="pelda.css">
----------------------

pelda.css
----------------------
body {
  font-size: 34px;
  text-align: center;
}
---------------------

2020. február 19., szerda

Gyakorlati óra 12_B

Html oldal készítése

Leírás és életmód

Hosszútávú vonuló, a telet Afrikában tölti. Fõként rovarokat, férgeket, hernyókat, tücsköket, bogarakat, sáskát, vagyis csak állati eredetû táplálékot fogyaszt. Röpte lepkeszerûen hullámzó. Táplálékkeresés közben sokat mozog a talajon, ilyenkor kevésbé feltûnõ. Az állattartó telepek körül találkozhatunk vele leggyakrabban, mert a szerves trágyában elõforduló rovarokat, férgeket elõszeretettel fogyasztja. A mezõgazdaság intenzívvé válása kedvezõtlenül hat az állomány nagyságára. A kisparcellás, extenzív mezõgazdaság növelésével pozitív hatást érhetünk el a faj elterjedésében.

Élõhelye, költése:

Hazánkban a sûrû, zárt erdõk kivételével mindenütt elõfordulhat, de leginkább a mozaikos mezõgazdasági területeket, gyümölcsösöket, szõlõsöket, puhafás ligeterdõket kedveli. Kisebb településeken, falvakban is sokszor látni, akár költhet is az épületek (fészerek, ólak, istállók) kisebb üregeiben. Harkályok odúit szívesen elfoglalja, de kidõlt, korhadt fák üregeiben, kõrakásokban, üregekben bárhol költhet, akár a talajszintben is. Az 5-10 piszkosfehér tojáson kizárólag a tojó kotlik, a hím a táplálékot hordja, a fiókák etetésében viszont mindkét szülõ részt vesz. A népnyelv büdös bankának, vagy szurtos dudunak is hívja, mivel a fiókák veszélyérzet esetén bûzös ürüléket juttatnak vélt, vagy valós támadójukra. Ezen kívül maga a költõüreg is elég sok ürüléket tartalmaz, melyet a fiókák ürítenek ki magukból.

https://www.mme.hu/magyarorszagmadarai/madaradatbazis-upuepo






































Gyakorlati megvalósítás részleten;

A feladatban egy weboldalt kell készítenie a búbos banka rövidbemutatására a feladatleírás és a minta szerint. 

A feladat megoldása során a következőállományokat kell felhasználnia: upuepo_01.png, upuepo_02.png, forras.txt,tablaforras.txt, bubos.css. Ahol a feladat másként nem kéri, a formázásibeállításokat a bubos.css stílusállományban végezze el!1.Hozzon létre HTML oldalt bubosbanka.html néven! Állítsa be az oldal nyelvétmagyarra és a kódolását UTF-8-ra!<meta charset="utf-8">2.A böngésző címsorában megjelenő cím „Búbos banka” legyen!<title>Búbos banka</title>3.A weboldal fejrészében helyezzen el hivatkozást a bubos.css stíluslapra!<link rel="stylesheet" type="text/css" href="bubos.css">4. Az oldal törzsébe másolja be az UTF-8 kódolásúforras.txt állomány tartalmát!5. Alakítsa ki a címet, alcímeket a minta szerint! Aweboldal címe (Búbos banka) 1-esszintűcímsor, az alcímek (Leírás és életmód, Élőhelye, költéseés Adatok) pedig 2-es szintűcímsorok legyenek!<h1>Búbos banka</h1>h2>Leírás és életmód</h2><h2>Élőhelye, költése</h2><h2>Adatok</h2>6. Alakítsa ki a szöveg bekezdéseit a minta szerint! A dokumentum végén a forrásoldalhivatkozásának címét is tartalmazószöveget is helyezze egy bekezdésbe!7. A Leírás és életmódalcím mellett helyezze el az upuepo_01.png képet és formázza astíluslap balkep azonosítójának felhasználásával! Ha a kép fölévisszük az egeret, vagy akép valamiért nem jeleníthetőmeg, akkor mindkét esetben a Könyv-rajzszöveg jelenjenmeg!<img id="balkep" src="upuepo_01.png" alt="Köny-rajz" title="Köny-rajz">8. Alakítson ki egy 10 soros, 2 oszlopos táblázatot a minta és a leírás szerint az Adatokalcím után! A táblázat vázát a tablaforras.txt állományban találja. Másolja ezt be aHTML állományába! A táblázat további beállításait és formázását a következőképpenvégezze el!a. A táblázat végére szúrjon be 2 sort a minta szerint!b. Az 1., 5. és 8. sorban alkalmazzon vízszintesen cellaösszevonást!colspan="2"c. Mozgassa át a szövegeket az utolsókét sor celláiba a minta szerint! A sortöréselem felhasználásával a Rendés a Családsoroknál a rendszertanielnevezések magyar és latin neveit törje külön sorba a minta szerint!<br>d. Az összevont celláknál alkalmazza a fejsor osztálykijelölőt!e. Az összevont celláknál a megfelelőHTML tagnél elhelyezett style attribútumsegítségével igazítsa középre a szöveget!<td style="text-align: center;" class="fejsor" colspan="2">Elnevezés</td>9. A táblázat melléhelyezze el az upuepo_02.png képet és formázza a stíluslap jobbkepazonosítójának felhasználásával! Ha a kép fölévisszük az egeret, vagy a kép valamiért nemjeleníthetőmeg, akkor mindkét esetben a „Éhes fiókákszöveg jelenjen meg!<img id="jobbkep" src="upuepo_02.png" alt="Éhes fiókák" title="Éhes fiókák">10. A táblázat alatti forrásmegjelölést tartalmazóbekezdésben lévőURL-re készítsenhivatkozást a minta alapján! A teljes bekezdésre alkalmazza a stíluslap forrasosztálykijelölőjét!<p class="forras">Forrás: <a href="http://www.mme.hu/magyarorszagmadarai/madaradatbazis-upuepo" target="_blank">http://www.mme.hu/magyarorszagmadarai/madaradatbazis-upuepo</a></p>11. A következőbeállításokat, módosításokat a stíluslap megfelelőkijelölőinél végezze el!a. A weboldal háttérszíne #E7E7FF színkódúvilágoskék színűlegyen!background-color: #e7e7ff;b. A dokumentumban a szövegszín #1D1D4E színkódúmélykék színűlegyen!color: #1d1d4e;
c. Minden kép körül 1 px vastagságú, folytonos #1D1D4E színkódúmélykék színűszegélyvonal legyen!border: 1px solid #1d1d4e;d. A balkep azonosítójúelem szélessége 200 pixel legyen!width: 200px;e. A forras osztályba sorolt elemek szövege vízszintesen középre igazítottlegyen!text-align: center;


Megoldása;

 <!DOCTYPE HTML>
<html>
<head><script src="http://stat.dyna.ultraweb.hu/pgstat.js?server=2&amp;username=12ainformatika" type="text/javascript"></script>
<title>Búbos banka</title>
  <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="bubos.css">
</head>

<body>
<h1>Búbos banka</h1>
<img id="balkep" src="upuepo_01.png" alt="Köny-rajz" title="Köny-rajz">
    <h2>Leírás és életmód</h2>

<p>Hosszútávú vonuló, a telet Afrikában tölti. Főként rovarokat, férgeket, hernyókat, tücsköket, bogarakat, sáskát, vagyis csak állati eredetű táplálékot fogyaszt. Röpte lepkeszerűen hullámzó. Táplálékkeresés közben sokat mozog a talajon, ilyenkor kevésbé feltűnő. Az állattartó telepek körül találkozhatunk vele leggyakrabban, mert a szerves trágyában előforduló rovarokat, férgeket előszeretettel fogyasztja. A mezőgazdaság intenzívvé válása kedvezőtlenül hat az állomány nagyságára. A kisparcellás, extenzív mezőgazdaság növelésével pozitív hatást érhetünk el a faj elterjedésében.</p>

                                 <h2>Élőhelye, költése</h2>

<p>Hazánkban a sűrű, zárt erdők kivételével mindenütt előfordulhat, de leginkább a mozaikos mezőgazdasági területeket, gyümölcsösöket, szőlősöket, puhafás ligeterdőket kedveli. Kisebb településeken, falvakban is sokszor látni, akár költhet is az épületek (fészerek, ólak, istállók) kisebb üregeiben. Harkályok odúit szívesen elfoglalja, de kidőlt, korhadt fák üregeiben, kőrakásokban, üregekben bárhol költhet, akár a talajszintben is. Az 5-10 piszkosfehér tojáson kizárólag a tojó kotlik, a hím a táplálékot hordja, a fiókák etetésében viszont mindkét szülő részt vesz. A népnyelv büdös bankának, vagy szurtos dudunak is hívja, mivel a fiókák veszélyérzet esetén bűzös ürüléket juttatnak vélt, vagy valós támadójukra. Ezen kívül maga a költőüreg is elég sok ürüléket tartalmaz, melyet a fiókák ürítenek ki magukból.</p>

                                <h2>Adatok</h2>
    <img id="jobbkep" src="upuepo_02.png" alt="Éhes fiókák" title="Éhes fiókák">


   <Table border=3>  <tr>    <td style="text-align: center;" bgcolor="grey", class="fejsor" colspan="2">Elnevezés</td>
  </tr>  <tr>    <td style="text-align: right;",  ><b>Magyar név</td>    <td>Búbos banka</td>  </tr>  <tr>    <td style="text-align: center;>Tudományos név</td>    <td>Upupa epops</td>  </tr>  <tr>
    <td>Angol név</td>    <td>Eurasian Hoopoe</td>
  </tr>  <tr>    <td style="text-align: center;", bgcolor="grey",  class="fejsor" colspan="2">Rendszertan</td>
  </tr>  <tr>    <td style="text-align: right;"><b>Rend</td>
    <td>Szalakótaalakúak<br> Coraciiformes</td>
  </tr>  <tr>    <td style="text-align: right;"><b>Család</td>
    <td>Bankafélék<br> Upupidae</td>
  </tr>  <tr>     <td style="text-align: center;" , bgcolor="grey", class="fejsor" colspan="2">Védelem</td>
  </tr>     <tr>
    <td style="text-align: right;"><b>Védelmi státusz </td>
    <td>védett</td>
  </tr>     <tr>
    <td><b>Természetvédelmi érték</td>
    <td>50000 Ft</td>
  </tr></Table>
    

<p class="forras">Forrás: <a href="http://www.mme.hu/magyarorszagmadarai/madaradatbazis-upuepo" target="_blank">http://www.mme.hu/magyarorszagmadarai/madaradatbazis-upuepo</a></p>

</body>

</html>





Forrás; http://12ainformatika.uw.hu/weblapfeladatok.html
https://drive.google.com/drive/folders/1gEVP0mDPtXlruypNPXp9t7s5LDAWgYDX