Showing posts with label tablouri. Show all posts
Showing posts with label tablouri. Show all posts

Tuesday, January 12, 2016

Limbajul PHP. Guessing game. Tablouri multidimensionale

Urmatorul enunt de pe www.programmr.com este o problema simpla cu sase scenarii posibile, raspunsurile de selectie fiind introduse de la tastatura.

Se cere sa se identifice prin doua interogari un obiect intr-o matrice 2 x 3 (screen-ul urmator).

Din pacate, softul de pe programmr.com valideaza si topica si compozitia stringului de iesire, dupa urmatorul pattern.

1) "alive" & "outside" sau "alive" & "inside":  Obviously the living thing on your mind is a ...

2) "not alive" & "outside" sau "not alive" & "inside" : Obviously the nonliving thing on your mind is a ...
3) ("alive" sau "not alive") && "both":   Obviously the nonliving thing inside/outside on your mind is a ...

Altminteri, problema e triviala iar varianta comoda este stocarea entitatilor living/not living etc intr-un tablou bidimensional cu cheile indicate mai jos.


Sunday, December 6, 2015

Limbajul C. Implementarea unei stive cu un tablou monodimensional

O stiva este o colectie de elemente de acelasi tip procesata dupa principiul LIFO, last in, first out. Asta inseamna ca procesarea se face intotdeauna la "capatul din dreapta", adica introducerea de element nou, stergerea unui element si citirea elementelor din stiva se realizeaza pornind de la ultimul element adaugat.

Implementarea pe baza unui tablou monodimensional, numit in continuare 'stack', are o anumita valoare didactica dar si limitari, care pot fi depasite prin folosirea unei liste inlantuite, caz ce va fi detaliat intr-o postare ulterioara.

index: 0  stack[0]: neinitializat

Wednesday, December 2, 2015

Limbajul PHP. Ordonarea unui sir numeric cu un algoritm "ineficient"

Codul urmator implementeaza probabil cel mai trivial algoritm de sortare, bazat pe urmatoarele consideratii.

1) Fie cel mai defavorabil caz al unui sir pentru care se doreste ordonarea crescatoare, adica, presupunand ca este vorba de un sir de 4 numere intregi,
$i = array(4, 3, 2, 1);

2) Ne propunem ca pentru $k = 0, $k < 4, pentru fiecare situatie $i[$k] >= $i[$k + 1] sa inversam valorile celor doua elemente, folosind in acest scop variabila intermediara $temp:

$temp = $i[$k]; $i[$k] = $i[$k + 1]; $[k + 1] = $temp;

Monday, November 30, 2015

Limbajul PHP. Functii si tablouri. Aplicatie: eliminarea elementelor dintr-un string pe baza paritatii si afisarea optimizata a rezultatului

Problema urmatoare este enuntata pe site-ul www.programmr.com si face apel la notiunile de functie, string, tablou, instructiuni de decizie si ciclare.

Enuntul:

"Write a function evens that accepts an integer parameter 'n' and that returns the integer formed by removing the odd digits from 'n'.

If a negative number with even digits other than 0 is passed to the method, the result should also be negative.


Leading zeros in the result should be ignored and if there are no even digits other than 0 in the number, the method should return 0."

Rezolvarea propusa in codul urmator face abstractie de functiile accesibile in manipularea sirurilor se caractere. De pilda, lungimea stringului in care sunt stocate cifrele si eventualul semn al numarului introdus de la tastatura se determina intr-o bucla while si nu cu strlen().

Sunday, November 29, 2015

Limbajul C. Adunarea intregilor lungi. Aspecte netriviale intr-o problema aparent banala.

Puterm reprezenta, in conformitate cu tipurile de baza din limbajul C, numere intregi pozitive de la 0 la 2^32 - 1 sau numere intregi cu semn in domeniul: -2^31, +2^31 - 1.

Intrucat limbajul nu impune restrictii (dar sistemul de operare si compilatorul pot impune restrictii!) asupra dimensiunii tablourilor de intregi (== asupra memoriei alocate static), putem imagina un sistem de citire si afisare a numerelor intergi lungi de o dimensiune convenabila utilizatorului, fiind, de asemenea, posibila si simularea operatiilor aritmetice cu astfel de numere.

Desigur, trebuie tinut cont de mecanismul de transport: daca doua cifre situate pe pozitii corespunzatoare dau, adunate, un rezultat mai mare decat valoarea bazei de reprezentare, in cazul de fata 10, trebuie adunat 1 (== valoarea transportului) la rezultatul adunarii cifrelor de pe urmatoarea pozitie si, de asemenea, verificat iar rezultatul prin comparatie cu baza etc.

Este clasicul algoritm invatat in clasa a 2-aJ

Wednesday, November 25, 2015

Limbajul C. "Insert a letter in string".

Fara prea multe comentarii (cu exceptia celor din cod :-), inca o problema din cursul de la University College Cork, menita sa fixeze notiuni precum siruri de caractere, tablouri, functii.

1.  Write and test a function that inserts a character anywhere in a string. The function should take the general form: strins(  char *string,  char character,  int position ).

Codul si printscreen-ul executiei:

Friday, November 20, 2015

Limbajul C. Mai multe probleme cu tablouri

Urmatoarele enunturi figureaza in cursul predat la University College Cork.

1. Se cere un program care citeste de la tastatura numere reale dubla precizie intr-un cuantum n specificat de utilizator, le stocheaza intr-un tablou de maximum 100 de elemente, calculeaza suma si media lor. La final se elimina din suma valorile extreme introduse, adica maximul si minimul. Se afiseaza tabloul initial apoi se realizeaza inversarea elementelor stocate in tablou, astfel incat primul devine ultimul etc.


Evident, se vor folosi functii definite de utilizator pentru fiecare sarcina specificata.

Thursday, November 19, 2015

Limbajul C. Tablouri mono si bi dimensionale. Matrici, liniarizare

Tablourile multi-dimensionale (uzual bi si tri dimensionale) sunt tablouri ale caror elemente sunt alte tablouri (mono, respectiv bi dimensionale pentru cazul uzual invocat).

tab[2][3] = {1,2,3,4,5,6}; // tab[1][1] are valoarea 5

Declaratia de sus reprezinta initializarea unei matrici bi dimensionale cu 2 linii si 3 coloane.
Putem liniariza aceasta matrice folosind un tablou mono dimensional de 6 intregi, considerand ca primele trei elemente ale sale formeaza prima linie iar ultimele, cea de-a doua linie.

Saturday, November 14, 2015

Limbajul C. Alte doua probleme simple. Conversie la binar si permutari. Simularea citirii numerelor intregi

La un moment dat, oricine codeaza se va lovi de problema permutarilor, fie ele circulare sau nu. Codul de mai jos rezolva doua chestiuni: conversia la binar a unui numar pe pozitiv pe 8 biti si permutarea circulara, de un numar de ori, a celor 8 biti.

Enuntul problemei figureaza in lista exercitiilor de la jumatatea materiei de C procedural predata in cursul de la University College Cork. Rezolvarea propusa este oarecum inaintea materiei, pentru ca foloseste vectori. Desi este posibila rezolvarea fara a apela la vectori (tablouri), a fost aleasa varianta cu tablouri, intre altele si pentru ca in practica o variabila modificata este, in general, stocata pana la finalul executiei codului.