Algoritmi legati de utilizarea instructiunilor If-Then-Else si Switch

 

 

REMINDER

MULŢIMI BOOLEENE (CLASICE) ŞI LOGICĂ BOOLEANĂ (CLASICĂ)

Legătura între Logica propoziţiilor şi Teoria mulţimilor

 

O (SUB)MULTIME

 

DOUA SUBMULTIMI

 

REUNIUNEA A DOUA SUBMULTIMI (SAU)

 

INTERSECTIA A DOUA SUBMULTIMI (SI)

 

SAU EXCLUSIV

 

DIFERENTA A DOUA MULTIMI

 

COMPLEMENTARA

 

FORMULELE LUI De Morgan

 

1. ÎN LOGICA PROPOZIŢIILOR

 

A SAU B se notează A ∨ B

A ŞI B se notează A ∧ B

NOT A se notează ̚ A

 

FORMULELE LUI De Morgan

̚ (A B) ̚ A ̚ B

̚ (A ∧ B) ⇔ ̚ A.  ̚ B

 

2. ÎN TEORIA SEMNALELOR ŞI CIRCUITE LOGICE

 

 

 

FORMULELE LUI De Morgan

 

TABELE DE ADEVĂR

 

SAU (REUNIUNE, OR, +, …)

in C/C++ se noteaza cu ||

CONDITE COMPUSA CU "SAU": CONDITIE 1 || CONDITIE 2

 

ŞI (INTERSECŢIE, AND, *, …)

in C/C++ se noteaza cu &&

CONDITE COMPUSA CU "SI": CONDITIE 1 && CONDITIE 2

 

NU (COMPLEMENTARĂ, NOT, …)

in C/C++ "NOT" CONDITIE se notaza cu !CONDITIE

 

SAU EXCLUSIV


Simbolul romb

Simbolul romb este utilizat pentru decizii. Se testează îndeplinirea condiţiei din blocul de decizie. Dacă această condiţie este îndeplinită, se execută ACŢIUNE T. Dacă nu, se execută ACŢIUNE F. La un moment dat, se execută sau ACŢIUNE T, sau ACŢIUNE F.

Instrucţiunile condiţionale

determină programele să testeze diferite condiţii şi, în funcţie de acestea, să decidă execuţia anumitor comenzi

Avem la dispoziţie instrucţiunile condiţionale:

A. Instructiunea "if"

 

"if( )" (dacă) este cea mai simplă instrucţiune condiţională.
Forma generală a acestei instrucţiuni este:

if (condiţie) {
    // Codul care va fi executat dacă este adevarată condiţia
}



Dacă rezultatul evaluării condiţiei este TRUE, se execută codul dintre acolade, în caz contrar, când condiţia returnează FALSE, se trece peste acest cod.

B. Instrucţiunea "if ... else"

 

 

Folosind instrucţiunea "if() ... else" (dacă ... altfel), putem stabili comenzi care să fie executate şi când condiţia instrucţiunii "if( )" este FALSE.
Forma generala a instructiuni "if() ... else" este:

if (condiţie) {
    // codul care va fi executat dacă este Adevarată condiţia
}
else {

    // codul ce va fi executat daca condiţia este falsă
}

unde 'condiţie' poate fi orice expresie logică.

               Dacă rezultatul condiţiei este TRUE, se execută codul dintre primele acolade, care aparţin de "if()", în caz contrar, când condiţia returnează FALSE, sunt executate comenzile din acoladele de la "else".
     

Forma "else if( )"

 

 

Cu "if() ... else" sunt posibile execuţiile a doar două opţiuni, cea de la "if( )" sau de la "else". Dar sunt situaţii în care avem mai multe opţiuni, caz în care se foloseşte formula "else if( )" (altfel dacă).
Cu aceasta se pot crea şi alte opţiuni (suplimentare) între cele două
Sintaxa generală este:

if (condiţie 1) {
    // codul care va fi executat dacă este Adevarată condiţia 1
}
else if (condiţie 2) {
    // codul ce va fi executat daca prima condiţie este Falsă şi este Adevarată condiţia 2
}
else if (condiţie 3) {
    // codul care va fi executat daca primele două condiţii sunt False şi este Adevarată condiţia 3
}
// ...
else {
    // codul executat dacă toate condiţiile sunt False
}

 

B. Instrucţiunea switch

 

 

Această instrucţiune e folosită pentru a compara o valoare cu altele dintr-o listă şi, în funcţie de acea valoare, se execută codul asociat ei în lista "switch".

Sintaxa generala a instructiuni "switch" este:

switch (expresie) {
case valoare1:
    cod executat dacă expresie = valoare1
    break;

case valoare2:
    cod executat dacă expresie = valoare2
    break;
case valoare3:
    cod executat pt. expresie = valoare3
    break;
default :
    cod executat dacă expresie e diferit de valoare1, valoare2 sau valoare3
}

Prima dată este evaluată expresia scrisă între paranteze rotunde, la "switch( )", apoi valoarea expresiei este comparată pe rând cu fiecare valoare determinată de "case".
Dacă se găseşte o identitate, se execută codul asociat acelui "case", apoi se iese din instrucţiunea "switch".
Dacă, parcurgand fiecare "case", nu se găseşte o egalitate, se execută codul de la "default".
Prin folosirea lui "break" se opreşte parcurgerea corpului instrucţiunii atunci când s-a găsit o valoare egală cu 'expresie' şi se iese din "switch".

