Sunteți pe pagina 1din 13

Posibilitatea predrii limbajului PHP la clasa a XII-apremise care faciliteaz introducerea sa n cadrul noilor programe colare.

TIMEA KABAI Colegiul Naional Ioan Slavici, Satu Mare Email: kabaitimea@yahoo.com

Timea KABAI, absolvent a colii Normale Ioan Slavici, Satu Mare (1996), a Universitii Babe-Bolyai, Cluj Napoca, specializarea matematic (2000), specializarea informatic (2002), studii masterat, specializarea matematic computaional (2005). n prezent, profesor grad I didactic, titular, n cadrul Colegiului Naional Ioan Slavici Satu Mare pe specializarea informatic, examinator ECDL, instructor CISCO (ITEssentials, C#, Photoshop, Java). Domenii de interes: programare orientat obiect, programare Web (WebDesign), comunicarea educaional n medii electronice.

INTRODUCERE n zilele noastre, prin cuvntul "informatic" (termen care n Frana a fost consacrat oficial abia n 1967, reprezentnd din punct de vedere etimologic o contracie ntre "informaie" i "automatic") desemnm una dintre cele mai recent aprute tiine. Este vorba, mai precis, de domeniile tiinific, tehnologic i industrial, raportate la tratarea automat a informaiei de ctre maini precum calculatoare, console, terminale, roboi. Paradoxal, dac stm s ne gndim la toate ngrdirile epocii comuniste, n 1971, deci la doar 5 ani de la intrarea oficial a cuvntului "informatic" n vocabularul europenilor, Consiliul de Minitri al Romniei de la acea vreme decide nfiinarea liceelor cu profil informatic. Tot atunci sunt puse, deci, i bazele studiului informaticii n cadrul nvmntului preuniversitar romnesc. Dac la nceput informatica a fost considerat ca fiind nscut din matematic, de la apariia sa i pn n prezent lucrurile au evoluat ntr-un ritm inimaginabil de alert, n zilele noastre sunt cunoscute mai multe sub-ramuri ale sale. Ceea ce ne intereseaz n mod special, din punct de vedere al analizei de fa, este informatica sub aspectul studiului algoritmilor, a implementrilor acestora n limbaje de programare i a transpunerii n practic, prin programarea lor pe un calculator. Din acest punct de vedere, studiul informaticii n liceu are n prezent urmtoarea structur: - n clasa a IX-a se studiaz algoritmii elementari i implementarea lor ntr-un limbaj de programare; - n clasa a X-a se insist n special pe noiuni mai strns legate de limbajul de programare (iruri de caractere, structuri ce pot ngloba mai multe date (de tip nregistrare), subprograme); - n clasa a XI-a se introduc cteva dintre metodele principale de programare (Backtracking, Divide et Impera, Alocare Dinamic i Structuri de Date, Teoria Grafurilor) Pn n anul colar 2006-2007 (inclusiv), n programa colar a clasei a XII-a era prevzut studiul bazelor de date, limbajul folosit fiind n special FoxPro. Acest limbaj a cunoscut o popularitate larg ntre anii 1990-2000, ns, o dat cu evoluia tehnicii de calcul i apariia altor instrumente, a nceput s se deprecieze. Dei Microsoft a continuat (i continu) s l menin, elabornd i versiuni Visual ale sale, n prezent nu mai este aa de folosit. Un alt inconvenient al su este acela c permite manipularea bazelor de date i ntr-un mod mai puin convenional, folosind propriul limbaj, deci fr respectarea standardelor SQL. Pe de alt parte, ncepnd cu 1995, reeaua Internet a cunoscut o dezvoltare exploziv, de unde a aprut i necesitatea dezvoltrii unor unelte de programare corespuztoare. Toate acestea au condus la impunerea unei schimbri, devenit efectiv din anul colar 2007-2008, cnd structura programei colare destinat claselor a XII-a a fost modificat, ngduind, din punctul de vedere al profesorului, o abordare mult mai permisiv, deoarece poate alege dintre modulele pe care le va preda. Unul dintre modulele ce pot fi alese i n sprijinul cruia vine lucrarea de fa, este cel denumit "Programare WEB". Dup experiena anului colar 2007-2008 de predare a acestui limbaj conform noilor programe i dup experiena anului colar 2006-2007, cnd am propus studiul unui curs opional de PHP, pe care elevii i l-au ales, voi face cteva observaii i voi ncerca s trag cteva concluzii. n primul rnd, studiul limbajului HTML n vreunul dintre anii colari precedeni poate fi de mare ajutor. n acest caz, n cadrul materiei capitolului al II-lea profesorul se poate ocupa mai amnunit de automatizarea paginilor web cu ajutorul script-urilor Java. De asemenea, datorit similitudinii foarte mari dintre C++ i PHP (i de asemenea i JavaScript), elevii care au studiat limbajul C++ au un avantaj foarte mare fa de cei care au studiat Pascal. 1

Un atu extraordinar al limbajului PHP const n acela c interfaa (att cea de intrare ct i cea de ieire) poate fi foarte mult mbuntit fa de cea a limbajului studiat n clasele IXXI prin introducerea de elemente grafice i de culoare. Un alt element foarte atractiv al su const n funciile de programare grafic. Din pcate, acest capitol foarte spectaculos al informaticii nu este inclus nicieri n mod explicit, n nici una dintre programele colare, ci este trecut sub tcere. Personal, consider c includerea sa n cadrul programei obligatorie ar fi binevenit, nc din primul an de liceu, deoarece ar reprezenta n primul rnd un factor de atractivitate, iar n al doilea rnd ar familiariza elevii cu lucrul efectiv n coordonate carteziene, cu reprezentri grafice i cu proprieti ale acestora. Aadar, PHP are toate ansele de a fi un limbaj uor de nvat de ctre elevi. n mare parte, nsuirea sa se petrece ntr-o mare msur. Este necesar ca elevii s lucreze ct mai mult din punct de vedere practic, deci s implementeze pe calculator ct mai multe exemple, s testeze ct mai multe funcii i situaii. APLICAII PRACTICE I METODOLOGICE Reluarea, dintr-o alt perspectiv, a algoritmilor reprezentativi studiai la disciplina informatic n clasele a IX-a, a X-a i a XI-a n cele ce urmeaz, voi prezenta nu doar cteva exerciii i probleme rezolvate ci i cteva enunuri de probleme propuse spre rezolvare, care trateaz principalele teme studiate la disciplina informatic, din clasa a IX-a pn n clasa a XI-a. n cazul problemelor rezolvate, sunt prezentate enunul i codul surs (cu comentarii, acolo unde este cazul) al rezolvrii. Principalele nouti sunt aduse de interfa, care, prin intermediul limbajului PHP i deci, implicit, prin funcionalitatea adus de o pagin web, poate deveni mult mai atractiv, n special prin utilizarea culorilor i elementelor grafice. Astfel, o serie de aplicaii pot genera afiri mult mai sugestive ale datelor de ieire. I. Algoritmi care nu opereaz cu iruri (cifrele unui numr, numere prime, factori primi, cmmdc, irul lui Fibonacci)

Problem rezolvat:
Se cite te, prin intermediul unui cmp de tip text al unui formular, o valoare natural avnd cel mult 9 cifre. Scrie i un program PHP care s preia valoarea respectiv din formular i s o valideze, afi nd apoi cifrele sale ntr-un tabel cu o singur linie, n aceea i ordine n care apar ele n num r, colornd cu fundal verde cifrele de valoare minim , cu fundal ro u cifrele de valoare maxim i cu fundal galben restul cifrelor. Dac num rul are toate cifrele egale, se va colora fundalul tuturor cifrelor cu culoarea ro ie.

Rezolvare: aplicatia01.html:

<html><body> <form action="aplicatia01.php" method="post"> <table border="1" cellspacing="0" cellpadding="10"> <tr><td>Introduceti un numar natural cu cel mult 9 cifre: <td> <input type="text" maxlength="9" size="9" name="nr"> <tr><td colspan="2" align="center"> <input type="submit" value="Trimite date"> </table> </form> </body></html>

aplicatia01.php:
<?php $nr=$_POST['nr']; if(!$nr)//daca este egal cu NULL, atunci nseamn c nu s-a introdus nimic echo "Ai uitat sa introduci vreo valoare"; else//functia is_numeric verific dac valoarea dintr-un string este numeric if(!is_numeric($nr)) echo "Valoarea introdusa nu este numerica!"; else//daca este numeric, verificm s nu fie real: if($nr!=(int)$nr) echo "Valoarea introdusa nu este intreaga!"; else//dac este ntreag, verificm s fie pozitiv i s aib cel mult 9 cifre if($nr<0||$nr>999999999) echo "Valoarea introdusa trebuie sa fie pozitiva si sa aiba cel mult 9 cifre"; else {//mprim numrul n cifrele sale, determinnd minimul i maximul i determinnd totodat i puterea //lui 10 care corespunde numrului total de cifre ale numrului. Avem nevoie de aceasta //pentru a afia cifrele numrului n aceeai ordine ca i n numr $p=1; $n=(int)$nr; $min=10;$max=-1; do{ $p*=10; if($n%10<$min) $min=$n%10; if($n%10>$max) $max=$n%10; $n=(int)($n/10); }while($n); echo '<table border="1" cellspacing="0" cellpadding="10"><tr>'; $n=(int)$nr; do{ $p/=10; $cif=(int)($n/$p)%10; if($cif==$max) echo '<td bgcolor="red">',$cif; else if($cif==$min) echo '<td bgcolor="lime">',$cif; else echo '<td bgcolor="yellow">',$cif; }while($p!=1); } ?>

Probleme propuse
01*0 Se cite te, prin intermediul unui cmp de tip text al unui formular, un num r natural avnd cel
mult 9 cifre. Scrie i un program PHP care s preia valoarea respectiv din formular i s afi eze primele 10 numere prime mai mari sau egale cu num rul introdus. Numerele determinate se vor afi a ntr-un tabel cu o singur coloan , alternnd culorile de fundal ale celulelor cu albastru deschis respectiv portocaliu.

01*1 Se citete, prin intermediul unui cmp de tip text al unui formular, o valoare natural avnd cel mult 9 cifre. Scriei un program PHP care s preia valoarea respectiv din formular i s o valideze, afind apoi cifrele sale ntr-un tabel cu o singur linie, n aceeai ordine n care apar ele n numr, colornd cu fundal verde cifrele pare i cu fundal rou cifrele impare. Afiai apoi, sub acest tabel, care este suma cifrelor pare, respectiv care este suma cifrelor impare. 01*2 Se citete, prin intermediul unui cmp de tip text al unui formular, o valoare natural avnd cel mult 9 cifre. Scriei un program PHP care s preia valoarea respectiv din formular i s o valideze, afind apoi cifrele sale ntr-un tabel cu o singur linie, n aceeai ordine n care apar ele n numr,

colornd cu fundal verde cifrele aflate pe poziii pare respectiv cu fundal rou cifrele aflate pe poziii impare. Poziiile se consider astfel: cifra unitilor are poziia 0, cifra zecilor poziia 1, cifra sutelor poziia 2, etc. Afiai apoi sub tabel suma cifrelor aflate pe poziiile pare, respectiv suma cifrelor aflate pe poziiile impare, apoi, sub ele, modulul diferenei dintre cele dou sume. Pe baza valorii obinute afiai un mesaj corespunztor faptului c numrul introdus este sau nu divizibil cu 11 (dac valoarea obinut este divizibil cu 11, atunci tot numrul este divizibil cu 11). 01*3 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural avnd cel mult 9 cifre. Scriei un program PHP care s preia valoarea respectiv din formular i s afieze toate valorile de cel puin dou cifre, mai mici sau egale cu numrul natural introdus, care au proprietatea c sunt n acelai timp i numere prime i palindroame. Valorile se vor afia ntr-un tabel cu o singur coloan, alternnd culorile de fundal ale celulelor cu galben, respectiv mov pal. 01*4 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural avnd cel mult 9 cifre. Scriei un program PHP care preia valoarea respectiv din formular i afieaz descompunerea numrului n factori primi. Afiarea se va face prezentabil, folosind tag-urile <sup> i </sup> pentru scrierea exponenilor diferii de 1 ai factorilor care apar n descompunere. De exemplu, dac se citete numrul 300, se va afia descompunerea n forma: 22 * 3 * 52. 01*5 Se citesc, prin intermediul a dou cmpuri de tip text ale unui formular, dou numere naturale nenule avnd cel mult 9 cifre. Scriei un program PHP care afieaz numerele introduse i totodat calculeaz i afieaz att cmmdc-ul ct i cmmmc-ul lor. 01*6 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural n cuprins ntre 3 i 40. S se scrie un program PHP care afieaz ntr-un tabel termenii irului lui Fibonacci ncepnd de la cel de indice 2 la cel de indice n, pentru fiecare termen afind totodat i raportul dintre acest termen i cel de dinainte sa, sub forma unui numr real, cu zecimale. 01*7 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural n avnd cel mult 9 cifre. S se scrie un program PHP care determin descompunerea numrului n n sum de termeni ai irului lui Fibonacci. Rezultatul se va afia prezentabil sub forma urmtoare: Exemplu: dac se citete numrul n = 2891 vom avea descompunerea: 2891 = 1 + 5 + 13 + 21 + 34 + 89 + 144 +377 + 610 + 1597

II. Algoritmi care opereaz cu iruri sau matrice (sortri, tergeri, inserri) Problem rezolvat:
Se cite te, prin intermediul unui cmp de tip text al unui formular, un num r natural nenul n, mai mic sau egal cu 40. Pe baza lui n ve i genera un alt formular, n care ve i citi un ir cu n elemente numere naturale (fiecare element al irului va fi citit ntr-un textbox). Scrie i un program PHP care preia valorile irului, le sorteaz cresc tor i le afi eaz ntr-un tabel cu o singur linie, colornd cu galben elementele impare, respectiv cu fundal ro u elementele pare.

Rezolvare: aplicatia03.html :
<html><body><form action="aplicatia03.php" method="post"> <table border="1" cellspacing="0" cellpadding="10"> <tr><td>Introduceti numarul de elemente din sir (cel mult 40) <td><input type="text" name="n"> <tr><td align="center" colspan="2"> <input type="submit" value="Citeste elementele"> </table></form></body></html>

aplicatia03.php :
<html><body> <?php $n=$_POST['n']; echo '<h3>Introduceti cele ',$n,' valori naturale ale sirului:',"\n";

echo '<form action="sortare.php" method="post">',"\n"; echo '<table border="1" cellspacing="0" cellpadding="10">',"\n"; for($i=1;$i<=$n;$i++) echo '<tr bgcolor="orange"><td>Elem. nr. ',$i,': ', '<td><input type="text" name="a[',$i,']">',"\n"; //pentru fiecare indice generm un text care se va //numi a[1], a[2], .... echo '<tr><td colspan="2" align="center">',"\n"; echo '<input type="submit" value="Sorteaza sirul">',"\n"; echo '<input type="hidden" name="n" value="',$n,'">',"\n"; //valoarea lui $n o trimitem mai departe (pentru c avem //nevoie de ea la prelucrarea datelor irului) prin intermediul //unui control de tipul "hidden" echo '</table></form>'; ?> </body></html>

sortare.php :
<html><body> <?php $n=$_POST['n']; $a=$_POST['a'];//obinem //in variabila $a tot irul trimis din cadrul form-ului //prin intermediul atributelor name=a[1], name=a[2],... //mai nti sortm elementele irului, cresctor: for($i=1;$i<=$n-1;$i++) for($j=$i+1;$j<=$n;$j++) if($a[$i]>$a[$j]) { $aux=$a[$i];$a[$i]=$a[$j];$a[$j]=$aux; } echo '<h3>Iata elementele sirului sortat:</h3>'; echo '<table border="1" cellspacing="0" cellpadding="10">'; echo '<tr>'; for($i=1;$i<=$n;$i++) if($a[$i]%2==0) echo '<td bgcolor="#80ff80">',$a[$i]; else echo '<td bgcolor="yellow">',$a[$i]; ?> </table></body></html>

Probleme propuse:
04*1 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural nenul, n mai mic sau egal cu 30. Pe baza lui vei genera un alt formular, n care vei citi elementele unei matrice ptratice cu n linii i coloane, numere ntregi. Scriei un program PHP care preia valorile matricei, afind-o ntr-un tabel n care: - elementele de pe diagonala principal sunt colorate cu fundal galben; - elementele de pe diagonala secundar sunt colorate cu fundal bleu; - n cazul n care diagonalele se intersecteaz, elementul de la intersecia lor va fi colorat cu fundal verde. 04*2 Se citete, prin intermediul unui cmp de tip text al unui formular, un numr natural nenul, n mai mic sau egal cu 30. Pe baza lui vei genera un alt formular, n care vei citi elementele unei matrice ptratice cu n linii i coloane, numere ntregi. Scriei un program PHP care preia valorile matricei, afind-o ntr-un tabel n care coloreaz cu fundal galben elementele ptratului concentric care conine elementul minim al matricei. n cazul n care n matrice sunt mai multe minime, se va lua n considerare

primul pe care l ntlnim, n sensul n care parcurgem matricea pe linii, fiecare linie fiind parcurs de la stnga la dreapta.

III. Prelucrarea irurilor de caractere Problem rezolvat:


Se cite te, prin intermediul unui cmp de tip text al unui formular, o fraz ale c rei cuvinte pot fi separate prin spa ii, virgule, puncte. S se scrie un program PHP care s afi eze toate cuvintele care apar n string, n ordine alfabetic , convertite la litere mici, ntr-un tabel cu o singur coloan .

Rezolvare: aplicatia05.html :
<html><body> <form action="aplicatia05.php" method="post"> <table border="1" cellspacing="0" cellpadding="10"> <tr><td>Introduceti un text: <tr><td><input type="text" name="s" size="50"> <tr><td align="center"> <input type="submit" value="Prelucreaza fraza"> </table> </form></body></html>

aplicatia05.php :
<html><body> <?php $s=$_POST['s']; $n=0; //separm cuvintele din string cu strtok i le punem //n irul a: for($p=strtok($s,",. ");$p!==false;$p=strtok(",. ")) $a[++$n]=strtolower($p); //le sortm alfabetic for($i=1;$i<=$n-1;$i++) for($j=$i+1;$j<=$n;$j++) if($a[$i]>$a[$j]) {$aux=$a[$i];$a[$i]=$a[$j];$a[$j]=$aux;} echo '<h3>Iata cuvintele in ordine alfabetica:</h3>'; echo '<table border="1" cellpadding="10" cellspacing="0">'; for($i=1;$i<=$n;$i++) echo '<tr><td>',$a[$i]; ?> </table></body></html>

Probleme propuse:
05*01 Se citete, prin intermediul unui cmp text al unui formular, un ir de caractere ce conine mai multe cuvinte, separate prin virgule, spaii, puncte. S se scrie un program PHP care preia string-ul din acest formular i afieaz toate cuvintele sale ntr-un tabel cu o singur coloan, colornd cu fundal rou doar acele cuvinte care sunt palindromice. Daca nici un cuvnt nu este palindromic, se va afia un mesaj corespunztor. 05*02 Se citete, prin intermediul unui cmp de tip text al unui formular, o dat calendaristic de forma zz/ll/aaaa (z i l pot avea fie un caracter, iar anul este pozitiv). S se scrie un program PHP care determin cte zile au trecut de la nceputul acelui an pn la data respectiv. 05*03 Se citete, prin intermediul unui cmp de tip text al unui formular, o fraz format din cuvinte separate prin puncte, virgule, spaii. Determinai care este litera care apare de cele mai multe ori, precum i numrul su de apariii. Dac o mai multe litere apar de acelai numr maxim de ori, se vor afia toate aceste litere. Literele determinate le vei afia ntr-un tabel cu o singur coloan.

Probleme de Backtracking, Divide et Impera, Aplicaii ale geometriei analitice plane studiate n cadrul disciplinei matematic. Problem rezolvat:
Se cite te, prin intermediul unui cmp de tip text al unui formular, o valoare pozitiv nenul n mai mic sau egal cu 7. S se scrie un program PHP care genereaz toate permut rile de n, afi ndu-le ntr-un tabel. Fiecare linie a tabelului va con ine elementele unei permut ri.

IV.

aplicatia06.html :
<html> <body> <form action="aplicatia06.php" method="post"> <table border="1" cellpadding="10" cellspacing="0"> <tr> <td>Introduceti ordinul permutarilor: <td> <input type="text" name="n"> <tr> <td align="center" colspan="2"> <input type="submit" value="Genereaza permutarile"> </table> </form> </body> </html>

aplicatia06.php :
<html><body> <?php $n=$_POST['n']; function afis() {//n funcia de afiare, variabilele //$x (irul de generare i $n = //ordinul permutrilor, le lum globale global $n,$x; echo '<tr>'; //afim elementele permutrii //curente ntr-o linie nou a tabelului for($i=1;$i<=$n;$i++) echo '<td align="center">',$x[$i]; } function valid($k) {//n funcia de valid de asemenea $n si $x sunt globale global $n,$x; //verificm dac elementul curent este diferit de fiecare //dintre cele de dinaintea sa for($i=1;$i<=$k-1;$i++) if($x[$i]==$x[$k]) return 0; return 1; } function permutari($k) {

//de asemenea $n si $x sunt variabile globale global $n,$x; //implementm sub forma recursiv funcia de tip backtracking //ce ne genereaz permutrile for($x[$k]=1;$x[$k]<=$n;$x[$k]++) if(valid($k)) if($k==$n) afis(); else permutari($k+1); } echo '<table border="1" cellpadding="10" cellspacing="0">'; permutari(1); echo '</table>'; ?> </body></html>

Probleme propuse:
06*01 Se citesc, prin intermediul a dou cmpuri de tip text ale unui formular, dou valori pozitive nenule n i m, astfel nct m n. S se scrie un program PHP care genereaz toate combinrile de elemente ale mulimii {1, 2, .., n} luate cte m. Combinrile generate se vor afia ntr-un tabel. Fiecare linie a tabelului va conine elementele unei combinri.

Problem rezolvat:
Se cite te, prin intermediul unui cmp de tip text al unui formular, o valoare pozitiv nenul n mai mic sau egal cu 8 i mai mare sau egal cu 4. S se scrie un program PHP care genereaz toate posibilit ile de a aranja n regine pe o tabl de ah n x n astfel nct s nu se atace ntre ele. Fiecare solu ie se va afi a sub forma unui tabel cu n linii i n coloane, n care celulele sunt colorate alternativ, ca n cazul tablei de ah iar reginele sunt reprezentate printr-o imagine reprezentativ . Solu iile se vor numerota.

aplicatia07.html
<html><body> <form action="aplicatia07.php" method="post"> <table border="1" cellspacing="0" cellpadding="10"> <tr><td>Introduceti dimensiunea tablei de sah: <td><input type="text" name="n"> <tr><td colspan="2" align="center"> <input type="submit" value="Aseaza damele"> </table> </form></body></html>

aplicatia07.php :
<html><body> <?php $n=$_POST['n']; function afish() { global $x,$n,$nrsol; //irul de generare, $n i variabila n care numrm //soluiile sunt globale echo '<h3>Solutia numarul ',++$nrsol; echo '<table border="1" cellspacing="0" cellpadding="3">'; //afim un tabel cu $n linii i coloane for($i=1;$i<=$n;$i++) { echo '<tr>'; for($j=1;$j<=$n;$j++)

{ //n funcie de paritatea lui $i+$j stabilim culoarea //alternm culorile de fundal ale ptrelelor, ca pe //tabla de ah if(($i+$j)%2==0) echo '<td bgcolor="white">'; else echo '<td bgcolor="black">'; //iar dac la celula curent se afl o regin //atunci reprezentm acea regin prin imaginea dama.gif if($x[$i]==$j) echo '<img src="dama.bmp">'; //n caz c e goal, punem un spaiu n acea celul else echo '&nbsp;'; } } echo '</table>'; } function valid($k) { global $x; //n funcia de valid verificm faptul c dama //de la indicele $k s nu se atace cu vreuna de dinainte for($i=1;$i<=$k-1;$i++) if($x[$i]==$x[$k]||abs($x[$k]-$x[$i])==$k-$i) return 0; return 1; } function dame($k) { global $x,$n; //funcia dame implementeaz backtracking-ul recursiv for($x[$k]=1;$x[$k]<=$n;$x[$k]++) if(valid($k)) if($k==$n) afish(); else dame($k+1); } $nrsol=0; dame(1); ?> </body></html>

Problem rezolvat:
Se citesc, prin intermediul unor cmpuri de tip text ale unui formular, coordonatele a trei puncte ce reprezint vrfurile unui triunghi. Abscisele sunt cuprinse ntre 0 i 639 iar ordonatele ntre 0 i 479. S se creeze o imagine de tip PNG n care reprezenta i triunghiul, cele trei bisectoare ale sale i cercul nscris n triunghi.

Suportul matematic necesar rezolvrii:


Fie triunghiul de vrfuri A(xA,yA), B(xB,yB), C(xC,yC), n care notm cu la, lb, lc lungimile laturilor opuse vrfurilor A, B respectiv C. Fie A'(x'A,y'A) piciorul bisectoarei din A pe latura BC. Aplicnd teorema bisectoarei, avem O dat ce cunoatem valoarea raportului, dac proiectm membrul drept al egalitii pe axele OX respectiv OY, se pstreaz proporionalitatea, deci obinem urmtoarele relaii care ne permit calcularea lui x'A i y'A: , de unde deducem . Analog, . tiind coordonatele picioarelor bisectoarelor, putem foarte lesne obine centrul cercului nscris n triunghi prin intersecia a dou dintre ele.

aplicatia08.html
<html><body> <form action="aplicatia08.php" method="post"> <h3>Introduceti coordonatele celor 3 varfuri ale triunghiului:</h3> <table border="1" cellspacing="0" cellpadding="10"> <tr> <th align="center" rowspan="2" bgcolor="lightblue"> VARFUL<br>A <td>x<sub>A</sub>= <td><input type="text" name="xa" size="4"> <tr> <td>y<sub>A</sub>= <td><input type="text" name="ya" size="4"> <tr> <th align="center" rowspan="2" bgcolor="yellow"> VARFUL<br>B <td>x<sub>B</sub>= <td><input type="text" name="xb" size="4"> <tr> <td>y<sub>B</sub>= <td><input type="text" name="yb" size="4"><tr> <th align="center" rowspan="2" bgcolor="lime">VARFUL<br>C <td>x<sub>C</sub>= <td><input type="text" name="xc" size="4"> <tr> <td>y<sub>C</sub>= <td><input type="text" name="yc" size="4"> <tr><td colspan="3" align="center"> <input type="submit" value="Deseneaza triunghiul"> </table> </form> </body></html>

aplicatia08.php :
<?php header("Content-type: image/png"); $im=imagecreatetruecolor(640,480); $y=imagecolorallocate($im,255,255,110); imagefilledrectangle($im,0,0,639,479,$y); $xa=$_POST['xa'];$ya=$_POST['ya']; $xb=$_POST['xb'];$yb=$_POST['yb']; $xc=$_POST['xc'];$yc=$_POST['yc']; imagesetthickness($im,2); $b=imagecolorallocate($im,0,0,255); imageline($im,$xa,$ya,$xb,$yb,$b); imageline($im,$xa,$ya,$xc,$yc,$b); imageline($im,$xc,$yc,$xb,$yb,$b); $r=imagecolorallocate($im,255,0,0); $g=imagecolorallocate($im,0,188,0); //definim o funcie care s calculeze distana dintre dou puncte de coordonate date function dist($x1,$y1,$x2,$y2)

10

{ return sqrt(($x1-$x2)*($x1-$x2)+($y1-$y2)*($y1-$y2)); } //definim o funcie care s ne calculeze coordonatele picioarei unei bisectoare: function coordbis($xa,$ya,$xb,$yb,$xc,$yc,&$x1a,&$y1a) {//vom calcula coordonatele piciorului bisectoarei ce pleac din vrful A: $lb=dist($xa,$ya,$xc,$yc); $lc=dist($xa,$ya,$xb,$yb); $x1a=($xb*$lb+$xc*$lc)/($lb+$lc); $y1a=($yb*$lb+$yc*$lc)/($lb+$lc); } //definim o funcie care s determine ecuaia unei drepte care trece prin dou puncte de coordonate date: //funcia va da coeficienii ecuaiei ax + by + c = 0 care trece prin punctele ($x1,$y1) si ($x2,$y2) function ec2puncte($x1,$y1,$x2,$y2,&$a,&$b,&$c) { $a=$y1-$y2; $b=-$x1+$x2; $c=$x1*$y2-$y1*$x2; } //o funcie care, date fiind dou ecuaii de drepte de forma ax+by+c=0 determin punctul de intersecie function inters($a1,$b1,$c1,$a2,$b2,$c2,&$x,&$y) { $x=($b1*$c2-$b2*$c1)/($a1*$b2-$b1*$a2); $y=($a1*$c2-$a2*$c1)/($b1*$a2-$a1*$b2); } //calculm picioarele celor 3 nlimi i le desenm: coordbis($xa,$ya,$xb,$yb,$xc,$yc,$x1a,$y1a); coordbis($xb,$yb,$xa,$ya,$xc,$yc,$x1b,$y1b); coordbis($xc,$yc,$xb,$yb,$xa,$ya,$x1c,$y1c); imageline($im,$xa,$ya,$x1a,$y1a,$g); imageline($im,$xb,$yb,$x1b,$y1b,$g); imageline($im,$xc,$yc,$x1c,$y1c,$g); //calculm ecuaiile a dou nlimi, de forma ax + by = c ec2puncte($xa,$ya,$x1a,$y1a,$a1,$b1,$c1); ec2puncte($xb,$yb,$x1b,$y1b,$a2,$b2,$c2); //determinm originea centrului cercului nscris intersectndu-le: inters($a1,$b1,$c1,$a2,$b2,$c2,$xo,$yo); //determinm lungimea razei cercului, ca i nlime a triunghiului cu vrful n //centrul cercului nscris i baza una dintre laturi $s=0.5*abs($xa*$yb+$xb*$yo+$xo*$ya -$xo*$yb-$xa*$yo-$xb*$ya); $lc=dist($xa,$ya,$xb,$yb); $raza=2*$s/$lc;$diam=2*$raza; $mg=imagecolorallocate($im,255,0,140); imageellipse($im,$xo,$yo,$diam,$diam,$mg); //punem literele vrfurilor triunghiului imagestring($im,5,$xa,$ya,'A',$r); imagestring($im,5,$xb,$yb,'B',$r); imagestring($im,5,$xc,$yc,'C',$r); imagestring($im,5,$x1a,$y1a,'A1',$r); imagestring($im,5,$x1b,$y1b,'B1',$r); imagestring($im,5,$x1c,$y1c,'C1',$r); imagepng($im); imagedestroy($im); ?>

11

CONCLUZIE Softurile care integreaz cunotinele disciplinare transmise printr-o strategie pedagogic, concretizndu-se ntr-un demers interactiv elev - soft (program) trebuie s fie un demers care solicit din partea elevului o procesare mintal a informaiei, rezolvarea unor sarcini de lucru, i care, ar trebui s-l conduc spre construirea/ dezvoltarea cunoaterii intenionate descrise de obiectivele curriculare ale programelor colare. Este necesar ca elevii s lucreze ct mai mult din punct de vedere practic, deci s implementeze pe calculator ct mai multe exemple, s testeze ct mai multe funcii i situaii. De asemenea, este foarte indicat reluarea problemelor clasice colreti (de clasa a IXa, a X-a i a XI-a) cu mici precizri (acolo unde se poate, evident) care s ajute la nfrumusearea datelor de ieire (gen: numerele s fie afiate n tabele, anumite elemente s fie colorate, etc.). n concluzie, putem afirma c, avantajul cunoaterii limbajului PHP la terminarea liceului nu poate fi dect benefic, mergnd pn ntr-acolo nct poate chiar s constituie o meserie. BIBLIOGRAFIE 1. Ben Forta, SQL n lecii de 10 minute, Editura Teora, 2004 2. Traian Anghel, Programarea n PHP. Ghid practic, Iai, Editura Polirom, 2005; 3. Julie C. Meloni, nva singur PHP, MySQL i APACHE, Bucureti, Editura Corint, 2005; 4. Larry Ulman, PHP i MySQL pentru site-uri web dinamice, Bucureti, Editura Teora, 2006;

12

S-ar putea să vă placă și