ardek66 / proiect-oop-orca

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Orca-cpp

Implementare a limbajului de programare ezoteric Orca.

Orca este un limbaj de programare ezoteric conceput pentru a crea rapid secvențiatoare procedurale, în care fiecare literă a alfabetului este o operație, unde literele minuscule operează la fiecare "bataie" , iar literele majuscule operează la fiecare cadru.

Se opereaza asupra unui grid, cu un cursor marcat cu "@". Miscarea cursorului se face cu sagetile, iar dimensiunea selectiei se schimba cu WASD.

https://100r.co/site/orca

Comenzi:

  • Cursorul se muta cu sagetile
  • Spatiu pune pauza/continua simularea
  • tastele 0..9, a..z, si A..Z, populeaza grid-ul

Instructiuni implementate

  • A: Adauga elementele din stanga si dreapta in jos
  • B: Scade elementele din stanga si dreapta in jos
  • C: Incrementeaza in jos, la cate n frame-uri, modulo dreapta, (unde n este valoarea din stanga)
  • E: Se muta in est
  • I: Incrementeaza in jos, cu valoarea din stanga, modulo valoarea din dreapta
  • M: Inmulteste elementele din stanga si dreapta in jos
  • W: Se muta in vest
  • N: Se muta in nord
  • S: Se muta in sud
  • X: Copiaza valoarea din dreapta cu n spatii mai jos, (unde n este valoarea din stanga)

Exemplu:

La fiecare 2 cadre, calculeaza nr cadrului curent in modulo 35 si modulo 15

.2Cz
1X..
.1X.
..If

Demo cu sir de cifre

......
.gC3..
2X....
...8Ca
...X..
..X...

Cifrele de la 0 la 5, inainte si inapoi

4Ca.
..B5

Inversarea unui string

...C6......
..5B.......
21X........
...........
..5B.6Tmere
11X........
......J....
....0X.....
...........

Important!

Aveți voie cu cod generat de modele de limbaj la care nu ați contribuit semnificativ doar în folder-ul generated. Codul generat pus "ca să fie"/pe care nu îl înțelegeți se punctează doar pentru puncte bonus, doar în contextul în care oferă funcționalități ajutătoare și doar dacă are sens.

O cerință nu se consideră îndeplinită dacă este realizată doar ca o serie de apeluri proxy către cod generat.

Cerințe modele de limbaj la nivel de semestru

  • minim o funcționalitate majoritar doar cu LLM
  • minim 2-3 funcționalități ~50% voi, ~50% LLM-ul
  • minim 2-3 funcționalități suficient de complicate pe care un LLM nu le poate implementa

Tema 0

  • Nume proiect (poate fi schimbat ulterior)
  • Scurtă descriere a temei alese, ce v-ați propus să implementați

Tema 1

Cerințe

  • definirea a minim 3-4 clase folosind compunere cu clasele definite de voi
  • constructori de inițializare
  • pentru o aceeași (singură) clasă: constructor de copiere, operator= de copiere, destructor
  • operator<< pentru toate clasele pentru afișare (std::ostream)
  • cât mai multe const (unde este cazul)
  • implementarea a minim 3 funcții membru publice pentru funcționalități specifice temei alese, dintre care cel puțin 1-2 funcții mai complexe
    • nu doar citiri/afișări sau adăugat/șters elemente într-un/dintr-un vector
  • scenariu de utilizare a claselor definite:
    • crearea de obiecte și apelarea tuturor funcțiilor membru publice în main
    • vor fi adăugate în fișierul tastatura.txt DOAR exemple de date de intrare de la tastatură (dacă există); dacă aveți nevoie de date din fișiere, creați alte fișiere separat
  • tag de git: de exemplu v0.1
  • serviciu de integrare continuă (CI); exemplu: GitHub Actions

Tema 2

Cerințe

  • separarea codului din clase în .h (sau .hpp) și .cpp
  • moșteniri:
    • minim o clasă de bază și 3 clase derivate
    • ierarhia trebuie să fie cu bază proprie, nu derivată dintr-o clasă predefinită
    • clasă cu atribut de tip pointer la o clasă de bază cu derivate
    • funcții virtuale (pure) apelate prin pointeri de bază din clasa care conține atributul de tip pointer de bază
      • minim o funcție virtuală va fi specifică temei (e.g. nu simple citiri/afișări)
      • constructori virtuali (clone): sunt necesari, dar nu se consideră funcții specifice temei
    • apelarea constructorului din clasa de bază din constructori din derivate
    • smart pointers (recomandat, opțional)
    • dynamic_cast/std::dynamic_pointer_cast pentru downcast cu sens
  • suprascris cc/op= pentru copieri/atribuiri corecte, copy and swap
  • excepții
    • ierarhie proprie cu baza std::exception sau derivată din std::exception; minim 3 clase pentru erori specifice
    • utilizare cu sens: de exemplu, throw în constructor (sau funcție care întoarce un obiect), try/catch în main
  • funcții și atribute static
  • STL
  • cât mai multe const
  • la sfârșit: commit separat cu adăugarea unei noi clase derivate fără a modifica restul codului, pe lângă cele 3 derivate deja adăugate
    • noua derivată nu poate fi una existentă care a fost ștearsă și adăugată din nou
  • tag de git: de exemplu v0.2

Tema 3

Cerințe

  • 2 șabloane de proiectare (design patterns)
  • o clasă șablon cu sens; minim 2 instanțieri
    • preferabil și o funcție șablon (template) cu sens; minim 2 instanțieri
  • tag de git: de exemplu v0.3 sau v1.0

Resurse

  • SFML (Zlib)
  • adăugați trimiteri către resursele externe care v-au ajutat sau pe care le-ați folosit

About


Languages

Language:C++ 68.3%Language:CMake 28.0%Language:Shell 2.9%Language:C 0.8%