Instructiunea "switch" poate inlocui un şir de condiţii cu "else if".

C. Operatori logici şi instrucţiunile condiţionale

 

 

Operatorii logici sunt "&&" si "||".
Rolul lor este asemănător cu cel al operatorilor relaţionali şi de egalitate, în sensul că şi aceştia compară valoarea a doi operanzi.
Operatorii logici compară operatii, expresii de cod, iar rezultatul lor este unul din valorile TRUE (Adevărat) sau FALSE (Fals).

Datorita rezultatului True sau False pe care-l dau aceşti operatori logici, ei sunt folosiţi în instrucţiunile condiţionale, contribuind la efectuarea unor condiţii mai complexe în parantezele instructiunii "if()" si "else if()".

D. Operatorul condiţional "? :"

 

O alta metodă de a executa un cod în funcţie de faptul dacă o expresie este Adevarată sau Falsă e operatorul "? :"
Acest operator condiţional, deşi la prima vedere arată diferit de ceilalţi, este o formă prescurtată a instrucţiunii "if( ) else". Sintaxa generală de folosire a lui este:

Operatorul condiţional evaluează expresia condiţională. Dacă expresia are valoarea TRUE, operatorul condiţional returnează valoarea de la "daca-TRUE"; în caz contrar, returnează valoarea de la "daca-FALSE".
Pe lângă atribuirea unei valori în funcţie de rezultatul unei expresii, acest operator condiţional poate fi utilizat în aceeaşi forma şi la determinarea apelării unei anumite funcţii, după rezultatul unei expresii logice.

unde "dacăTrue( )" şi "dacăFalse( )" pot fi considerate doua funcţii.

Up Home Structura Site Algoritmi elementari

 

 


 

EXEMPLE DE ALGORITMI

 

 

 

 

 

A. Rezolvarea sistemului de două ecuaţii de gradul I

 

Varianta C

sist2ecGrI

rezSist2ecGr1

O variantă on-line poate fi experimentată la sist2ecgr1codingground

Up Home Structura Site Algoritmi elementari

 

Varianta C++

sistEcGr1cpp

rezSistGr1cpp

O variantă on-line poate fi experimentată la sist2EcGr2 sau la sist2EcGr1

 

 

Up Home Structura Site Algoritmi elementari

 

B. Rezolvarea ecuaţiei de gradul al II-lea

Avem de rezolvat ecuaţia:

ecuatia de rezolvat

Discriminantul este

discriminantul

1. Dacă ∆>0, ecuaţia are două soluţii reale DISTINCTE:

radacinile reale distincte

2. Dacă ∆=0, ecuaţia are o soluţie reală multiplă (dublă)

radacina reala dubla

3. Dacă ∆<0, ecuaţia are două soluţii COMPLEXE CONJUGATE

Un număr complex este de forma

un numar complex

unde x se numeşte PARTEA REALĂ,

iar y se numeşte PARTEA IMAGINARĂ

un numar complex

Dar

un numar complex

adică

forma complexă

unde

partea reala si imaginara

 

orgEgGr2a

 

orgEgGr2b

 

În care semnificaţia mesajelor este următoarea:

m1 : Aceasta nici macar nu e o ecuatie!

m2 : Imposibil!

m3 : Este, de fapt, o ecuatie de gradul I

m4 : Asta da! Este o ecuatie de gradul II

m5 : Radacini reale distincte

m6 : Radacini reale confundate

m7 : Radacini complexe

ecGra

ecGr2b

 

rezEcGr2a

 

rezEcGr2b

 

rezEcGr2c

 

rezEcGr2d

 

rezEcGr2e

 

rezEcGr2f

O variantă on-line poate fi experimentată la ecGr2codingG sau la ecGr2nou

 

Text

 

Up Home Structura Site Algoritmi elementari

 

 

C. Realizarea unui meniu de acţiuni

Dorim să realizăm “scheletul” unui meniu pentru lucrul ulterior cu listele înlănţuite. Nu are importanţă, pentru moment, ce sunt listele înlănlănţuite, veţi vedea mai târziu. Priviţi-le ca ca pe o listă din viaţa de zi cu zi. Executaţi programul şi vedeţi ce se întâmplă. Concentraţi-vă doar pe realizarea neniului. Programul va permite selectarea dintr-un meniu a unor acţiuni şi va afişa acţiunea viitoare, pe care programul o va efectua în momentul în care vor fi implementate funcţiile respective. În cadrul programului, prin selectarea unei opţiuni din listă, se va efectua doar tipărirea unui mesaj. Mai târziu, vom înlocui simpla afişare a unui mesaj prin efecuarea unei acţiuni concrete.
Meniul va oferi posibilitatea afişarea şi selectarea principalelor opţiuni pentru operaţiile cu liste:

  • crearea listei
  • listarea de la stânga la dreapta
  • listarea de la dreapta la stânga
  • inserarea unui nod în interiorul listei
  • inserarea unui nod pe ultima poziţie din listă
  • ştergerea unui nod din interiorul listei
  • ştergerea primului nod din listă
  • ştergerea ultimului nod din listă
  • salvarea listei
  • Text

    switch1

    switch2

     

    rezSwitch

    Un exemplu rezSwitchCodinG sau la switch

    Up Home Structura Site Algoritmi elementari

     

     

     

    PROBLEME PROPUSE

    Up Home Structura Site Algoritmi elementari