Kifejezések. Kozsik Tamás. December 11, 2016

Hasonló dokumentumok
Kifejezések. Kozsik Tamás. December 11, 2016

Java II. I A Java programozási nyelv alapelemei

Készítette: Nagy Tibor István

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek (ADA)

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

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

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

Imperatív és procedurális programozás a Javában

A C# programozási nyelv alapjai

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Készítette: Nagy Tibor István

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Szoftvertervezés és -fejlesztés I.

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

GYAKORLATIAS JAVA MINTA

A C# PROGRAMOZÁSI NYELV

3 A C programozási nyelv szintaktikai egységei

Pénzügyi algoritmusok

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

Járműfedélzeti rendszerek II. 3. 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 3. Dr. Iványi Péter

C# gyorstalpaló. Készítette: Major Péter

Aritmetikai kifejezések lengyelformára hozása

Adatok, műveletek és vezérlés

Occam 1. Készítette: Szabó Éva

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

Információs Technológia

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

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Java programozási nyelv

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

A programozás alapjai

Szkriptnyelvek. 1. UNIX shell

Vezérlési szerkezetek. Szelekció Ciklusok

Informatika terméktervezőknek

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

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

Programozás I gyakorlat

Vezérlési szerkezetek

Szoftvertechnológia alapjai Java előadások

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

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

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

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

Programozás I. Első ZH segédlet

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozás I. C# bevezető. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 17.

Bevezetés a C++ programozásba

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

Operátorok, házi feladat adatszerkezetek

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

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

Labor gyakorlat Mikrovezérlők

Programok értelmezése

Bevezetés a programozásba I.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Fordító Optimalizálás

Kezdő programozók hibái

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

Programozás módszertan

Komputeralgebra Rendszerek

Assembly programozás: 2. gyakorlat

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

2016, Funkcionális programozás

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

PASzSz. Dr. Kotsis Domokos

Matematikai alapok. Dr. Iványi Péter

Labor gyakorlat Mikrovezérlők

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

Alprogramok, paraméterátadás

Komputeralgebra rendszerek

Objektumorientált Programozás I.

Komputeralgebra rendszerek

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

Matematikai alapok. Dr. Iványi Péter

(jegyzet) Bérci Norbert szeptember 10-i óra anyaga. 1. Számrendszerek A számrendszer alapja és a számjegyek

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Imperatív programozás

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

1. Alapok. #!/bin/bash

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

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

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

AWK programozás, minták, vezérlési szerkezetek

A C# nyelv alapelemei

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

5. Fejezet : Lebegőpontos számok

Átírás:

Kifejezések Kozsik Tamás December 11, 2016

Kifejezések Lexika Szintaktika Szemantika

Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {}, <> vessző, pont

Lexika: literálok karakter, sztring, egész szám, lebegőpontos szám, c, \ubabe // char típusú "hello" // java.lang.string típusú 12, 12L, 12l // int és long típusú 12.3, -12.3E5, -12.3E-5D, -12.3E-5d // double 12.3F, -12.3E-5F, 12.3f // float 1_000_000 // tagolás az olvashatóság érdekében speciális: null, this, super, true, false

Szintaktika helyes zárójelezés operátorok arítása unáris, pl. - bináris, pl. * ternáris: x>0? 2 : 3 n-áris: () (C++ függvényalkalmazás operátor) operátorok fixitása prefix, pl.!a, ++a postfix, pl. a++ infix, pl. a * b mixfix, pl. a? b : c n = 4; n++; ++n; // értéke 4, mellékhatás: n vált. 5-re // értéke 6, mellékhatás: n vált. 6-ra tömb kifejezés: {1,3,5,7}

Szemantika precedencia pl. 1+2*3 1+(2*3) 7, míg (1+2)*3 == 9 redundáns zárójelezés segítheti a kód olvasását asszociativitás azonos precedenciaszintű operátorok zárójelezése pl. 4/2*5 (4/2)*5 10 (balasszociatív operátorok) pl. x = y = 5 jelentése: x = (y = 5) azaz y-ba 5 kerül, az y=5 kifejezés értéke 5, x-be 5 kerül jobbasszociatív operátor operandusok kiértékelési sorrendje tisztaság, mellékhatások lustaság, mohóság

