Jump to content

sinnoptic

Membru
  • Posts

    212
  • Joined

  • Last visited

Posts posted by sinnoptic

  1. Sunt foarte incantat! Azi vom face poate cel mai spectaculos pas catre construirea unui joc.

     

    Pana aici am parcurs impreuna in lectiile trecute conceptele fundamentale pe care oricine isi doreste sa devina programator trebuie sa le stapaneasca intr-un mod personal. Am vorbit despre instructiuni, despre variabile, despre instructiunea daca, despre instructiunea cat timp, despre vectori si matrici, despre functii si despre operatori.

     

    Imbinand in moduri ingenioase toate cunostintele si abilitatile deprinse pana acum iti poti construi propriul joc. Da, ai (aproape) tot ce iti trebuie!

     

    Mai lipseste doar un aspect. Un aspect simplu, dar fara de care n-am fi putut vorbi niciodata de jocuri pe calculator. Este vorba despre interactivitate.

     

    Si cum putem asigura aceasta interactivitate altfel decat lasand utilizatorului programului nostru posibilitatea de a da comenzi programului? (Altfel am putea programa doar poze sau cel mult filme, si nicidecum jocuri.)

     

    Cum cea mai utilizata metoda de a interactiona cu calculatorul este (inca) tastatura, iti voi arata in lectia de azi cum iti poti face programul sa raspunda asa cum doresti la apasarea anumitor taste.

     

    Lectia va fi una scurta, insa intelegerea ei pe deplin va necesita exercitiu din partea ta.

     

     

     

    Hai sa vedem acum cum putem sa ii spunem calculatorului nostru virtual ce sa faca atunci cand se apasa o tasta.

     

    La prima vedere lucrurile sunt un pic mai complicate, caci imbina practic majoritatea informatiilor de pana aici. Insa daca lectiile trecute nu ti-au pus probleme, nici aceasta nu o va face.

     

    In momentul in care calculatorul detecteaza apasarea unei taste el apeleaza in mod automat o functie care a fost specificata in acest sens. In cadrul acelei functii se citeste tasta care a fost apasata si se specifica modul in care calculatorul trebuie sa reactioneze la acest eveniment.

     

    In paragraful anterior an rezumat intreaga lectie.

     

    Hai sa-l reparcurgem pas cu pas si sa detaliem acolo unde e cazul.

     

    La apasarea vreunei taste calculatorul apeleaza in mod automat o functie specificata de noi. Buuun! E foarte bine ca se ocupa el in mod automat de treaba asta. Mai ramane sa vedem (1) cum ii putem spune ce functie sa apeleze si (2) ce caracteristici trebuie sa aiba aceasta functie.

     

    Cat priveste (1), raspunsul consta in functia predefinita AscultaTaste. Numele ii e destul de sugestiv, nu? Aceasta functie asteapta ca parametru numele unei functii care sa contina functionarea dorita in cazul apasarii tastelor. Prin urmare, in program o vom apela in felul urmator:

     

    AscultaTaste(FunctieTaste)

     

    In loc de FunctieTaste pot folosi orice nume valid de functie. Singura constrangere este (si cu asta raspund la intrebarea (2)) ca aceasta functie trebuie sa primeasca un parametru. In acest parametru calculatorul (care, repet, va apela in mod automat functia FunctieTaste) va pune informatii despre evenimentul care s-a produs (adica apasarea tastei).

     

    Sa zicem ca denumim ev (de la eveniment) parametrul functiei FunctieTaste. Prin urmare, definitia ei va arata in felul urmator:

     

    function FunctieTaste(ev)

    {

           // instructiunile din cadrul functiei,

           //  ce vor fi executate in mod automat

           //  la fiecare apasare de tasta detectata.

           …

    }

     

    Evident, asa cum am zis mai sus, simpla definitie a acestei functii nu este suficienta pentru ca programul sa raspunda la apasarea tastelor. Este necesar ca dupa ce definesc aceasta functie sa-i spun calculatorului ca pe ea doresc sa o apeleze atunci cand detecteaza vreo tasta apasata. Cum fac asta? Am spus mai sus: prin apelul AscultaTaste(FunctieTaste).

     

    Bun. Aproape am terminat.

     

    Ramane doar sa vedem ce scriem in cadrul functiei FunctieTaste.

     

    Pai n-ar trebui sa fie prea greu, nu? Doar avem parametrul ev, in care ni se trasmit (in mod automat) informatii despre evenimentul care s-a produs.

     

    Da, chiar nu e greu. Singura mica problema e ca in ev nu ni se spune direct ce tasta a fost apasata. Dar nu e grav, caci avem la dispozitie functia predefinita TastaApasata, care face exact acest lucru. Primeste ca parametru variabila ev si returneaza tasta ce a fost apasata, in format literal.

     

    Practic, daca la inceputul functiei FunctieTaste scriem:

     

           var tasta = TastaApasata(ev)

     

    in variabila tasta vom avea memorata in format literal tasta ce a fost apasata.

     

    OK, dar ce e cu formatul asta literal? Pana aici in variabile am memorat doar numere.

     

    Ei bine, in variabile se pot memora si caractere (litere). (De fapt, la nivel intern tot cu numere se lucreaza, fiecarui caracter de pe tastatura corespunzandu-i un cod numeric. Insa pentru programator este mai simplu sa lucreze cu caractere.)

     

    Aceste caractere trebuie puse intre apostrofuri. De exemplu, caracterul corespunzator apasarii tastei A este 'a' (iar 'A' corespunde apasarii combinatiei de taste SHIFT+A).

     

    Asadar, daca doresc sa verific daca s-a apasat tasta A pot scrie in program (in cadrul functiei FunctieTaste, bineinteles, si presupunand ca in variabila tasta am tasta apasata) o conditie de genul urmator:

     

    if (tasta == 'a')

    {

           // instructiuni ce trebuie executate daca s-a

           //  apasat tasta A

           …

    }

     

    Cam asta e. Acum e timpul sa punem cap la cap tot ce am zis pana aici si sa facem un mic program demonstrativ.

     

     

     

    Hai sa facem un program in care sa plimbam pe ecranul virtual un punct cu ajutorul tastelor A (stanga), S (jos), D (dreapta) si W (sus).

     

    Si ca lucrurile sa fie mai interesante, as propune ca punctul sa fie rosu daca ne gasim in centrul ecranului (considerand centru in acest caz patratul cu coltul stanga-jos la coordonatele (3, 3) si coltul dreapta-sus la coordonatele (8, 8)), si sa fie negru in caz contrar (deci pe primele doua linii din marginile ecranului virtual).

     

    Fara alte comentarii preliminare, iata programul:

     

    // Program deplasare punct din taste

    // 1) Initializari:

    var x = 1

    var y = 1

    Aprinde(x, y)

    // 2) Functia de tratare a apasarii tastelor:

    function FunctieTaste(ev)

    {

          var tasta = TastaApasata(ev)

          Stinge(x, y)

          if ( (tasta == 'a') && (x > 1) )

          {

                 x = x-1

          }

          if ( (tasta == 'd') && (x < 10) ) 

           {

                  x = x+1

          }

          if ( (tasta == 's') && (y > 1) )

          {

                 y = y-1

          }

          if ( (tasta == 'w') && (y < 10) ) 

           {

                  y = y+1 

           }

           if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

          {

                 Aprinde(x, y, ROSU)

          }

          else

          {

                 Aprinde(x, y)

          }

    }

    AscultaTaste(FunctieTaste)

     

    Il poti testa mai jos.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    N-a fost chiar greu, nu? Dupa cum ai vazut, programul contine in esenta doua parti: 1) o parte de initializari (in care nu fac altceva decat sa definesc doua variabile (x si y) in care voi memora coordonatele curente ale punctului pe ecran, coordonate pe care le initializez cu (1, 1) (deci punctul stanga-jos al ecranului), si sa aprind (cu negru) punctul de la coordonatele (x, y)) si 2) o parte in care spun calculatorului ce sa faca atunci cand se apasa vreo tasta.

     

    Si daca intram in detaliile functiei FunctieTaste vei vedea ca si acolo lucrurile sunt destul de clare. Mai intai aflu ce tasta a fost apasata, apoi sting punctul de la coordonatele (x, y), dupa care verific daca a fost apasata vreuna dintre tastele A, S, D sau W si modific in mod corespunzator coordonata x sau y (verificand, de asemenea, ca punctul sa nu iasa in afara ecranului). Iar la final aprind punctul de la coordonatele (x, y) (care probabil au fost modificate) fie cu rosu, fie cu negru (in functie de pozitia in care se gaseste punctul pe ecran).

    • Like 1
  2. Inainte de a ne apuca de treaba asa vrea sa te gandesti putin la aceste trei cuvinte. Ce iti transmit ele? La ce te duc cu gandul?

     

    Daca in gandurile tale a rasarit ideea de logica, atunci lectia aceasta va fi una usoara.

     

    Iti voi vorbi aici despre operatori. Vei revedea operatorii cu care te-ai intalnit in lectiile trecute si vei invata altii noi.

     

    Accentul va fi pus pe trei operatori logici cu ajutorul carora vei putea scrie cu usurinta programe mai scurte si mai clare. Practic, vei putea programa la fel de simplu cum gandesti. Singura diferenta e ca gandurile tale le vei exprima nu in cuvinte, ci in limbajul simplu, concis si lipsit de ambiguitate al programarii.

     

     

     

    Culoare

     

    Si ca sa iti infirm (la nivel subconstient
    • Like 2
  3. Daca ai urmarit atent lectiile din articolele anterioare, pana la momentul de fata deja stapanesti bazele programarii calculatoarelor. Am ajuns sa facem impreuna programe destul de complexe si suntem la doar un pas de a construi primul joc.

     

    Revino, te rog, la lectia anterioara si reia ultimul program pe care ti l-am oferit ca exemplu. Dupa cum ai vazut, programul mai intai initializa cu anumite valori elementele unei matrici (binare — adica doar cu valori de 1 si de 0), dupa care aprindea pe ecran punctele corespunzatoare acelor elemente din matrice cu valoarea 1. Urma o pauza, dupa care elementele matricii erau inversate si apoi se repeta operatiunea anterioara (folosind de asta data, bineinteles, noile valori ale elementelor matricii).

     

    Ai remarcat, probabil, ca programul rezultat a fost destul de lung. De asemenea, cred ca ai remarcat faptul ca este presarat cu comentarii care sa ajute la intelegerea rapida a lui. In ciuda lor, insa, programul are un aer destul de complicat.

     

    In lectia aceasta vei afla cum sa faci mai multe cu mai putine. Mai precis, vei invata cum sa inveti calculatorul sa execute alte functii (comenzi) fata de cele pe care le cunostea deja. Iar apoi, folosind aceste noi functii definite de catre tine, vei putea face programe mai scurte si mai puternice.

     

     

     

    Sa vedem, mai intai, la ce ne-ar ajuta definirea unei noi functii in cazul programului de care discutam (si anume ultimul din lectia despre vectori si matrici).

     

    Nu necesita un efort deosebit sa observam faptul ca secventa de program ce realizeaza aprinderea tuturor punctelor de pe ecranul de 10×10 puncte conform valorilor (1 — aprins, sau 0 — stins) din matricea m (de 10 linii si 10 coloane, bineinteles) se repeta. Ba chiar se repeta in mod identic aceasta secventa de program. N-ar fi asadar, mult mai simplu sa o scriem o singura data, sa-i dam un nume, si apoi s-o apelam folosind acel nume?

     

    Ba sigur ca da. Exact asta facem cu instructiunea “functie” (function). Ea se scrie intr-un program in felul urmator:

     

    function NumeleFunctiei()

     

    {

     

           // corpul functiei; instructiunile

     

           // …

     

    }

     

    Spre deosebire de celelalte instructiuni de pana acum, instructiunea function nu are un efect imediat si nu intervine direct in functionarea programului. Ci ea este o instructiune cu rol declarativ, care va spune calculatorului ca prin comanda NumeleFunctiei() ma voi referi in program la instructiunile care se regasesc in corpul functiei.

     

    Pentru un exemplu concret, iata cum ar arata ultimul program din articolul anterior, scris de asta data cu ajutorul unei functii pe care aleg sa o denumesc AprindeEcran:

     

    // Program inversare culori (cu matrice)

     

    // definire matrice cu 10 linii si 10 coloane

    var m = Matrice(10, 10)

     

    // Definesc noua functie pe care urmeaza

    // sa o folosesc in program.

     

    function AprindeEcran()

    {

           // Parcurg toate elementele matricii m si aprind 

           // sau sting punctul corespunzator de pe ecran, 

           // in functie de valoarea elementului curent

           // (0 – stins; 1 – aprins).

     

           var l = 0

           var c

           while (l < 10)

           {

                  c = 0

                  while (c < 10)

                  {

                         if (m[l][c] == 1)

                         {

                                Aprinde(c+1, 10-l)

                         }

                         else

                         {

                                Stinge(c+1, 10-l)

                         }

                         c = c+1

                  }

                  l = l+1

           }

    }

     

    // Si acum urmeaza programul propriu-zis:

     

    // initalizare elemente matrice

    var l = 0

    var c

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if ( ((l+c)%2) == 0 )

                  {

                         m[l][c] = 1

                  }

                  else

                  {

                         m[l][c] = 0

                  }

                  c = c+1

           }

           l = l+1

    }

     

    // aprindere puncte de pe ecran,

    // conform valorilor din matricea m

    // (0 – stins; 1 – aprins)

    AprindeEcran()

     

    // pauza…

    Pauza()

     

    // inversare stare puncte

    l = 0

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if (m[l][c] == 1)

                  {

                         m[l][c] = 0

                  }

                  else

                  {

                         m[l][c] = 1

                  }

                  c = c+1

           }

           l = l+1

    }

     

    // aprindere puncte de pe ecran,

    // conform valorilor din matricea m

    // (0 – stins; 1 – aprins)

    AprindeEcran()

     

    Iata si caseta de testare a programului.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    Ce parere ai de noul program? Nu e mai simplu sa scrii doar AprindeEcran() decat sa scrii (de doua ori) intreg acel bloc de instructiuni?

     

    Banuiesc ca te astepti deja ca urmeaza un exercitiu pentru tine. Ei bine, ia incearca sa faci si inversarea starii punctelor tot printr-o functie (la fel cum am facut pentru AprindeEcran). (Deci programul tau va contine in partea initiala pe langa definirea variabilei m si a functiei AprindeEcran, si definirea acestei noi functii — pe care o poti numi, de exemplu InverseazaPuncte.)

     

     

     

    Buuun, cu asta ai invatat si functiile, nu? Nu inca!

     

    De ce? Pentru ca ceea ce am facut pana aici e doar un caz particular de utilizare a functiilor (si anume utilizarea lor ca pe un soi de macro-intructiuni).

     

    In cazul cel mai general, insa, o functie poate sa primeasca niste parametri si sa returneze o valoare (exact ca in cazul unei functii matematice).

     

     

     

    Hai sa vedem mai intai cum sta treaba cu functiile care au parametri.

     

    Sa zicem ca ne dorim sa construim o functie care sa deseneze un dreptunghi pe ecranul nostru virtual de 10×10 puncte. Dorim, insa, ca functia asta sa fie capabila sa deseneze nu doar un anumit dreptunghi, ci orice dreptunghi. Prin urmare, este necesar sa specificam dreptunghiul dorit prin intermediul unor parametri.

     

    Putem, de exemplu, sa specificam dreptunghiul cu ajutorul coordonatelor (pe axa x (orizontala) si pe axa y (verticala)) punctului din stanga-jos si ale celui din dreapta-sus. Sa denumim aceste coordonate prin (x1, y1) si (x2, y2).

     

    In conditiile acestea, cum ar arata o functie (sa-i zicem, de exemplu, DeseneazaDreptunghi) care sa deseneze pe ecran dreptunghiul ce are coltul din stanga-jos la coordonatele (x1, y1) si coltul din dreapta-sus la coordonatele (x2, y2)? Iata o varianta mai jos:

     

    function DeseneazaDreptunghi(x1, y1, x2, y2)

    {

           var x = x1

           while (x <= x2)

           {

                  Aprinde(x, y1)

                  Aprinde(x, y2)

                  x = x+1

           }

           var y = y1

           while (y <= y2)

           {

                  Aprinde(x1, y)

                  Aprinde(x2, y)

                  y = y+1

           }

    }

     

    // Si iata si cateva exemple de utilizare a functiei:

    // 1) un patrat

    DeseneazaDreptunghi(1, 1, 10, 10)

    // 2) o linie orizontala

    DeseneazaDreptunghi(3, 3, 7, 3)

    // 3) o linie verticala

    DeseneazaDreptunghi(3, 5, 3, 7)

    // 4) un punct

    DeseneazaDreptunghi(7, 7, 7, 7)

    // 5) nimic

    DeseneazaDreptunghi(8, 8, 2, 2)

     

    (Imi poti spune de ce in cazul ultimului apel al functiei (varianta 5 de mai sus) nu se deseneaza nimic pe ecran?)

     

    Dupa cum ai observat (daca ai testat programul), functia DeseneazaDreptunghi pe care am definit-o se foloseste de valorile a patru parametri, si anume x1, y1, x2 si y2.

     

    Si daca ne uitam in corpul ei vedem ca mai intai defineste o variabila locala numita x cu ajutorul careia parcuge (folosind un while in combinatie cu incrementarea cu 1 din final (adica instructiunea x = x+1)) toate valorile de la x1 la x2. Si apoi, in corpul while-ului (deci pentru fiecare valoare a lui x intre x1 si x2 inclusiv) apeleaza de doua ori functia predefinita Aprinde — mai intai pentru a aprinde punctul de la coordonata (x, y1) si apoi pe cel de la coordonata (x, y2). Prin urmare dupa finalizarea executiei acestui prim while se vor fi desenat pe ecran doua dintre laturile dreptunghiului (si anume cea de jos si cea de sus).

     

    In mod similar partea a doua a functiei deseneaza celelalte doua laturi ale dreptunghiului (si anume latura din stanga si latura din dreapta).

     

     

     

    Super, nu? Folosindu-ne de o functie deja existenta (Aprinde) am construit o functie mai complexa (DeseneazaDreptunghi). In felul acesta nu numai ca putem scrie programe mai scurte si mai clare, ci putem scrie programe generice, a caror functionare sa poata fi usor modificata prin modificarea valorilor unor parametri.

     

    (Mentionez cu aceasta ocazie ca DeseneazaDreptunghi poate fi apelata si folosind variabile pe post de parametri. Cu alte cuvinte, pot scrie in program ceva de genul DeseneazaDreptunghi(csjx, csjy, 8, 9), in conditiile in care variabilele csjx si csjy au fost in prelabil definite si initializate cu niste valori.)

     

     

     

    A mai ramas un singur caz de functii pe care as vrea sa-l discut acum. Este vorba de functiile care returneaza o valoare.

     

    Care e treaba cu ele? Este cam acelasi lucru pe care il facem la matematica atunci cand scriem y = f(x). f este functia, x este parametrul cu care ea este apelata, iar y este variabila in care memorez valoarea returnata de functia f pentru parametrul x.

     

    In esenta functiile ce returneaza o valoare nu sunt diferite de de functiile de care am vorbit pana acum. Ba chiar orice functie poate sa returneze o valoare. Cu conditia ca in corpul ei sa existe intructiunea return valoare (unde in loc de valoare se poate pune fie o valoare numerica, fie o variabila in care este memorata o valoare, fie o expresie matematica (ce poate cuprinde valori numerice, operatori, variabile)).

     

    In momentul in care o astfel de intructiune “returneaza” (return) este executata, executia functiei se finalizeaza si valoarea returnata de ea este pusa in program acolo unde functia a fost apelata.

     

    Aceste cuvinte poate ca par mult mai complicate decat stau lucrurile in realitate, asa ca haide sa vedem un exemplu.

     

     

     

    Sa zicem ca desenam pe ecran un dreptunghi (cu functia DeseneazaDreptunghi facuta anterior), dupa care dorim sa desenam un punct in centrul lui. Ce-ar fi sa facem o functie cu ajutorul careia sa calculam acest centru?

     

     

     

    In regula. Hai sa vedem ce ar trebui sa facem pentru a obtine centrul dreptunghiului, in conditiile in care avem coordonatele (x1, y1) ale coltului din stanga-jos si (x2, y2) ale coltului din dreapta-sus.

     

    Pai, pentru a obtine coordonata pe axa x a centrului ar trebui sa facem media aritmetica intre x1 si x2. Adica (x1+x2)/2. Si apoi ar trebui sa rotunjim valoarea obtinuta pentru a obtine o valoare intreaga pe care s-o putem folosi pentru a selecta una dintre cele 10 coloane de pe ecranul virtual. (Putem rotunji o valoare reala la un numar intreg folosind functia predefinita Rotunjeste.)

     

    Si similar pentru y.

     

    Prin urmare, daca am face o functie care sa calculeze media dintre doua numere si sa returneze rezultatul rotunjit la o valoare intreaga, atunci am putea folosi aceasta functie atat pentru a calcula coordonata pe axa x a centrului dreptunghiului, cat si coordonata sa pe y.

     

    Hai sa vedem ce ar iesi:

     

    // definesc functiile pe care le voi folosi

     

    function DeseneazaDreptunghi(x1, y1, x2, y2)

    {

           var x = x1

           while (x <= x2)

           {

                  Aprinde(x, y1)

                  Aprinde(x, y2)

                  x = x+1

           }

           var y = y1

           while (y <= y2)

           {

                  Aprinde(x1, y)

                  Aprinde(x2, y)

                  y = y+1

           }

    }

     

    function CalculeazaMedia(a, B)

    {

           // calculeaza media numerelor a si b

           // si rotunjeste rezultatul

     

           var r = (a+b)/2

           r = Rotunjeste®

           return r

    }

     

    // am definit functiile; acum iata programul:

     

    DeseneazaDreptunghi(2, 3, 8, 9)

    var xc = CalculeazaMedia(2, 8)

    var yc = CalculeazaMedia(3, 9)

    Aprinde(xc, yc)

     

     

     

    Gata si lectia asta. La fel ca si cele de pana acum, nici ea nu se invata singura, insa. Este nevoie de ceva efort din partea ta. Dar daca ai in minte un proiect interesant pe care iti doresti sa il aduci la lumina, acest efort va deveni simplu si captivant ca o joaca.

    • Like 1
  4. Probabil ca atunci cand auzi de vectori si de matrici te gandesti la lectiile de fizica si de matematica din scoala. Vectorii si matricile din programare, insa, sunt cu totul altceva.

     

    Si anume, ele sunt doar niste modalitati de organizare a datelor. Ele constituie, in esenta, bazele structurilor de date utilizate in programele complexe. (Si, in particular, ele constituie fundamentul bazelor de date de care cel mai probabil ai mai auzit.)

     

    Hai sa n-o lungim mult si sa vedem ce sunt vectorii si matricile din programare.

     

     

     

    Vectori

     

    Dar mai intai: de ce am avea nevoie de o modalitate de structurare a datelor? Oare variabilele simple nu sunt de ajuns?

     

    Daca am de memorat o data, folosesc o variabila. Daca imi trebuiesc doua date intr-un program, folosesc doua variabile.

     

    Dar daca am nevoie de 10 date? (Sa zicem ca as vrea sa memorez starea tuturor celor 10 “beculete” de pe linia cu y = 1 din ecranul virtual de 10×10 puncte utilizat in lectiile anterioare. As putea sa consider valoarea 1 pentru starea “aprins” si valoarea 0 pentru starea “stins”.)

     

    Da, pot folosi 10 variabile.

     

    Dar daca apoi as vrea sa schimb starea tuturor becurilor (adica pe cele aprinse sa le sting, si pe cele stinse sa le aprind)?

     

    Ar trebui, evident, sa iau fiecare dintre cele 10 variabile in parte si sa scriu pentru ea un fragment de program de genul urmator:

     

    daca (variabila == 1)

    {

           variabila = 0

    }

    altfel

    {

           variabila = 1

    }

     

    Imagineaza-ti treaba asta (scrisa, desigur, cu instructiunea if in loc de daca) repetata de 10 ori!

     

    (Of, si tocmai incepuse sa-ti placa programarea, nu?…)

     

     

     

    Ei bine, vestea buna e ca datorita vectorilor nu va trebui sa dai copy&paste de 9 ori. Cu ajutorul vectorilor vei putea scrie ceva de genul:

     

    if (variabila_numarul_n == 1)

    {

           variabila_numarul_n = 0

    }

    else

    {

           variabila_numarul_n = 1

    }

     

    Acest grup de instructiuni va trebui sa-l scrii o singura data, in interiorul unei instructiuni cat timp (adica while) cu ajutorul careia il faci pe n sa parcurga toate valorile de la 1 la 10 (asa cum ai vazut in lectia anterioara).

     

     

     

    Bun, dar cum poti traduce intr-un program variabila_numarul_n?

     

    Sa zicem ca variabila am denumit-o v. Atunci variabila v numarul n se va scrie v[n].

     

    OK. Mai ramane doar sa vedem cum se defineste o astfel de variabila.

     

    O poti face cu functia Vector(numar_elemente), unde in loc de numar_elemente pui numarul de elemente dorit (deci cate variabile iti doresti sa contina variabila v). De exemplu, pentru 10 variabile in v (prima fiind v[0], si ultima v[9]) poti scrie astfel:

     

    var v = Vector(10)

     

    Iata, deci, un vector!

     

    Asadar, un vector e doar o variabila ce contine mai multe variabile (ce pot fi accesate prin expresii (ce pot contine numere, operatori si alte variabile) scrise intre paranteze drepte dupa numele variabilei, asa cum am aratat in paragrafele anterioare).

     

    Sa vedem acum cum ar arata programul de inversare a starii celor 10 beculete, de care vorbeam ceva mai devreme:

     

    var v = Vector(10)


    var n = 0

    while (n < 10)

    {

           if (v[n] == 1)

           {

                  v[n] = 0

           }

           else

           {

                  v[n] = 1

           }

           n = n+1

    }


     

    Pentru a face un program simulabil in simulatorul interactiv (asa cum te-am obisnuit in lectiile trecute), mai trebuie sa initializam valorile din vectorul v dupa ce l-am definit. Asa cum am zis anterior, pentru starea “aprins” vom folosi valoarea 1, iar pentru starea “stins” valoarea 0.

     

    De asemenea, mai trebuie sa aprindem beculetele de pe ecran atat inainte, cat si dupa rularea algoritmului de inversare a beculetelor. Putem face aceasta punand o pauza in program (cu ajutorul functiei Pauza()).

     

    Iata programul:

     

    // Program inversare culori (cu vector)

     

    // definire vector cu 10 elemente

    var v = Vector(10)

     

    // initalizare elemente vector

    v[0] = 0

    v[1] = 0

    v[2] = 1

    v[3] = 1

    v[4] = 1

    v[5] = 1

    v[6] = 1

    v[7] = 0

    v[8] = 1

    v[9] = 1

     

    // aprindere puncte de pe linia cu y = 1,

    // conform valorilor din vectorul v

    // (0 – stins; 1 – aprins)

    var n = 0

    while (n < 10)

    {

           if (v[n] == 1)

           {

                  Aprinde(n+1, 1)

           }

           else

           {

                  Stinge(n+1, 1)

           }

           n = n+1

    }

     

    // pauza…

    Pauza()

     

    // inversare stare puncte

    n = 0

    while (n < 10)

    {

           if (v[n] == 1)

           {

                  v[n] = 0

           }

           else

           {

                  v[n] = 1

           }

           n = n+1

    }

     

    // aprindere puncte de pe linia cu y = 1,

    // conform valorilor din vectorul v

    // (0 – stins; 1 – aprins)

    n = 0

    while (n < 10)

    {

           if (v[n] == 1)

           {

                  Aprinde(n+1, 1)

           }

           else

           {

                  Stinge(n+1, 1)

           }

           n = n+1

    }

     

    Si iata si simulatorul in care poti testa programul.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    A mers, da? Acum urmeaza partea cea mai frumoasa (si care te va ajuta cel mai mult in a deveni un bun programator) — partea de creatie si experimentare. Modifica, te rog, programul anterior astfel incat doar starea punctelor de pe coloanele pare (coloanele 2, 4, 6, 8, 10) sa se modifice (iar punctele de pe coloanele cu numar impar sa ramana nemodificate).

     

    Poti sa-mi lasi rezultatele (ca si alte idei de programe interesante cu vectori) in sectiunea de comentarii de mai jos.

     

     

     

    Matrici

     

    Acum ca e clar cum sta treaba cu vectorii, sa vedem ce sunt matricile si la ce sunt ele bune.

     

    Daca folosind un vector am putut manipula o linie din afisaj (si la fel de simplu putem manipula o coloana), cu ajutorul unei matrici putem manipula intreg ecranul de 10×10 puncte.

     

    Caci matricea este (ca si vectorul) o variabila ce contine mai multe variabile (dar nu dispuse in sir (ca la vector), ci intr-un patrat sau dreptunghi (pe linii si coloane)).

     

    Cand definim o matrice trebuie sa ii specificam numarul de linii si numarul de coloane, astfel:

     

    var m = Matrice(numar_linii, numar_coloane)

     

    Intreg afisajul de 10×10 becuri il putem, deci, considera un fel de matrice (de puncte, sau beculete), de 10 linii si 10 coloane. Numerotarea liniilor incepe, insa, de sus (deci linia cu y = 10 este linia 0, iar linia cu y = 1 este linia 9), iar a coloanelor de la stanga (deci coloana cu x = 1 este coloana 0, iar coloana cu x = 10 este coloana 9).

     

    Haide sa definim o matrice in care sa memoram starea (aprins sau stins) tuturor celor 10×10 puncte de pe afisaj. La fel ca anterior, pentru starea “aprins” vom memora in matrice valoarea 1, iar pentru starea “stins” valoarea 0. Daca denumim aceasta variabila m, atunci va trebui sa scriem in felul urmator:

     

    var m = Matrice(10, 10)

     

    Pentru accesarea elementelor matricii m vom scrie similar ca la vectori, cu diferenta ca matricii trebuie sa ii specificam doi indecsi (unul pentru linie, si celalalt pentru coloana) in loc de unul singur. Astfel, de exemplu, cu m[1][2] se acceseaza elementul de pe linia 1 si coloana 2 (care corespunde punctului de pe afisaj situat la coordonatele x = 3 si y = 9).

     

    (Imi poti spune cum ai accesa elementul matricii m in care vom memora starea punctului din coltul din dreapta sus al afisajului?)

     

    Hai sa vedem acum cum ar arata programul scris la sectiunea Vectori, dar de asta data pentru intreg ecranul, folosind matricea m definita anterior. (Iti reamintesc ca programul isi propune sa aprinda cateva puncte de pe ecran, sa puna pauza, dupa care sa inverseze starea tuturor punctelor.)

     

    // Program inversare culori (cu matrice)

     

    // definire matrice cu 10 linii si 10 coloane

    var m = Matrice(10, 10)

     

    // initalizare elemente matrice

    var l = 0

    var c

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if ( ((l+c)%2) == 0 )

                  {

                         m[l][c] = 1

                  }

                  else

                  {

                         m[l][c] = 0

                  }

                  c = c+1

           }

           l = l+1

    }

     

    // aprindere puncte de pe ecran,

    // conform valorilor din matricea m

    // (0 – stins; 1 – aprins)

    l = 0

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if (m[l][c] == 1)

                  {

                         Aprinde(c+1, 10-l)

                  }

                  else

                  {

                         Stinge(c+1, 10-l)

                  }

                  c = c+1

           }

           l = l+1

    }

     

    // pauza…

    Pauza()

     

    // inversare stare puncte

    l = 0

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if (m[l][c] == 1)

                  {

                         m[l][c] = 0

                  }

                  else

                  {

                         m[l][c] = 1

                  }

                  c = c+1

           }

           l = l+1

    }

     

    // aprindere puncte de pe ecran,

    // conform valorilor din matricea m

    // (0 – stins; 1 – aprins)

    l = 0

    while (l < 10)

    {

           c = 0

           while (c < 10)

           {

                  if (m[l][c] == 1)

                  {

                         Aprinde(c+1, 10-l)

                  }

                  else

                  {

                         Stinge(c+1, 10-l)

                  }

                  c = c+1

           }

           l = l+1

    }

     

    (Pentru a testa codul, revino la caseta de simulare de la finalul sectiunii despre vectori.)

     

    Modifica, te rog, acest program astfel incat sa-si schimbe starea doar punctele aflate pe linii si coloane pare.

     

     

     

    Gata si lectia despre vectori si matrici!

     

    Cu aceasta lectie libertatea ta in materie de construit programe a crescut enorm. Nici nu iti dai seama cat de aproape esti de a-ti programa propriul joc.

     

    Inca mai crezi ca este foarte dificil sa iti construiesti propriul joc de calculator? Te rog sa-mi spui ce crezi despre asta intr-un comentariu. De asemenea, te-as mai ruga sa-mi spui ce idei de jocuri interesante ai. Constrangerea este ca aceste jocuri sa poata fi jucate folosind doar ecranul virtual de 10×10 puncte si tastatura (sau, eventual, mouse-ul).

     

    sursa : Igotopia .ro

     

    • Like 1
  5. Deja cu ceea ce ai invatat in lectiile anterioare (instructiuni (1/2, 2/2), variabile, instructiunea “daca”) poti construi programe destul de complexe. Pentru a face programe serioase, insa, iti mai lipseste o singura lectie. Este vorba despre o instructiune cu ajutorul careia vei putea, printre altele, scrie in cateva randuri programe care altfel ti-ar fi necesitat zeci sau sute de linii. O instructiune ce iti va deschide poarta catre programarea adevarata, permitandu-ti sa faci si alte lucruri nebanuite. Instructiunea aceasta este while (“cat timp” — in limba romana). Formatul in care ea se scrie in programe este urmatorul:

     

    while (conditie)

     

    {

     

           // instructiuni

     

           …

     

    }

     

    Ca si in cazul instructiunii if (“daca”) invatate in lectia anterioara, in loc de conditie se pot pune verificari de egalitati sau inegalitati intre expresii ce pot contine valori, variabile si operatori. De fapt, instructiunea while seamana mult cu instructiunea if.

     

    Singura diferenta dintre instructiunea scrisa mai sus (adica: while (conditie) {//instructiuni …}) si instructiunea if (conditie) {//instructiuni …} este aceea ca daca conditia conditie este adevarata, in cazul instructiunii if blocul de instructiuni se executa o singura data, in vreme ce in cazul instructiunii while acesta se poate executa de mai multe ori, atata timp cat conditia conditie ramane adevarata (sau, altfel spus, pana cand conditia conditie nu mai este adevarata).

     

    Scrisa in limbaj natural, instructiunea while de mai sus s-ar traduce in “cat timp conditia este adevarata, executa instructiunile scrise intre acolade”.

     

    Evident, daca in blocul de instructiuni scrise intre acolade nu exista nimic care sa afecteze conditia, atunci (in cazul in care aceasta a fost initial adevarata) ea va ramane mereu adevarata, ceea ce inseamna ca blocul de instructiuni se va repeta la nesfarsit. In mod normal, insa, conditia testata contine o variabila a carei valoare se va modifica pe parcursul executarii blocului de intructiuni.

     

     

     

    Haide sa vedem un exemplu. Sa zicem ca dorim sa aprindem linia de jos (adica linia cu y egal cu 1) din ecranul nostru de 10×10 puncte.

     

    Bineinteles, putem face asta cu urmatorul program (asa cum am vazut inca din prima lectie):

     

    Aprinde(1, 1);

    Aprinde(2, 1);

    Aprinde(3, 1);

    Aprinde(4, 1);

    Aprinde(5, 1);

    Aprinde(6, 1);

    Aprinde(7, 1);

    Aprinde(8, 1);

    Aprinde(9, 1);

    Aprinde(10, 1);

     

    In regula, dar mai simplu nu se poate?

     

    Ba da. Sa observam, mai intai, ca x-ul transmis instructiunii Aprinde(x, y) variaza de la 1 la 10, in vreme ce y-ul ramane constant (si egal cu 1). Ce-ar fi, atunci, sa luam o variabila (pe care o putem numi chiar x) cu ajutorul careia sa parcurgem intreaga gama de valori 1, 2, 3, …, 10. Putem face asta cu urmatorul pogram:

     

    var x = 1;

    while (x <= 10)

    {

           Aprinde(x, 1);

           x = x+1;

    }

     

    Hai sa vedem pas cu pas ce face programul acesta:

     

    – 1) Mai intai defineste o variabila numita x, si o initializeaza cu valoarea 1.

     

    – 2) Urmeaza apoi instructiunea “cat timp x este mai mic sau egal cu 10…”

     

    – 3) “… aprinde punctul de la coordonatele (x, 1), si mareste cu 1 valoarea memorata in variabila x“.

     

    Daca ar fi sa derulam pasii 2) si 3), am vedea ca mai intai x este egal cu 1 (de la pasul 1) ), dupa care:

     

    – 2.1) se testeaza daca (x <= 10). Rezultatul este “adevarat” (caci x este egal cu 1), deci se executa pasul 3):

     

    – 3.1) Aprinde(1, 1); x = 1+1;

     

    – 2.2) apoi se testeaza din nou daca (x <= 10). Rezultatul este tot “adevarat” (caci x este acum egal cu 2), deci se executa din nou pasul 3):

     

    – 3.2) Aprinde(2, 1); x = 2+1;

     

    – 2.3) si iar se verifica daca (x <= 10). Cum rezultatul este “adevarat” (x fiind egal acum cu 3), se executa pasul 3):

     

    – 3.3) Aprinde(3, 1); x = 3+1;

     

    … (si asa mai departe… Hai sa trecem peste cativa pasi si sa ajungem direct la pasul in care x are valoarea 10.)

     

    – 2.10) se verifica daca (x <= 10). Rezultatul este “adevarat” (caci x este egal cu 10), deci se executa pasul 3):

     

    – 3.10) Aprinde(10, 1); x = 10+1;

     

    – 2.11) iarasi se verifica daca x este mai mic sau egal cu 10. De asta data, insa, rezultatul este “fals” (caci x are acum valoarea 11), deci nu se mai executa pasul 3), ci se iese din instructiunea while.

     

    Acum testeaza, te rog, programul anterior (cu copy&paste) folosind caseta de mai jos.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    Ce s-a intamplat dupa ce ai apasat butonul “Executa programul”? Asa cum ne asteptam, s-a aprins intreaga linie de jos din afisaj.

     

     

     

    Bun, dar daca dorim acum sa aprindem pe linia 2 nu intreaga linie, ci doar punctele de pe coloanele 1, 3, 5, 7 si 9?

     

    In primul rand, observam ca ne dorim de fapt sa aprindem toate punctele aflate la coordonatele (x, y), cu proprietatea ca y este egal cu 2, iar x ia pe rand valorile 1, 3, 5, 7, 9 (adica toate valorile impare de la 1 la 10).

     

    Folosind aceasta observatie, programul rezulta cu destula usurinta. Practic putem folosi programul anterior, in care in loc de Aprinde(x, 1) punem Aprinde(x, 2) (caci nu dorim sa aprindem puncte de pe linia 1, ci de pe linia 2). De asemenea, instructiunea Aprinde nu trebuie sa se mai apeleze la fiecare pas, ci doar la pasii pentru care x are valoare impara. Prin urmare, trebuie sa ne folosim de instructiunea if pentru a-i transmite o comanda de genul “executa instructiunea Aprinde(x, 2) doar daca x este numar impar”.

     

    Cum putem testa daca x este numar impar? O varianta posibila este sa verificam restul impartirii lui x la 2. Daca acest rest este egal cu 1, inseamna ca x este impar.

     

    Acum avem tot ce ne trebuie, asa ca hai sa construim programul:

     

    var x = 1;

    while (x <= 10)

    {

           if ( (x % 2) == 1)

           {

                  Aprinde(x, 2);

           }

           x = x+1;

    }

     

    Testeaza-l si pe acesta, te rog. Merge, nu? (Ce-ar fi sa-l modifici astfel incat pe linia 3 sa se aprinda “beculetele” situate pe coloane pare?)

     

     

     

    Iata ca deja am ajuns sa scriem programe serioase. Probabil ca un neinitiat s-ar uita la programul anterior ca la un text in chineza scris cu litere arabe. Insa daca ai urmarit cu atentie cele trei lectii anterioare, ai vazut ca lucrurile nu sunt nici pe departe atat de complicate pe cat par, ci totul este perfect logic.

     

    Propun sa incheiem lectia aceasta cu un exemplu ceva mai complicat. Sa zicem ca am dori sa aprindem toate punctele de pe ecranul de 10×10 puncte.

     

    Ce ar trebui sa facem, deci? Bineinteles, am putea sa punem 100 de instructiuni de tip Aprinde(x, y). Sau am putea sa observam ca de fapt tot ce trebuie sa facem este sa avem doua variabile (numite, de exemplu, chiar x si y) cu ajutorul carora sa apelam Aprinde(x, y). Si ar mai trebui sa observam si ca variabila x trebuie sa parcurga toate valorile de la 1 la 10 pentru fiecare valoare a variabilei y (care, la randul ei, ar trebui sa parcurga toate valorile de la 1 la 10).

     

    Aceasta inseamna ca ne vom puteam folosi de primul program de mai sus (cel care aprindea toate punctele de pe linia cu y egal cu 1), numai ca in blocul de insctructiuni din acel while nu vom scrie Aprinde(x, 1), ci Aprinde(x, y), unde y va fi o variabila pe care o vom fi declarat la inceputul programului si o vom fi initializat cu 1.

     

    Va trebui apoi ca intreg acel program sa fie executat din nou pentru y avand valoarea 2. Si apoi pentru y avand valoarea 3. Si asa mai departe, pana la y egal cu 10. Se poate observa ca dorim sa facem cu y o serie de operatii similare celor pe care le facem cu x. Prin urmare, intreg acest program de care vorbim va face parte din blocul de instructiuni al unei instructiuni while ce va testa conditia (y <= 10).

     

    Hai sa vedem cum ar arata programul:

     

    var y;

    var x;

    y = 1;

    while (y <= 10)

    {

           x = 1;

           while (x <= 10)

           {

                  Aprinde(x, y);

                  x = x+1;

           }

           y = y+1;

    }

     

    Pentru a-l testa, revino la caseta de testare de mai sus, apasa butonul “Reseteaza afisajul”, dupa care introdu acest program si apasa butonul “Executa programul”.

     

    A mers, nu? Ti s-au aprins toate punctele de pe ecran? (Ma intreb daca ai putea sa il modifici astfel incat sa nu-ti aprinda toate punctele, ci sa “deseneze” un soi de “tabla de sah” formata din 10×10 patratele. (Idee: foloseste if-uri; eventual unele in interiorul altora…)

    • Like 1
  6. Daca ai urmarit lectiile anterioare de introducere in programarea calculatoarelor, stii deja ca un calculator nu poate sa faca altceva decat sa execute o serie de instructiuni precise, una dupa alta (asa cum ai putut vedea in lectia 1 (partea 1 si partea a 2-a)). Ai vazut si experimentat pana aici instructiuni ce au un efect vizual imediat (instructiunile Aprinde si Stinge, ce aprind, respectiv sting, un punct negru situat la coordonatele specificate pe un “ecran” virtual), precum si instructiuni cu ajutorul carora poti defini variabile si stoca valori in ele (asa cum ai vazut in lectia a 2-a).

     

    Niciuna dintre aceste instructiuni nu pare sa fie, insa, deosebit de inteligenta. Cum este posibil, atunci, ca un calculator sa poata executa operatii cu un grad semnificativ de “inteligenta”? Secretul consta in instructiunea “daca” (if — in limba engleza).

     

    Cu ajutorul ei, calculatorul e capabil sa raspunda la comenzi exprimate intr-un limbaj foarte apropiat de cel uman, de genul “daca o anumita conditie e indeplinita, atunci executa o serie de instructiuni; altfel executa o alta serie de instructiuni”. Intr-un program aceasta s-ar scrie in felul urmator:

     

    if (conditie)

     

    {

     

           // instructiuni

     

           …

     

    }

     

    else

     

    {

     

           // alte instructiuni

     

           …

     

    }

     

    In loc de conditie se pot pune verificari de egalitati sau inegalitati intre expresii ce pot contine valori, variabile si operatori. De exemplu, pentru a face un program de tip “ghiceste numarul”, am putea testa o conditie de genul if (nr_ghicit == nr_secret) …, unde nr_secret este o variabila in care am stocat numarul secret ce trebuie ghicit de catre jucator, iar nr_ghicit este numarul introdus de catre jucator in incercarea de a ghici numarul secret. (A se remarca faptul ca testarea egalitatii dintre doua valori numerice, valori de variabile sau expresii se face cu operatorul ==, si nu cu operatorul = (care este operatorul cu ajutorul caruia putem stoca o valoare intr-o variabila, asa cum ai vazut in lectia trecuta).)

     

    In cazul in care egalitatea de mai sus este adevarata, putem sa-i afisam jucatorului un mesaj in care sa-i spunem ca a ghicit. In caz contrar, ar trebui sa verificam daca numarul introdus de catre jucator este mai mare sau mai mic decat numarul ce trebuie ghicit si sa afisam un mesaj adecvat. Programul ar putea arata in felul urmator:

     

    // —————————

     

    // Joc “Ghiceste numarul”

     

    // —————————

     

    // Definesc variabilele:

     

    var nr_secret = 16; // numarul ce trebuie ghicit

     

    var nr_ghicit = 10; // <– aici se introduc incercarile de ghicire a numarului

     

     // Si apoi testez daca s-a ghicit numarul sau nu:

     

    if (nr_ghicit == nr_secret)

     

    {

     

           // Daca s-a ghicit numarul secret, atunci afiseaza “DA” pe ecran

     

           Aprinde(2, 3); Aprinde(2, 4); Aprinde(2, 5); Aprinde(2, 6); 

     

           Aprinde(3, 3); Aprinde(3, 6); Aprinde(4, 4); Aprinde(4, 5);

     

           Aprinde(6, 3); Aprinde(6, 4); Aprinde(6, 5); Aprinde(8, 3);

     

           Aprinde(8, 4); Aprinde(8, 5); Aprinde(7, 6); Aprinde(7, 4);

     

    }

     

    else

     

    {

     

           // Daca nu s-a ghicit numarul secret, atunci afiseaza

     

           //   “>” (mai mare) — daca numarul secret este mai mare,

     

           //   sau “<” (mai mic) — daca numarul secret este mai mic.

     

           if (nr_secret > nr_ghicit)

     

           {

     

                  Aprinde(6, 3); Aprinde(7, 4); Aprinde(8, 5); Aprinde(7, 6); Aprinde(6, 7);

     

           }

     

           else

     

           {

     

                  Aprinde(5, 3); Aprinde(4, 4); Aprinde(3, 5); Aprinde(4, 6); Aprinde(5, 7);

     

           } 

     

    }

     

    Te rog sa copiezi acest program si sa-l testezi folosind caseta de mai jos.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    Ce a aparut de ecran?

     

    Acum apasa butonul “Reseteaza afisajul” si modifica in program valoarea variabilei nr_ghicit, punand in loc de 10 valoarea 20. Ce se intampla acum daca apesi butonul “Executa programul”? Dar daca repeti operatiunile, folosind de asta data pentru nr_ghicit valoarea 16?

     

    Asa cum ai putut observa in programul anterior, in cadrul unui bloc de instructiuni dintr-o instructiune if se pot pune alte instructiuni de tip if. (In programul dat ca exemplu, blocul de instructiuni din ramura else contine o instructiune if … else … .)

     

     

     

    Desi instructiunea if este in esenta cea mai puternica instructiune pe care este capabil s-o execute un calculator, nu voi insista prea mult asupra ei aici.Ea va tot reveni in discutie in lectiile ulterioare, si va deveni din ce in ce mai clara pe masura ce o vei experimenta. Ca si in cazul jocului de Go, regulile in programare sunt destul de putine si simple, insa prin imbinarea lor in moduri ingenioase se pot obtine rezultate spectaculoase.

    • Like 1
  7. In prima lectie de programare ai vazut ca cel mai important lucru pe care trebuie sa-l cunosti legat de programarea calculatoarelor este acela ca dispui de un set de instructiuni elementare cu ajutorul carora poti construi programe oricat de complexe. La fel cum un arhitect poate realiza constructii spectaculoase folosind doar cateva materiale de baza.

     

    Ai avut apoi (in articolul anterior) posibilitatea de a testa cele invatate si de a-ti exersa creativitatea intr-o maniera interactiva.

     

     

     

    Acum e timpul sa intelegi si cel de-al doilea pilon pe care se bazeaza programarea calculatoarelor. Utilizandu-l, nu numai ca vei putea sa iti reduci dimensiunea programelor scriind portiuni generice, ci iti vei extinde enorm gama de aplicatii pe care le poti realiza.

     

    Este vorba despre variabile. Practic nu exista program care sa nu le foloseasca. Bine, cu exceptia programelor scrise in lectiile trecute — ai putea zice. Si ai avea dreptate. Partial. Caci desi variabilele nu intervin explicit in acele programe, ele se regasesc implicit in instructiunile Aprinde si Stinge. Iti amintesti ca le-am prezentat generic sub forma Aprinde(x, y) si Stinge(x, y)? Ei bine, “x” si “y” de aici sunt variabile. Sunt niste “obiecte” ce pot retine valori. Apoi, cu ajutorul acestor valori instructiunea Aprinde, de exemplu, va sti ce “beculete” sa aprinda.

     

    (A se remarca faptul ca atat Aprinde(x, y), cat si Stinge(x, y), ne duc cu gandul la f(x, y). Va amintiti de la matematica ce notati de obicei prin f(x, y)? O functie f de doua variabile, x si y. (Ca sa fim si mai rigurosi, de fapt f(x, y) reprezinta valoarea acestei functii in punctul (x, y).) Acesta este motivul pentru care instructiuni ca Aprinde(x, y) si Stinge(x, y) sunt numite “functii” (iar scrierea lor intr-un program poarta numele de “apel al functiei”). Vom vedea intr-o lectie ulterioara ca ne putem construi singuri astfel de functii, pe baza unor functii de baza pe care le avem la dispozitie.)

     

     

     

    Ce este, deci, o variabila?

     

     

     

    Am spus anterior ca este un soi de “obiect” (virtual) ce poate retine valori. E ca o mica bucata de “hartie” pe care calculatorul poate scrie valori cu “creionul” si le poate sterge cu “guma de sters”.

     

    Hai sa vedem cum stau lucrurile pe  exemple concrete. Sa construim, pentru inceput, o variabila numita a. Putem face acest lucru scriind:

     

    var a

     

    Daca dorim sa-i dam acum lui a o valoare, sa zicem 3, o putem face scriind pur si simplu:

     

    a = 3

     

    (Nota: Declararea si initializarea unei variabile se poate face si intr-o singura instructiune, de genul var a = 3 .)

     

    Bun, avem acum o variabila numita a, in care am stocat valoarea 3. Sa vedem cum o putem folosi. Ce credeti ca vor face, de exemplu, instructiunile urmatoare:

     

    Aprinde(a, 1)

     

    Aprinde(a, a)

     

    Daca ai zis ca prima dintre ele aprinde “beculetul” de la coordonatele (3, 1), ai avut dreptate. Caci valoarea stocata in variabila a la momentul executiei instructiunii Aprinde(a, 1) este 3, deci instructiunea care se executa practic este Aprinde(3, 1). Similar, cea de-a doua instructiune este echivalenta cu Aprinde(3, 3) (deci efectul sau va fi acela de a aprinde punctul de la coordonatele (3, 3)).

     

    Daca m-ai urmarit pana aici ar trebui sa iti fie usor sa intelegi efectul urmatorului program:

     

    var a = 1

     

    Aprinde(a, 1)

     

    Aprinde(a, 2)

     

    a = 2

     

    Aprinde(a, 1)

     

    Aprinde(a, 2)

     

    In prima linie se declara variabila a si i se atribuie valoarea 1. In urmatoarele doua linii se aprind punctele (1, 1) si (1, 2). Apoi se atribuie variabilei a valoarea 2. (Adica valoarea anterioara (si anume valoarea 1) se sterge, si se scrie in a valoarea 2.) Deci ultimele doua instructiuni vor aprinde punctele (2, 1) si (2, 2).

     

    (O modalitate mai practica de a explica functionarea unui program o constituie comentariile. Putem introduce un comentariu intr-un program scriind //. Atat aceste doua simboluri, cat si tot ce urmeaza dupa ele pana la sfarsitul liniei (adica acolo unde se apasa tasta “Enter”) nu va fi considerat instructiune, ci va fi ignorat de catre calculator.)

     

    Varianta comentata a programului anterior ar putea arata astfel:

     

    // Program de desenare patrat

     

    var a = 1 // definesc variabila a si o initializez cu valoarea 1

     

    Aprinde(a, 1) // aprind punctul (a, 1), adica (1, 1) — caci valoarea din a este 1

     

    Aprinde(a, 2) // aprind punctul (a, 2), adica (1, 2)

     

    a = 2 // sterg valoarea anterioara scrisa in a, si scriu in variabila a valoarea 2

     

    Aprinde(a, 1) // aprind punctul (a, 1), adica (2, 1) — caci valoarea din a este 2

     

    Aprinde(a, 2) // aprind punctul (a, 2), adica (2, 2)

     

    In varianta aceasta, atat instructiunile programului, cat si explicatiile, se pot pune laolalta intr-un acelasi program. Ba chiar este recomandat ca orice program sa contina comentarii, pentru a facilita intelegerea ulterioara a lui.)

     

     

     

    Dupa atata teorie, haide sa si experimentam ceva. Copiaza, te rog, programul anterior in caseta de mai jos, dupa care apasa butonul “Executa programul”.

     

    Reseteaza afisajul

     

    1

     

     Executa programul

    Gata?

     

    Programul a avut efectul asteptat? Esti liber sa faci modificari la el si sa vezi noile rezultate.

     

    Ce ar fi daca in linia 4 in loc de a = 2 ai scrie a = a+1? Ce crezi ca s-ar modifica?

     

    Daca ai avut curiozitatea de a testa programul, atunci ai vazut ca rezultatul final este acelasi. Ceea ce era si normal, nu?

     

    Hai sa vedem mai indeaproape ce face instructiunea a = a+1. Mai intai aduna 1 la valoarea stocata in a (si daca te uiti la a doua linie din program vei vedea ca in a era stocata valoarea 1, deci rezultatul operatiei acesteia de adunare va fi 2), dupa care memoreaza valoarea calculata in a (bineinteles, dupa ce sterge in prealabil vechea valoare din a).

     

    Scrisa in cuvinte, instructiunea a = a+1 s-ar traduce in “stocheaza in variabila a rezultatul adunarii dintre valoarea curenta din a si valoarea 1“.

     

     

     

    Dar daca as vrea sa folosesc in program o a doua variabila, numita b si avand stocata in ea valoarea 7, cum as face? Bineinteles, cu intructiunea var b = 7. Similar, cu var c as defini o a treia variabila, numita c. In conditiile astea, ce ar face intructiunea c = b+a? Dar instructiunea c = b-a? Poti vedea “pe viu” rezultatele acestor instructiuni ruland programul de mai jos:

     

    var a = 3

     

    var b = 7

     

    var c

     

    c = b+a

     

    Aprinde(c, c)

     

    c = b-a

     

    Aprinde(c, c)

     

    Ce s-a intamplat? Prima instructiune Aprinde(c, c) a aprins punctul de la coordonatele (10, 10), iar cea de-a doua instructiune Aprinde(c, c) a aprins punctul de la coordonatele (4, 4). Exact asa cum te asteptai, nu? (In caz ca totusi e ceva neclar, te rog sa nu eziti a lasa un comentariu cu intrebarile tale.)

     

     

     

    Propun sa incheiem aceasta lectie introductiva despre variabile cu analiza programului urmator:

     

    // Defineste doua variabile

     

    var a = 1

     

    var b = 10

     

    // Aprinde pe linia 1 punctul corespunzator valorii din variabila a

     

    Aprinde(a, 1)

     

    // Aprinde pe linia 2 punctul corespunzator valorii variabilei b

     

    Aprinde(b, 2)

     

    // Si acum sa definim o a treia variabila, c, si sa facem niste operatii

     

    var c = a

     

    a = b

     

    b = c

     

    // Oare ce s-a intamplat? Sa vedem in continuare

     

    // Aprinde pe linia 3 punctul corespunzator valorii variabilei a

     

    Aprinde(a, 3)

     

    // Aprinde pe linia 4 punctul corespunzator valorii variabilei b

     

    Aprinde(b, 4)

     

     

     

    Ai rulat programul anterior? E clar ce face? Spune-ti, te rog, intrebarile intr-un comentariu mai jos (sau lasa-ne cateva exemple sau idei de programe interesante ce pot fi facute cu informatiile invatate pana acum).

     

    Sursa : Igotopia.ro

     

    • Like 1
  8. Cel mai probabil nu trece nicio zi din viata ta fara sa folosesti o multime de aplicatii software. Sisteme de operare, drivere, playere audio si video, browsere, si asa mai departe. Iar daca faci o munca de birou este aproape cert ca folosesti zilnic editoare de text, programe de calcul tabelar sau diverse aplicatii specifice domeniului tau de lucru.

     

    Fie ca vorbim de calculator, tableta sau telefon, programele software sunt o prezenta ubicua in viata noastra. E greu, asadar, de gasit o alta activitate umana care sa egaleze ca impact asupra vietii noastre de astazi programarea. (O voi numi in continuare programarea calculatoarelor, caci toate dispozitivele a caror functionare se bazeaza pe software sunt in esenta niste calculatoare.)

     

    Nu e de mirare, deci, numarul mare de oameni care fie isi doresc in mod deschis, fie viseaza in secret sa aiba abilitatile unui programator. Isi doresc sa-si poata crea singuri o aplicatie care le e necesara (si care poate fie nu exista, fie este prea scumpa), sau isi doresc sa transpuna in realitate o idee de joc ce le-a incoltit in minte. Isi doresc, cu alte cuvinte, sa-si poata transpune gandurile intr-un sir de comenzi care rulate de un calculator sa dea rezultatele asteptate.

     

    Poate ca si tu iti doresti aceste lucruri.

     

    Ba poate chiar te-ai si apucat, dar ti s-a parut prea dificil si ai lasat-o balta.

     

    Am o veste pentru tine: Nu exista nicio stiinta dificila pe lumea asta, atata timp cat este explicata pe intelesul tau. In aceste conditii, mai trebuie doar sa iti doresti s-o intelegi si sa fii dispus sa depui si ceva efort.

     

    Din start iti spun: Cu efort zero obtii rezultat zero. E valabil in orice domeniu, nu doar in invatarea programarii calculatoarelor. Fie ca vrei sa iti imbunatatesti stilul de viata, fie ca vrei sa arati mai bine, fie ca vrei sa cunosti oameni interesanti, fie ca vrei sa inveti sa dansezi sau sa desenezi, trebuie sa fii dispus sa depui ceva efort.

     

    Fata de alte activitati, insa, programarea calculatoarelor ofera avantajul unei recompense foarte rapide pentru efortul depus. Vei vedea cum cu un minim de cunostinte deprinse vei putea deja sa iti exersezi creierul creand lucruri foarte simpatice si fascinante (chiar daca destul de simple, la inceput).

     

     

     

    Hai sa ne apucam de treaba!

     

    Mai intai, ce iti trebuie pentru a incepe sa inveti sa programezi un calculator?

     

    Probabil deja te gandesti ca un prim lucru absolut necesar este calculatorul. Ei bine, nu! Consider ca primele lectii pe care ar trebui sa le invete un viitor programator nu au nicio trebuinta de calculator. Adevarata creatie nu se intampla acolo. Ci adevarata creatie rezulta dintr-o reorganizare a mintii, dintr-o antrenare a creierului in directia dobandirii unei noi abilitati, a unui nou mod de a vedea lumea.

     

    (Poate ultima afirmatie ti se pare un pic exagerata. Poate ca iti doresti doar sa inveti sa faci programe de calculator, si nu sa iti schimbi modul de a vedea lumea. In cazul acesta, te rog sa nu mai citesti restul articolului si nici articolele ulterioare pe aceasta tema, fiindca n-or sa te ajute. Eu nu vreau sa te invat sa devii zugrav, ci pictor.)

     

     

     

    O foaie de hartie si un pix. Atat iti trebuie pentru a invata cea mai importanta lectie din programarea calculatoarelor.

     

    Si in ce consta aceasta lectie?

     

    Consta in a intelege faptul ca un calculator poate sa execute doar un set foarte limitat de instructiuni. Si ca orice lucru pe care ne dorim ca un calculator sa-l faca trebuie sa-l putem “sparge” intr-un sir format din aceste intructiuni pe care calculatorul le cunoaste si le poate executa. (La fel ca in jocul Tetris — avem doar cateva tipuri de piese si trebuie sa ne descurcam cu ce avem pentru a construi linii.)

     

    Sa luam un exemplu simplu. Sa zicem ca avem un calculator care stie doar sa aprinda si sa stinga un punct situat la coordonate oarecare pe un ecran de 10×10 astfel de puncte. Te rog sa desenezi pe foaia de hartie o schita a acestui ecran. Ar trebui sa arate in felul urmator.

     

     

     

     

     

    Pentru a identifica fiecare dintre cele 100 de puncte putem, de exemplu, denumi coloanele si liniile folosind numere. Astfel, punctul marcat cu rosu se gaseste pe coloana 7 si pe linia 3, deci la coordonatele (7, 3). (Punctul negru din stanga jos este situat la coordonatele (1, 1).)

     

     

     

    Am spus ca acest calculator imaginar de care vorbim stie sa aprinda si sa stinga oricare dintre cele 100 de puncte. Altfel spus, el poate executa doar doua instructiuni:

     

    Aprinde punctul de la coordonatele (x, y).

    Stinge punctul de la coordonatele (x, y).

    Putem simplifica lucrurile simplificand denumirile acestor comenzi in Aprinde(x, y) si, respectiv Stinge(x, y).

     

    Iata, in continuare, cum am putea folosi acest calculator imaginar pentru a desena o floare.

     

     

     

    Marcheaza-ti, te rog, pe foaia de hartie punctele care trebuie aprinse pentru a desena aceasta floare. Apoi noteaza-ti pentru fiecare dintre aceste puncte coordonatele. Tot ce mai trebuie acum pentru a instrui calculatorul nostru virtual sa deseneze aceasta floare este sa ii dam comenzile pentru aprinderea fiecarui punct. Te rog sa iti notezi pe foaie succesiunea de comenzi rezultata.

     

     

     

    La mine programul rezultat astfel este urmatorul:

     

    Aprinde(1, 5)

    Aprinde(1, 6)

    Aprinde(2, 2)

    Aprinde(2, 3)

    Aprinde(2, 4)

    Aprinde(2, 7)

    Aprinde(2, 8)

    Aprinde(2, 9)

    Aprinde(3, 2)

    Aprinde(3, 4)

    Aprinde(3, 7)

    Aprinde(3, 9)

    Aprinde(4, 2)

    Aprinde(4, 3)

    Aprinde(4, 5)

    Aprinde(4, 6)

    Aprinde(4, 8)

    Aprinde(4, 9)

    Aprinde(5, 1)

    Aprinde(5, 4)

    Aprinde(5, 5)

    Aprinde(5, 6)

    Aprinde(5, 7)

    Aprinde(5, 10)

    Aprinde(6, 1)

    Aprinde(6, 4)

    Aprinde(6, 5)

    Aprinde(6, 6)

    Aprinde(6, 7)

    Aprinde(6, 10)

    Aprinde(7, 2)

    Aprinde(7, 3)

    Aprinde(7, 5)

    Aprinde(7, 6)

    Aprinde(7, 8)

    Aprinde(7, 9)

    Aprinde(8, 2)

    Aprinde(8, 4)

    Aprinde(8, 7)

    Aprinde(8, 9)

    Aprinde(9, 2)

    Aprinde(9, 3)

    Aprinde(9, 4)

    Aprinde(9, 7)

    Aprinde(9, 8)

    Aprinde(9, 9)

    Aprinde(10, 5)

    Aprinde(10, 6)

     

    Poate ca programul tau aprinde punctele intr-o alta ordine, insa ce e important e faptul ca efectul final este acelasi.

     

    Acum haide sa vedem cum am putea face ca discul din centrul florii sa dispara. Evident, va trebui sa folosim instructiunea Sterge(x, y), unde (x, y) vor fi pe rand coordonatele fiecaruia dintre punctele ce construiesc acel cerc. Noteaza-ti si acest program, dupa care te rog sa-l compari cu programul listat in continuare:

     

    Sterge(4, 5)

    Sterge(4, 6)

    Sterge(5, 4)

    Sterge(5, 5)

    Sterge(5, 6)

    Sterge(5, 7)

    Sterge(6, 4)

    Sterge(6, 5)

    Sterge(6, 6)

    Sterge(6, 7)

    Sterge(7, 5)

    Sterge(7, 6)

     

     

     

    E simplu, nu? (Este ca si cum am avea un robot pe care il putem programa sa deseneze sau sa sterga un punct pe o tabla la o pozitie indicata. Dupa cum ai vazut, prin succesiuni de astfel de instructiuni simple putem realiza pe acea tabla o multime uriasa de desene. (Daca facem un mic calcul, observam ca putem construi un numar de 2^100 desene distincte. Cel mai probabil, insa, cea mai mare parte dintre aceste desene vor arata doar ca niste imprastieri aleatoare de puncte, fara nicio semnificatie.) Practic, singurul lucru care ne limiteaza este faptul ca tabla permite doar 10×10 puncte si doar doua culori (stins, si aprins). Insa intr-un calculator real aceste limitari nu sunt prezente — ci dispunem de peste 1000000 de puncte si peste 10000000 de culori.)

     

    Poate ca ceea ce ai facut pana aici ti s-a parut o joaca mult prea simpla, si care nu are mare legatura cu ideea de programare a calculatoarelor. Insa te asigur ca daca ai inteles acesta lectie si ai facut singur cele doua mici “programe” ai facut un pas urias in a intelege cum se programeaza un calculator, caci ai inteles unul dintre conceptele de baza — acela de “instructiune”.

     

    Ce ne-am face, insa, daca ne-am propune ca dupa ce am desenat aceasta floare sa desenam altceva? Cel mai indicat ar fi ca mai intai sa stergem toate punctele, dupa care sa le aprindem pe cele care compun noul desen. In cazul in care am cunoaste desenul ce a fost afisat anterior am putea, evident, sa inlocuim in programul ce l-a generat fiecare instructiune de tip Afiseaza(x, y) cu o intructiune de tip Sterge(x, y).

     

    Insa hai sa ne gandim la o situatie mai avansata, in care dintr-un motiv sau altul nu ne ramane alta solutie decat sa stergem toate punctele de pe ecran inainte de a face noul desen. Ar trebui, asadar, sa scriem 100 de instructiuni de tip Sterge(x, y). Cam mult de munca pentru un simplu ecran de 10×10 pixeli, nu? (Nici nu vreau sa ma gandesc la cazul unui ecran de 1280×800.)

     

    Banuiesti deja, sunt convins, ca exista o solutie mult mai facila decat cele 100 de instructiuni de tip Sterge(x, y). Pentru a o intelege, insa, este nevoie de conceptul de “variabila” (care este doar o denumire data unei mici bucati dintr-o memorie in care putem scrie si din care putem citi valori). Voi diseca acest concept intr-o lectie ulterioara.

     

    Sursa : Igotopia.ro

    • Like 1
  9. VideoMach este un instrument video multi-scop util pentru:

     

    High-Speed ​​Video

    Convertește imaginile de mare viteză și clipuri video pentru a slow-motion video de

    Poate afișa timp de captare reală (în milisecunde sau microsecunde) pe ieșire video

    filtre video suplimentare pentru a ajusta Balans de alb, Corectare Gamma, Luminozitate, Contrast, Saturație și Claritate

    Importuri Vision Research Phantom Format CINE (necomprimat)

    Importuri integrată Design Instrumente Format (IDT) RAW

    Importuri Fastec TS3Cine Bayer TIFF format

    Suportă altă imagine populare și formate video

     

    Timelapse Stop-Motion Animation și CGI Video

    Face conversia fotografiilor time-lapse la video de viteză maximă (cu muzică)

    Poate afișa zile / ore / minute / secunde când imaginea a fost capturat pe ieșire video

    filtre video suplimentare pentru a ajusta Balans de alb, Corectare Gamma, Luminozitate, Contrast, Saturație și Claritate

     

    GIF animat, FLI și FLC

    Cel mai simplu mod de a converti videoclipuri scurte la GIF animat, FLI sau FLC

    Poate converti o parte dintr - un film mai mare pentru GIF, FLI sau FLC

    Extracte din imagini GIF, FLI sau FLC

    Faceti o foaie de la GIF sprite, FLI sau FLC

    două treceri avansate de optimizare paleta de culori pentru cea mai bună calitate a imaginii de 256 de culori

     

    Vizualizare în paralel, Sheet și Sprite Temporal de calculare a mediei

    Paralel View: Arată mai multe videoclipuri side-by-side (folositi Tools => Matricea => paralelă)

    Fișa sprite: Pune toate imaginile de intrare pe o singură imagine (folositi Tools => Matricea => Serial)

    Media temporală: o secvență video de supraveghere zgomotoasă și pentru a produce o singură imagine de cristal clar în cazul în care puteți vedea detalii mult mai multe (Instrumente de utilizare => Temporal Media)

     

    Video pentru a converti imagini

    Video de export la o secvență de JPG, PNG, TIFF, BMP, TGA, PCX, XPM și alte formate de imagine

     

    Se extrage audio din video

    Se extrage pista audio (sau o parte a acestuia) de la video

     

    Link de descarcare : CLICK

  10. Fi atent .

    Spune-mi niste Grade care le vrei pe server + Accesele lor .

    Users.ini il fac eu de la 0 .

    P.S Adminii trebuie sa-i adaugi tu din nou

  11. Mozilla Firefox este un browser de internet gratuit , cel mai folosit browser . Mozilla vine cu o inovatie ridicata la nivel de protectie , atentionandu-te daca certificatul unui site este in neregula sau daca acel site poate pune probleme calculatorului . Mozilla este valabil pentru Windows XP / 7 / 8 / 8.1 Pro si 10 .

     

    Link de descarcare : CLICK

  12. Uite-te la inceput . Scrie asa : 

    // AMX Mod X Configuration File

    echo Executing AMX Mod X Configuration File
     
    // Default access for all non admin players (see users.ini for access details)
    //
    // Default value: "z"
    amx_default_access "z"
     
    Nu inteleg care ar putea fi problema , daca Default Acces este "z"
     
    Te sfatuiesc asa : Sa faci un nou amx_who si sa inlocuiesti users.ini ..
    Daca vrei imi lasi gradele si accesele si te pot ajuta cu pluginul si cu organizarea users.ini..
  13.  

    ; This file will store the commands used by plugins, and their access level
    ; To change the access of a command, edit the flags beside it and then
    ;   change the server's map.
    ;
    ; Example: If I wanted to change the amx_slap access to require
    ;          RCON access (flag "l") I would change this:
    ;          "amx_slap"  "e" ; admincmd.amxx
    ;          To this:
    ;          "amx_slap"  "l" ; admincmd.amxx
    ;
    ; To disable a specific command from being used with the command manager
    ;   and to only use the plugin-specified access set the flag to "!"
    ;
    ; NOTE: The plugin name at the end is just for reference to what plugin
    ;       uses what commands.  It is ignored.
     
    "amx_statscfgmenu" "h" ; statscfg.amxx
    "amx_statscfg" "h" ; statscfg.amxx
    "amx_reloadadmins" "h" ; admin.amxx
    "amx_addadmin" "l" ; admin.amxx
    "amx_kick" "c" ; admincmd.amxx
    "amx_ban" "d" ; admincmd.amxx
    "amx_banip" "d" ; admincmd.amxx
    "amx_addban" "d" ; admincmd.amxx
    "amx_unban" "d" ; admincmd.amxx
    "amx_slay" "e" ; admincmd.amxx
    "amx_slap" "e" ; admincmd.amxx
    "amx_leave" "c" ; admincmd.amxx
    "amx_pause" "g" ; admincmd.amxx
    "amx_who" "y" ; admincmd.amxx
    "amx_cvar" "g" ; admincmd.amxx
    "amx_plugins" "y" ; admincmd.amxx
    "amx_modules" "y" ; admincmd.amxx
    "amx_map" "f" ; admincmd.amxx
    "amx_cfg" "h" ; admincmd.amxx
    "amx_nick" "e" ; admincmd.amxx
    "amx_last" "d" ; admincmd.amxx
    "amx_rcon" "l" ; admincmd.amxx
    "amx_showrcon" "l" ; admincmd.amxx
    "amx_help" "" ; adminhelp.amxx
    "amx_setlang" "h" ; multilingual.amxx
    "amx_langmenu" "" ; multilingual.amxx
    "amxmodmenu" "u" ; menufront.amxx
    "amx_menu" "" ; menufront.amxx
    "amx_cmdmenu" "u" ; cmdmenu.amxx
    "amx_cfgmenu" "u" ; cmdmenu.amxx
    "amx_speechmenu" "u" ; cmdmenu.amxx
    "amx_cvarmenu" "g" ; cmdmenu.amxx
    "amx_kickmenu" "c" ; plmenu.amxx
    "amx_banmenu" "d" ; plmenu.amxx
    "amx_slapmenu" "e" ; plmenu.amxx
    "amx_teammenu" "m" ; plmenu.amxx
    "amx_clcmdmenu" "m" ; plmenu.amxx
    "amx_mapmenu" "f" ; mapsmenu.amxx
    "amx_votemapmenu" "j" ; mapsmenu.amxx
    "amx_plugincvarmenu" "g" ; pluginmenu.amxx
    "amx_plugincmdmenu" "u" ; pluginmenu.amxx
    "amx_say" "i" ; adminchat.amxx
    "amx_chat" "i" ; adminchat.amxx
    "amx_psay" "i" ; adminchat.amxx
    "amx_tsay" "i" ; adminchat.amxx
    "amx_csay" "i" ; adminchat.amxx
    "amx_votemap" "j" ; adminvote.amxx
    "amx_votekick" "j" ; adminvote.amxx
    "amx_voteban" "j" ; adminvote.amxx
    "amx_vote" "j" ; adminvote.amxx
    "amx_cancelvote" "j" ; adminvote.amxx
    "amx_pausecfg" "h" ; pausecfg.amxx
    "amx_pausecfgmenu" "h" ; pausecfg.amxx
    "amx_off" "h" ; pausecfg.amxx
    "amx_on" "h" ; pausecfg.amxx
    "amx_destroy" "s" ; amx_destroy.amxx
    "amx_freeze" "e" ; amx_freeze.amxx
    "amx_unfreeze" "e" ; amx_freeze.amxx
    "amx_gag" "m" ; amx_gag.amxx
    "amx_ungag" "m" ; amx_gag.amxx
    "amx_lastip" "d" ; amx_last&show.amxx
    "amx_showip" "c" ; amx_last&show.amxx
    "amx_execclient" "m" ; amx_exec.amxx
    "amx_execall" "m" ; amx_exec.amxx
    "amx_execteam" "m" ; amx_exec.amxx
    "amx_reloadvips" "h" ; zm_vip.amxx
    "zp_giveap" "l" ; zp_extra_give_ammopaks.amxx
    "amx_giveap" "l" ; zp_extra_give_ammopaks.amxx
    "amx_color" "i" ; admin_chat_colors.amxx
    "amx_namecolor" "i" ; admin_chat_colors.amxx
    "amx_listen" "i" ; admin_chat_colors.amxx
    "amx_ct" "e" ; transfer.amxx
    "amx_t" "e" ; transfer.amxx
    "amx_spec" "e" ; transfer.amxx
    "amx_banlist" "d" ; advanced_bans.amxx

     

    Nu vad nimic suspect ... M-am informat putin pe internet si din cate vad,  s-ar putea sa fie o problema din amxx.cfg . Te rog din nou sa copiezi continutul amxx.cfg si sa-l postezi aici :)

    P.S Iti sugerez sa nu mai adaugi admini cu amx_addadmin

  14. Salut !

    Cred ca problema este la documentul CmdAcces.Ini din amxmodx/configs

    Poti te rog sa faci o copie din ce scrie acolo si sa o postezi aici ?

     

    Cu stima ,

    S1NnOpTic

    • Like 1
  15. Buna ziua ! 

     

    Schimb cont LoL  , Nivel 30 , Bronz 1 , Sezonul anterior a fost S5 , 49 campioni si urmatoarele skinuri :

    =Unchained Alistar 

    =Woad Ashe

    =Riot Girl Tristana

    =Dreadknight Garen

    =RagDoll Poppy

    =Warring Kingdoms Nidalee

    =Reaper Soraka

    =Definetly Not Udyr

    =Frosted Ezreal

    =Happy Elf Teemo

     

    Doresc in schimb un cont cu peste 65 de campioni , nu conteaza skinurile , poate sa fie si fara , nu conteaza divizia . Un simplu cont cu mai multi campioni decat am eu ..

    Cine este doritor ma poate contacta pe Facebook sau la adresa de Y!M : gabi.crucifix@yahoo.com

    Nick-ul contului de LoL este : S1NnOpTic

  16. Hard Disk Sentinel (HDSentinel) este un software de monitorizare și analiză multi-sistem de operare SSD și HDD. Scopul său este de a găsi, de testare, diagnosticarea și repararea problemelor de unitate hard disk, raportul și SSD de afișare și sănătate HDD, degradări de performanță și eșecuri. Hard Disk Sentinel oferă descriere completă textuale, sfaturi și display - uri / rapoarte mai complete informații cu privire la hard disk - urile și discurile în stare solidă din interiorul computerului și în incinte externe ( hard disk - uri USB / e-SATA hard discuri). Multe alerte diferite și opțiuni de raport sunt disponibile pentru a asigura siguranța maximă a datelor valoroase.

     

    Nu este nevoie să utilizeze instrumente separate pentru a verifica dacă hard disk - uri interne, hard disk - uri externe, SSD - uri, unități de disc hibrid (sshd), discuri în matrice RAID ca toate acestea sunt incluse într - un singur software.

     

    Hard Disk Sentinel monitorizează hard starea unității HDD / HDD , inclusiv de sănătate, temperatura și toate SMART (Self-monitorizare, analiză și raportare Tehnologie) , valori pentru toate discurile dure. De asemenea, ea măsoară viteza de transfer de disc în timp real, care poate fi utilizat ca punct de referință sau pentru a detecta eventualele erori de pe hard disk, degradări de performanță.

     

    Dovedit de neprețuit pe serverul nostru de backup

     

    HDSentinel este soluția perfectă de protecție a datelor: acesta poate fi utilizat în mod eficient pentru a preveni eșecul HDD și pierderea de date SSD / HDD, deoarece are sistemul cel mai sensibil rating de sănătate pe disc, care este extrem de sensibil la problemele de disc. In acest fel chiar și o problemă HDD mică nu poate fi ratat. Versiunea Professional a programat și automat (on-problemă) opțiuni de backup pe disc pentru a preveni pierderea de date cauzate de nu numai eșec, ci prin programe dăunătoare sau accidentale șterge, de asemenea .

    Cum funcționează Hard Disk Sentinel?

    Hard Disk Sentinel se execută în fundal și verifică starea de sănătate SSD / HDD prin inspectarea stării SMART a discului (e). În cazul în care este găsită o eroare sau este detectat un comportament neașteptat, avertizează utilizatorul cu privire la situația actuală și, de asemenea, poate realiza acțiuni adecvate (de exemplu, începe un backup automat).

     

    De obicei, starea de sănătate hard disk poate să scadă lent, de la o zi la alta. Tehnologia de monitorizare SMART poate prezice eșec HDD prin examinarea valorilor critice ale unității de disc. În comparație cu alte software - uri, Hard Disk Sentinel detectează și raportează orice problemă de disc. Este mult mai sensibil la erorile de disc și poate afișa o mai bună și mai detaliate informații despre disc de viață grea de așteptat, iar problemele constatate (dacă este cazul). Acesta este un mod mai sofisticat de a prezice eșecuri decât metoda "tradiționale": verificarea pragurilor de atribute SMART și valori numai. Pentru mai multe informații, vă rugăm să citiți cât de hard disk - ul funcționează SMART și de ce Hard Disk Sentinel este diferit.

     

    Software-ul afișează temperatura curentă hard disk și înregistrează temperaturi medii HDD maxime și. Acest lucru poate fi utilizat pentru a verifica temperatura maximă sub sarcină mare pe hard disk. Pentru importanța temperaturii de operare pe hard disk, consultați întrebările frecvente . A se vedea lista de caracteristici ale Hard Disk Sentinel Professional sau noastre produse pentru monitorizarea hard disk .

     

    Am nevoie de Hard Disk Sentinel?

    În cazul în care utilizați un calculator echipat cu cel puțin un hard disk sau disc SSD și doriți să se asigure că datele vor fi disponibile în orice moment, atunci răspunsul este DA. Hard Disk Sentinel este conceput special pentru tine, dacă

    utilizați mai multe unități de discuri / SSD - uri / hibrid hard (sshd) pe computer (IDE / Serial ATA (S-ATA, e-SATA) / NVMe / SCSI / SAS / hard disk - uri USB ) sau într - o incintă exterioară (verificați compatibilitate hardware pagini pentru lista de hardware compatibile)

    -utilizați un raft mobil / amovibil sau carcasă cu hard disk interior

    -folosiți un calculator notebook-uri

    -pe care îl utilizați pentru desktop sau server de calculatoare cu încărcare mare disc

    -doriți pentru a maximiza stabilitatea sistemului, performanța HDD și integritatea generală, de a primi alerte HDD la temperatură ridicată sau scăzută de sănătate

    -nu doriți să pierdeți datele sensibile și valoroase, nu doresc să plătească pentru recuperare HDD

    Este mult mai bine pentru a evita eșecul HDD decât de recuperare de utilizare HDD. Să fie alertat și pentru a preveni pierderea de date HDD cu HDSentinel! Fii viata ta HDD sănătos.

     

    Link de descarcare : CLICK

  17. Cateva trasaturi : 

     

    =>Caută instantaneu

     

    Caută și navighează din aceeași casetă. Alege dintre rezultatele și sugestiile care apar pe măsură ce introduci text, inclusiv din căutările recente și din site-urile accesate și găsește ceea ce dorești cât ai clipi. Caută din caseta polivalentă

     

    =>Tastează mai puțin

     

    Te-ai săturat să completezi mereu formulare web cu aceleași informații? Folosind completarea automată, poți să completezi formularele cu un singur clic. Funcționează pe mai multe dispozitive, deci vei scăpa de tastarea pe ecrane mici. Începe să folosești completarea automată

     

    =>Reia de unde ai rămas

     

    Chrome îți aduce filele deschise, marcajele și căutările recente de pe computer pe telefon sau pe tabletă și invers. Astfel, experiența web este aceeași pe toate dispozitivele. Pentru a începe sincronizarea, conectează-te pe celelalte dispozitive.

     

    => Poate fi folosit pe Windows 7 , 8 , 8.1 Pro si 10 

     

    => Valabil pe Telefon , Tableta sau PC

     

    Link de descarcare : CLICK 

  18. Dacă ați fost vreodată în imposibilitatea de a șterge un fișier în Windows, și nu va puteti da seama ce program îl utilizează, Unlocker este soluția. V-ați văzut vreodată aceste mesaje de eroare pentru Windows?

     

    =>Nu se poate șterge un dosar: Acesta este utilizat de către o altă persoană sau program

    =>Nu se poate șterge fișierul: Access este refuzat

    =>A avut loc o violare de partajare.

    =>Sursa sau destinația fișierului poate fi utilizat.

    =>Fișierul este utilizat de către un alt program sau utilizator.

    =>Asigurați-vă că discul nu este plin sau protejat la scriere și că fișierul nu este în prezent în uz.

     

    Unlocker poate ajuta! Pur și simplu faceți clic dreapta pe folderul sau fișierul și selectați Unlocker. În cazul în care dosarul sau fișierul este blocat, va apărea o listă de fereastra dulapurile. Pur și simplu faceți clic pe Deblocare Toate și ați terminat!

     

    Link descarcare : CLICK

  19. Nick-ul tău: S1NnOpTic
    Prenume: Gabi
    Vârsta: 20 
    Locaţia: Bucuresti 
    Ocupaţie:Developer
    Jocul(rile) preferat(e): League of Legends, Counter Strike 1.6 
    Hobby-urile tale:  Nu prea am ..
    Interese: -
    Descriere personala: Imi place sa comunic si sa am responsabilitati .
    De unde ai aflat de Comunitatea Rangfort?:  De pe google .
    Numele prietenilor aflati în comunitate (dacă există): Inca nu am vazut pe nimeni care sa-mi fie cunoscut .
    O frază de sfârşit : Bafta tuturor si va urez un Paste Fericit !

×
×
  • Create New...