Limbaje de programare: Laborator 7
Tablouri. Șiruri de caractere
La intrarea în laborator trebuie predată tema 7.
-
Implementați câteva funcții simple pentru lucru cu șiruri de caractere:
- funcția standard strlen care returnează lungimea unui șir:
size_t strlen(const char *s)
size_t e un tip întreg fără semn folosit pentru dimensiuni (tipul returnat de operatorul sizeof). Specificatorul const precizează că obiectul respectiv (șirul s) nu e modificat.
Parcurgeți șirul în ciclu cu un indice până când întâlnește caracterul de sfârșit '\0' și returnează valoarea indicelui (numărul caracterelor parcurse).
- o funcție int strindex(const char *s, char c) care returnează primul indice la care se află caracterul c în șirul s, sau -1 când caracterul nu e găsit.
Tiparul e același ca în căutarea în tablou prezentată la curs.
- funcția char *strchr(const char *s, int c) care la fel cu cea de mai sus caută un caracter (reprezentat de întregul c) într-un șir, dar returnează adresa caracterului găsit, sau NULL dacă acesta nu există în șir
- variantele strrindex și strrchr ale funcțiilor de mai sus, care găsesc ultima apariție a caracterului în șir.
Pentru acestea, rezultatul e inițializat pe valoarea care înseamnă "caracter negăsit" (-1, respectiv NULL) și e actualizat de fiecare dată când se găsește caracterul, parcurgând șirul de la început. Ciclul nu se încheie la găsirea primei apariții, ci șîrul e parcurs complet.
- două funcții strlwr și strupr care modifică șirul transmis ca parametru, transformând toate literele în litere mici, respectiv mari, și fără a modifica alte caractere.
-
Scrieți o funcție care ia ca parametru un șir de caractere care conține un număr în baza 10 și returnează valoarea numărului.
Funcția acceptă ca șirul să conțină un număr arbitrar de spații albe inițiale, opțional semnul + sau -, și apoi cifre în baza 10. Conversia se oprește la întâlnirea primului caracter necorespunzător. Dacă până în acel punct nu s-a întâlnit un număr valid, funcția returnează zero.
Observație: O astfel de funcție standard există: int atoi(const char *s) și e declarată în stdlib.h.
Funcția va calcula numărul similar cu cele de citire de numere întregi (readnat, readint) scrise la curs, dar numărul e dat ca șir de cifre. Funcția nu va citi caractere de la intrare, ci va avansa cu indicele în șir.
- Scrieți o funcție similară cu cea de mai sus, dar cu parametri un șir de cifre într-o bază oarecare, și valoarea bazei (între 2 și 36), și care returnează valoarea numărului respectiv.
-
Scrieți o funcție care ia ca parametri un tablou cu coeficienții (reali) ai unui polinom, gradul lui, și o valoare reală x și returnează valoarea în punctul x a polinomului. Nu folosiți funcția pow.
-
Scrieți o funcție care adună la un polinom P dat ca parametru alt polinom Q dat ca parametru, dacă gradul lui Q nu depășește gradul lui P. Pentru fiecare polinom se transmit ca parametri un tablou cu coeficienții (reali), și gradul polinomului.
-
Scrieți o funcție simplă de sortare a unui tablou (de întregi sau reali).
Scrieți întâi o funcție care returnează indicele elementului maxim din tablou. Interschimbați maximul cu ultimul element, a[len-1] (dacă maximul nu e deja chiar pe această poziție). Acum ultimul element e cel bun în ordinea de sortare, și repetați sortarea pentru tabloul de la a[0] la a[len-2].
-
Fiind dat un număr prim p și un număr 1 < a < p afișați toate numerele din intervalul [0, p-1] care nu pot fi scrise sub forma ak(mod p).
Indicație: calculați valorile ak(mod p), k ≥ 1 până cănd apare valoarea 1 (apoi șirul e periodic). Folosiți un tablou cu indici resturile modulo p (0 până la p-1), inițializat cu 0, în care treceți 1 când întâlniți restul respectiv.
Marius Minea
Last modified: Tue Nov 6 22:20:00 EET 2012