PCLP Laborator05: Problemset (extra)
Probleme extra propuse pentru PCLP Laborator05.
-
Realizați funcția my_strlen care calculează lungimea unui șir de caractere folosindu-vă doar de pointeri. Utilizarea funcțiilor din string.h nu este permisă!
Exemplu
- Input:
s = "Hello World!"- Output:
my_strlen(s) = 12 -
Realizați funcția my_swap care interschimbă 2 vectori de numere. Funcția trebuie să facă o singură interschimbare!
Exemplu
- Input:
n = 5 v = {1, 2, 3, 4, 5} w = {6, 7, 8, 9, 10}- Output:
v = {6, 7, 8, 9, 10} w = {1, 2, 3, 4, 5} -
Realizați funcția my_reverse care inversează un vector de numere.
Exemplu
- Input:
n = 5 v = {1, 2, 3, 4, 5}- Output:
v = {5, 4, 3, 2, 1}Folosiți operații pe biți asupra pointerilor pentru a reface funcția my_reverse. Puteti citi aici despre operatii pe biti si aici despre algoritmul de swap folosind operatii pe biti.
Realizați funcția my_reverse fără să folosiți
[]. -
Realizați funcția my_strcmp care primește două șiruri de caractere și le compără, returnând 1 dacă primul e mai mare lexicografic, 0 dacă sunt echivalente, și -1 dacă al doilea este mai mare lexicografic.
Exemplu 1
- Input:
str1 = "Alexandru" str2 = "Alexandra"- Output:
1- Explicație: Șirurile sunt egale până la ultimul caracter, care este mai mare în cazul lui str1, deoarece 'u' > 'a'.
Exemplu 2
- Input:
str1 = "Cătălin" str2 = "Cătălina"- Output:
-1- Explicație: Șirurile sunt egale până la ultimul caracter, care este mai mic în cazul lui str1, deoarece '\0' < 'a'.
Exemplu 3
- Input:
str1 = "Pascal" str2 = "Pascal"- Output:
0- Explicație: Șirurile sunt egale până la final, așa că funcția returnează 0.
Realizați și funcția my_strncmp, care are același comportament, doar că se oprește după n caractere.
-
Calculați, folosind pointeri și două variabile locale, mărimea unui int, unui short, unui char, unui int* și a unui long.
Exemplu
- Input:
long a, b;- Output:
8- Explicatie: Mărimea unui long este 8(pe arhitectura x86_64).
-
Realizați funcția my_memset care primește o adresă de tip
void *, o valoare și o lungime, și care setează fiecare byte de la adresa primită cu valoarea dată până când ajunge la lungimea primită.Exemplu 1
- Input:
char v[10]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; my_memset((void*)v, 0, 5);- Output:
v = {0, 0, 0, 0, 0, 6, 7, 8, 9, 10};Exemplu 2
- Input:
int v[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; my_memset((void*)v, 1, 4);- Output:
v = {16843009, 2, 3, 4, 5, 6, 7, 8, 9, 10};- Explicație: my_memset lucrează byte cu byte, deci primul int devine 0x01010101.