Programozás alapjai I.

BSc képzés

(gyakorlat, labor)

2010/2011: Szoftver labor házi feladat lekérdezése. (Csak az IIT oktatói által vezetett laborok részére!)

Tanácsok szövegek feldolgozásához.


Ezt a tárgyat a műszaki informatika szak és a villamosmérnöki szak hallgatói hallgatják az első félévben.
A tárgy alapozó tárgy, melynek keretében a hallgatók megismerkedhetnek a programozás és a számítástechnika alapfogalmaival, valamint a számítógépes problémamegoldás alapvető módszereivel.

A félév során a hallgatók elsajátítanak egy strukturált, magas szintű programozási nyelvet, melynek alkalmazásával megismerkednek a különböző vezérlési- és adatszerkezetekkel, így például listákkal, fákkal, gráfokkal.

A tárgy oktatásának módszere:

Az informatika szakon 2003/2004-es tanévtől az első félévben a C nyelvet, a második félévben pedig a C++ nyelvet mutatjuk be. Ezt megelőzően az első félévben Pascal nyelvet tanítottunk, és a másodikban C-t. A C nyelv története az 1970-es évek elejéig nyúlik vissza. Azóta a nyelv több jelentős változáson ment keresztül. Az egyes változatok és azok elenevezését összefoglaló rövid cikk itt található. Ma a 80-as évek végén megszületett ANSI szabvány a legelterjettebb, de ennek is vannak kiegészítései. A legutolsó kiegészítés a C99 néven emlegetett szabvány, melyet a legtöbb mai fordító többé-kevésbé támogat. Ennek a szabványnak a legutolsó (2007-es) munkaváltozata ingyensen itt is elérhető. (3.7 MB)

A 2005/2006-as tanévtől csak a tárgy 2. félévében tartok előadásokat. Az első félévben labor és tantermi gyakorlatokat vezetek.

Ezen a lapon a mérnök informatikus szak gyakorlataihoz és laborjaihoz kapcsolódó anyagok, információk találhatók, melyek nagy részét a korábbi években tartott előadásanyagaimból készítettem 2005-ben. Az anyagok összeállításánál igyekeztem az előadások menetét követni, de előfordulnak eltérések a mindenkori előadástól. A tantermi gyakorlatok célja, hogy az előadásokon hallottakat elmélyítése.

Az alábbi táblázat a műszaki informatika szak gyakorlataihoz készített összefoglalókat tartalmazza.

hét. Téma
HTML
3 dia / oldal 6 dia / oldal példák
1. Elmaradt        
2. Alapok, algoritmus, szintaktika, szemantika, típus fogalma, számábrázolás, int, float
html.tar.gz(172K)

pdf(276k)
szines_ pdf6(280k)

pdf6(260k)
szines_ pdf6(265k)
 
3. Külső-belső ábrázolás konverziói, scanf, printf előző heti anyagban      
4. Char, logikai típus hiánya, operatorok, utasítások, ciklusok html.tar.gz(77K)

pdf(149k)
szines_pdf(152k)

pdf6(148k)
szines_ pdf6(148k)
 
5 Feltételes kifejezés, típuskonverziók, ++, --, precedenciák, switch, break, continue html.tar.gz(77K)

pdf(196k)
szines_pdf(199k)

pdf6(189k)
szines_ pdf6(193k)

 
6 Tömb, felsorolás, állapotgép, pointer html.tar.gz(77K) pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
ford.c, ly1.c, ly2.c ly3.c ly4.c
7 A gyakorlaton csak gyakorlás volt, nem vetítettem        
8 Függvény, C program szerkezete, struktúra, egyszerű rendezések.   pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
 
9 Dinamikus adatszerkezetek, láncolt lista   pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
 
10 Rekurzió, bináris fa   pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
 
11 Bitmező, union, függvénypointer, qsort   pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
 
12 Preprocesszor, fájlkezelés, fésűs lista   pdf(211k)
szines_pdf(216k)
pdf6(204k)
szines_ pdf6(207k)
 

Szövegek feldolgozásakor korántsem biztos, hogy csak ASCII karakterekre kell számítanunk. Az IBM pl. még ma is előszeretettel használja gépeiben az EBCDIC karakterkódolást, ahol a betűk távolsága nem mindig 1. Az amúgy ASCII kódrendszert használó környezetek a legkülönfélébb módón kódolják a magyar ékezetes karaktereket (pl. ISO8859-2, UTF-8, UTF-16 stb.). Ezért a valós programokba sohasem szabad beépíteni olyan konstansokat ami a karakterek kódolásától függ.
C-ben a karakterek osztályozására az isalpha, isdigit, is..... makrókat célszerű használni. Ezek az ékezetes karakterekre is jól működnek, ha a nyelvfüggő környezeti beállítások jók.
Ez a program az isalpha és az strcoll függvény használatát próbálja szemléltetni. Helyes locale beállításnál a rendezés is jó lesz.

Hasznos linkek a gyakorláshoz, házi feladatok megoldásához. Korábbi évek ZH és vizsgafeladatai, példaprogramok (első félév PASCAL, a második C volt).

A C nyelv szintaktikája igen szabad. Ez a szabadság a kezdők számára sok nehézséget okoz. A következő táblázatban bemutatok néhány formailag érdekesen felírt programot, melyek megértése korántsem egszerű, és nem is várjuk el hogy hasonlókat elemezzenek a ZH-kon. A példákat az International Obfuscated C Code Contest honlapról kölcsönöztem, melyek között számos program az eredeti K&R szintaxissal készült, és nem felel meg az ANSI szabványnak. Fordításukkor, elemzésükkor ezt figyelembe kell venni.

Program neve

Rövid leírása

Adder

A forráskódból a digitális technikában megszokott jelölésekkel kirajzolódik egy összeadó képe. A program az indítási paraméterként kapott 2 egész szám összegét a standard kimenetre írja.
Factorial A forráskódból egy n! szimbólum rajzolódik ki. A program tetszőleges pontossággal számítja ki standard inputról beolvasott érték faktoriálisát.
Hanoi A program a kalsszikus Hanoi tornyai problémát oldja meg. A forrás képe az elrendezett korongokra emlékeztet. A program a standard inputról olvassa korongok számát.
N Queens Klasszikus N királynő problémát megoldó program. A program a standard inputról olvassa be a sakktáblán elhelyezni kívánt királynők számát és az eredményt a standard outputra"rajzolja".

Where Are You

Földgömb alakban elrendezett programkód, ami indítási paraméterként egy szélességi és egy hosszúsági koordinátát vár. A program Mercator-féle vetítéssel kirajzolt térképen megjelöli a megadott koordinátájú helyet. (Budapest a. 47 19 koordinátákon van) (80 karakter széles, automatikusan sort emelő képernyő kell a helyes működéshez)
Schönherz Kupa Előfeladatként a 2010-es Kupára készített programom egyik változata. (Nem különösen izgalmas.)

 


Szeberényi Imre
© BME  Irányítástechnika és Informatika Tanszék
Utolsó módosítás: 2010-10-20