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:21]
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 ​variablilăcompilatorul ​va fi informat despre ​lucruri+Doua numere intregi, **a** si **b**. 
-  * numele variabilei + 
-  * tipul variabilei+== Date de ieşire == 
 +---- 
 + 
 +Valorile **a** si **b**, in urma interschimbarii. 
 + 
 +== Restrictii == 
 +---- 
 + 
 +  * **a** si **b** sunt numere intregi 
 + 
 +== Exemplu == 
 + 
 +---- 
 +^ Intrare ​     ^ Ieşire ​      ^ 
 +| 2 5 | 5 2 | 
 + 
 +==== Problema 2 ==== 
 +---- 
 + 
 +Scrieti ​functie care numara cate elemente pozitivecate 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 | nule1 \\ 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 |
  
-De exemplu, în declaraţia:​ 
-<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**. 
  
programare-cc/laboratoare/07.1605039714.txt.gz · Last modified: 2020/11/10 22:21 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