xn--doro-txb.euș.eu/fise/info xii/php.docx · web view. recurgerea la utilizarea ei trebuie să se...

21
4.16. Precedenţa şi ordinea de evaluare Tabelul de mai jos constituie un rezumat al regulilor de precedenţă şi asociativitate ale operatorilor. Operatorii din aceeaşi linie au aceiaşi ordine de precedenţă. Liniile sunt descrise în ordinea descrescătoare a precedenţei, astfel de exemplu operatorii *, / şi % au toţi aceiaşi precedenţă, care este mai mare decât aceea a operatorilor + şi -. Asociativita te Operatori Neasociativă clone new Stânga [ Neasociativă ++ -- Neasociativă ~ - (int) (float) (string) (array) (object) (bool) @ Neasociativă Instanceof Dreapta ! Stânga * / % Stânga + - . Stânga << >> Neasociativă < <= > >= <> Neasociativă == != === !== Stânga & Stânga ^ Stânga | 1

Upload: others

Post on 31-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

4.16. Precedenţa şi ordinea de evaluare

Tabelul de mai jos constituie un rezumat al regulilor de precedenţă şi asociativitate ale operatorilor.

Operatorii din aceeaşi linie au aceiaşi ordine de precedenţă. Liniile sunt descrise în ordinea descrescătoare a precedenţei, astfel de exemplu operatorii *, / şi % au toţi aceiaşi precedenţă, care este mai mare decât aceea a operatorilor + şi -.

Asociativitate OperatoriNeasociativă clone newStânga [Neasociativă ++ --

Neasociativă ~ - (int) (float) (string) (array) (object) (bool) @

Neasociativă InstanceofDreapta !Stânga * / %Stânga + - .Stânga << >>Neasociativă < <= > >= <>Neasociativă == != === !==Stânga &Stânga ^Stânga |Stânga &&Stânga ||Stânga ? :

Dreapta = += -= *= /= .= %= &= |= ^= < <= > >=

Stânga AndStânga Xor

1

Page 2: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

Asociativitate OperatoriStânga OrStânga ,

Asociativitatea din stanga specifică faptul că expresiile sunt evaluate de la stânga la dreapta, în vreme ce asociativitatea din dreapta specifica contrariul.

După cum s-a menţionat deja, expresiile care conţin unul dintre operatorii asociativi sau comutativi (*, +, &, ^, |) pot fi rearanjate de compilator chiar dacă conţin paranteze. În cele mai multe cazuri aceasta nu produce nici o diferenţă; în cazurile în care o asemenea diferenţă ar putea apărea, pot fi utilizate variabile temporare explicite, pentru a forţa ordinea de evaluare.

Cele mai multe limbaje, nu specifică în ce ordine sunt evaluaţi operanzii unui operator. De exemplu într-o instrucţiune de forma:

$x = f( ) + g( );f poate fi evaluată înainte sau după evaluarea

lui g; dacă f sau g alternează o variabilă externă de care cealaltă depinde, $x poate depinde de ordinea de evaluare. Din nou rezultatele intermediare trebuiesc memorate în variabile temporare pentru a asigura o secvenţă particulară.

2

Page 3: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

Capitolul 5. Instrucţiuni

5.3. Instrucţiunea condiţională

Sintaxa instrucţiunii condiţionale admite două formate:

if (expresie) instrucţiunea-1if (expresie) instrucţiunea-1 else instrucţiunea-2

Instrucţiunea condiţională se foloseşte pentru a lua decizii. În ambele cazuri se evaluează expresia şi dacă ea este "adevărată" (sau dacă e evaluată aritmetic ca fiind diferită de zero) se execută instrucţiunea-1. Dacă expresia este "falsă" (sau dacă e evaluată aritmetic cu valoarea zero) şi instrucţiunea "if" are şi parte de "else" atunci se execută instrucţiunea-2.

Una şi numai una dintre cele două instrucţiuni se execută.

Deoarece if testează pur și simplu valoarea numerică a unei expresii, se admite o prescurtare şi anume:

if(expresie)în loc de if(expresie !=0)

Instrucţiunea condiţională admite şi construcţia else if de forma:

if(expresia-1)instrucţiunea-1

else if(expresia-2)instrucţiunea-2

else if(expresia-3)instrucţiunea-3

else instrucţiunea-4

Această secvenţă de if se foloseşte frecvent în programe, ca mod de a exprima o decizie multiplă.

3

Page 4: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

Expresiile se evaluează în ordinea în care apar; dacă se întâlneşte o expresie adevărată, atunci se execută instrucţiunea asociată ei şi astfel se termină întregul lanţ.

Orice instrucţiune poate fi o instrucţiune simplă sau un grup de instrucţiuni.

Instrucţiunea de după ultimul "else" se execută atunci când nici o expresie nu este adevărată. Dacă în acest caz nu există nici o instrucţiune explicită de făcut, atunci partea

else instrucţiunea-4

poate să lipsească.Pot exista un număr arbitrar de construcţii:else if (expresie) instrucţiune

grupate între un "if" iniţial şi un "else" final. Întotdeauna un "else" se leagă cu ultimul "if"

întâlnit.Exemple simple în care se utilizează

instrucțiunea if, pot fi considerate aplicațiile de la seminar, în care se calculează soluția unei ecuații de grad I, în care se calculează soluțiile unei ecuații de grad II, funcția de însumare recursivă.

Exercițiu 5.3. Calculul soluțiilor unei ecuații de gradul al II -lea

Să se găsesească soluțiile ecuației de gardul al II-lea care are coeficienții: $a=1;$b=-10;$c=9.

Codul sursă este:<?php $a=1;$b=-10;$c=9; if($a==0)   if($b==0)       echo "Ec fara grad, imposibila";   else   {  $x=-$c/$b; 

4

Page 5: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

     echo "Avem ecuatie de grad 1. Solutia x=".$x;} else {     $delta=$b*$b-4*$a*$c;     if($delta<0)         echo "Ecuatia de grad 2 fara solutii reale";     else     {         $x1=(-$b+sqrt($delta))/2/$a;         $x2=(-$b-sqrt($delta))/2/$a;    echo "Solutiile ecuatiei sunt: x<sub>1</sub>=".$x1." ,     x<sub>2</sub> =" .$x2;     } } ?>

În urma execuției programului se va afișa: Solutiile ecuatiei sunt: x1=9, x2=1

5.4. Instrucţiunea while

Format:while (expresie) instrucţiune

Instrucţiunea se execută repetat atâta timp cât valoarea expresiei este adevărată (sau este diferită de zero). Testul are loc înaintea fiecărei execuţii a instrucţiunii. Prin urmare ciclul este următorul: se testează condiţia din paranteze, dacă ea este TRUE (sau este diferită de zero ) se execută corpul instrucţiunii. Când condiţia devine falsă, se face salt la instrucţiunea de după corpul instrucţiunii while, deci execuția instrucţiunii e terminată.

Instrucțiunea while este considerată a fi repetitivă cu condiție anterioară. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații care se repetă, dar, în anumite condiții

5

Page 6: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

deosebite, operațiile nu pot fi efectuate deloc. Așa se întâmplă când se dorește citirea articolelor dintr-o bază de date. Citirea se poate efectua atâta vreme cât nu este întâlnit marcatorul de sfârșit de fișier EOF1. Testul de EOF se face anterior citirilor, existând posibilitatea neefectăurii niciunei citiri, în cazul când baza de date e goală.

Exercițiu 5.4. Însumarea numerelor. Transmiterea argumentelor cu metoda GET

Să se însumeze numerele mai mici decât o valoare nr dată ca parametru în linia de adresare a browser-ului, recepționată cu metoda GET; <title>Functia de insumare a numerelor<br> mai mici decat o valoare receptionata cu GET</title>//pentru a functiona corect, programul trebuie lansat://    insumare.php?nr=__un_numar__; //    __un_numar__  fiind valoarea numerica pana la care se insumeaza numerele naturale<?php$valmax=$_GET['nr'];echo "<h2>INSUMAREA   PRIMELOR   ($valmax)   NUMERE</h2>" ;      $s = 0;      $i = 1;      WHILE($i<=$valmax)       {         $s = $s+$i;         $i = $i+1;       }echo 'SUMA   PRIMELOR   ' .$_GET['nr'].'   NUMERE   ESTE:   ' .$s;?>

După rulare, browser-ul afișază următorul 1 abreviere a sintagmei englezești: End Of File

6

Page 7: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

rezultat://pentru a functiona corect, programul trebuie lansat: // insumare.php?nr=__un_numar__; // __un_numar__ fiind valoarea numerica pana la care se insumeaza numerele naturale INSUMAREA PRIMELOR (10) NUMERE

SUMA PRIMELOR 10 NUMERE ESTE: 55

Exercițiu 5.5. Scriere text cu <Hn> variabil

<title>Scriere text cu <Hn> variabil</title><body>Niveluri de titluri în HTML <br><?php$i=10;while($i){echo "<h$i>Dimensiune   titlu   $i</h$i>" ;$i=$i-1;}?>

După procesare, browser-ul va afișa, fereastra din imaginea următoare.

7

Page 8: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

Se observă că titlurile sunt scrise cu fonturi de dimensiune descrescătoare odată cu creșterea nivelului titlului. Deasemenea, sunt posibile doar 6 niveluri de titluri cu marcatorul <hn>, acest fapt rezultând din modul de procesare al browser-ului, care după nivelurile 1-6 înscrie un retur de car, în vreme ce textul încadrat între marcatoarele <h7>, <h8>, ... este interpretat ca un text obișnuit, cu caracteristicile dimensionale normale și fără să fie urmat de retur de car.

5.5. Instrucţiunea do

Format:do instrucţiune while(expresie)

Instrucţiunea se execută repetat până când valoarea expresiei va deveni falsă (sau va deveni zero). Testul are loc după fiecare execuţie a instrucţiunii. Prin urmare ciclul este următorul: se

8

Page 9: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

execută corpul instrucţiunii și se testează condiţia din paranteze, dacă ea este TRUE (sau este diferită de zero ). Când condiţia devine falsă, se face salt la instrucţiunea de după corpul instrucţiunii do, deci instrucţiunea termină.

Instrucțiunea do este considerată a fi repetitivă cu condiție posterioară. Este recomandabil să se recurgă la utilizarea ei, atunci când se implementează algoritmi care conțin operații repetitive și este strict necesară executarea cel putin a unui ciclu de operații. Însă, în majoritatea cazurilor, implementarea algoritmilor diferă foarte puțin dacă se recurge la o instrucțiune sau alta. când se dorește citirea articolelor dintr-o bază de date. Citirea se poate efectua atâta vreme cât nu este întâlnit marcatorul de sfârșit de fișier EOF2. Testul de EOF se face anterior citirilor, existând posibilitatea neefectăurii niciunei citiri, în cazul când baza de date e goală.

Exercițiu 5.7. Transformarea din baza 10 într-o altă bază

<?php $zz=$z=999; $b=2; $a=""; do {   $rest=$zz%$b;   // echo $rest;   $a=$rest.$a;   $zz  =(int)($zz/$b);   // echo $zz; }while($zz!=0); echo "$z   în   baza   $b   este   $a" ; ?>

2 abreviere a sintagmei englezești: End Of File

9

Page 10: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

După rulare, browser-ul afișază următorul rezultat:999 în baza 2 este 1111100111

5.6. Instrucţiunea for

Format:for(expresie-1<opt>;expresie-2<opt>;expresie-3<opt>)

instrucţiune

Această instrucţiune este echivalentă aproximativ cu:

expresie-1;while(expresie-2){ instrucţiune expresie-3;}expresie-1 constituie iniţializarea ciclului şi se

execută o singură dată înaintea ciclului. expresie-2 specifică testul care controlează ciclul. El se execută înaintea fiecărei iteraţii. Dacă condiţia din test este adevărată atunci se execută corpul ciclului, după care se execută expresie-3, care se reiniţializează ciclul. Se revine apoi la reevaluarea condiţiei (expresie-2). Testul se termină când această condiţie devine falsă (primeşte valoarea zero fie logic, fie aritmetic ).

Oricare dintre expresiile instrucţiunii for, sau chiar toate deodată pot lipsi.

Dacă lispseşte expresie-2, aceasta implică faptul că clauza while este echivalentă cu while(1). Alte omisiuni de expresii sunt pur şi simplu eliminate din expandarea de mai sus.

10

Page 11: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

Instrucţiunile while şi for permit un lucru demn de observat şi anume, ele execută testul de control la începutul ciclului înaintea intrării în corpul instrucţiunii.

Dacă nu este nimic de făcut nu se face nimic, cu riscul de a nu intra niciodată în corpul instrucţiunii.

Exercițiu 5.8. Scriere text cu <Hn> variabil

<title>Scriere text cu <Hn> variabil</title><?phpfor($i=1;$i<=7;$i=$i+1)echo '<h'.$i.'>Dimensiune   titlu' .$i.'</h'.$i.'>';?>

După procesare, browser-ul va afișa:

Exercițiu 5.9. Program de ordonare a unui masiv

<title>PROGRAM DE ORDONARE A UNUI MASIV</title> <H2>ACEST PROGRAM ORDONEAZA UN MASIV</H2> $v=array(1,2,-5,2,10,7,8,-4,0); echo "initial"; print_r($v);

11

Page 12: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

$steag="are interschimbari"; for($r=1;$r<=count($v) && $steag=="are interschimbari";$r++) {     $steag="fara interschimbari";     for($e=0;$e<count($v)-$r;++$e)        if($v[$e]>$v[$e+1])        {           $temp=$v[$e];           $v[$e]=$v[$e+1];           $v[$e+1]=$temp;           $steag="are interschimbari";         }            echo "<br>";         print_r($v); }

După procesare, browser-ul va afișa:

ACEST PROGRAM ORDONEAZA UN MASIVinitialArray([0] => 1 [1] => 2 [2] => -5 [3] => 2 [4] => 10 [5] => 7 [6] => 8 [7] => -4 [8] => 0)Array ( [0] => 1 [1] => -5 [2] => 2 [3] => 2 [4] => 7 [5] => 8 [6] => -4 [7] => 0 [8] => 10 )Array ( [0] => -5 [1] => 1 [2] => 2 [3] => 2 [4] => 7 [5] => -4 [6] => 0 [7] => 8 [8] => 10 )Array ( [0] => -5 [1] => 1 [2] => 2 [3] => 2 [4] => -4 [5] => 0 [6] => 7 [7] => 8 [8] => 10 )Array ( [0] => -5 [1] => 1 [2] => 2 [3] => -4 [4] => 0 [5] => 2 [6] => 7 [7] => 8 [8] => 10 )Array ( [0] => -5 [1] => 1 [2] => -4 [3] => 0 [4] => 2 [5] => 2 [6] => 7 [7] => 8 [8] => 10 )Array ( [0] => -5 [1] => -4 [2] => 0 [3] => 1 [4] => 2 [5] => 2 [6] => 7 [7] => 8 [8] => 10 )Array ( [0] => -5 [1] => -4 [2] => 0 [3] => 1 [4] => 2 [5] => 2 [6] => 7 [7] => 8 [8] => 10 )

Exercițiu 5.10. Program de scriere a tablei înmulțirii

<title>Tabla inmultirii</title>

12

Page 13: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

<?phpecho "<table   border=1>" ;$mm=1;while($m<10){   echo"<tr>";   for ($m=$mm;$m<$mm+3;$m++)   {     echo "<td>";     for($a=1;$a<10;$a++)     {    echo $a."x".$m."=".$a*$m."<BR>";     }     echo"</td>";   }    echo"</tr>";    $mm+=3;}?>

După procesare, browser-ul va afișa:

13

Page 14: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

1x1=12x1=23x1=34x1=45x1=56x1=67x1=78x1=89x1=9

1x2=22x2=43x2=64x2=85x2=106x2=127x2=148x2=169x2=18

1x4=42x4=83x4=124x4=165x4=206x4=247x4=288x4=329x4=36

1x5=52x5=103x5=154x5=205x5=256x5=307x5=358x5=409x5=45

1x7=72x7=143x7=214x7=285x7=35

1x8=82x8=163x8=244x8=325x8=40

5.8. Instrucţiunea break

Format: break;

Această instrucţiune determină terminarea celei mai interioare instrucţiuni while, do, for sau switch care o conţine. Controlul trece la instrucţiunea care

14

Page 15: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

urmează după instrucţiunea astfel terminată.

5.9. Instrucţiunea continue

Format: continue;

Această instrucţiune determină trecerea controlului la porţiunea de continuare a ciclului celei mai mici instrucţiuni while, do sau for care o conţin, adică la sfârşitul ciclului şi reluarea următoarei iteraţii a ciclului. În while şi do se continuă cu testul, iar în for se continuă cu reiniţializarea.

Mai precis, în interiorul oricărei dintre instrucţiunile de mai jos:

while(...) do for(...){ { {... ... ...continue; continue; continue;... ... ...et_contin: et_contin: et_contin:} }while(...) }

efectul execuției instrucțiunii continue, este similar saltului către o ipotetică etichetă (et_contin:) aflată pe ultima poziție între instrucțiunile unui corp de instrucțiuni.

Porţiunea din program din exemplul următor prelucrează numai elementele pozitive ale unui masiv, afișându-le într-un tabel.

Exercițiu 5.13. Instrucțiunea continue

$a=array(-2,2,5,6,-1,9); echo '<table border=1><tr>'; for($i=0;isset($a[$i]);$i++)     {

15

Page 16: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

      if($a[$i]<0)            continue;       echo "<td>$a[$i]</td>";     }     echo '</tr></table>';

Rularea lui are drept consecință obținerea rezultatului:

5.10. Instrucţiunea return

O funcţie returnează și, eventual, valori apelantului său, prin intermediul unei instrucţiuni return.

Formate: return; return expresie;

În primul caz valoarea returnată nu este definită. În al doilea caz valoarea expresie este returnată apelantului funcţiei. Dacă se cere, expresie este convertită, ca într-o atribuire, la tipul funcţiei în care ea apare.

5.11. Instrucţiunea nulă

Format: ;

Instrucţiunea nulă este utilă pentru a introduce o etichetă înaintea unei acolade din partea dreptă a unui bloc, într-o instrucţiune compusă, sau pentru a introduce un corp nul într-o instrucţiune care cere corp

16

Page 17: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

al instrucţiunii, ca de exemplu while, do, for sau chiar if.

Exercițiu 5.14. Instrucțiunea nulă

for($i=0;isset($a[$i]);$i++)  ;

Această instrucţiune numără caracterele unui șir. Corpul instrucțiunii for este vid, deoarece tot lucrul se face în prtea de test şi reiniţializare, dar sintaxa instrucțiunii for cere un corp al instrucţiunii. Instrucţiunea nulă satisface acest lucru.

17

Page 18: xn--doro-txb.euș.eu/fise/Info XII/PHP.docx · Web view. Recurgerea la utilizarea ei trebuie să se facă atunci când se implementează algoritmi care în mod normal conțin operații

18