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

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

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

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

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.

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

/* 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 ) ;

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

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

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

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

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)

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

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

Programozás I. gyakorlat

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

INFORMATIKA tétel 2018

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

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

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

OOP: Java 1.Gy: Java alapok

Programozás I. gyakorlat

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

Maximum kiválasztás tömbben

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

Programozási segédlet

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

Megoldott programozási feladatok standard C-ben

Bevezetés a programozásba I.

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Karakter- és sztringkezelő függvények, matematikai függvények

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

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

INFORMATIKA javítókulcs 2016

8. gyakorlat Pointerek, dinamikus memóriakezelés

Tartalomjegyzék Algoritmusok - pszeudókód

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

Algoritmusok pszeudókód... 1

5. gyakorlat. Konstansok Tömbök Stringek

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

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

5. Gyakorlat. struct diak {

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

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

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

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

Bevezetés a programozásba I.

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

Felvételi tematika INFORMATIKA

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

C programozás. 1 óra Bevezetés

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Megoldott programozási feladatok standard C-ben

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

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

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

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

1. Alapok. Programozás II

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

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

3. Osztályok II. Programozás II

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

Algoritmizálás, adatmodellezés tanítása 1. előadás

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

Példák tematikus csoportosításban

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

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

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

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

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

Algoritmusok pszeudókód... 1

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

Java Programozás 1. Gy: Java alapok. Ismétlés ++

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

2018, Funkcionális programozás

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Programzás I gyakorlat

C programozási nyelv

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Programozás I gyakorlat

Vezérlési szerkezetek. Szelekció Ciklusok

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

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

PROGRAMOZÁSI TÉTELEK

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

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Átírás:

Programozás alapjai 9.Gy: Struktúra 2. Ördögi részletek P R O A L A G 35/1 B ITv: MAN 2018.11.10

Euró árfolyam statisztika Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések megválaszolására. a) Hányszor volt a negyedévben 300 Ft alatt az árfolyam értéke? Az adatokat egy tömb inicializálásával adja meg. b) Monoton nőtt-e az árfolyam a negyedév során? A válasz kiírását feltételes operátorral valósítsa meg. Az adatokat ellenőrzött módon olvassa be! c) Melyik héten volt a legmagasabb, és melyiken a legalacsonyabb az árfolyam? Melyek voltak ezek a szélsőértékek? d) Mennyi az adott negyedévre vonatkozó átlagos árfolyam érték? Előjelhelyesen írja ki, hogy az egyes adatok mennyivel térnek el az átlagtól. Az adatokat véletlenszerűen generálja. Ezt a feladatot pointer használatával is oldja meg. A feladatot a strukturált programtervezési alapelv betartásával, azaz minden végrehajtandó funkciót külön függvényként megvalósítva készítse el! 35/2

Megírandó függvények A tömb elemeinek beolvasása ellenőrzött módon. Tömb elemeinek kiírása. Tömb feltöltése véletlenszámokkal. Megadott értéknél alacsonyabb árfolyamok megszámolása. Annak megállapítása, hogy a tömb elemei monoton növekvő sorozatot alkotnak-e? Eldöntendő kérdés. A tömbelemek átlagának kiszámítása. A tömbelemek, és azok átlagtól való eltérésének kiírása. A tömb legkisebb elemének meghatározása. A tömb legnagyobb elemének meghatározása. 35/3

1 A főprogram, és a beolvas és a kiír függvények prototípusa #include <stdio.h> /* Saját függvények prototípusa */ void beolvas(float *tomb, int meret); void kiir(float *tomb, int meret); int main() { int N = 12; float tomb[12]; beolvas(tomb, N); kiir(tomb, N); return 0;... 35/4

1 A beolvas függvény definíciója void beolvas(float *tomb, int meret) { int i, ok; char ch; for(i=0; i<meret; i++) { do { ok = 1; printf("%d. érték: ", i+1); if (scanf("%f", &tomb[i])!=1) { printf("hibás input\n"); while ((ch=getchar())!= '\n'); ok = 0; while (!ok ); return ; 35/5 Feltételezzük, hogy a beolvasott érték helyes Ha nem sikerült egy darab helyes értéket beolvasni Ciklussal kiolvassuk a pufferből a hibás karaktereket Jelezzük, hogy a beolvasott érték helytelen Addig próbálkozunk, míg ok értéke nem 1!

1 A kiír függvény definíciója void kiir(float *tomb, int meret) { int i; for(i=0; i<meret; i++) { printf("%d. érték: %.2f \n", i+1, tomb[i]); return ; 35/6

2 A főprogram, feltöltés véletlenszámokkal és megadott értéknél kisebb elemek megszámolása #include <stdio.h> #include <stdlib.h> #include <time.h> A véletlenszám generáláshoz kell! void feltolt(float *tomb, int meret); int szamlal(float *tomb, int meret, float limit); int main() { int N = 12, db; float tomb[12], limit = 300.0; feltolt(tomb, N); db = szamlal(tomb, N, limit); printf("az árfolyam értéke %d-szer volt %.2f alatt.", db, limit); return 0;... 35/7

2 A főprogram, feltöltés véletlenszámokkal és megadott értéknél kisebb elemek megszámolása void feltolt(float *tomb, int meret) { int i; srand(time(0)); for (i=0; i<meret; i+=1) { tomb[i]=rand()%31+280; return ; A két határ különbsége + az alsó határ int szamlal(float *tomb, int meret, float limit) { int i, db=0; for (i=0; i<meret; i+=1) { if (tomb[i] < limit) db++; return db; Alsó határ: 280, Felső határ: 311 35/8

3 A főprogram, és a monotonitás vizsgálat #include <stdio.h> void beolvas(float *tomb, int meret); int monoton_e(float *tomb, int meret); int main() { int N = 12; float tomb[12]; beolvas(tomb, N); if (monoton_e(tomb,n)) printf("az Euro árfolyama monoton nőtt."); else printf("a számsorozat nem monoton növő."); return 0; int monoton_e(float *tomb, int meret) { int i; for (i=1; i<meret; i++) if (tomb[i-1]>tomb[i]) return 0; return 1;... (+beolvas függvény!) 35/9

4 A főprogram, átlagszámítás, átlagtól eltérés kiírása #include <stdio.h> void beolvas(float *tomb, int meret); float atlagol(float tomb[], int meret); void eltereskiir(float tomb[], int meret, float atlag); int main() { int N = 12; float tomb[12]; beolvas(tomb, N); float atlag = atlagol(tomb, N); printf("\nátlag: %.2f\n", atlag); printf("atlagtol valo elteresek:\n"); eltereskiir(tomb, N, atlag); return 0; 35/10

4 A főprogram, átlagszámítás, átlagtól eltérés kiírása float atlagol(float tomb[], int meret) { float eredmeny, sum=0.0; int i; for(i=0; i<meret; i++) sum += tomb[i]; eredmeny = sum/meret; return eredmeny; void eltereskiir(float tomb[], int meret, float atlag) { int i; for (i=0; i<meret; i++) printf("%d. \t %.2f HUF/EUR \t %.2f\n", i+1, tomb[i], tomb[i]-atlag); printf("\n"); return ;... (+beolvas függvény!) 35/11

5 A főprogram, legkisebb elem indexének meghatározása #include <stdio.h> void beolvas(float *tomb, int meret); int minindex(float *tomb, int meret); int main() { int N = 12; float tomb[12]; beolvas(tomb, N); int mini = minindex(tomb, N); printf("\nlegkisebb elem értéke: %.2f", tomb[mini]); return 0; int minindex(float *tomb, int meret) { int i, minidx=0; for(i=1; i<meret; i++) { if(tomb[i]<tomb[minidx]) minidx=i; return minidx;... (+beolvas függvény!) 35/12

35/13

6 Készítsünk saját függvény könyvtárat a függvényekből. Készítsünk hozzá saját header állományt is. Alkalmazzuk ezt a könyvtárat a feladatban. A saját header neve legyen skheader.h A függvények definícióját helyezzük el az skheader.c nevű fájlban: 1. Keressük meg a projektünket a fájlrendszerben: 2. Hozzunk létre egy skheader.c nevű fájlt Új \ Szöveges dokumentum Neve: skheader.c 35/14

6 3. Nyissuk meg a fájlt jegyzettömbbel 2x 4. Írjuk bele a következőket: 35/15 5. Mentsük le, ha elkészült

6 4. Írjuk bele az skheader.c fájlba a következőket: #include <stdio.h> #include "skheader.h" A minindex függvény kódja A maxindex függvény kódja Másoljuk ide a függvények kódját! A beolvas függvény kódja 5. Mentsük le, ha elkészült 35/16

6 Készítsünk saját függvény könyvtárat a függvényekből. Készítsünk hozzá saját header állományt is. Alkalmazzuk ezt a könyvtárat a feladatban. A saját header neve legyen skheader.h A függvények prototípusát helyezzük el az skheader.h nevű fájlban: 1. Keressük meg a projektünket a fájlrendszerben: 2. Hozzunk létre egy skheader.h nevű fájlt Új \ Szöveges dokumentum Neve: skheader.h 35/17

6 3. Nyissuk meg a fájlt jegyzettömbbel 2x 4. Írjuk bele a következőket: 35/18 5. Mentsük le, ha elkészült

6 Készítsünk saját függvény könyvtárat a függvényekből. Készítsünk hozzá saját header állományt is. Alkalmazzuk ezt a könyvtárat a feladatban. Írjuk át a main függvény kódját: #include <stdio.h> #include "skheader.h" int main(){ int N = 12; float tomb[12]; beolvas(tomb, N); int mini = minindex(tomb, N); printf("\nlegkisebb elem értéke: %.2f", tomb[mini]); int maxi = maxindex(tomb, N); printf("\nlegnagybb elem értéke: %.2f", tomb[maxi]); return 0; 35/19 Az " " azt jelzi a fordítónak, hogy a headert a main függvénnyel azonos mappában találja meg Az < > azt jelzi a fordítónak, hogy a headert a rendszermappában találja meg ( \lib\include\stdio.h) Nyugi! Bár lefordul, még nem működik!

6 A kód életre keltése 1. Jobb klikk a projekt nevére \ Add files 2. Adjuk hozzá az skheader.c fájlt 3. Jelöljük ki, milyen céllal adjuk a projekthez a fájlt 4. Újból jobb klikk a projekt nevére \ Add files 5. Adjuk hozzá az skheader.h fájlt 6. Jelöljük ki, milyen céllal adjuk a projekthez a fájlt 7. Ellenőrizzük le a hozzáadott fájlokat 8. Fordítás, futtatás, nagy mosoly :-) 35/20

Házi feladatok Készítsünk saját függvény könyvtárat paraméterezhető méretű int, char, float és double tömb ellenőrzött beolvasását és kiírását megvalósító függvényekből. Készítsünk hozzá saját header állományt is. A feladathoz készítsen lineáris keresést megvalósító függvényt. A feladathoz készítse el a minimum kiválasztásos rendezés algoritmusát megvalósító függvényt. Saját függvénykönyvtárát egészítse ki az int, float és double tömbökre vonatkozó alapalgoritmusok definíciójával (összegzés, szélsőérték kiválasztás, lineáris keresés). 35/21

35/22

Sztringkezelő függvények Inicializáljon, illetve Esc+Enter lenyomásáig olvasson be a szabványos bemenetről egy szöveget. Ezen a szövegen az alábbi műveleteket hajtsa végre. a) A szöveg megfordítása, illetve fordított kiírása. b) A szöveg nagybetűssé konvertálása. c) A szövegben az E betűk megszámolása. A feladatot a strukturált programtervezési alapelv betartásával, azaz minden végrehajtandó funkciót külön függvényként megvalósítva készítse el! 35/23

7 A főprogram, és a prototípusok #include <stdio.h> #include <string.h> #include <ctype.h> #define N 100 #define ESC 10 Sztringkezelő függvények Karakterkonverziós függvények Az Esc ASCII kódja Windowsban void beolvas(char *szoveg); char* forditvamasol(const char *forras, char *cel); int main() { char szoveg[n], forditott[n]; beolvas(szoveg); printf("a beolvasott szöveg:\n%s", szoveg); char *p; p = forditvamasol(szoveg, forditott); printf("\na szöveg megfordítva:\n%s", p); return 0;... 35/24

7 A függvények definíciója void beolvas(char *szoveg) { int i=0; char ch; printf("esc+enter lenyomasaig olvassa a karaktereket: \n"); printf("de a szöveg végén csak egy Enter-t nyomj!\n"); while ((ch=getchar())!= ESC) { szoveg[i] = ch; i++; szoveg[i] = '\0'; return ; char* forditvamasol(const char *forras, char *cel) { char *seged = cel; int i = strlen(forras)-1; while (i>=0) { *cel = forras[i]; 35/25 cel++; i--; *cel = '\0'; return seged; Ha a szöveg beolvasását a scanf("%s", szoveg); utasítással valósítja meg, az nem tartalmazhat space karaktert.

8 Szöveg megfordítása helyben char* megfordit(char *szoveg) { char *p = szoveg; char seged; int i, j; for(i=0, j=strlen(szoveg)-1; i<strlen(szoveg)/2; i++, j--) { seged = szoveg[i]; szoveg[i] = szoveg[j]; szoveg[j] = seged; return p; A kód hívása a main függvényben: char *p2; p2 = megfordit(szoveg); printf("\na megfordított szöveg:\n%s", p2); 35/26

8 Szöveg fordított kiírása void forditvakiir(char *szoveg) { int i; for(i=strlen(szoveg)-1; i>=0; i--) printf("%c", szoveg[i]); printf("\n"); return ; A kód hívása a main függvényben: forditvakiir(szoveg); 35/27

8 Szöveg nagybetűssé konvertálása char* nagybetusenmasol(const char *forras, char *cel) { char *seged = cel; while (*forras) { *cel = toupper(*forras); //ctype.h függvénye cel++; forras++; *cel = '\0'; return seged; A kód hívása a main függvényben: char *p3; p3 = nagybetusenmasol(szoveg, nagybetus); printf("\na szöveg nagybetűsen:\n%s", p3); 35/28

8 Szöveg nagybetűssé konvertálása helyben char* nagybetusit(char *szoveg) { char *seged = szoveg; while(*szoveg) { *szoveg=toupper(*szoveg); szoveg++; *szoveg = '\0'; return seged; A kód hívása a main függvényben: char *p4; p4 = nagybetusit(szoveg); printf("a szöveg nagybetűsítve:\n%s", szoveg); 35/29

8 Szöveg nagybetűs kiírása void nagybetuvelkiir(char *szoveg) { int i; for(i=0; i<strlen(szoveg); i++) printf("%c", szoveg[i]); printf("\n"); return ; A kód hívása a main függvényben: nagybetuvelkiir(szoveg); 35/30

8 Szövegben az E-betűk megszámlálása int Ebetuk(char *szoveg) { int db=0; while(*szoveg) { if (*szoveg=='e') db++; szoveg++; return db; A kód hívása a main függvényben: int db = Ebetuk(szoveg); printf("\n\na szövegben %d db 'E' betű van.", db); 35/31

8 A teljes főprogram #include <stdio.h> #include <string.h> #include <ctype.h> #define N 100 #define ESC 10 void beolvas(char *szoveg); char* forditvamasol(const char *forras, char *cel); char* megfordit(char *szoveg); void forditvakiir(char *szoveg); char* nagybetusenmasol(const char *forras, char *cel); char* nagybetusit(char *szoveg); void nagybetuvelkiir(char *szoveg); int Ebetuk(char *szoveg); 35/32

8 A teljes főprogram int main() { char szoveg[n], forditott[n], nagybetus[n]; beolvas(szoveg); printf("a beolvasott szöveg:\n%s", szoveg); char *p; p = forditvamasol(szoveg, forditott); printf("\n\na szöveg megfordítva:\n%s", p); char *p2; p2 = megfordit(szoveg); printf("\na megfordított szöveg:\n%s", p2); printf("\na megfordított szöveg fordított kiírása:\n"); forditvakiir(szoveg); p2 = megfordit(szoveg); //A szöveg visszafordítása char *p3; p3 = nagybetusenmasol(szoveg, nagybetus); printf("\na szöveg nagybetűsen:\n%s", p3); printf("\na szöveg nagybetűkkel kiírva:\n"); nagybetuvelkiir(szoveg); p2 = nagybetusit(szoveg); printf("a szöveg nagybetűsítve:\n%s", szoveg); int db = Ebetuk(szoveg); printf("\n\na szövegben %d db 'E' betű van.", db); return 0; 35/33

8 Futási eredmény 35/34

VÉGE VÉGE 35/35