
Întrebări și răspunsuri utile pentru cei ce doresc să învețe programare
iunie 29, 2022Atunci când cineva trebuie să rezolve o problemă de algoritmică trebuie să înțeleagă problema în primul rând.
A înțelege problema înseamnă să își dea seama de unde se pleacă și unde trebuie să se ajungă.
Adică care sunt condițiile inițiale și cum trebuie ele transformate.
De exemplu dacă se cere sortarea în ordine crescătoare a unui șir de numere cel care rezolvă problema trebuie să înțeleagă că numerele initial sunt aranjate în șir aleatoriu și că ele trebuie să fie aranjate astfel încât oricare două numere din șir ar verifica cel din stânga este mai mic decât cel din dreapta.
Dacă a înțeles acest lucru apoi trebuie să se gândească cum poate să aranjeze aceste numere în acest fel.
Așa cum se știe există mai multe modalități de rezolvare a unei astfel de probleme și dacă cel care urmează să rezolve problema cunoaște aceste modalități poate aplica una dintre ele.
Bine este să o aplice pe cea mai optimă dar o poate aplica pe cea pe care o înțelege cel mai bine pentru că dacă copiază cod de pe net pentru cea optimă este posibil ca ulterior problemă să se dezvolte adică cel care a cerut problema să mai ceară ceva legat de această problemă iar cel care rezolvă problema dacă nu înțelege codul îi va fi mai greu să construiască pe el adică să îl dezvolte.
Dacă cel care rezolvă problema nu cunoaște nicio modalitate de rezolvare deja cunoscută atunci se poate gândi la una.
Când se gândește cum să rezolve problema trebuie să țină cont de modul de funcționare al unui computer.
Să știe de exemplu că numerele dacă sunt puse într un vector ele nu pot fi parcurse decât secvențial adică unul după altul fără să știe dinainte care dintre ele este cel mai mic pentru a-l pune primul adică computerul nu poate privi în ansamblu șirul de numere de undeva de deasupra ca să îl fotografieze și să arate direct către cel mai mic.
Cel mult se poate face un algoritm pentru determinarea minimului rămas dar și pentru crearea unei astfel de algoritm numerele trebuie parcurse secvențial.
Cel care rezolvă problema își poate imagina că trebuie să parcurgă un șir de camere nedecomandate și să aranjeze obiectele găsite în camere în ordine crescătoare astfel încât cel mai mic obiect să fie în prima cameră și cel mai mare în ultima.
Cel care rezolvă problema trebuie să cunoască și mecanismele de programare cum ar fi de exemplu modalitatea prin care numerele pot fi parcurse dar și cum le pot fi schimbate valorile.
Dacă cunoaște aceste aspecte atunci îi rămâne de făcut algoritmul prin care poate aranja crescător aceste numere.
Realizarea unui algoritm pornind din acest punct nu ține de cunoștințe de tehnologia informației ci de gândire rațională și logică.
Adică cel care rezolvă problema trebuie să se gândească cum ar face să sorteze acele obiecte aflate în camere nedecomandate și apoi să transpună acest algoritm în cod sursă folosindu-se de noțiunile de programare și tehnologie a informației.
Problemele sunt de diferite tipuri și de diferite nivele de dificultate astfel încât rezolvarea lor poate pune în dificultate și cei mai buni programatori.
Există probleme la care pur și simplu se potrivește expresia „nu știu de unde să o apuc” dar cineva tot învârtindu-se în jurul problemei va găsi un punct de plecare exact cum atunci când trebuie să lipească cineva cu o rola de scoci nu reușește să îi găsească capul de unde a fost rupt sau tăiat dar până la urmă îl găsește.
Așadar rezolvarea unei probleme ține de capacitatea fiecărui om de a gândi logic și de a crea raționamente logice dar și de știința fiecărui om de a ști la ce să se gândească atunci când trebuie să rezolve o problemă cât și de cunoștințele acelui om din domeniul IT adică să știe cum funcționează un computer.
Pe măsură ce cel care rezolvă problema rezolvă cât mai multe probleme intervine experiența și pe măsură ce rezolvă probleme următoarele problemele le va rezolva mult mai ușor pentru că va ști la ce să se gândească și cum să gândească dar și care au fost soluțiile la problemele anterioare care semănau cu problema pe care trebuie să o rezolve.

