Showing posts with label variabile. Show all posts
Showing posts with label variabile. Show all posts

Monday, January 25, 2016

Limbajul PHP. Mini-proiect "statistic". Functii, constante, include/require etc

Enuntul urmator, adaptat din tema unui curs de PHP procedural, cere, practic, relationarea a doua fisiere php care contin functii pentru generarea si validarea unor valori numerice.

"Creati un mini-proiect PHP cu fisiere, plasat intr-un director accesibil prin URL-ul http://localhost/.../ . In acel director se vor afla urmatoarele fisiere/directoare:

1) directorul include, care contine fisierul utils.php, in care se definesc: 
a) o constanta NR_DATE, cu o valoare numerica la alegere; 
b) o functie validareData() ce valideaza o data calendaristica. Functia primeste 3 argumente: zi, luna si an (toate numerice) si verifica daca ziua se incadreaza in numarul maxim de zile ale lunii specificate; 
2) fisierul statistici_date.php, in care: 
a) se include utils.php, pentru a avea disponibile constanta si functia de validare. Se va folosi o cale relativa (require "include/utils.php"), pentru a nu face site-ul dependent de sistemul local de fisiere; 
b) se realizeaza o bucla in care se genereaza NR_DATE date calendaristice (se genereaza ziua, luna si anul folosind functia rand() ). Fiecare data generata se va afisa pe ecran: cele valide cu verde, cele invalide cu rosu. Pentru validare se va folosi functia validareData() scrisa anterior. Anul se va genera intre 1900* si 2100; 
c)la sfarsit se va afisa statistica: X date valide, Y date invalide."

In solutia propusa, validarea porneste de la criteriul lunii generate aleator. Domeniul acoperitor de generare a valorilor pentru zile este (1, 31). Daca luna este prima, a treia, a cincea, a saptea, a opta, a zecea sau a douasprezecea, corectitudinea datei este asigurata de insasi domeniul fixat pentru zile.

Daca luna este februarie (a doua) si daca valoarea este superioara lui 28 (in cod, $d > 28) atunci, daca anul ($y) este bisect (test prin functia isLeap()) si daca ziua $d == 29 inseamna ca data este valida. In cazul contrar ultimei clauze if (<==> $ > 29), data e invalida.

Daca luna este a 2-a si ziua este mai mica sau egala cu 28, data generata este valida, indiferent de an, ordinar sau bisect.

Daca luna este a patra, a sasea, a noua si a unsprazecea, orice zi $d <=30 implica o data valida, indiferent de an.

Instructiunea switch si gruparea case-urilor pentru lunile cu 30 de zile simplifica functionalitatea codului.

Pentru afisare, s-a folosit o lista neordonata intr-un element de pagina pozitionat stanga si un tabel pozitionat in dreapta listei.

Domeniul pentru anii generati cu functia rand a fost fixat la (1920, 2100). Nu ca ar avea importanta prea mare, dar in 1919, in primavara, s-a introdus in Romania reforma calendarului gregorian, astfel incat de la 14 aprilie (1 aprilie pe stil vechi) anul respectiv, datele calendaristice pot fi in mod consistent corelate cu zilele saptamanii ;-)

Saturday, January 23, 2016

Limbajul PHP. Caroiaj de sah

Codul urmator afiseaza celulele unui tabel cu 8 linii si 8 coloane colorate alternativ, dupa modelul unei table de sah.

Pentru un element oarecare al caroiajului, indecsii de linie si de coloana decid daca este aleasa una dintre cele doua culori. In exeplul dat, index linie par + index coloana par => celula de tabel are culoarea rosie (albastra daca indexul de coloana este impar). Daca indexul de linie devine impar in urma incrementarii, ordinea atribuirii culorilor se inverseaza.


Tagul de inchidere pentru linii, </tr> este pus cand indexul de linie capata valoarea "7".


Codul si prinscreen-ul:

Limbajul PHP. Functii cu numar variabil de argumente

Inca un enunt din categoria "practica individuala" asociata unui curs de PHP procedural:

"1.Sa se scrie o functie cu numar variabil de argumente care afiseaza valorile argumentelor primite sub forma unei liste HTML.
Ex: f(1,2,3) va afisa un bulleted (unordered) list cu valorile 1, 2 si 3);2. Aceeasi cerinta ca mai sus, dar functia va afisa argumentele ordonate crescator.3. Aceeasi cerinta, dar functia va avea un prim argument obligatoriu, care specifica sensul ordonarii (crescator sau descrescator)."

Intrucat ultima cerinta la inglobeaza pe anterioarele, solutia propusa o va trata pe aceasta din urma.

S-a definit functia funcTest($asc), care poate fi apelata cu un numar n>= 1 oricat de mare de argumente, apelarea fara argumente generand warning.

In corpul lui funcTest(…) este apelata functia predefinita func_num_ags(). Aceasta intoarce numarul de argumente pasate functiei funcTest(…). Daca numarul este mai mare decat 1, este apelata o alta functie predefinita, func_get_args(),  care intoarce ca rezultat un array cu argumentele pasate.

In continuare, este afisata lista cu argumente nesortate apoi se trece la sortarea acestora cu bubble sort, sensul sortarii fiind stabilit pe baza parametrului $asc(0 = crescator, 1 = descrescator). Pentru o duplicare mai redusa a codului, au fost definite functiile ascSort(…) si descSort(…), apelate din funcTest(…) in vederea sortarii efective. Doi din trei parametri sunt transferati prin referinta intrucat se doreste modificarea variabilelor respective: $count, care semnaleaza prezenta inversiunilor intre elementele listei de argumente, si, respectiv, $arr, tabloul care stocheaza argumentele.

funcTest(…) este apelata prima data cu valorile unui array initializat pseudoaleator, apoi direct cu apeluri ale functiei rand()  plasate in lista de argumente.

Codul si prinscreenul:

Monday, December 14, 2015

Limbajul C. Un cronometru simplu cu ciclu de intarziere

Aplicatia urmatoare simuleaza un cronometru care afiseaza timpul pana la o valoare (ore, minute, secunde) introdusa de utilizator. 

Valoarea sau, mai exact, conversia acesteia in secunde trebuie sa fie mai mica decat numarul secundelor care echivaleaza 24 de ore (==86400).

O structura cu trei variabile int este folosita pentru a stoca timpul curent. O functie Display afiseaza acest timp, secunda cu secunda, parametrul functiei fiind variabila structura.

In mod uzual se folosesc pointeri la structura pentru a evita copierea intregii structuri in parametrul formal. In cazul de fata, nefiind vorba de o structura foarte 'voluminoasa', s-a optat pentru transferul prin valoare.

Wednesday, November 11, 2015

Limbajul C. Contorizarea caracterelor

O problema simpla de C procedural din cursul Cork.

Enuntul:

"2. Write a program to keep count of the occurrence of a user specified character in a stream of characters of known length ( e.g. 50 characters ) input from the keyboard. Compare this to the total number of characters input when ignoring all but alphabetic characters."

Codul: