Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare-cc:laboratoare:07 [2020/11/10 22:22]
bogdan.nutu
programare-cc:laboratoare:07 [2023/12/06 08:48] (current)
andrei.simescu [Problema 3]
Line 1: Line 1:
 ===== Laboratorul 07 - Funcții cu pointeri; Șiruri de caractere ===== ===== Laboratorul 07 - Funcții cu pointeri; Șiruri de caractere =====
  
-**În acest laborator veţi învăţa să:**+==== Problema 1 ==== 
 +----
  
-  * Trimiteţi parametri prin adresă+Scrieti o functie ce interschimba doua numere intregiFunctia va avea urmatorul antet: 
-  Utilizaţi şiruri de caractere şi funcţii pentru şiruri de caractere. +<code c>void swap(int ​*pa, int *pb);</​code>​
-  ​Definiţi funcţii care prelucrează şiruri de caractere.+
  
-==== Pointeri ====+== Date de intrare ​== 
 +----
  
-Atunci când definiţi o variablilăcompilatorul va fi informat despre 2 lucruri: +Doua numere intregi, **a** si **b**.
-  ​numele variabilei +
-  ​tipul variabilei+
  
-De exemplu, în declaraţia:​ +== Date de ieşire == 
-<code c>int n;</​code>​ +----
-compilatorul va rezerva o zonă de memorie pentru această variabilă, de dimensiune **sizeof(int)** (4 Bytes, pe arhitecturi de 32bit), ​şi va asocia respectivei zone de memorie numele **n**.+
  
