{"id":1768,"date":"2016-09-14T14:34:01","date_gmt":"2016-09-14T12:34:01","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=1768"},"modified":"2017-01-23T08:05:19","modified_gmt":"2017-01-23T07:05:19","slug":"c-programozas-7-logikai-muveletek-logikai-kifejezesek","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=1768","title":{"rendered":"C++ programoz\u00e1s 7. &#8211; Logikai m\u0171veletek, logikai kifejez\u00e9sek"},"content":{"rendered":"<h1>Logikai m\u0171veletek, logikai kifejez\u00e9sek, avagy a felt\u00e9telvizsg\u00e1latok alapjai<\/h1>\n<p>Logikai kifejez\u00e9snek nevezz\u00fck azt, amelynek az eredm\u00e9nye igaz vagy hamis (true &#8211; false) lehet. Ezek val\u00f3j\u00e1ban eld\u00f6ntend\u0151 k\u00e9rd\u00e9sek:<\/p>\n<ul>\n<li>a sz\u00e1m p\u00e1ros?<\/li>\n<li>a sz\u00e1m oszthat\u00f3 3-mal?<\/li>\n<li>a sz\u00e1m kisebb, mint 100?<\/li>\n<\/ul>\n<p>A logikai kifejez\u00e9sek el\u0151fut\u00e1rak\u00e9nt az oper\u00e1torokat bemutat\u00f3 leck\u00e9ben sz\u00f3t ejtettem a k\u00fcl\u00f6nf\u00e9le logikai oper\u00e1torokr\u0151l:<\/p>\n<ul>\n<li>Neg\u00e1l\u00e1s: Egy logikai \u00e9rt\u00e9ket az ellenkez\u0151j\u00e9re \u00e1ll\u00edt (ami true volt, false lesz, \u00e9s ford\u00edtva)<\/li>\n<li>Logikai \u00e9s: Akkor igaz az \u00f6sszetett kifejez\u00e9s, ha minden r\u00e9szfelt\u00e9tele igaz (ha b\u00e1rmelyik hamis, hamis az eg\u00e9sz)<\/li>\n<li>Logikai vagy: Akkor hamis az \u00f6sszetett kifejez\u00e9s, ha minden r\u00e9szfelt\u00e9tele hamis (ha b\u00e1rmelyik igaz, igaz az eg\u00e9sz)<\/li>\n<li>Kiz\u00e1r\u00f3 vagy: Akkor igaz \u00f6sszetett kifejez\u00e9s, ha a r\u00e9szfelt\u00e9telek k\u00f6z\u00fcl csak egy igaz (ha t\u00f6bb r\u00e9szfelt\u00e9tel igaz, vagy mind hamis, akkor hamis az eg\u00e9sz)<\/li>\n<\/ul>\n<p>J\u00f6jj\u00f6n akkor p\u00e1r kapcsol\u00f3d\u00f3 p\u00e9lda:<\/p>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely igaz \u00e9rt\u00e9ket ad pozit\u00edv p\u00e1ros sz\u00e1mok eset\u00e9n:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m % 2 == 0 &amp;&amp; sz\u00e1m &gt; 0<\/pre>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely igaz \u00e9rt\u00e9ket ad, ha a sz\u00e1m nagyobb, mint 10 \u00e9s p\u00e1ratlan:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m &gt; 10 &amp;&amp; sz\u00e1m % 2 != 0<\/pre>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely igaz \u00e9rt\u00e9ket ad, ha a sz\u00e1m a 10 \u00e9s 30 k\u00f6z\u00f6tt van:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m &gt; 10 &amp;&amp; sz\u00e1m &lt; 30<\/pre>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely igaz \u00e9rt\u00e9ket ad, ha a sz\u00e1m oszthat\u00f3 3-mal vagy 7-tel:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m % 3 == 0 || sz\u00e1m % 7 == 0 <\/pre>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely igaz \u00e9rt\u00e9ket ad, ha a sz\u00e1m nem negat\u00edv vagy p\u00e1ros:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">!(sz\u00e1m &lt; 0) || sz\u00e1m % 2 == 0<\/pre>\n<p>Az el\u0151z\u0151 m\u00e1sk\u00e9pp:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m &gt;= 0 || sz\u00e1m % 2 == 0<\/pre>\n<p>Adj meg olyan logikai kifejez\u00e9st, mely a n\u00e9gyes vagy \u00f6t\u00f6s dolgozatjegyre ad igaz \u00e9rt\u00e9ket:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">jegy == 4 ^ jegy == 5<\/pre>\n<h2><a name=\"R\u00f6vidz\u00e1r\"><\/a>R\u00f6vidz\u00e1r ki\u00e9rt\u00e9kel\u00e9s<\/h2>\n<p>A logikai kifejez\u00e9sekkel kapcsolatban fontos megeml\u00edteni az \u00fagynevezett r\u00f6vidz\u00e1r ki\u00e9rt\u00e9kel\u00e9st. Ez a szab\u00e1ly a logikai \u00e9s, valamint a logikai vagy eset\u00e9n \u00e9rv\u00e9nyes. A r\u00f6vidz\u00e1r ki\u00e9rt\u00e9kel\u00e9s picit m\u00e1sk\u00e9pp m\u0171k\u00f6dik a k\u00e9t esetben, de teljesen logikus lesz, ha meg\u00e9rted.<br \/>\nLogikai \u00e9s m\u0171veletn\u00e9l eml\u00e9kszel arra, hogy csak akkor igaz az \u00f6sszetett kifejez\u00e9s, ha minden r\u00e9szfelt\u00e9tele igaz. Ez azt jelenti, hogy ha ak\u00e1r csak egyetlen hamisat tal\u00e1lunk, akkor a t\u00f6bbit felesleges is megvizsg\u00e1lni. N\u00e9zz\u00fcnk r\u00e1 egy p\u00e9ld\u00e1t. Ha egy olyan felt\u00e9telt szeretn\u00e9nk megadni, amely olyan sz\u00e1mokat fogad el, melyek 3-mal \u00e9s 4-gyel is oszthat\u00f3k, akkor a k\u00f6vetkez\u0151t tessz\u00fck:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m % 3 == 0 &amp;&amp; sz\u00e1m % 4 == 0<\/pre>\n<p>Mit is csin\u00e1l a C++ pontosan? A logikai \u00e9s k\u00e9t oldal\u00e1t a balr\u00f3l jobbra elv alapj\u00e1n vizsg\u00e1lja meg. Ha a sz\u00e1m oszthat\u00f3 3-mal, akkor meg kell n\u00e9zni a jobb oldali felt\u00e9telt is, mert csak akkor igaz az eg\u00e9sz, ha minden r\u00e9sze igaz. \u00c9s ha a bal oldal hamis? Akkor m\u00e1r nem is lehet soha igaz, \u00e9s &#8211; ez a legfontosabb! &#8211; a jobb oldali felt\u00e9telt m\u00e1r meg sem vizsg\u00e1lja! Nagyon fontos ezzel tiszt\u00e1ban lenni, mert sokszor haszn\u00e1latos.<\/p>\n<p>Ugyanez az elv l\u00e9tezik a logikai vagy eset\u00e9n is, csak pont ford\u00edtva. Egy olyan felt\u00e9telt szeretn\u00e9nk megadni, amely olyan sz\u00e1mokat fogad el, melyek 3-mal vagy 4-gyel is oszthat\u00f3k (esetleg mindkett\u0151vel), akkor a k\u00f6vetkez\u0151t tessz\u00fck:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">sz\u00e1m % 3 == 0 || sz\u00e1m % 4 == 0<\/pre>\n<p>Akkor egy kis deja vu. Mit is csin\u00e1l a C++ pontosan? A logikai vagy k\u00e9t oldal\u00e1t a balr\u00f3l jobbra elv alapj\u00e1n vizsg\u00e1lja meg. Ha a sz\u00e1m nem oszthat\u00f3 3-mal, akkor meg kell n\u00e9zni a jobb oldali felt\u00e9telt is, mert csak akkor igaz az ha van benne legal\u00e1bb egy igaz. \u00c9s ha a bal oldal igaz? Akkor m\u00e1r igaz az eg\u00e9sz kifejez\u00e9s, \u00e9s a jobb oldali felt\u00e9telt m\u00e1r meg sem vizsg\u00e1lja! Olyan ez, mint amikor amikor a kit\u0171n\u0151 vagy bukott di\u00e1kokat vizsg\u00e1ljuk. Akkor kit\u0171n\u0151, ha minden jegye 5-\u00f6s, \u00e9s akkor bukott, ha van 1-es \u00e9rdemjegye. Felt\u00e9telekkel ez hogy n\u00e9zne ki? Egy k\u00e9s\u0151bbi p\u00e9lda kedv\u00e9\u00e9rt legyen csak k\u00e9t tant\u00e1rgya:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">jegy1 == 5 &amp;&amp; jegy2 == 5 <\/pre>\n<p>Ha m\u00e1r az els\u0151 jegye nem 5-\u00f6s, akkor a t\u00f6bbit meg se n\u00e9zi a program, hiszen felesleges. Hasonl\u00f3an a bukott di\u00e1k:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">jegy1 == 1 || jegy2 == 1 <\/pre>\n<p>Ha m\u00e1r az els\u0151 jegye 1-es, akkor a t\u00f6bbit meg se n\u00e9zi a program, mert m\u00e1r igaz az \u00f6sszetett felt\u00e9tel, ha van 1-es jegye, akkor megbukott.<\/p>\n<h4>Neg\u00e1l\u00e1s<\/h4>\n<p>A neg\u00e1l\u00e1s olyan ter\u00fclet, ahol k\u00f6nnyen hib\u00e1zhat az ember. Ugyanazt a vizsg\u00e1latot k\u00e9t oldalr\u00f3l is meg lehet k\u00f6zel\u00edteni, \u00e9s mindkett\u0151 helyes. Vegy\u00fck p\u00e9ld\u00e1ul a m\u00e1r emlegetett kit\u0171n\u0151 tanul\u00f3nkat. Azt, hogy valaki kit\u0171n\u0151 \u00fagy defini\u00e1ljuk, hogy minden jegye 5-\u00f6s. Igen \u00e1m, de azt is mondhatom, hogy nincs olyan jegye, ami nem 5-\u00f6s. Els\u0151re meredek lehet, a dupla tagad\u00e1s am\u00fagy kedvenc a magyar nyelvben. L\u00e1ssuk akkor p\u00e9ld\u00e1val:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">jegy1 == 5 &amp;&amp; jegy2 == 5 <\/pre>\n<p>Ez m\u00e1r ismer\u0151s volt, \u0151 a kit\u0171n\u0151. Akkor n\u00e9zz\u00fck meg \u00edgy:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">!(jegy1 != 5 || jegy2 != 5) <\/pre>\n<p>Mit is \u00edrtam itt pontosan? A vagy miatt, ha legal\u00e1bb az egyik jegye nem 5-\u00f6s, akkor igaz a z\u00e1r\u00f3jeles kifejez\u00e9s &#8211; ami azt jelenti, hogy nem k\u00edt\u0171n\u0151 &#8211; majd ezt az eg\u00e9szet neg\u00e1lva hamisat kapok, m\u00e9giscsak kit\u0171n\u0151. Nincs olyan jegye, ami nem 5-\u00f6s. A vaggyal \u00f6sszek\u00f6t\u00f6tt r\u00e9szfelt\u00e9telek egy\u00fctt csak akkor hamisak, ha mindegyik hamis, vagyis minden jegye NEM 5-\u00f6s. Ha minden jegye NEM 5-\u00f6s \u00e9s ezt tagadom, az pedig azt jelenti, hogy minden jegye 5-\u00f6s, vagyis kit\u0171n\u0151. Nem egyszer\u0171 p\u00e9lda, ez az eg\u00e9sz a matematikai logik\u00e1ban \u00e9s halmazelm\u00e9letben ismert De Morgan azonoss\u00e1gokra vezethet\u0151 vissza. Ami a l\u00e9nyeg az eg\u00e9szb\u0151l: ugyanarra k\u00e9tf\u00e9le megold\u00e1s is l\u00e9tezik, melyek teljes m\u00e9rt\u00e9kben megegyeznek, neked csak az a feladatod, hogy a sz\u00e1modra egyszer\u0171bbet megtal\u00e1ld. Hasonl\u00f3an imm\u00e1r magyar\u00e1zat n\u00e9lk\u00fcl megmutatom k\u00e9t p\u00e9ld\u00e1val a bukott di\u00e1k eset\u00e9t is:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\njegy1 == 1 || jegy2 == 1\r\n\/\/ vagy\r\n!(jegy1 != 1 &amp;&amp; jegy2 != 1 )\r\n<\/pre>\n<p>Na j\u00f3, egy kis magyar\u00e1zat a m\u00e1sodik esethez. Ha egyik jegye sem 1-es, \u00e9s ezt tagadom, az mit jelent? Nem azt, hogy minden jegye 1-es! Azt jelenti, hogy van legal\u00e1bb egyetlen olyan, ami 1-es!<br \/>\nHa a kifejez\u00e9sben csak \u00c9S vagy csak VAGY logikai kapcsolatot haszn\u00e1lsz, de egyszerre a kett\u0151t nem, akkor \u00e1ltal\u00e1nos form\u00e1ban ez az \u00e1talak\u00edt\u00e1s a k\u00f6vetkez\u0151k\u00e9pp n\u00e9z ki:<\/p>\n<ol>\n<li>a logikai kapcsolatot v\u00e1ltoztasd \u00e1t a m\u00e1sikra (\u00e9s-t vagy-ra meg vagy-ot \u00e9s-re)<\/li>\n<li>a haszn\u00e1lt rel\u00e1ci\u00f3kat v\u00e1ltoztasd az ellenkez\u0151j\u00e9re (vigy\u00e1zz, eml\u00e9kezz a rel\u00e1ci\u00f3kn\u00e1l tanultakra!)<\/li>\n<li>neg\u00e1ld az eg\u00e9sz kifejez\u00e9st<\/li>\n<\/ol>\n<p>Na, m\u00e9g egy p\u00e1r p\u00e9lda erre az \u00e1talak\u00edt\u00e1sra:<\/p>\n<p>\u00cdrj kifejez\u00e9st, ami a 3-mal \u00e9s 5-tel nem oszthat\u00f3 sz\u00e1mokra ad igaz \u00e9rt\u00e9ket:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nsz\u00e1m % 3 != 0 &amp;&amp; sz\u00e1m % 5 != 0\r\n\/\/ vagy\r\n!(sz\u00e1m % 3 == 0 || sz\u00e1m % 5 == 0)\r\n<\/pre>\n<p>\u00cdrj kifejez\u00e9st, ami csak a [10;30] intervallumba NEM tartoz\u00f3 sz\u00e1mokat fogadja el:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nsz\u00e1m &lt; 10 || sz\u00e1m &gt; 30\r\n\/\/ vagy\r\n!(sz\u00e1m &gt;= 10 &amp;&amp; sz\u00e1m &lt;= 30)\r\n<\/pre>\n<p>\u00cdrj kifejez\u00e9st, ami csak a negat\u00edv p\u00e1ratlan sz\u00e1mokat fogadja el:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nsz\u00e1m &lt; 0 &amp;&amp; sz\u00e1m % 2 != 0\r\n\/\/ vagy\r\n!(sz\u00e1m &gt;= 0 || sz\u00e1m % 2 == 0)\r\n<\/pre>\n<p>Ok\u00e9, mondhatn\u00e1d, hogy itt bonyol\u00edtjuk a dolgot, hiszen a neg\u00e1l\u00e1st, mint m\u0171veletet beletessz\u00fck egy kifejez\u00e9sbe, ami egy\u00e9nk\u00e9nt nincs benne. \u00c9s ha ford\u00edtva van?<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n!(sz\u00e1m % 5 != 0 || sz\u00e1m &lt; 0) \/\/ \u00f6\u00f6\u00f6, ez mit csin\u00e1l?\r\n<\/pre>\n<p>Egyszer\u0171s\u00edts\u00fck!<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nsz\u00e1m % 5 == 0 &amp;&amp; sz\u00e1m &gt;= 0 \/\/ 5-tel oszthat\u00f3 nem negat\u00edv sz\u00e1m\r\n<\/pre>\n<h4>K\u00f6vetkez\u0151 lecke: <a href=\"http:\/\/www.webotlet.hu\/?p=1783\">Blokkok<\/a><\/h4>\n","protected":false},"excerpt":{"rendered":"<p>Logikai m\u0171veletek, logikai kifejez\u00e9sek, avagy a felt\u00e9telvizsg\u00e1latok alapjai Logikai kifejez\u00e9snek nevezz\u00fck azt, amelynek az eredm\u00e9nye igaz vagy hamis (true &#8211; false) lehet. Ezek val\u00f3j\u00e1ban eld\u00f6ntend\u0151 k\u00e9rd\u00e9sek: a sz\u00e1m p\u00e1ros? a sz\u00e1m oszthat\u00f3 3-mal? a sz\u00e1m kisebb, mint 100? A logikai <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=1768\">Tov\u00e1bb <span class=\"screen-reader-text\">  C++ programoz\u00e1s 7. &#8211; Logikai m\u0171veletek, logikai kifejez\u00e9sek<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[151],"tags":[158,159,174,17,79,175,143,78],"class_list":["post-1768","post","type-post","status-publish","format-standard","hentry","category-cplusplus-alap-leckek","tag-c","tag-c-programozas","tag-logikai-es","tag-logikai-kifejezes","tag-logikai-rovidzar","tag-logikai-vagy","tag-programozas","tag-rovidzar"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1768","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1768"}],"version-history":[{"count":9,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1768\/revisions"}],"predecessor-version":[{"id":2031,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/1768\/revisions\/2031"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1768"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1768"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}