Programozás és modellezés C-benIstván Zachar
2019
MTA Centre for Ecological Research
ELTE Department of Plant Systematics,Ecology and Theoretical Biology
Miről lesz szó?
• programozás
• modellezés
• kevés algoritmus
• C
• Wolfram Mathematica
• RaspberryPi
Tematika
• Kis lépésekkel az alapoktól…
• 14 óra
• számonkérés menet közben nincs!
• jegyszerzés: év végére elkészíteni és demonstrálni egy működő programot• választható feladatok• egyéni ötlet is lehet• saját kutatás!
• …menet közben jön meg az étvágy!
Ökológiai és evolúciós modellek
• Hogy változik a préda-predátor populáció az időben?
• Hogy tekeredik fel egy molekula 3D-ben?
• Hogy alakul egy mintázat térben (és időben)?
• Hogyan terjed a vírus egy populációban?
• Melyik kompetítor baktérium győzi le a másikat?
• Melyik stratégia a nyerő és evolúciósan stabil?
Hogy néz ki a modellezés folyamata?
modell---------kérdésekötletmodellegyszerűsítésekeredmények
program-------eszközöklehetőségekbesajtoláskompromisszumokfuttatásábrázolás
válasz!
<==>
, futtatás, futtatás…
Mi kell a kurzushoz?
• programozási előismeret NEM
• minimális angol tudás
• minimális matematikai ismeretek (átlag, logaritmus, stb.)
• ábrázolási lehetőségek (Excel, R, stb.)
• minimális, de fejleszthető algoritmikus gondolkodás
C programnyelv
• 1969 - … Dennis Ritchie @ Bell labs
• széleskörű programnyelv
• egyszerű programok -->operációs rendszerek
• alacsony szintű
C programnyelv tulajdonságai
• általános felhasználású• szöveges, „human-readable”• gépi kódba hatékonyan képező• strukturált: nincs „spagetti” kód, nincs goto• imperatív, deklaratív, strukturált, blokk-strukturált• erősen tipizált (szigorú adattípusok)• fordított („compiled”)• 0-offszet• kisbetű-nagybetű érzékeny (“case sensitive”)• szóköz-érzéketlen („whitespace insensitive”)• utódok: C++, C#, Objective-C, D, Java, JavaScript, Perl, Python, PHP
Mire jó és mire nem a C?
• Mire nem jó:• szimbolikus számítások• egyenletek manipulálása• szövegek manipulálása• rajzolás, ábrázolás, grafika• játék fejlesztés• eredmények interpretálása• objektum-orientált kód
• Mire jó• egyszerű algoritmusok• iteratív műveletek• vektor-, mátrix- és tenzorműveletek
Első program!
• Printeljük ki a standard kimenetre a következő karakterláncot:
"Hello World!"
• karakterlánc? = string, karaktersorozat• printelés?? = kiírás• standard kimenet??? = a képernyő
(lehetne fájl is, egy másik képernyő, a nyomtató, stb.)
• miben írjuk?• hogyan fordítjuk?• hogyan futtatjuk?
Hello world program
#include <stdio.h>
int main () {
printf("Hello world!");
return(0);}
lásd letölthető példafájl: hello.c
Miből áll egy utasítás?
printf("Hello world!");
általánosan:
parancs(argumentum);
vagy:
parancs(arg1, arg2, …);
vagy:parancs(arg1, arg2, …) {
utasítás1;utasítás2;…
}
Fordítás, futtatás
• Fordítás = kompilálás = compiling• Build gomb a Geany-ben (F9 billentyű)
• lehetséges fordítási hibák (amiket a fordító észlel; compile-time errors):• hiányzó pontosvessző (;)
• nem deklarált változó
• változó rossz típusú kiíratása (pl. %d ha a változó lebegőpontos)
• Futtatás = execution, run• Execute a Geany-ben (F5 billentyű)
• lehetséges futtatási hibák (amiket futás közben jönnek elő; runtime errors):• nullával osztás
A C lexikonja
• ANSI C:ISO standardizált 1990 óta
• összes lefoglalt alapszó:32 + 5 (C99) +7 (C11)
• parancsokamiket használni fogunk
• adattípusokamiket használni fogunk
• egyébnem fogjuk használni őket
autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloat
forgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoidvolatilewhile
Adattípusok
int = Egész adattípus, csak egész szám tárolható benne
#include <stdio.h>
int main() {
int x, y;
x = 1;
y = 4;
printf("x = %d y = %d \n", x, y);
return(0);
}
további példákért lásd letölthető fájl: adattipusok.c
Adattípusok
• int 32 biten ábrázolható előjeles egész szám{-2 147 483 648, …, -2, -1, 0, 1, 2, …, 2 147 483 647}(-(231), …, 0, …, 231-1)
• float előjeles lebegőpontos valós szám
abszolút értékben ábrázolható: (0, ~1038) vagy (0, ~2128)
• double előjeles lebegőpontos valós szám
abszolút értékben ábrázolható: (0, ~10296) vagy (0, ~2984)
• char karakter típus 8 biten, 255 különféle ASCII karaktert ábrázolhat
pl. 'a', 'A', '1', '.', '\n', '\t', stb.
• void amikor azt jelezzük, hogy NINCS adat vagy output, és így típus sem kell
Értékadás folyamata
int x = 1, y = 3;
x = x + y;
x = 1 + 3;
x = 4;
x értéke a memoriában 4 lesz.
értékek behelyettesítése
művelet elvégzése
hozzárendelés
Operátorok
int main () {int x = 0, y = 3;x = x + 1;x++;x += y;printf("x = %d\n", x);return(0);
}
további példák a letölthető fájlban: operatorok.c
Operátorok
• aritmetika: +, -, / (osztás) * (szorzás), % (maradékos osztás)
• értékadás: =, +=, -=, *=, /=, %=
• inkrementálás, dekrementálás: ++, --
• összehasonlítás: ==, >, <, >=, <=
• logikai műveletek: && (és), || (vagy), ! (nem)
Fordítás parancssorból
nem fogjuk használni, de ha valakit érdekel:
gcc fordító: GNU Compiler Collection (régebben: GNU C Compiler)
telepített gcc verziószáma: gcc --version
fordítás gcc-vel (általános): gcc -o binary source [kapcsolók]
fordítás gcc-vel (példa): gcc -o hello.exe hello.c -Wall
C programozás otthon
Fordító, GNU C:• Windows: MinGW (Minimalist GNU fro Windows): http://www.mingw.org/
• Linux: alapból van gcc
• Mac OSX: ?
Fejlesztői környezet (Integrated Development Environment, IDE):• Geany (Linux, Windows, OSX, …)
• CodeBlocks
• DevC++ (using MinGW)
Szövegszerkesztő:• Notepad++ és NppExec plugin (Linux, Windows, OSX, …)
EZT ajánlom!
Referenciák
• The GNU C Reference Manual: https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html
• C reference: http://en.cppreference.com/w/c
• C library: http://www.cplusplus.com/reference/clibrary/
• [C] tag @ : http://stackoverflow.com/questions/tagged/c
• C math.h függvények: https://en.wikipedia.org/wiki/C_mathematical_functions