Programozás. Programozás villamosmérnököknek



Hasonló dokumentumok
Programozás 1. Dr. Iványi Péter

C programozás. 1 óra Bevezetés

Programozás I. gyakorlat

Programzás I gyakorlat

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Mintavételes szabályozás mikrovezérlő segítségével

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

A C programozási nyelv I. Bevezetés

Információs Technológia

A C programozási nyelv I. Bevezetés

Programozás I gyakorlat. 10. Stringek, mutatók

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozás I gyakorlat

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozás II. 2. Dr. Iványi Péter

Elôszó a magyar kiadáshoz A Kiadó Elôszó

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Szoftvertechnológia alapjai Java előadások

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

Programozás I gyakorlat

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Labor gyakorlat Mikrovezérlők

Labor gyakorlat Mikrovezérlők

A Python programozási nyelv

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Feladat: Hogyan tudunk létrehozni egy olyan vector nevű tömb típust, amely egy háromdimenziós térbeli vektort reprezentál?

Adatbázis és szoftverfejlesztés elmélet

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

A C# PROGRAMOZÁSI NYELV

Java II. I A Java programozási nyelv alapelemei

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Programozás C és C++ -ban

Típusok és konstansok

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

B I T M A N B I v: T M A N

1. Alapok. Programozás II

Bevezetés a C++ programozási nyelvbe

Programozás I gyakorlat

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Java II. I A Java programozási nyelv alapelemei

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Bevezetés, a C++ osztályok. Pere László

Programozás I. gyakorlat

Algoritmizálás + kódolás C++ nyelven és Pascalban

AZ INFORMATIKAI ALAPISMERETEK VIZSGATÁRGY ÍRÁSBELI ÉS SZÓBELI ÉRETTSÉGI VIZSGÁIHOZ

Programozás 5. Dr. Iványi Péter

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

A C# programozási nyelv alapjai

Pénzügyi algoritmusok

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

C programozási nyelv

A programozás alapjai

10. gyakorlat. Pointerek Tárolási osztályok

Labor gyakorlat Mikrovezérlők

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

A Python programozási nyelv

Java programozási nyelv

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Bevezetés a programozásba I.

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Bevezetés az informatikába

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

1. Jelölje meg az összes igaz állítást a következők közül!

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

A TANTÁRGY ADATLAPJA

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Óbudai Egyetem. C programozási nyelv

Occam 1. Készítette: Szabó Éva

Vezérlési szerkezetek

SZOFTVER = a számítógépet működtető és az azon futó programok összessége.

Programozás 6. Dr. Iványi Péter

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Programozás. C++ típusok, operátorok. Fodor Attila

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

C programozási nyelv. Dr. Schuster György szeptember 18.

C programnyelv 1. Kedves Kollegina, Kolléga!

Átírás:

Programozás (NGB_SZ019_1) Programozás villamosmérnököknek (NGB_SZ002_1) Takács Gábor <gtakacs@sze.hu> Széchenyi István Egyetem Matematika és Számítástudomány Tanszék 1 / 92

A számítógép felépítése A számítógép legfontosabb logikai alkotóelemei a processzor, a memória és a perifériák. A processzor utasításokat és adatokat olvas be a memóriából, végrehajtja az utasításokat az adatokon, és esetenként az eredményt visszaírja a memóriába. A perifériák (pl. háttértár, billentyűzet, képernyő) kibővítik a számítógép képességeit, és lehetővé teszik a külvilággal való kommunikációt. 2 / 92

A memória A számítógép memóriája címezhető memóriaelemekből (rekeszekből) tevődik össze. A memóriaelemek mérete a legtöbb mai számítógépben 1 bájt (= 8 bit). A memóriacímeket és a memóriatartalmat általában hexadecimális formában szokás megadni (pl. mondhatunk olyat, hogy a 4b00 címen található érték 1f). 3 / 92

