Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.

Slides:



Advertisements
Hasonló előadás
Összefoglalás Hardver,szoftver,perifériák Memóriák fajtái
Advertisements

Adatelemzés számítógéppel
Algoritmusleíró eszközök
Hatékonyságvizsgálat, dokumentálás
Rendszertervezés GIMP.
Az integrált áramkörök (IC-k) tervezése
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
3. A programozás eszközei, programozás-technikai alapismeretek
LFüggvények Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 20./0. lFüggvények deklarációja és prototípusa lA függvénydefiníció lHivatkozás.
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
8. előadás (2005. április 19.) Pozicionálás fájlban (folyt.) I/O mechanizmus váltás Hibakezelő függvények Változók tárolási osztályai Parancssor-argumentumok.
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
Dinamikus tömbök.
Algoritmusok Az algoritmus fogalma:
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Programozás II. 3. Gyakorlat C++ alapok.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Borland C/C++ mintapéldák tömbökre
Programozás módszertan
Algoritmizálás Göncziné Kapros Katalin humaninformatika.ektf.hu.
Programozás I. Horváth Ernő.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Számítógépes grafika OpenGL 1. gyakorlat.
Funkciópont elemzés: elmélet és gyakorlat
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
C++ alapok, harmadik óra
További vektor, mátrix algoritmusok
Komplex rendszertervezési módszerek
A problémamegoldás lépései
ALGORITMUSOK.
Szintaktikai, szemantikai szabályok
3.2. A program készítés folyamata Adatelemzés, adatszerkezetek felépítése Típus, változó, konstans fogalma, szerepe, deklarációja.
Programozási nyelvek.
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke IC layout tervek tesztelése.
MIKROELEKTRONIKA, VIEEA306
MIKROELEKTRONIKA, VIEEA306
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke MIKROELEKTRONIKA, VIEEA306 Integrált áramkörök: áttekintés,
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Egyenesvonalú (lineáris) adatszerkezetek
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
Programozás I. Típus algoritmusok
Az algoritmuskészítés alapjai
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Mikroelektronika Laboratórium Tájékoztató
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Programozás, programtervezés
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Zárthelyi előkészítés október 10.
Algoritmusok. Az algoritmus meghatározott sorrendben elvégzendő műveletek előírása, mint azonos típusú (matematikai, logikai) feladatok megoldására alkalmas.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Összeállította: Sashalmi Tibor
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke MIKROELEKTRONIKA, VIEEA /2013 I. félév Követelmények.
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke MIKROELEKTRONIKA, VIEEA /2011 I. félév Követelmények.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
A programozás módszertana. Monolitikus programozás Egyszerű feladatok - egyszerű programok Egy program – egy programozó Nincs belső struktúra, lineáris.
Programozási nyelvek csoportosítása.
Adatstruktúrák Algoritmusok Objektumok
Programozási alapok.
a programegységek között
Algoritmizálás.
Számítógépes algoritmusok
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás Dr. Poppe András Pohl László

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Ismétlés ► Bináris fájlok  Bármilyen fájl kezelésére: bájtok sorozatának tekintjük a fájlt.  Írás: fwrite  Olvasás: fread ► A main változatai  int main(void)  int main(int argc, char *argv[]) => parancssori paraméterek  // int main(int argc)

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Ismétlés ► Preprocesszor  #include  #define => szimbólum => konstans => makró  #undef  #if, #else, #elif, #endif  #ifdef, #ifndef  #error  #pragma  Előre definiált konstansok: __DATE__, __TIME__, __TIMESTAMP__, __FILE__, __LINE__

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Ismétlés ► Több forrásfájlból álló programok  Header fájlok a prototípusoknak ► Lokalitás: lokális és globális változók ► Láthatóság ► Változók élettartama ► Tárolási osztályok  auto  register  static  extern

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Nagyobb programok készítése ► Algoritmus: elemi utasítások sora, amely véges lépésben eredményre vezet. ► Specifikáció: a program feladatának részletes definiálása, beleértve a bemeneti és kimeneti adatok formátumát. => Például a ZH és vizsga feladatok. ► Algoritmus választása: a program felépítésének megtervezése a program megírásához szükséges részletességgel. ► Fontos szempont => a hatékonyság (műveletvégzés, elvi korlátok, memóriaigény futás közben), => a program mérete, => a programfejlesztés sebessége.

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Nagyobb programok készítése ► Adatszerkezet megválasztása: => a feladathoz leginkább megfelelő adatstruktúra megtervezése (pl. tömb, lista, fa?) ► A feladatnak leginkább megfelelő nyelv. Pl. website fejlesztéshez alkalmasabb a php, mint a C. ► Kódolás, tesztelés, hibajavítás: => ezek a lépések egymást váltogatják => Nagy programoknál jellemző, hogy hibakereséssel több idő megy el, mint a programozás összes többi tevékenységével együttvéve.

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Nagyobb programok készítése ► Dokumentáció elkészítése  Programozói (fejlesztői) dokumentáció: legfontosabb eleme a kommentezett forráskód => specifikáció, adatszerkezetek (beleértve a fájlok formátumát), algoritmusok leírása, diagramok => Doxygen  Tesztelési dokumentáció: mit teszteltünk, milyen adattal  Felhasználói dokumentáció: használati utasítás

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Programstruktúra megtervezése ► Meg kell tervezni a programot:  tervezés közben hamar kiderülnek az előzetes elképzelésünkben rejlő legnagyobb strukturális hibák, melyek ilyenkor még egyszerűen javíthatók. ► A tervezés során kétféle módszert használunk:  top-down (felülről lefelé) tervezés: A specifikáció alapján meghatározzuk a program fő részeit, tisztázzuk, hogy melyik rész mit csinál (=specifikáció a részekhez), majd az egyes részeket bontjuk kisebb részekre.  bottom-up (alulról felfelé) tervezés: Ha egy adott blokkban világos a feladat, akkor nekiállunk elemi részekből összerakni a blokkot. A bottom-up tervezés nem mindig válik el a kódolástól, hiszen a kódolás során általában ugyanazok az alapegységek, mint a bottom-up tervezésnél.

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Algoritmus megadása ► A tervezést segítő módszerek ► Pszeudokód: Az algoritmusok leírására használt olyan mesterséges formális nyelv, mely változókból és néhány állandó jelentésű szóból („foglalt” konstansok) áll, és (szándékosan) hasonlítanak a számítógépes programozási nyelvekre. ► Algoritmus programnyelvtől független bemutatására alkalmas. ► Ha már tudjuk a nyelvet, és nem szükséges a nyelvtől független bemutatás, egyszerűbb az adott nyelven kódolni.

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Algoritmus megadása ► Folyamatábra  Grafikus megjelenítés => könnyebben áttekinthető

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Folyamatábra – faktoriális

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Algoritmus megadása ► Struktogram  Strukturált programokhoz jobb, kevésbé látványos

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Struktogram – faktoriális 1

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Faktoriális ► int main(){ int i,j,n; scanf("%d”,&n); for(i=j=1;i<=n;j*=i,i++); printf("%d\n”,j); return 0; }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A verem (stack) adatszerkezet push pop

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Egyszerű verem C nyelven ► int t_verem[100], n=0; ► void push(int uj) { t_verem[n++]=uj; } ► int pop() { return t_verem[--n]; } ► int main(void){ push(5); push(13); push(8); printf("%d\n", pop() ); // 8 printf("%d\n", pop() ); // 13 printf("%d\n", pop() ); // 5 return 0; }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Függvényhívás verem segítségével ► A legtöbb számítógépen a függvények verem segítségével  kapják a paramétereket  adják vissza a visszatérési értéket  tárolják a lokális változókat  tárolják a visszatérési címet ► Minden programnak saját verme van ► A Visual C++ alapértelmezés szerint 1MB-os vermet rendel a programhoz  => Módosítás: Properties - Configuration Properties - Linker - System - Stack Reserve Size

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programverem tartalma (egy megvalósítás)

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Például ► int masodfok(int a, int b, int c, int x){ int res = a*x*x; res += b*x+c; return res; } ► int main(void){ int y, x=5; y=masodfok(2, 6, 3, x); printf("%d\n", y); return 0; }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A main

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A masodfok

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A rekurzió ► Rekurzió az, amikor egy függvény közvetlenül vagy közvetett módon önmagát hívja. ► Önrekurzió: amikor egy függvény közvetlenül hívja saját magát. ► Kölcsönös rekurzió: amikor a függvény egy másik függvényt hív, a másik függvény pedig az eredetit. ► A rekurzió megadása hasonló a teljes indukciós bizonyítási módszernél megismerthez (ha tetszik, az egy rekurzív módszer):  Leállási feltétel: ha teljesül, nem hívja magát  Szétbontja a problémát, a részproblémá(k)ra meghívja magát

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Például: faktoriális ► Számítsuk ki n faktoriálisát! ► Ha n<=1, akkor n! értéke1 (leállási feltétel) ► Ha n>1, akkor n! értéke n*(n-1)! ► Megvalósítás C-ben: int fakt(int n){ int v; if(n<2)v = 1; else v = n * fakt(n-1); return v; } ► printf("4 faktorialisa=%d\n",fakt(4));

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Hogyan kell elképzelni a működést? ► printf("4 faktorialisa=%d\n",fakt_4(4));  int fakt_4(int n_4){ int v_4; if(n_4<2)v_4 = 1; else v_4 = n_4 * fakt_3(3); return v_4; }  int fakt_3(int n_3){ int v_3; if(n_3<2)v_3 = 1; else v_3 = n_3 * fakt_2(2); return v_3; }  int fakt_2(int n_2){ int v_2; if(n_2<2)v_2 = 1; else v_2 = n_2 * fakt_1(1); return v_2; }  int fakt_1(int n_1){ int v_1; if(n_1<2)v_1 = 1; return v_1; }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Miért képzelhetjük így => verem  | v | | visszatérési cím | | visszatérési érték helye | | n=1 |  | v | | visszatérési cím | | visszatérési érték helye | | n=2 |  | v | | visszatérési cím | | visszatérési érték helye | | n=3 |  | v | | visszatérési cím | | visszatérési érték helye | |n=4 |

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke További példák 1/2 ► Írjon függvényt, amely két pozitív egész számot kap paraméterként, és az elsőt a másodikkal megadott számrendszerben írja ki! A számrendszer 2-10 között lehet. ► Rekurzió: 1.Írd ki a szám elejét 2. Írd ki az utolsó számjegyet ► void szamrendszer(int x,int n){ if(x<n)printf("%d",x); else{ szamrendszer( x/n, n ); // jó sorrendben írja ki printf("%d", x%n ); } }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke További példák 2/2 ► Írja ki fordítva a paraméterként kapott sztringet! ► void fordit(char t[]){ if(t[0]==0)return; fordit(t+1); putchar(t[0]); // vagy printf("%c",t[0]); }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Mikor használjuk? ► Minden ciklus átalakítható rekurzióvá ► Ami ciklussal is megoldható: álrekurzió ► Probléma: nagy rekurziómélységnél sok stacket használ => elfogyhat. Pl. írjunk ki egy int tömböt fordítva  void ford1(int t[],int n){ if(n){ ford1(t+1,n-1); printf("%d",t[0]);}}  void ford2(int t[],int n){int i; for(i=n-1;i>=0;i--)printf("%d",t[i]);} ► Pl elemű tömbbel hívva ford1 legalább 1000×12 bájt helyet foglal a stacken (32 bites rendszerben) ► ford2 csak 16 bájtot ► Van, amikor ez a legjobb megoldás. Pl. fabejárás

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Függvénypointerek ► Írjunk függvényt, amely kiszámítja egy tetszőleges egyváltozós valós függvény integrálját az [a,b] zárt intervallumban, n osztásközzel!  double teglalap(double a,double b,int n,double (*fv)(double)){  double dx=(b-a)/n, sum=0; int i; for(i=0; i<n; i++) sum += fv( a+dx*i ); return sum; }  printf("I=%g\n", teglalap(0,1,100,sin) ); ► A fv( a+dx*i ); helyett írhattuk volna: (*fv)( a+dx*i ); ► Függvénypointer: egy függvény első utasításának címe.

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Függvénypointerek ► #include ► void main(){ ► double (*t[4])(double), d; ► int n; ► ► t[0]=sin; t[1]=cos;t[2]=exp;t[3]=tan; ► printf("Kerek egy valos szamot: "); scanf("%lg",&d); ► printf("Mit szamoljak?\n1. sin\n2. cos\n3. exp\n4. tan\n"); ► scanf("%d",&n); ► if(n 4)return; ► printf("Eredmeny: %g\n",t[n-1](d)); ► }

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Függvénypointerek ► Áttekinthetőbb typedef segítségével: ► typedef double func(double); ► void main(){ ► func t[4]; ► double d; ► int n; ► ► t[0]=sin; t[1]=cos;t[2]=exp;t[3]=tan; ► …

Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke Mára elég ennyi