Sunteți pe pagina 1din 8

Ministеrul Еducаțiеi, Culturii și Cеrcеtării аl Rеpublicii Mоldоvа

Univеrsitаtеа Tеhnică а Mоldоvеi


Fаcultаtеа Cаlculаtоаrе, Infоrmаtică şi Micrоеlеctrоnică
Dеpаrtаmеntul Ingineria Software și Automatică

RAPORT

Lucrarea de laborator Nr.6


la disciplina Programarea Calculatorelor

VARIANTA 39

A efectuat: st.gr.TI-192
Mereuță Ana
A verificat: asist.univ.
Cristina Josan

CHIŞINĂU – 2019
Tema: Prelucrarea caracterelor şi şirurilor caracteriale în C

Obiectivele temei
1. Aprofundarea cunoştinţelor în limbajul şi mediul TurboC şi perfecţionarea tehnicii de programare în
prelucrarea caracterelor și şirurilor de caractere în C.
2. Însuşirea procedeelor referitoare la şirurile caracteriale.
3. Însuşirea functiilor predefinite de prelucrare a şirurilor de caractere în C prin implementarea pentru
cazuri concrete din teste si Exemple pentru analiză.
4. Însuşirea DIRECTIVELOR si MACROINSTRUCŢIUNI LOR prn implementarea exemplelor de
prelucrare.
5. Analiza specificului de algoritmizare şi progamare a fragmentelor de texte prin comparaţia soluţiilor
stereotipe şi celor eficiente de introducere, afişare şi diverse manipulări asupra textelor: parcurgeri,
căutări, schimbări şi rearanjări etc.

Partea Teoretică
1.1. Tipul char (tipul caracter)
O variabilă de tip caracter se declară prin specificatorul de tip char. Zona de memorie alocată unei
variabile de tip char este de un octet. Ea este suficient de mare pentru a putea memora orice caracter al setului
de caractere implementate pe calculator. Dacă un caracter din setul de caractere este memorat într-o variabilă
de tip char, atunci valoarea sa este egală cu codul întreg al caracterului respectiv. Şi alte cantităţi pot fi
memorate în variabile de tip char, dar implementarea este dependentă de sistemul de calcul. Ordinul de mărime
al variabilelor caracter este între -128 şi 127. Caracterele setului ASCII sunt toate pozitive, dar o constantă
caracter specificată printr-o secvenţă de evitare poate fi şi negativă, de exemplu ‚\377’ are valoarea -1. Acest
lucru se întâmplă atunci când această constantă apare într-o expresie, moment în care se converteşte la tipul
int prin extensia bitului cel mai din stânga din octet (datorită modului de funcţionare a instrucţiunilor
calculatorului). O valoare de tip char este un element al mulţimii finite şi ordonate de caractere recunoscute
de translatorul limbajului. Datele de tip caracter sunt stocate în memorie pe un octet, putînd avea 256 de valori
distincte. Aceste valori sunt în mod obişnuit caracterele setului de caractere ASCII extins (setul de caractere
al limbajului TurboPascal si C, fiind un subset al acestuia din urmă).
Constantele literale de tip caracter pot fi scrise în mai multe moduri:
- un caracter imprirnabil intre apostrofuri: '*', '3', 'a';
- un nurnăr de la 0 la 255 precedat de caracterul #: #27 (codul caracterului ESC), #65 (codul caracterului
A); etc.
1.2. Tipul şir de caractere
Limbajul C nu are incorporate facilităţi de prelucrare directă a şirurilor de caractere, mulţimilor,
listelor, tablourilor. Din acest motiv, nu exista definit un tip de date pentru tipurile de caractere, folosindu-se
pentru şiruri tablouri de caractere (char[]) sau pointeri la caracter (char *). Pentru aceste operaţii, cea mai
mare parte a implementărilor în C oferă colecţii standard de funcţii de bibliotecă. Aceste funcţii oferă o
varietate de opţiuni.
PARTEA PRACTICĂ
Sarcina propusă:
Se consideră un șir de cel mult 100 de caractere, format din litere mici ale alfabetului englez. Se numește
bâlbă o secvență de caractere care apare în șir de cel puțin două ori una după alta. Să se determine cea mai
lungă bâlbă din șirul considerat (ca număr de caractere). Exemplu. Pentru șirul ”veveveveriririririritata„ se
va afișa bâlba ”ririri”.
Schema logică a programului :
Listing-ul programului:
//Sarcina
//Cautarea scecventelor repetate
//Care se numesc Bilbe
//abba bilba este: b
#define p 100
#include <stdio.h>
#include <string.h>

void anul(char x[p]); // declarararea prototipului functiei anul(forma prescurt