Milyen nyelven ért a számítógép? 1... 2 3 8b 04 25 90 08 60 00 # másolás a 600890 memóriacímről 4 # az eax regiszterbe 5 6 8b 1c 25 94 08 60 00 # másolás a 600894 memóriacímről 7 # az ebx regiszterbe 8 9 01 c3 # eax és ebx értékének összeadása, 10 # és az eredmény beírása ebx-be 11 12 89 1c 25 98 08 60 00 # ebx tartalmának másolása 13 # a 600898 memóriacímre 14... 4 / 92

Programozási alapfogalmak Algoritmus: Valamely probléma megoldására alkalmas véges hosszú lépéssorozat. Adatszerkezet: Adatelemek tárolására, rendszerezésére és hatékony használatára szolgáló séma (példa: tömb). Programozási nyelv: Szigorú szabályokra épülő nyelv, melynek segítségével az ember képes a számítógép felé kommunikálni az utasításait. Programozás: Algoritmusok és adatszerkezetek megtervezése illetve megvalósításuk valamilyen programozási nyelven (kódolás). 5 / 92

A teafőzés algoritmusa Bemenet: forraló, csésze, teafilter, cukor Kimenet: egy csésze tea Lépések: 1. Önts vizet a forralóba! 2. Kapcsold be a forralót! 3. Forr már a víz? Ha nem, akkor várj 1 percet, és folytasd a 3. lépéstől! Ha igen, akkor folytasd a 4. lépéstől! 4. Töltsd meg a csészét forró vízzel! 5. Tedd bele a teafiltert! 6. Kérsz hozzá cukrot? Ha igen, akkor tegyél bele! 6 / 92

keyboard monkey vs. igazi programozó 7 / 92

A C nyelv története A kezdeti fejlesztések az AT&T Bell Laboratóriumában történtek. A nyelv története szorosan kapcsolódik a UNIX operációs rendszer történetéhez. A C nyelv közvetlen elődje a BCPL (1966) és a B (1969). 1969: Ritchie és Thompson elkezdenek dolgozni a nyelven. 1973: A UNIX rendszermagját újraírják C-ben. 1978: Megjelenik Kernighan és Ritchie C bibliája. 8 / 92

Dennis Ritchie (jobbra) és Ken Thompson, a C nyelv megalkotói. 9 / 92

A C nyelv jellemzői Általános célú programozási nyelv. Kevés nyelvi elem és tömör utasításformák jellemzik. Megtalálhatók benne a strukturált programozáshoz szükséges vezérlési szerkezetek. Alacsony szintű, ezért nagy hatékonyságú programok készíthetők benne és hardverprogramozásra is alkalmas. Nem korlátozza a programozó szabadságát. C is quirky, flawed, and an enormous success. 10 / 92

Prominens alkalmazások C: - operációs rendszer kernelek (pl. Windows, OS X, Linux, Android, ios) - rengeteg eszközmeghajtó és beágyazott szoftver - CPython, PostgreSQL -... C/C++: - Chrome, Firefox, Internet Explorer - MS Office, Photoshop, Acrobat, VLC - HotSpot JVM, Oracle Database, MySQL -... 11 / 92

C fordítók GCC: GNU Compiler Collection. Tartalmaz C, C++, Objective-C, Fortran, Java, Ada valamint Go fordítót. Clang: Az LLVM projekt C, C++, Objective-C és Objective C++ fordítója. A GCC-nél kevésbé elterjedt, de felhasználóbarátabbak a hibaüzenetei. Visual C++: A Microsoft integrált fejlesztői környezete, amely C és C++ fordítót is tartalmaz. Intel C++: Az Intel C és C++ fordítója, amely Intel processzorokra optimalizált kódot készít.... A kurzus során Clanget fogunk használni. 12 / 92

Szabványos C Kezdetben annyiféle C nyelv létezett, ahány C fordító. Idővel megkezdődött a nyelv szabványosítása. K&R C (Kernighan és Ritchie 1978-as könyve alapján) ANSI C (ANSI X3.159-1989 szabvány) C90 (ISO/IEC 9899:1990 szabvány) C99 (ISO/IEC 9899:1999 szabvány) C11 (ISO/IEC 9899:2011 szabvány) A kurzus során ANSI C-t fogunk használni, néhány C99 kiterjesztéssel. 1 1 Pl. egysoros komment, nem blokk eleji változódeklaráció. 13 / 92

