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

Hasonló dokumentumok
Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

Programozás I gyakorlat

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

Pénzügyi algoritmusok

C string műveletek (string.h alkalmazása)

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

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

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

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

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

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

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

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

Példák tematikus csoportosításban

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

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

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

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

malloc free malloc free int sum(int a[4]) { return a[0] + a[1] + a[2] + a[3]; }

Mutatók. Programozás I. Hatwágner F. Miklós február 26. Széchenyi István Egyetem, Gy r

Szövegek C++ -ban, a string osztály

Maximum kiválasztás tömbben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

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

Példatár a Programozás 1 tárgyhoz

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

Programozás C++ -ban 2007/1

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

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

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

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamá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

2018, Funkcionális programozás

Programozási alapismeretek 2009/2010

1. Alapok. Programozás II

INFORMATIKA javítókulcs 2016

INFORMATIKA tétel 2017

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás C és C++ -ban

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

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

5. gyakorlat. Konstansok Tömbök Stringek

Elemi alkalmazások fejlesztése I. Olvassunk be egy fájlból egész számokat egy tömbbe. Keressük meg a tömb valamely

500. CC Megoldó Alfréd CC 500.

INFORMATIKA tétel 2019

Programozás C nyelven 6. ELŐADÁS. Sapientia EMTE

