2015. május 11., hétfő

A brief history of modern Hungary

Hungary traces its history back to the hungarians, an alliance of semi-nomadic tribes from southern Russia and the Black Sea coast that arrived in the region in the ninth century. After centuries as a powerful medieval kingdom, Hungary was part of the Ottoman and then Habsburg empires from the 16th century onwards, emerging as an independent country again after World War I. The Hungarian language belongs to the Finno-Ugric family and is one of the handful of languages spoken within the European Union that are not of Indo-European origin. A landlocked country, Hungary is home to Lake Balaton, the largest in central Europe, and to a large number of spa towns and hot springs. At a glance International: Hungary joined NATO in 1999 and the EU in 2004. The EU has expressed concerns over what it sees as Hungary's failure to respect European democratic standards since 2010 It has especially rich traditions in folk and classical music and was the birthplace of numerous outstanding performers and composers, including Franz Liszt, Bela Bartok and Zoltan Kodaly.  Hungary became co-equal partner with Austria in a dual monarchy in the mid-19th century after an unsuccessful revolt against the Habsburgs in 1848. After a period of turmoil following World War I, an independent kingdom of Hungary was established under the authoritarian regency of Admiral Miklos Horthy.  The redrawing of European borders that took place after World War I left about five million ethnic Hungarians living in neighbouring countries. Their status remains a sensitive issue and has complicated Hungary's relations with its neighbours. Following World War II, in which Admiral Horthy had allied himself with Germany, Hungary fell under communist rule. An uprising in 1956 was crushed by Red Army forces, but Hungary did later become the first Eastern European country to gain some economic freedom. Hungary played an important part in accelerating the collapse of communism across Eastern Europe when it opened its border with Austria in 1989, allowing thousands of East Germans to escape to the West. Just a few months later the Berlin Wall was history. Hungary's post-communist economic transition was achieved relatively smoothly. Within four years of the collapse of communism nearly half of the country's economic enterprises had been transferred to the private sector, and by 1998 Hungary was attracting nearly half of all foreign direct investment in Central Europe. Ten years later, the picture looked rather less rosy. A high level of both private and state borrowing left the country particularly vulnerable to the credit crunch of 2008, and in October of that year the government was forced to appeal to the International Monetary Fund and the European Central Bank for massive loans in a bid to stave off economic collapse.




2015. május 6., szerda

Rekurzió pascalban

A rekurzió egy programozási módszer. Azt az esetet nevezzük így, amikor egy eljárásban szerepló kód önmagát (ugyanazt az eljárást) hívja meg.Természetesen a folyamatot ebben az esetben is véges számú lépés után meg kell állítani.



Talán a legegyszerűbb példa a faktoriális értékének kiszámítására szolgáló programkód:
 Egy szám faktoriálisának kiszámításának algoritmusa:

 Ha n = 0 akkor
   fakt =1                  //hiszen 0! = 1
 Egyébként
   fakt = fakt(n-1)*n
 Elágazás vége

 Nézzük meg Pascal nyelven hogyan néz ki a rekurzív függvény:
  1. Function Faktorialis(n:Integer):LongInt;
  2. Begin
  3.   If n = 0 Then Faktorialis:=1
  4.   Else Faktorialis:=Faktorialis(n-1)*n;
  5. End;

A rekurzió használata lehetővé teszi programok (az algoritmusok) leegyszerűsítését és jobban átlátható kód készítését. A rekurzív függvényhívás erőforrás igényes művelet, hiszen minden esetben a függvény ismételt meghívásakor a paramétereknek és az adminisztrációs adatoknak (a rutin lokális változói, paraméterei, visszatérési cím) a veremben foglalja le a program a területet, vagyis a rekurzió mélységét (az egymásba ágyazások számát) a rendelkezésre álló verem mérete korlátozza.
Rekurzív eljárások, illetve függvények futásánál fennáll az a veszély, hogy a hívásokat semmi sem állítja le, hiszen az egymásból való hívások száma elvileg végtelen lehet. Gyakorlatilag azonban végtelen rekurziót nem könnyű előállítani, hiszen a rekurzió használja a vermet, és ha mást nem is, a visszatérési címet minden esetben oda teszi. Mivel a verem nagysága véges, az előbb-utóbb betelik. Ha a program figyelte a verem túlcsordúlását, akkor az futási hibával leáll (stack overflow) , egyéb esetben a memória további része drasztikusan felülíródik, aminek következtében a rendszer is elszállhat.
Minden rekurzív algoritmus átalakítható nem rekurzívvá, azaz létezik iteratív megoldása is. Az átalakítás első lépése, hogy a processzor saját verme helyett egy explicit vermet használunk az algoritmus állapotának tárolására: rekurzív hívás helyett egy új elemet tolunk a verembe, visszatérés helyett kiveszünk egy elemet a veremből, és kombináljuk az eddigi részeredményekkel. Az így kapott algoritmus már iteratív, de általában tovább javítható. Az iteratívvá alakított algoritmus általában kevesebb memóriát használ, mert a saját vermébe kevesebb információt helyez el, mint a processzor tenne a hívóverembe, viszont nehezebben követhető.

Mit nevezünk rekurzív feladatnak

Egy feladat rekurzív, ha a feladat megoldásához vezető lépések során
  • találunk egy legegyszerűbb esetet, melyben a megoldás magától értetődik, és
  • találunk egy olyan ismételt egyszerűsítési folyamatot, mely alapján véges lépésben eljuthatunk a legegyszerűbb esethez. Minden egyes lépésnél feltételezzük, hogy a következő, egyszerűbb esetnek már megvan a megoldása.
E módszer a teljes indukció elvén alapszik. A feladatot mindig visszavezetjük egy előző feladatra, melynek megoldása egy fokkal egyszerűbb. Véges lépésben elérjük a legegyszerűbb esetet, és így a feladatot megoldottuk.

Rekurzió típusai

Egy függvényt vagy eljárást rekurzívnak nevezünk, ha az meghívja saját magát. Két típusú rekurziót különböztetünk meg:
  • Közvetlen rekurzió:a rutin közvetlenül saját magát hívja. Például A rutin hívja A rutint.
  • Közvetett rekurzió:a rutin csak közvetve hívja meg saját magát egy másik rutin hívásán keresztül. Például:A hivja B-t, B hívja A-t.

Rekurzív rutin tartozékai

  • Kell lennie valaminek, ami a hívások során változik (pl. egy paraméter,nevezzük n-nek), és elvileg elérhet egy küszöböt.
  • Kell lennie egy olyan utasításnak, mely ezt a valamit (n) a küszöb felé viszi.
  • Illetve kell egy leállító feltétel, amely arról a bizonyos valamiről (n) eldönti, elérte-e a küszöböt. Ha igen, akkor nem történik több rekurzív hívás.