Scopul acestui task este sa folositi doar stiva, prin operatii push si pop, pentru a lucra cu memoria.
Dupa sucesul de la Baku, Ferrari si-au dat seama ca mesajele criptate au functionat, iar Mercedes nu a avut nici o sansa impotriva lor. Dar din pacate Red Bull si-au dat seama foarte rapid ce vor sa faca, asa ca dupa ce au trecut calificarile, nu au mai avut nici o sansa impotriva echipei austriace.
Dar cei de la Ferrari si-au dat seama ca nu pot sa ii intreaca la inteligenta pe cei de la Red Bull, asa ca s-au gandit la un mod cat mai simplu de a cripta un mesaj. Ei s-au gandit sa ia fiecare vocala din mesajul lor, si sa le afiseze doar pe ele in ordine inversa. Asadar, atunci cand o sa vrea ei vreodata sa vorbeasc despre Red Bull, tot ce va trebui sa faca e sa afiseze mesajul:
rud bell // "red bull" cu vocalele scrise in ordine inversa
Asa, Red Bull nu va stii niciodata ca vorbesc despre ei. Din pacate aceasta metoda nu este la fel de eficienta daca vrem sa vorbim despre Mercedes, dar avem celalalt mod de encriptare, asa ca ar trebui sa le iasa.
Pentru a implementa functia noastra, trebuie sa pornim de la string-ul primit ca parametru, si sa facem toate modificarile in place. Nu aveti voie sa va definiti un alt vector pentru a pastra o copie a string-ului sau pentru a stoca vocalele (dar in schimb aveti voie sa va definiti un vector pentru a stoca “aeiou”).
void reverse_vowels(char *string);
Aceste string-ul vor contine doar litere mici ale alfabetului englez si whitespace
"hello" -> "holle" "max verstappen" -> "mex varsteppan"
Nu este este permisa apelarea altor functii externe in afara de strchr.
Scopul acestui task este sa apelati diverse functii pentru anumiti parametrii ai functiei cerute.
Am vazut ce poate face Aston Martin cu noua lor masina, scotand numai locuri pe podium in ultimele curse. Dar isi doresc victoria campionatului, asa ca inginerii AM decid sa sparga baza de date Mercedes pentru a gasi diverse upgrade-uri care i-ar putea ajuta in functie de circuit.
Cand au reusit in sfarsit sa sparga aceasta baza de date, au descoperit ca, desi Mercedes este o echipa avansata din punctul de vedere al ingineriei, nu au instalat pe aceasta comanda pwd.
Pentru acest task trebuie implementata urmatoarea functie, care reprezinta folderul curent care se obtine dupa aplicarea comenzii cd din Linux asupra unor directoare, in ordinea in care acestea apar. Se vor implementa si ”.” (folder curent) si ”..” (folder anterior).
void pwd(char **directories, int n, char *output)
Parametrii acestei functii sunt urmatorii:
Comportamentul functiei cd cu argumentul ”..” este asemanator cu cel din Linux, deci aceasta va produce un efect doar daca exista un folder parinte pentru cel curent.
n = 5 directories = home folder1 . folder2 .. folder3
output = /home/folder1/folder3
Comportamentul este urmatorul:
Mecanicii de la Haas s-au plictisit in timpul steagurilor rosii, asa ca s-au decis sa joace un joc de scrabble. Pentru ca li s-a parut fun, au decis ca pot folosi doar cuvinte din propozitiile spuse de cei inginerii radio.
Pentru acest task veți avea de separat un text în cuvinte dupa niște delimitatori și, după aceea, să sortați aceste cuvinte folosind funcția qsort. Sortarea se va face întâi după lungimea cuvintelor și în cazul egalitații se va sorta lexicografic.
Va trebui să implementați 2 funcții cu semnăturile void get_words(char *s, char **words, int number_of_words);
și void sort(char **words, int number_of_words, int size);
din fișierul task3.asm.
Antetul primei funcții este:
void get_words(char *s, char **words, int number_of_words);
Semnificația argumentelor este:
Atenție, funcția nu returnează nimic, cuvintele se salveaza in vectorul words!
Antetul celei de-a doua funcții este:
void sort(char **words, int number_of_words, int size);
Semnificația argumentelor este:
Atenție, funcția nu returnează nimic, sortarea se face in-place!
number_of_words: 9 s: "Ana are 27 de mere, si 32 de pere." dupa apelul get_words: words = ["Ana", "are", "27", "de", "mere", "si", "32", "de", "pere"] dupa apelul sort: words = ["27", "32", "de", "de", "si", "Ana", "are", "mere", "pere"]
Scopul acestui task este de a va obisnui cu apeluri de functii si recursivitate in limbajul de asamblare.
Strategiile din timpul cursei sunt foarte importante, asa ca inginerii de la McLaren au inceput sa dezvolte un sistem de predictie pentru cea mai buna strategie pentru pitstops si pneuri. Au nevoie de voi insa sa ii ajutati sa implementeze anumite functionalitati peste o structura de date cunoscuta voua deja, si anume arbore binar.
In cadrul acestui task veti lucra cu un arbore binar, ale carui noduri au urmatoarea structura:
struct node { int value; struct node *left; struct node *right; } __attribute__((packed));
Primul exercitiu consta in parcurgerea unui arbore binar de cautare in inordine si de a stoca valorile din noduri.
inorder_parc(struct node *node, int *array);
Functia primeste ca argumente:
Al doilea exercitiu consta in parcurgerea unui arbore binar de cautare in inordine si de a stoca valorile din nodurile care nu respecta proprietatea de arbore binar de cautare.
inorder_intruders(struct node *node, struct node *parent, int *array);
Functia primeste ca argumente:
Proprietatea care ne intereseaza este formata din cele doua inegalitati:
Al treilea exercitiu consta in parcurgerea unui arbore binar de cautare in inordine si de a modifica valorile din nodurile care nu respecta proprietatea de arbore binar de cautare.
inorder_fixing(struct node *node, struct node *parent);
Functia primeste ca argumente:
Proprietatea care ne intereseaza este formata din cele doua inegalitati:
Algoritmul dupa care vor fi modificate valorile gresite este urmatorul:
Checkerul poate fi folosit individual pentru fiecare exercitiu, nu inainte de a compila sursele folosind make:
Pentru a verifica toate exercitiile simultan folositi ./checker. Veti primi feedback (failed / passed) pentru fiecare test in parte, iar la final un punctaj provizoriu.
Temele vor trebui încărcate pe platforma Moodle, in cadrul assingment-ului Tema 3 și vor fi testate automat.
python3 local_checker.py --zip
pentru a crea arhiva.
Punctajul final acordat pe o temă este compus din:
Scheletul şi checker-ul sunt disponibile pe repository-ul de IOCLA de pe GitLab.