Preprocesszor. Programozás alapjai C nyelv 11. gyakorlat. Makrók (2) Makrók (#define) Makrók (3) #include

Programozás alapjai C nyelv 11. gyakorlat. Preprocesszor. Makrók (#define)

Bevezetés a programozásba I.

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

Programozás C++ -ban

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

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

INFORMATIKA tétel 2018

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

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

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

117. AA Megoldó Alfréd AA 117.

A C programozási nyelv III. Pointerek és tömbök.

Bevezetés a C++ programozásba

Országzászlók (2015. május 27., Sz14)

Információs Technológia

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

A C programozási nyelv III. Pointerek és tömbök.

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

Programozás alapjai II. (4. ea) C++

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

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

length (s): Az s karaklerlánc hossza, substr(s,m,n): Az s mezőben levő karakterláncnak az m-edik karakterétől kezdődő, n darab karaktert vágja ki.

2018, Funkcionális programozás

Stack Vezérlés szerkezet Adat 2.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

2018, Funkcionális programozás

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

Géptermi zh-írás forgatókönyve

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

5. Gyakorlat. struct diak {

Programozási Nyelvek: C++

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.

Informatika terméktervezőknek

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

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

Programozás II gyakorlat. 8. Operátor túlterhelés

Pénzügyi algoritmusok

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

C++ függelék. Tartalom

Objektumok inicializálása

7. fejezet: Mutatók és tömbök

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

Bevezetés a programozásba. 11. Előadás: Esettanulmány

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

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

Bevezetés a programozásba 2

Programozás C és C++ -ban

Átírás:

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE 2015-16 1

const ódosító jelző int x = 1914; // I. világháború ++x; // HELYES, mert x változó Vedd észre, hogy bár: x *p ++x helyes és ++(*p) helytelen const int y1 = -539; // Babilon bukása ++y1; // HELYTELEN, mert y1 írásvédett változó int const y2 = -539; // identikus az y1 definiálásával const int *p = &x; ++(*p); // HELYTELEN, mert (*p) írásvédett ++p; // HELYES, mert p változó int *const q = &y1; ++(*q); // HELYES, mert (*q) változó ++q; // HELYTELEN, mert q írásvédett Vedd észre, hogy bár: y1 *q ++y1 helytelen és ++(*q) helyes

Karakterláncok A karakterláncokat char-tömbökben tároljuk. Egy karakterlánc végét a karakterlánc-végjel jelzi: \0 int main(){ char s[10] = sapi ;... return 0; s s a p i \????? 0 1 2 3 4 5 6 7 8 9 Az s tömbben tárolt karakterlánc Az s cí e kezdődő karakterlá c

Karakterláncok int main(){ char s[10] = sapi ; //sizeof(s)=10 char a[] = info ; //sizeof(a)=5 char *b = matek ; //sizeof(b)=4 char *c[] = { pascal, c++, java ; //sizeof(c)=12... return 0; String-literációk táblázata s a p i \ i f o \ a t e k \ s a b c 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 0 1 2 p a s a l \ + + \ j a v a \

C++ Karakterláncok beolvasása / kiírása int main(){ char mondat[100]; cin >> mondat; cout << mondat << \n ; ifstream fin; fin.open( szoveg.txt ); if( ){ fin.getline(mondat, 100); cout << mondat << \n ; fin.getline(mondat, 20); cout << mondat << \n ; fin.close(); return 0; szoveg.txt Comenius egyik fo muve: A lathato vilag kepekben Comenius a modern oktatas atyja Comenius Comenius egyik fo muve: A lathato vilag kep _ mondat C o m e n i u s \0 0 1 2 3 4 5 6 7 8 mondat A l a t h a t o v i l a g k e p \0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

string.h (1) size_t strlen(const char *str); //karakterlánc hossz char *strcpy(char *dest, const char *src); //másolás char *strcat(char *dest, const char *src); //egy ásutá fűzés int strcmp(const char *str1, const char *str2); //lexikográfikus összehasonlítás char *strchr(const char *str, int c); // első előfordulásá ak í e str-ben char *strrchr(const char *str, int c); // utolsó előfordulásá ak í e str-ben char *strstr(const char *str1, const char *str2); //str első előfordulásá ak í e str -ben

#include <string.h> Karakterláncok int main(){ char s1[20], s2[10]; strcpy(s1, Inform ); strcpy(s2, atika ); cout << strcat(s1,s2) << \n ; s1 cout << strlen(s1) <<, << strlen(s2) << \n ; cout << strstr(s1,s2)-s1 << \n ; cout << strrchr(s2, a )-s2 << \n ; return 0; I n f o r m \0 Informatika 11,5 6 4 _ s2 a t i k a \0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 s1 0 1 2 3 4 5 6 7 8 9 I n f o r m a t i k a \0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

my_strlen / my_strcmp int my_strlen(char *s){ char *p; for( p = s ; *p ; ++p ){; return p - s; s p p m a t e k \0 int my_strcmp(char *p, char *q){ while( *p == *q ){++p; ++q; return *p - *q; Milyen esetben e űködik helyese? p p m a t e k \0 q q m a t t \0

string.h (2) char *strncat(char *dest, const char *src, size_t n); //legfe te karakter hozzáfűzése int strncmp(const char*str1, const char*str2, size_t n); // legfentebb n karakter összehasonlítása char *strncpy(char *dest, const char *src, size_t n); // legfentebb n karakter másolása size_t strcspn(const char *str1, const char *str2); //str str - e tes prefixének hossza char *strpbrk(const char *str1, const char *str2); // str első str - eli karaktere í e size_t strspn(const char *str1, const char *str2); //str str - eli prefixének hossza char *strtok(char *str, const char *delim); //karakterlánc darabolás

strtok: karakterlánc-darabolás char mondat[80] = "Nem vagyok kulonosebben tehetseges, csak szenvedelyesen kivancsi. (Einstein)"; const char elvalasztok[] =,.()"; char *szo; /* nyerd ki az ELSŐ szót */ szo = strtok(mondat, elvalasztok); /* nyerd ki a TÖBBI szót */ while( szo!= NULL ) { cout << szo << \n ; szo = strtok(null, elvalasztok); Nem vagyok kulonosebb tehetseg csak szenvedelyesen kivancsi Einstein _ Az első szó kezdő í ét téríti vissza, valamint lezárja ezt \ -val. Ha a maradékkarakterlánc üres, vagy csak elválasztókaraktereket tartalmaz, akkor NULL pointer-t térít vissza. szo szo mondat \0 N e m v a g y o k \0 k u l o s e b b 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

string.h (3) void *memchr(const void *str, int c, size_t n); int memcmp(const void*str1, const void*str2, size_t n); void *memcpy(void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); void *memset(void *str, int c, size_t n); //Hogyan cseréli ki a qsort a p1 és p2 címeken //található size méretű elemeket? void *pv; pv = malloc(size); strcpy(pv, p1, size); strcpy(p1, p2, size); strcpy(p2, pv, size); pv p1 p2

#include <fstream> #include <string.h> int main(){ int n, i; 0 1 * a d o char **s; ifstream fin; 2 * E z fin.open( szoveg.txt ); if( ){ fin >> n; s = (char**)malloc(n * sizeof(char*)); if( ){ for (i = 0 ; i < n ; ++i){ s[i] = (char*)malloc(101 * sizeof(char)); if( ){ fin.getline(s[i],101); fin.close(); return 0; n darab, maximum 100 karakterű sorok beolvasása állományból kétdimenziós tömbbe s ** * szoveg.txt 0 1... 100 T a n 3 Tanítani szinte nem is jelent mást, mint megmutatni, miben különböznek egymástól a dolgok a külö öző éljukat, egjele ési for ájukat és eredetüket illetőe. Ezért aki jól megkülönbözteti egymástól a dolgokat, az jól is tanít. (Comenius)

Karakterlánc-függvények rekurzívan int R_my_strlen(char *s){ if( *s ){ return 1 + R_my_strlen(s+1); else { return 0; int R_my_strcmp(char *p, char *q){ if( *p == *q ){ if (*p) { return R_my_strcmp(p+1,q+1); else { return 0; else { return *p - *q;

Összefoglalás const char x = * ; A karakterláncokat char-tömbökben tároljuk. Egy karakterlánc végét a karakterlánc-végjel jelzi: \0 C++ olvasás szava ké t (<<) / soronként (getline) string.h strlen, strcpy, strcat, strchr, strstr, strcmp, strcspn, strpbrk, strspn, strtok, memcpy, memmov, memcmp,