la anulare)
void copiere(int ii,char bil[p],char bil2[p],char sir[p],int aux);//
declarararea prototipului functiei copiere

void main()
{
char sir[p],bil[p],bil2[p];
//sir-stocheza datele siruluinostru //bil-stocheaza bilba noastra
potentiala
//bil2-controleza daca secventa ce urmeza dupa secventa bil este acceasi
int i,aux,max=0;
//declaram i ca indece de iteratie
//aux ca var ce reprezinta lungimea potentiala a bilbei
//max reprezinta variabila ce stocheaza lungimea bilbei
//max=0 reprezinta valoarea initiala a lungimii bilbei
printf(" Inrodu sirul \n ");
gets(sir);//intructiune de introducere a sirului nostru inclusa in
bibkioteca <string.h>
aux=strlen(sir)/2;//valoare maxima posibila a bilbei
i=0;//reprezinta startul iteratiei

while((i<=strlen(sir)-aux)&&(max==0)&&(aux!=0))
{
//conditia - (i<=strlen(sir)-aux) - este pentru conditia de iteratie
(iteratie=pasire repetata)
//conditia - (max==0) - este pentru cit timp max=0 inseamna ca
nu s-a gasit nici o bilba
//conditia - (aux!=0) - este pentru ca precautarea de bilba sa
aiba lungime minima egala cu 1,
//daca este 0 atunci
precautam ceea ce nu exista
copiere(i,bil,bil2,sir,aux); //transmite valorile lui i si aux/
adresele lui bil,bil2 si sir la functia copiere
if(strcmp(bil,bil2)==0) //se urmareste daca bilba potentiala
stocata in bil este echivalenta cu
// secventa
ulterioara de aceeasi lungime stocata in bil2
max=aux; //daca valoare if-ului de mai sus este
True, atunci pentru valoarea potentiala a lungimii bilbei stocata in aux
// s-a gasit o
bilba, deci lungimea aceasta este atribuita variabilei max
i++; //pasul iteratiei
if(i>strlen(sir)-aux) //conditia de reiterare a sirului,
{ //(daca pin la sfirsitul sirului nu s-a
gasit bilba,
//atunci trebuie precautata o lungime
potentiala de bilba mai scurta de la inceputul sirului)
i=0; //revenirea la pozitia initiala a sirului
aux--; //precautarea unei lungimi potentiale de
bilba mai mici
}
}

if(max!=0) //daca max!=0 atuci in urma iteratiei di


while s-a gasit o lungime de bilba
{
printf("\n Cea mai lunga Bilba este : ");
puts(bil);
printf(" Si are lungime de %d",max);
}
else //daca max==0 atunci nu s-a gasit lungime
de bilba
printf("\n Sirul nu are Bilbe");
}
void anul(char x[p]) //functia anul(anulare) preia adresa lui
din bil si apoi bil2
{ //apelul functiei din functia copiere si
le atribuie parametrilor sai eficienti-corespunzatori
int i;
for(i=0;i<p;i++) //intructiunea de iteratie for
x[i]='\0'; //sirului cu adresa preluata in x i se
atribuie elementul nul la pozitiile de indice i
}

void copiere(int ii,char bil[p],char bil2[p],char sir[p],int aux)


//functia copiere preia valorile/adresele a elementelor [i,bil,bil2,sir,aux]
din
{
//apelul functiei din main si le atribuie parametrilor sai eficienti-
corespunzatori
int o=0,i;
anul(bil); //trimite adresa lui bil spre exercitare
la functia anul
anul(bil2); //trimite adresa lui bil2 spre exercitare
la functia anul
for(i=ii;i<ii+aux;i++) //intructiunea de iteratie for
{
bil[o]=sir[i]; //copierea secventei de bilba potentiala
bil2[o]=sir[i+aux]; //copierea sirului ulterior bilbei
potentiale
o++; //indicele de pozitie a sirurilor bil si
bil2
}
}

Rezultatele obținute:
CONCLUZIE
Lucrarea de laborator nr.6 are ca scop prelucrarea caaracterelor si sirurilor in C. Ca urmare, efectuand
programul dupa cerintele necesare, mi-am aprofundat cunostintele in a realiza un program care prelucreaza
sirul de caractere. In varianta mea, am avut ca sarcina de a lucra cu un sir lung de caractere, si trebuie sa
depistez cea mai lunga balba dintr-un sir de cuvinte. Aceasta sarcina mi-a aratat cum putem aborda asa tip de
problema.

BIBLIOGRAFIE

1. Crearea schemelor logice cu softul https://www.draw.io/


2. Indicațiile metodice de la Profesorul Ștefan Marin.

S-ar putea să vă placă și