Programozás alapjai 8.Gy: Program struktúra

Hasonló dokumentumok
Programozás alapjai 9.Gy: Struktúra 2.

Programozás I. 5. Előadás: Függvények

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

10. gyakorlat Tömb, mint függvény argumentum

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

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

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)

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

Megoldott programozási feladatok standard C-ben

Megoldott programozási feladatok standard C-ben

1. Írjunk programot mely beolvas két számot és ellenőrzi hogy mindkét szám zérus-e:

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

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

Vezérlési szerkezetek

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

A programozás alapjai 1 Rekurzió

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

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

int tokeletes(int szam) { int i,oszto=0; for(i=1; i<szam; i++) { if(szam %i == 0) { oszto+=i; }

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

Programozás I. gyakorlat

Felvételi tematika INFORMATIKA

A C programozási nyelv II. Utasítások. A függvény.

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

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

INFORMATIKA javítókulcs 2016

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

1. Alapok. Programozás II

5. gyakorlat. Konstansok Tömbök Stringek

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

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Adatbázis rendszerek Gy: Algoritmusok C-ben

Vezérlési szerkezetek. Szelekció Ciklusok

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

Információs Technológia

Bevezetés a programozásba I.

3 A C programozási nyelv szintaktikai egységei

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

7/8. gyakorlat Karaktertömbök és sztringkezelés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Alprogramok, paraméterátadás

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

6. A Pascal nyelv utasításai

Algoritmusok pszeudókód... 1

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

Programozás I. gyakorlat

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

Algoritmusok pszeudókód... 1

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

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

9.fejezet: Függvények és külső eljárások

INFORMATIKA tétel 2018

Bevezetés a programozásba I.

Rekurzív algoritmusok

Eljárások, függvények

Tartalomjegyzék Algoritmusok - pszeudókód

Bevezetés a programozásba. 9. Előadás: Rekordok

INFORMATIKA tétel 2019

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

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Informatika terméktervezőknek

2018, Funkcionális programozás

Programozás alapjai 1.Gy: Algoritmizálás P R O

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

Függvények int, long 1. Adott a mellékelt f alprogram.

INFORMATIKA tétel 2017

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

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

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

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

Rekurzió. Dr. Iványi Péter

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Webprogramozás szakkör

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

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

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

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

3. Osztályok II. Programozás II

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Átírás:

Programozás alapjai 8.Gy: Program struktúra Elvarázsolt matekóra P R O A L A G 32/1 B ITv: MAN 2018.11.02

Programozás történelem Kezdetben egy program egyetlen kódsorozat volt (ún. monolitikus program) Ahogy komolyodtak a programok, úgy lettek egyre átláthatatlanabbak, ezért elkezdték azzal foglalkozni, hogyan kellene összetett, bonyolult programokat írni Megszületett a moduláris programozás: A moduláris programozás olyan programozási mód, melyben a teljes program modulokból áll. Az egyes modulok jól meghatározott részfeladat megoldását végzik, kezelhető méretűek, egyértelmű céljuk van és jól definiáltan csatlakoznak a program többi moduljához. Minden modul önállóan lefordítható, önállóan is futásképes program A modulokat szubrutinnak (alprogramnak) szokás nevezni. 32/2

C program felépítése A modulokból felépülő programokhoz hasonló egy összetett C program felépítése: A C programot függvények építik fel Egy függvény egy jól körül határolt feladatot végez el A függvényeket egy fő függvényből (main) hívjuk meg Azokat a feladatokat célszerű önálló függvényként megírni, melyeket többször is használni akarunk egy programban, pl: Számítási algoritmusok, Kiíratások, Beolvasások, 32/3

C program felépítése C program Részegységek Elnevezésük C- ben: függvény. A függvény a matematikai értelemben vett függvény általánosítása, gyakorlatilag egy (rész-)algoritmus megvalósítása. 32/4 void kiir(char *a){ ; printf("%s", a); int fgv_1(int a){ x = ; return x; int main(){ n= ; k = fgv_1(n); s= ; kiir(&s); A függvény deklarációja azt mondja meg, hogy milyen típusú értékekből milyen típusú értéket állít elő. A függvény meghívásakor azt adjuk meg, hogy milyen konkrét értékeken hajtsuk végre a függvény által leírt algoritmust.

C program végrehajtása C program void kiir(char *a){ ; printf("%s", a); Mindig itt kezdődik egy C program végrehajtása 32/5 int fgv_1(int a){ x = ; return x; int main(){ n= ; k = fgv_1(n); s= ; kiir(&s); Az n érték átadódik az fgv_1-nek! Függvény hívás

C program végrehajtása C program void kiir(char *a){ ; printf("%s", a); Az fgv_1 függvényben lévő kód végrehajtása után visszatér a vezérlés a main függvénybe Az x érték átadódik k- nak! 32/6 int fgv_1(int a){ x = ; return x; int main(){ n= ; k = fgv_1(n); s= ; kiir(&s);

C program végrehajtása C program void kiir(char *a){ ; printf("%s", a); 32/7 int fgv_1(int a){ x = ; return x; int main(){ n= ; k = fgv_1(n); s= ; kiir(&s); Az s érték átadódik a kiir függvénynek! Függvény hívás

C program végrehajtása C program void: nem ad vissza értéket void kiir(char *a){ ; printf("%s", a); A kiir függvényben lévő kód végrehajtása után visszatér a vezérlés a main függvénybe 32/8 int fgv_1(int a){ x = ; return x; int main(){ n= ; k = fgv_1(n); s= ; kiir(&s); Mindig itt végződik egy C program végrehajtása

Függvények Jellegzetességek a C nyelvben: A függvények és eljárások (visszatérő érték nélküli függvények) szintaktikája nem különbözik, azaz csak függvények léteznek, a void visszatérési érték típussal jelezzük, ha nem akarunk visszaadni értéket. Nem lehet definiálni függvényt egy másik függvény belsejében. Bármelyik függvény meghívhatja bármelyik függvényt, még saját magát is (rekurzív hívás), vagy akár a main függvényt is. Visszatérési érték és paraméter nem lehet tömb, struktúra, union, lehet viszont ezekre irányuló mutató. A C program belépési pontja a main függvény, ez a főprogram Egy C nyelven írt program tulajdonképpen nem más, mint függvények (megfelelően strukturált és rendezett) összessége. 32/9

Függvények 2. Szintaktika: típus fgvnév(paraméterek) { utasítások; return visszatérő_érték; Pl.: double dszhterulet(double x, double y) { return x*y/2; 32/10

Függvény példa #include <stdio.h> double dszhterulet(double x, double y) { return x*y/2; int main (){ int a=3, b=5; double t; t= dszhterulet(a,b); printf ("Terület = %6.2f\n", t); Formális paraméterek Aktuális paraméterek 32/11

Függvény példa Készítsen egy függvényt, amely kap egy egész számot és visszaadja a szám faktoriálisát. long fakt(int a) { long szorzat; int j; for (j=1; j<=a; j++) szorzat *= j; return szorzat; N faktoriálisa: a számok szorzata 1-től N-ig. Készítsen egy függvényt, amely három oldalhosszúságról megállapítja, alkothatnak-e háromszöget! int alkothate(double a, double b, double c){ if (a+b<=c a+c<=b b+c<=a) return 1; 32/12 Visszatérő érték: 1 ha igen, 0 ha nem.

Függvény deklarálása, meghívása, definiálása TXT #include<stdio.h> void kiir(int); int negyzet(int); int main() { int a=4, b; b=negyzet(a); kiir(b); void kiir(int x) { printf("%d",x); int negyzet(int x){ return x*x; 32/13 Deklarációnál csak azt mondjuk meg, hogy mennyi és milyen típusú paraméterekből milyen típusú értéket fog kiszámolni a függvényünk. (Függvény prototípusok) A függvényhívásnál konkrét értékekre alkalmazzuk a függvényt, és a kiszámított értéket felhasználhatjuk további számolásainkhoz. Definíciónál azt is meg kell adnunk, hogy hogyan számoljon. Nagyobb programok esetén célszerű a program elején deklarálni, és a végén definiálni a függvényeket.

Függvény példa TXT #include<stdio.h> const char * eldont(int a, int b) { if (a==b) return "\negyenlő a két szám\n"; else if (a<b) return "\naz első szám kisebb\n"; else return "\naz első szám nagyobb\n"; void kiir_1(int a, int b){ printf("a két szám: %d és %d", a, b); void kiir_2(char *c) { printf("%s", c); int main() { int x=3, y=5; kiir_1(x, y); const char * s=eldont(x, y); kiir_2(s); 32/14 Minden függvényben szerepelnie kell legalább egy return utasításnak. Ha a függvényben végrehajtunk egy ilyen utasítást, akkor a függvény értékének kiszámítása befejeződik. A hívás helyén a függvény a return által kiszámított értéket veszi fel.

Faktoriális! 6 24 N faktoriálisa: a számok szorzata 1-től N-ig. 32/15

Kövessük a kódot TXT #include <stdio.h> void beolvas(int* x); int faktor(int x); Függvény deklarációk int main() { int szam; Főprogram beolvas(&szam); printf("%d! = %d\n", szam, faktor(szam)); int faktor(int x) { int fakt=1; while(x>1) { fakt *= x; x--; return fakt; 32/16 Miért 1-ről indul?

Kövessük a kódot void beolvas(int* x) { int adb; char sz[20]; do { printf("adj meg egy egész számot: "); adb=scanf("%d", x); if (adb==0) { printf("hibás adat! Add meg újra: \n"); scanf("%s", sz); while (adb!=1); 32/17

Tökéletes számok "Numerus Perfectus" Tökéletes szám az szám, amely megegyezik a nála kisebb osztóinak összegével (Pl.: 6=1+2+3; 28, 496, 8128). 32/18

Kövessük a kódot TXT #include <stdio.h> int tokeletes(int szam) { if (szam==kisebboszto_osszeg(szam)) return 1; Eldöntő függvény, visszatérő értéke igen (1) vagy nem (0) int kisebboszto_osszeg(int szam) { int osszeg, oszto; osszeg=0; for (oszto=1; oszto<=szam/2; oszto+=1) { if (szam%oszto == 0) osszeg += oszto; Egy szám önmagától kisebb osztóinak összege return osszeg; int main() { int x; printf("adj meg egy egész számot: "); scanf("%d", &x); if (tokeletes(x)) printf("\na megadott szám tökéletes\n"); else printf("\na megadott szám nem tökéletes\n"); 32/19

32/20

Kövessük a kódot A barátságos számpároknál az egyik szám önmagánál kisebb osztóinak összege a másik számmal egyenlő és fordítva. Pl.: (220;284) (1184;1210) (2620;2924) (5020;5564) (6232;6368) #include <stdio.h> void beolvas(int *hatar, char *c) { printf("%s", c); scanf("%d", hatar); return; Kiír egy szöveget, és beolvas egy számot void függvénynél is ki lehet írni a return; utasítást int baratsagos(int a, int b) { if (a==kisebboszto_osszeg(b) && b==kisebboszto_osszeg(a))return 1; Barátságos szám ellenőrzése int kisebboszto_osszeg(int szam) { int osszeg, oszto; osszeg=0; for (oszto=1; oszto<=szam/2; oszto+=1) { if (szam%oszto == 0) osszeg += oszto; Egy szám önmagától kisebb return osszeg; osztóinak összege 32/21 TXT

Kövessük a kódot TXT 1 2 3 int main( ) { int alsohatar, felsohatar, i, j; beolvas(&alsohatar, "\nadd meg az alsó határt: "); do { beolvas(&felsohatar, "Add meg a felső határt: "); while (felsohatar < alsohatar); printf("a tartomány: %d, %d\n",alsohatar, felsohatar); 4 for (i=alsohatar; i<=felsohatar; i++){ for (j=i+1;j<=felsohatar;j++) { if (baratsagos(i, j)==1) printf("barátságos számpár: (%d,%d)\n", i, j); printf("vizsgálat vége!\n"); 1 2 3 Beolvassa az alsó határt Beolvassa a felső határt 32/22 Kiírja a keresési tartományt 4 Két ciklus vezérli a számokat a határok között, és minden lehetséges számpárt megvizsgál

Négyzetszámok Azok a számok, melyek négyzet alakúak lehetnek 32/23

Kövessük a kódot TXT Hány darab négyzetszám van 1 és egy beolvasott határérték között? #include <stdio.h> #include <math.h> int negyzetszam_e(int szam) { int gyok=sqrt((double)szam); if (gyok*gyok==szam) return 1; int main() { int N, i, db=0; printf("\nnégyzetszámok keresése\n"); printf("add meg a felső határt: "); scanf("%d", &N); for (i=1; i<=n; i++) if (negyzetszam_e(i)==1) db++; printf("%d darab négyzetszám van 1 és %d között\n", db, N); 32/24

Kövessük a kódot Hány darab négyzetszám van 1 és egy beolvasott határérték között? Írjuk ki a számokat! #include <stdio.h> #include <math.h> int negyzetszam_e(int szam) { int gyok=sqrt((double)szam); if (gyok*gyok==szam) return 1; int main() { int N, i, db=0; printf("\nnégyzetszámok keresése\n"); printf("add meg a felső határt: "); scanf("%d", &N); for (i=1; i<=n; i++) if (negyzetszam_e(i)==1) {printf("%d\n", i); db++; printf("%d darab négyzetszám van 1 és %d között\n", db, N); 32/25

BitMan-számok :-) 32/26

Kövessük a kódot #include <stdio.h> int oszt2(int szam) { if (szam%2==0) return 1; int no_oszt8(int szam) { if (szam%8==0) return 1; int szamjegy_osszeg(int szam) { if (szam==8) return 1; if(szam>=10 && szam<100) { int s=szam/10; int s2=szam-s*10; if (s+s2==8) return 1; if(szam>=100 && szam<256) { int s=szam/100; int s2=(szam-s*100)/10; int s3=szam-s*100-s2*10; if (s+s2+s3==8) return 1; 32/27 TXT BitMan-számnak nevezem (2018.11.03- óta, és csak én) azokat a számokat, melyek párosak, de nem oszthatók 8-al, kisebbek 2 8 értékénél, és számjegyeik összege 8.

Kövessük a kódot BitMan-számnak nevezzük azokat a számokat, melyek párosak, de nem oszthatók 8-al, kisebbek 2 8 értékénél, és számjegyeik összege 8. TXT int main() { int i; printf("\nbinman-számok keresése\n"); for (i=1; i<256; i++) if (oszt2(i)+no_oszt8(i)+szamjegy_osszeg(i)==3) printf("a %d BitMan-szám\n", i); 32/28

Összefoglalás a függvényekről A függvény egy nagyobb program forráskódjának egy része, amely egy adott feladatot hajt végre, a kód többi részétől viszonylag független egység, és többször felhasználható anélkül, hogy a program kódjának több példányban is tartalmaznia kellene. Hasonló fogalmat jelölnek a szubrutin, metódus, procedúra, eljárás vagy alprogram nevek is. Egy bizonyos gyakorlat megszerzése után: egyszerűbbé teszi a kód megírását, átláthatóbb, rövidebb kódot eredményez, könnyebben, egyszerűbben javítható kódot eredményez, a megírt függvények bármikor újra felhasználhatók más programokban. 32/29

Házi feladatok 1. Írja meg az egész szám négyzetre emelését megvalósító függvényt. 2. Írjon C programot, ami meghatározza egy megadott szám számjegyeinek az összegét. 3. A 4. feladat mintájára írja ki N-ig, majd az első N db, ill. az N-jegyű tükörszámokat. Tükörszám az, amelyik megegyezik a fordítottjával. 4. Az összes N-jegyű Armstrong-szám kigyűjtése. Armstrong-számnak nevezünk egy n jegyű számot, ha minden számjegyét az n-edik hatványra emelve és összeadva, az eredeti számot kapjuk. Ilyenek az egyjegyű számok és 153; 370; 371; 407; 1634; 8208; 9474; stb. 32/30

32/31

VÉGE VÉGE 32/32