Kiértékelés problémái véges értéktartomány számábrázolás: véges sok biten túl- és alulcsordulás nagy számok, pl. java.lang.biginteger is valójában véges (amennyi memóriánk van) nem termináló számítások A matematikusokhoz képest nehéz dolga van a programozóknak!

Két egész szám átlaga? Túlcsordulás nélkül számítsuk ki: (a+b)/2 int avg( int a, int b ){ int halfa = a/2, halfb = b/2; if( a >= 0 && b >= 0 ){ // a+b may be too large if( halfa + halfa < a && halfb + halfb < b ) return halfa + halfb + 1; else return halfa + halfb; } else if( a < 0 && b < 0 ){ // a+b may be too small if( halfa + halfa > a && halfb + halfb > b ) return halfa + halfb - 1; else return halfa + halfb; } else return (a+b)/2; // different signums, safe! }

Számábrázolás Kettes komplemens egészek ábrázolására értéktartomány n bit esetén: 2 n 1.. 2 n 1 1 pl. n = 8 (byte) esetén -128..127 több negatív érték, mint pozitív, tehát az unáris - művelet is hibás eredményt adhat: b == -128 esetén -b == -128 for( byte b = 0; b<=127; ++b ){ System.out.println(b); } // végtelen ciklus Lebegőpontos ábrázolás valós számokhoz racionális számok egy részhalmaza leggyakrabban IEEE 754 szabvány szerint https://en.wikipedia.org/wiki/ieee_floating_point

Mellékhatásos kifejezések versus tisztaság írhatók mellékhatásos függvények vannak mellékhatásos operátorok pl. =, +=, ++ (prefix és postfix) szinte mindig a mellékhatása miatt használjuk, pl. n = 1 kifejezés értéke: 1 mellékhatása: n-nek értékül adja az 1-et vannak idiómák, melyek a mellékhatásos operátorra építenek BufferedReader in =... String str; while( (str=in.readline())!= null ){... } ökölszabály: szeretjük a tiszta (mellékhatásmentes) függvényeket!

Kifejezés versus utasítás kifejezés plusz pontosvessző: utasítás kiértékeli a kifejezést jellemzően akkor használjuk, amikor mellékhatása is van például: értékadás n = 5; n++;

Operandusok kiértékelési sorrendje Egyes nyelvekben (pl. Java) kötött: balról jobbra pl. α op β kiértékelése: először α azután β végül az op művelet a két kiértékelt operanduson hasonlóan f (α, β, γ) kiértékelése ez más, mint a precedencia és asszociativitás Sok nyelvben (pl. C++) a fordítóprogram dönti el, azaz nem feltétlenül egyértelmű, milyen eredményt kapunk több lehetséges eredmény a mellékhatások miatt a hatékonyságot befolyásolja, ezért ez egy optimalizációs módszer a fordító számára! Jobb, ha kerüljük az olyan kifejezéseket, ahol ez számít! c++ + ++c

Lustaság versus mohóság Mohó kiértékelés: először argumentum/operandus, utána művelet mohó operátorok, pl. + függvényhívások Lusta operátorok kiértékelése: Nem feltétlenül értékel ki minden operandust && és rövidzár logikai operátorok pl. α && β kiértékeléséhez nem értékeli ki β-t, ha α hamisra értékelődött ki Nem értékel ki minden operandust?: operátor legfeljebb két operandust a háromból Van logikai operátor mohó és lusta változatban is & és versus && és

Lehet más a lusta és a mohó? A logikában nem. De a programozóknak nehezebb dolguk van, mint a matematikusoknak. A különbség lehetséges okai, pl. α β esetben: lehet mellékhatás a β részkifejezésben; lehet, hogy β kiértékelése nem mindig terminál; lehet, hogy β kiértékelése néha kivételt vált ki. idióma: while( i < t.length && t[i]!= 0 ){ ++i; }

Lusta és mohó művelettábla Jelölje,, és a négy lehetséges eredményt egy logikai kifejezés kiértékeléséhez: igaz, hamis, kivétel, nem termináló számítás. Az α β kifejezés értéke az α és β értékének függvényében (a mellékhatásoktól itt eltekintünk): α && β β = β = β = β = α = α = α = α = α & β β = β = β = β = α = α = α = α =