Jump to content

La mulți ani România! Quest & Gift disponibil pe serverele de sa-mp, detalii aici

Vesca

UP-Team
  • Content Count

    629
  • Joined

  • Last visited

Community Reputation

254 Extraordinary

About Vesca

  • Rank
    Mr. Know it all
  • Birthday 02/10/1999

Profile Information

  • Gender
    Male
  • Location
    Timisoara
  • Hobbies
    Programming

Previous Fields

  • Real name
    Damian-Teodor Beles
  • RPG2 Nickname
    Vesca
  • CS 1.6 Nickname
    Hatake

Recent Profile Visitors

4717 profile views
  1. Vesca

    Dimpotriva, tin sa te contrazic. E mai usor de inteles ce face: int a = 5, b = 7; std::swap(a, b); (e limba engleza, swap = interschimbare, e ca si cum ai citi) decat: int a = 5, b = 7, temp; temp = a; a = b; b = temp; Desigur, e bine sa stii ce face functia in spate, dar e mai usor de inteles cu functii, de aceea limbajele de programare High Level (python, Java, C# etc.) sunt mai populare, deoarece au functii interne numeroase care ajuta programatorul sa scrie codul mai usor. Asta' din nou, zic din experienta. Am avut ocazia sa predau unor studenti de la o facultate de prestigiu din Romania care dupa ce le-am aratat niste functii interne au venit cu intrebari precum: "Vrei sa zici ca am facut cursul de P1 degeaba?", "De ce la cursuri nu ne invata asa ceva si ne pune sa scriem 10 linii in loc de 1?" sau chiar "Mai are rost sa merg la curs? Am invatat in 4 ore tot cursul." Raspunsul meu a fost: "La curs va invata logica din spate, intai trebuie sa ganditi, apoi sa o luati pe scurtatura cu functii de genul." Deci nu sunt contra ce faci tu, chiar incurajez. Sunt contra gandirii care nu progreseaza.
  2. Vesca

    std::string custom_reverse(std::string input) { // se poate pune input.size() in for, deoarece e O(1) // nu e O(N) precum functia strlen() for (int npos = 0; npos < input.size() / 2; ++npos) { std::swap(input[npos], input[input.size() - npos - 1]); } return input; } P.S. se scrie "stringul". Sa nu crezi ca am ceva cu tine ca te tot corectez. Consider ca ai o gandire matura si nu te superi, ci dimpotriva, o iei ca atare si inveti din greseli. Un om intelept intodeauna cauta sa stie mai multe. DOOM 2 (Dicționar ortografic ortoepic și morfologic al limbii române): CRATIMA ... Ai si in acest topic explicata utilizarea cratimei in cuvintele imprumutate din alte limbi:
  3. Vesca

    @shanker' Problema de pe PBINFO: Date de intrare Fișierul de intrare palindrom.in conține pe prima linie un număr natural n, iar pe următoarele n linii câte un cuvânt alcătuit din litere mici ale alfabetului englez. Dupa cum am mai zis si in alte topicuri, citeste enuntul problemei. Daca citesti enuntul cu atentie, vei ajunge sa eficientizezi toate programele pe care le scrii. Oricum, nu de acolo am zis ca e mai eficient, ci din alta perspecitva. Functia std::reverse face doar N / 2 operatii (unde N este dimensiunea stringului), functioneaza dupa modelul: string: 1234 size: 4 PAS 1: inverseaza 1 cu 4 -> devine 4231 PAS 2: inverseaza 2 cu 3 -> devine 4321 2 pasi pentru size 4 Tu ce faci? Pentru fiecare caracter noul string += cel mai din dreapta caracter: string: 1234 size 4: PAS 1: nou_string += 4 -> nou_string = 4 PAS 2: nou_string += 3 -> nou_string = 43 PAS 3: nou_string += 2 -> nou_string = 432 PAS 4: nou_string += 1 -> nou_string = 4321 Asta' e prima observatie, a 2-a fiind faptul ca operatorul "+=" de la std::string nu e O(1), ci worst case e O(N) unde N este dimensiunea stringului. Ceea ce inseamna ca IN TOTAL (folosesti de N ori operatorul "+=") ai N * (N - 1) / 2) operatii, ceea ce inseamna O(N ^ 2) worst case, pe cand cu std::reverse worst case e O(N). O(N) < O(N ^ 2), ai aici un articol despre complexitati: https://ro.wikipedia.org/wiki/Complexitate_în_timp Oricum, recomand versiunea in engleza, deoarece cea in romana nu acopera toate subiectele, asta desigur, daca vrei sa progresezi. Desigur, daca problema presupune ca sunt si litere mari (nu e cazul acum), sunt de acord cu functia std::transform cu o functie lambda inauntrul ei. Felicitari pentru idee
  4. Vesca

    Descriere: Aplicatia este un joc de tip Snake classic, avand un numar specificat de mancare pana la castig. In cadrul aplicatiei exista posibilitatea de creare a noi nivele cu ajutorul "Level Creator"ului.Poze / Video (obligatoriu): Link download: https://github.com/damianbeles/Snake-GameAlte precizari: Da, n-am.
  5. Vesca

    O alta varianta mai eficienta ar fi: #include <algorithm> #include <iostream> #include <string> bool is_palindrome(std::string input) { std::string reversed_input = input; std::reverse(reversed_input.begin(), reversed_input.end()); return reversed_input == input; } int main() { std::string input; std::cin >> input; if (is_palindrome(input)) { std::cout << "E palindrom!\n"; } else { std::cout << "Nu e palindrom!\n"; } return 0; }
  6. @Clanin3, @shanker' DATE DE INTRARE PROBLEMA: Fişierul de intrare minmax.in conţine pe prima linie numărul n si pe a doua linie n numere naturale separate prin spaţii. Despre numere naturale: https://ro.wikipedia.org/wiki/Număr_natural Long story short: Numar natural = orice numar intreg >= 0. Nu se pune problema numerelor negative aici. Citim problema si dupa ne dam cu presupusul, zic.
  7. Hi, here is a much simpler and cleaner code. Have a look: #include <algorithm> #include <iostream> #include <vector> int main() { int N; std::cout << "Enter the array size: "; std::cin >> N; std::vector<int> input(N); // <- HERE IS INITIALIZED A VECTOR OF SIZE N (DYNAMICALLY ALLOCATED) // YOU DON'T NEED A WORKAROUND FOR THIS LIKE THE NORMAL ARRAY WHERE YOU MUST GIVE A BIGGER SIZE // AND THEN HAVE N SMALLER std::cout << "Enter the elements of the array: "; for (auto& element : input) { // <- C++'s foreach std::cin >> element; // <- READ THE ARRAY ELEMENTS } std::cout << "The maximum element is: " << *std::max_element(input.begin(), input.end()) << "\n"; std::cout << "The minimum element is: " << *std::min_element(input.begin(), input.end()) << "\n"; int sum = std::accumulate(input.begin(), input.end(), 0); std::cout << "The sum of the array is: " << sum << "\n"; std::cout << "The average of the array is: " << 1.0 * sum / N << "\n"; return 0; } You don't need to reinvent the wheel. Use the functions that already exist inside the language. If you have any questions about the code, feel free to ask. Gaining knowledge means gaining power ;)
  8. Huh, ce ma amuzi. Eu dau o informatie, daca vad interes mai departe de la interlocutor ca vrea sa stie mai multe despre ea, ii explic cu drag. Daca nu il intereseaza, n-are rost sa explic degeaba, logic, nu? Acum, pe tine vad ca te intereseaza de ce nu am folosit 'using namespace std;', deci am sa-ti explic. Daca @shanker' venea la randul lui cu intrebari despre argumentele mai sus scrise, ii explicam cu placere. De obicei, cand folosesti mai multe librarii (de exemplu boost) o sa ai name collisions: (function din boost si std, shared_ptr din boost si std etc.). Exemplu: #include <iostream> namespace a { void foo() { std::cout << "a"; } } namespace b { void foo() { std::cout << "b"; } } using namespace a; using namespace b; int main() { foo(); return 0; } O sa ai o eroare la compilare: compilatorul nu stie care "foo" sa-l apeleze, cel din namespace a sau cel din namespace b? De aceea, best practice e sa folosesti scope resolution operator (::).
  9. Vesca

    Critici (constructive): Cand rezolvi o problema de informatica, te uiti la restrictii: "elementele vectorului vor fi mai mici decât 1000000". Deci la tine min ar trebui sa porneasca de la 1000000 (mai mic decat ceva inseamna mai mic strict, nu si egal), nu de la INT_MAX (oricum nu este un procedeu bun sa hardcodezi asa valoarea, vezi exemplul meu cum ar trebui scris) "int Numar[X]" -> nu toate compilatoarele accepta aceasta sintaxa, ti-as sugera sa citesti despre alocarea dinamica sau despre vectori (in exemplul meu voi folosi vector), oricum, din nou, enuntul problemei iti sare in ajutor: "0 < n < 1000" deci poti scrie "int Numar[1001]" lejer. (Se da asa in enunt pentru ca aceasta problema este conceputa pentru clase gimnaziale (5-6), stiu ca pe site scrie clasa a 9-a dar copii care se apuca de programare de tineri o fac mult mai repede). Voi folosi 2 exemple, sa vezi doua moduri diferite de rezolvare: nu salvezi numerele intr-un tablou unidimensional (nu ai de ce, consuma timp si e mai eficient sa rezolvi problema direct din citire) aloci dinamic un tablou unidimensional pentru cate elemente ai nevoie si aplici algoritmi deja existenti pe el Varianta 1: #include <algorithm> // min, max #include <limits> // numeric_limits #include <iostream> // cin, cout int main() { int current_max = std::numeric_limits<int>::min(); // INT_MIN int current_min = std::numeric_limits<int>::max(); // INT_MAX int n; std::cin >> n; int current_item; while (n--) { std::cin >> current_item; current_max = std::max(current_max, current_item); current_min = std::min(current_min, current_item); } std::cout << current_min << " " << current_max << "\n"; return 0; } Varianta 2: #include <algorithm> // min_element, max_element #include <iostream> // cin, cout #include <vector> // vector int main() { int n; std::cin >> n; std::vector<int> input(n); // alocare dinamica in constructor (c.f. clase) for (auto& elem : input) { // c++'s foreach std::cin >> elem; } std::cout << *std::min_element(input.begin(), input.end()) << " "; std::cout << *std::max_element(input.begin(), input.end()) << "\n"; return 0; } Concluzie: Keep the code clean and easy to read & understand.
  10. Salut! Iti scriu din perspectiva unui tip care are urmatoarele "life achievements": Current Software Tool Development Technician @ Veoneer Former Junior Software Engineer @ Nokia Experienta in industrie de peste 2 ani, (in curent fiind in an terminal la o facultate de Informatica) Premii la olimpiade si concursuri de IT, atat nationale cat si internationale As vrea sa iei aceasta critica ca fiind una constructiva (ai scris in titlu ca programul e C++ asadar voi argumenta ca atare): Din respect fata de limbajul C++, nu folosi camelCase cand scrii C++ decat daca deja proiectul e scris in acest fel (asa am avut eu la Nokia). Pentru a fi in pas cu STL si alte librarii care sunt fidele snake_case (case-ul de baza al C++) precum boost, foloseste si tu snake_case. Daca ai inceput cu cin, nu folosi printf pentru afisare, foloseste cout. (Oricum cout este mai eficient decat printf, iar printf e error-prone daca nu pui bine formatul si e greu sa faci debug). Intotdeauna foloseste brackets ({}) chiar daca nu e nevoie. Foloseste cat mai multe functii deja existente, nu reinventa roata (acest lucru te ajuta sa menti codul cat mai mic si curat) Varianta mea (nerafinata, se poate mai bine): #include <cctype> // tolower #include <cstring> // strchr #include <iostream> // cin, cout int main() { char input[256]; std::cin >> input; int vocale = 0, consoane = 0; for (int npos = 0; input[npos]; ++npos) { // ultima pozitie din input este '\0', deci input[npos] va fi '\0' si se va opri din executie if (std::strchr("aeiou", std::tolower(input[npos]))) { // verifica daca al doilea argument se afla in primul sir (returneaza pozitia sau null pointer in caz ca nu exista) vocale++; } else { consoane++; } } std::cout << "Cuvantul " << input << " are " << vocale << " vocale si " << consoane << " consoane!\n"; return 0; } in:> lapte out:> Cuvantul lapte are 2 vocale si 3 consoane! Aprecieri: Ai scos strlen() din for, ceea ce e bine din punct de vedere al performantei. Reduci timpul de la O(N^2) la O(N); Nu ai folosit using namespace std; Post Scriptum: Modifica titlul din: [C++] Algoritm pentru afișarea numărului de vocale și consoane dintr-un număr in [C++] Algoritm pentru afișarea numărului de vocale și consoane dintr-un cuvânt
  11. Azi și mâine sunt in București, pentru cei ce vor sa ne vedem.

  12. Hello, te'ai gândit vreodată că nu îți ajung banii sa'ti prelungești clanul luna viitoare? Că nu ai suficient gold pentru a cumpăra produsul dorit sau pur și simplu ai nevoie de niste bănuți in plus?

     

    Creeaza'ti chiar acum un cont revolut accesând link-ul de mai jos și primești 50 RON gratis la prima comanda cu cardul care îl vei primi tot gratis.

    https://revolut.com/referral/damiangczy!G10D21

     

    1. Styleeer
    2. eB Zeldris

      eB Zeldris

      Cea mai proasta incercare de a atrage oamenii sa-ti foloseasca refferal-ul pe site-ul ala. La munca baiatu', bani nu vin pe milogeala. Plus ca e degeaba dai asta aici. Cati crezi ca au 18 ani? 😁😓😁 

  13. Vesca

    Nick: Vesca Cine ti-a aprobat ziarul?: Vesca Cine ti-a corectat ziarul (+ dovada)?: Vesca Poza cu ziarul: https://imgur.com/zf9rs9I Alte precizari: Daca citesti asta' sa stii ca ai respectul meu.
  14. Vesca

    Nume: Vesca Emisiunea acordata: Spanzuratoarea Poza [/livemembers]: https://imgur.com/xIP2PwC Poze din timpul emisiunii: https://imgur.com/a/18Kfzdy Alte precizari: Da, esti ce trebe'.
  15. Vesca

    Doamne ajuta. Esti bine venit
×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.