Fejlesztőkörnyezetek Nehézsúlyú: - Visual Studio - NetBeans - Eclipse - Code::Blocks -... Könnyűsúlyú: - Emacs - Vim - SciTE - Notepad++ -... A kurzus során Code::Blocks-ot fogunk használni. 14 / 92

Telepítés Linux alatt a Clang és a Code::Blocks csomagkezelővel telepíthető. Telepítés után be kell állítani, hogy a Code::Blocks alapértelmezett C fordítója a Clang legyen. Windows alatt a Clang fordítót használó Code::Blocks hivatalos forrásokból történő telepítése meglehetősen bonyolult, ezért készítettem egy egyedi csomagot a kurzus hallgatói számára, amely a www.sze.hu/~gtakacs/oktatas/cprog/codeblocks.zip címen érhető el. Letöltés után a CodeBlocks.zip tartalmát a C meghajtó gyökerébe kell kicsomagolni. (Megjegyzés: GCC-t használó Windows-os Code::Blocks-ot a www.codeblocks.org/downloads/binaries weboldalról szerezhetünk be). 15 / 92

Hello, World! 1 #include <stdio.h> 2 int main() { 3 printf("hello, World!\n"); 4 return 0; 5 } hello.c #include <stdio.h>: Lehetővé teszi a printf kiíró függvény használatát. int main() {: A C nyelvű programok végrehajtása a main függvény elejétől indul. Az int azt jelzi, hogy a függvény egész számot ad vissza. printf("hello, World!\n");: Kiírja a standard kimenetre a Hello, World! szöveget valamint egy újsor karaktert. return 0;: Kilép a programból, 0-ás kilépési kóddal. 16 / 92

Előfeldolgozás Fordítás Linkelés 1. Előfeldolgozás: Forráskódból forráskódot készít. 1 clang -E hello.c > hello_preprocessed.c 2. Fordítás: Forráskódból tárgykódot készít. 1 clang -c hello_preprocessed.c -o hello.o 3. Linkelés: Tárgykódokból futtatható állományt készít. 1 clang hello.o -o hello Az összes fázis futtatása: 1 clang hello.c -o hello 17 / 92

18 / 92

Azonosítók Az azonosítók (állandók, változók, függvények, adattípusok nevei) alfanumerikus karaktereket valamint aláhúzást tartalmazhatnak, és nem kezdődhetnek számjeggyel. - Alfanumerikus karakternek az angol ABC kis és nagybetűi valamint a számjegyek számítanak. - A nagy- és kisbetűk különbözőnek számítanak! - Néhány érvényes azonosító: line1, _getfirst, MAX_SIZE. - Néhány érvénytelen: $foo, 7UP, get-first. A nyelv kulcsszavai nem használhatók azonosítóként. - Az ANSI C kulcsszavak listája: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while. 19 / 92

Egyszerű adattípusok A C nyelv alapvető adattípusai: char Egyetlen bájt. int Egész szám (mérete architektúrafüggű). float Egyszeres pontosságú lebegőpontos szám. double Kétszeres pontosságú lebegőpontos szám. Típusminősítők: signed, unsigned (egész típusokhoz) short, long (egész típusokhoz + long double) 20 / 92

Egyszerű adattípusok Az adattípusok méretének feltérképezése: 1 #include <stdio.h> 2 int main() { 3 printf("char: %d\n", sizeof(char)); 4 printf("short: %d\n", sizeof(short)); 5 printf("int: %d\n", sizeof(int)); 6 printf("long: %d\n", sizeof(long)); 7 printf("float: %d\n", sizeof(float)); 8 printf("double: %d\n", sizeof(double)); 9 return 0; 10 } 21 / 92