-Atunci când se face o atribuire,​ +Valorile ​**a** si **b**, in urma interschimbarii.
-<code c>n = 7;</​code>​ +
-în respectiva zonă de memorie va fi înscrisă noua valoare, ​**7**.+
  
 +== Restrictii ==
 +----
  
 +  * **a** si **b** sunt numere intregi
  
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| 2 5 | 5 2 |
 +
 +==== Problema 2 ====
 +----
 +
 +Scrieti o functie care numara cate elemente pozitive, cate elemente negative si cate elemente nule se afla intr-un vector. Antetul functiei va fi:
 +<code c>void count(int n, int *v, int *zero, int *poz, int *neg);</​code>​
 +
 +== Date de intrare ==
 +----
 +
 +  * **n** - dimensiunea vectorului
 +  * **n** numere intregi
 +
 +== Date de ieşire ==
 +----
 +
 +  * Numarul de elemente nule
 +  * Numarul de elemente pozitive
 +  * Numarul de elemente negative
 +
 +== Restrictii ==
 +----
 +
 +  * 0 <= n <= 100
 +
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| 5 \\ -2 -1 0 1 2 | nule: 1 \\ pozitive: 2 \\ negative: 2 |
 +
 +==== Problema 3 ====
 +----
 +
 +  * Scrieti o functie pentru stergerea a **n** caractere dintr-o pozitie **p** (data) a unui sir. Se va folosi functia **strcpy**.
 +<code c>char *strdel(char *p, int n); // sterge n caractere din pozitia p</​code>​
 +
 +Pentru a sterge 5 caractere incepand cu pozitia 3 (al 4-lea caracter) din sirul s va trebui sa apelati: **strdel(s + 3, 5)**.
 +
 +  * Scrieti o functie pentru inserarea unui sir **s** la inceputul sirului dat **p**, folosind functiile **strcpy** si **strcat**.
 +<code c> char *strins(char *p, const char *s); // insereaza la p, sirul s</​code>​
 +
 +  * Un program care va cauta si inlocui un sir dat cu alt sir (de lungime diferita) intr-un text. Vor fi inlocuite toate aparitiile sirului dat.
 +
 +Se vor folosi functiile definite anterior si functii de biblioteca.
 +
 +Textul se va introduce in program ca sir constant. Sirul cautat si cel cu care va fi inlocuit se citesc.
 +
 +
 +== Date de intrare ==
 +----
 +
 +Trei siruri de caractere:
 +  * textul
 +  * sirul de inlocuit
 +  * sirul cu care se inlocuieste
 +
 +== Date de ieşire ==
 +----
 +
 +Textul modificat.
 +
 +== Restrictii ==
 +----
 +
 +  * strlen(text) <= 3000
 +  * strlen(sir_de_inlocuit) <= 20
 +  * strlen(sir_cu_care_se_inlocuieste) <= 20
 +
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| ala bala portocala \\ ala \\ lala| lala blala portoclala |
 +
 +==== Problema 4 ====
 +----
 +
 +Scrieti o functie care extrage un subsir de lungime data dintr-o pozitie data a unui sir:
 +<code c>char* substr(char *src, int n, char *dest); // extrage de la pozitia src in dest n caractere</​code>​
 +
 +Functia are ca rezultat adresa sirului extras.
 +
 +Pentru a extrage 5 caractere incepand cu pozitia 3 (al 4-lea caracter) din sirul s in sirul p va trebui sa apelati cu parametri: **substr(s + 3, 5, p)**.
 +
 +== Date de intrare ==
 +----
 +
 +  * sirul de caractere
 +  * doua numere intregi: **pozitia** in cadrul sirului si **numarul** de caractere extrase
 +
 +== Date de ieşire ==
 +----
 +
 +  * sirul de caractere extras
 +
 +== Restrictii ==
 +----
 +
 +  * strlen(sir) <= 100
 +  * **pozitia** si **numarul** sunt numere intregi valide pentru sirul dat
 +
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| abcdefg \\ 2 3 | cde |
 +
 +==== Problema 5 ====
 +----
 +
 +Scrieti o functie care calculeaza panta si ordonata pentru o dreapta data prin 2 puncte.
 +
 +Ecuatia dreptei data prin panta si ordonata este **y = m * x + n**
 +<code c>void panta(int x1, int y1, int x2, int y2, float *m, float *n);</​code>​
 +
 +Daca dreapta este verticala, **m** va avea valoarea **INT_MAX** (definita in **limits.h**).
 +
 +Scrieti un main in care cititi 3 puncte. Primele 2 puncte definesc o dreapta. Verificati daca cel de-al treilea punct dat apartine acestei drepte.
 +
 +== Date de intrare ==
 +----
 +
 +Coordonatele a doua puncte ce determina dreapta si ale unui punct pentru care se verifica daca apartine dreptei.
 +
 +== Date de ieşire ==
 +----
 +
 +Unul dintre cele doua mesaje - **DA** sau **NU**, daca punctul apartine dreptei, respectiv daca nu apartine.
 +
 +== Restrictii ==
 +----
 +
 +  * coordonatele sunt numere intregi valide
 +
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| 1 1 \\ 2 2 \\ 3 3 | DA |
 +
 +==== Problema 6 ====
 +----
 +
 +  * Scrieti o functie care extrage urmatorul cuvant format numai din litere mici incepand de la o adresa data. Functia are ca rezultat adresa imediat urmatoare cuvantului extras. Cuvantul extras se va gasi in *word.
 +<code c>char *next (char *from, char *word);</​code>​
 +
 +  * Scrieti un program pentru citirea unei linii ce contine cuvinte formate din litere mici si alte siruri si afisarea doar a cuvintelor formate din litere mici.
 +
 +== Date de intrare ==
 +----
 +
 +Un sir de caractere de lungime **N**.
 +
 +== Date de ieşire ==
 +----
 +
 +Cuvintele formate din litere mici, in ordine, separate prin spatiu.
 +
 +== Restrictii ==
 +----
 +
 +  * **N** <= 100
 +  * Se va considera separator de cuvant orice caracter cu exceptia literelor.
 +
 +== Exemplu ==
 +
 +----
 +^ Intrare ​     ^ Ieşire ​      ^
 +| ( unu, 1 doi DOI trei; "​patru"​ cinCi s@s3) | unu doi trei patru cin i s s |
  
  
programare-cc/laboratoare/07.1605039771.txt.gz · Last modified: 2020/11/10 22:22 by bogdan.nutu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0