curs10-pc

47
Programarea calculatoarelor Universitatea Constantin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Lect. dr. Adrian Runceanu

Upload: dan-lepadatu

Post on 14-Sep-2015

214 views

Category:

Documents


1 download

DESCRIPTION

Programareacalculatoarelor

TRANSCRIPT

  • Programarea calculatoarelor

    Universitatea Constantin Brncui din Trgu-Jiu Facultatea de Inginerie

    Departamentul de Automatic, Energie i Mediu

    Lect. dr. Adrian Runceanu

  • Curs 10

    13.11.2013 Programarea calculatoarelor 2

  • Capitolul 8. iruri de caractere

    8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere

    13.11.2013 Programarea calculatoarelor 3

  • 8.1. Form general. Declarare

    Datele care se reprezint sub form se iruri de caractere au o larg aplicabilitate n programarea calculatoarelor, indiferent de limbajul folosit.

    Astfel i n limbajul C/C++ se pot memora i prelucra informaii de tip ir de caractere.

    Cu toate c limbajul C/C++ nu conine un tip de date special pentru iruri de caractere aa cum are limbajul Pascal, se pot utiliza tablouri unidimensionale de caractere.

    13.11.2013 Programarea calculatoarelor 4

  • 8.1. Form general. Declarare

    Declararea unui tablou de caractere se face astfel:

    13.11.2013 Programarea calculatoarelor 5

    char nume_tablou[dimensiune_maxim];

    Exemple:

    char sir[20]; // tablou de 20 de caractere char t[10]; // tablou de 10 caractere

  • 8.1. Form general. Declarare

    Pentru a specifica sfritul irului de caractere, dup ultimul caracter se adaug un octet cu valoarea 0 ( caracterul '\0' ).

    Dimensiunea declarat pentru un tablou de iruri de caractere trebuie s fie cu o unitate mai mare pentru ca pe ultima poziie s se poat pune i valoarea '\0' = terminatorul de ir.

    13.11.2013 Programarea calculatoarelor 6

  • 8.1. Form general. Declarare

    Reprezentarea intern a unui ir de caractere

    sir[0] sir[33]=Programarea calculatoarelor Ultimi octei sunt nefolosii.

    13.11.2013 Programarea calculatoarelor 7

    char sir[33]="Programarea calculatoarelor";

    P r o g r a m a r e a c a l c u l a t o a r e l o r \0

  • 8.1. Form general. Declarare

    n limbajul C/C++, un ir de caractere este un tablou unidimensional cu elemente de tip caracter i care se termin cu NULL.

    Totui compilatorul C/C++ nu adaug automat terminatorul NULL, dect n cazul folosirii funciilor predefinite fgets() i gets() (functii de citire din fisiere sau de la tastatura), iar n celelalte cazuri este necesar ca programatorul s adauge terminatorul de ir atunci cnd dorete acest lucru, pentru a lucra cu irurile de caractere.

    13.11.2013 Programarea calculatoarelor 8

  • 8.1. Form general. Declarare Exemplu: Urmtorul program declar un ir de caractere de 256 de

    elemente i atribuie primelor 26 de locaii libere literele mari ale alfabetului:

    #include int main() { char sir[256]; int i; for(i=0;i

  • Capitolul 8. iruri de caractere

    8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere

    13.11.2013 Programarea calculatoarelor 10

  • 8.2. Funcii specifice irurilor de caractere

    n biblioteca limbajului C++ exist cteva funcii specifice irurilor de caractere: n fiierul standard de intrare / ieire

    stdio.h, avem funciile gets() i puts(). n fiierul string.h, avem mai multe

    funcii specifice prelucrrii irurilor, funcii pe care le voi prezenta n continuare.

    13.11.2013 Programarea calculatoarelor 11

  • 8.2. Funcii specifice irurilor de caractere

    Pentru citirea sirurilor de caractere care contin spatii se poate folosi metoda getline a funciei cin:

    Exemplu:

    char variabila_sir[120];

    cin.getline(variabila_sir, 120);

    13.11.2013 Programarea calculatoarelor 12

    cin.getline(variabila_sir, dimensiune_maxima);

  • 8.2. Funcii specifice irurilor de caractere

    Funciile pentru operaii cu iruri ce se gsesc n header-ul .

    Returneaz un numr ntreg ce reprezint

    lungimea unui ir de caractere, fr a numra terminatorul de ir.

    Exemplu:

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Funcia compar cele dou iruri date ca

    argument i returneaz o valoare ntreag egal cu diferena dintre codurile ASCII ale primelor caractere care nu coincid.

    Exemplu:

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Funcia copiaz irul surs n irul destinaie. Nota: Pentru a fi posibil copierea, lungimea irului

    destinaie trebuie s fie mai mare sau egal cu cea a irului surs, altfel pot aparea erori grave.

    Exemplu:

    char sir[20];

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Funcia concateneaz cele dou iruri: irul

    surs este adugat la sfritul irului destinaie. Tabloul care conine irul destinaie trebuie s

    aib suficiente elemente.

    Exemplu:

    char sir[]="carte";

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Returneaza o valoare pozitiva daca un caracter apare intr-un sir, 0 in caz contrar.

    Exemplu:

    char sir[]="exemplu de sir", c=i;

    if (strchr(sir, c)) cout

  • 8.2. Funcii specifice irurilor de caractere

    Returneaza o valoare pozitiva daca un sir apare intr-un alt sir, 0 in caz contrar.

    Exemplu:

    char sir1="primul sir", sir2="sir";

    if (strstr(sir1,sir2)) cout

  • 8.2. Funcii specifice irurilor de caractere Exemplu 1: #include #include int main() { char sir1[] = "abcd", sir2[] = "abcde"; cout
  • 8.2. Funcii specifice irurilor de caractere

    cout

  • 8.2. Funcii specifice irurilor de caractere

    char str1[20]="hello"; char str2[20]="goodbye"; char str3[20]=""; int diferenta, lungime; cout

  • 8.2. Funcii specifice irurilor de caractere

    diferenta = strcmp(str1, str2); if (diferenta == 0) cout

  • 8.2. Funcii specifice irurilor de caractere

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Executia programului:

    13.11.2013 Programarea calculatoarelor 24

  • 8.2. Funcii specifice irurilor de caractere

    Exemplu 2: Verificati daca un nume apare intr-un sir. #include #include int main() { char nume[10],sir[100]; cout

  • 8.2. Funcii specifice irurilor de caractere

    cout

  • 8.2. Funcii specifice irurilor de caractere

    Executia programului:

    13.11.2013 Programarea calculatoarelor 27

  • 8.2. Funcii specifice irurilor de caractere

    n fiierul exist cteva funcii

    care prelucreaz irurile de caractere. Acestea sunt funciile de conversie dintr-un

    numr ntr-un ir de caractere i invers.

    13.11.2013 Programarea calculatoarelor 28

  • 8.2. Funcii specifice irurilor de caractere

    n programul urmtor vor fi exemplicate funciile de conversie iruri de caractere n numere:

    13.11.2013 Programarea calculatoarelor 29

    Funcie la ce folosete atof convertete un ir de caractere ntr-un numr real simpl precizie atoi convertete un ir de caractere ntr-un numr ntreg atol convertete un ir de caractere ntr-un numr ntreg de tip long strtod convertete un ir de caractere ntr-un numr real dubl precizie strtol convertete un ir de caractere ntr-un numr de tip long

  • 8.2. Funcii specifice irurilor de caractere

    #include #include int main() { int numar_int; float numar_real; long numar; numar_int = atoi("6789"); numar_real = atof("12.345"); numar = atol("1234567890L"); cout

  • 8.2. Funcii specifice irurilor de caractere

    n programul urmtor vor fi exemplicate funciile de conversie numere n iruri de caractere:

    13.11.2013 Programarea calculatoarelor 31

    Funcie la ce folosete itoa convertete un numr ntreg ntr-un ir de caractere ftoa convertete un numr real simpl precizie ntr-un ir de caractere ultoa convertete un numr de tip long unsigned ntr-un ir de caractere

  • 8.2. Funcii specifice irurilor de caractere

    #include #include int main() { int numar_int = 6789; long numar = 1234567890L; char sir[25]; itoa(numar_int, sir, 10); cout

  • 8.2. Funcii specifice irurilor de caractere

    Executia programului:

    13.11.2013 Programarea calculatoarelor 33

  • Capitolul 8. iruri de caractere

    8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere

    13.11.2013 Programarea calculatoarelor 34

  • 8.3. Probleme cu iruri de caractere

    Problema 1: Enun:

    S se afieze numrul de vocale dintr-un text scris cu litere mici, memorat intr-o variabil de tip ir de caractere.

    Exemplu:

    Date de intrare: Programarea calculatoarelor

    Date de ieire: Exista 12 vocale in text

    13.11.2013 Programarea calculatoarelor 35

  • 8.3. Probleme cu iruri de caractere

    #include

    #include

    int main()

    {

    char text[100];

    char vocale[] = "aeiou";

    int contor = 0;

    cout

  • 8.3. Probleme cu iruri de caractere

    for (int i=0; i

  • 8.3. Probleme cu iruri de caractere

    Problema 2:

    Enun:

    S se afieze cu litere mari un text dat, de maxim 255 caractere.

    Exemplu:

    Date de intrare text: liMBajUl c++

    Date de ieire LIMBAJUL C++

    13.11.2013 Programarea calculatoarelor 38

  • 8.3. Probleme cu iruri de caractere #include

    int main()

    {

    char sir[255];

    cout

  • 8.3. Probleme cu iruri de caractere

    Problema 3: Enun:

    Se citete un ir de caractere. S se afieze litera cea mai des ntlnit.

    Exemplu:

    Date de intrare text: carte de informatica si programare

    Date de ieire: a apare de 5 ori

    13.11.2013 Programarea calculatoarelor 40

  • 8.3. Probleme cu iruri de caractere

    #include

    #include

    int main()

    {

    char sir[1000], carac_max, c;

    int i, frecv[256], max=0; // frecv - vector de frecvente

    cout

  • 8.3. Probleme cu iruri de caractere

    for (i=0;imax){

    max=frecv[c];

    carac_max=c;

    }

    }

    cout

  • 8.3. Probleme cu iruri de caractere

    13.11.2013 Programarea calculatoarelor 43

  • Probleme propuse spre rezolvate iruri de caractere

    1. S se afieze toate prefixele i sufixele unui cuvnt citit de la tastatur. Exemplu: Date de intrare: informatica Date de ieire:

    13.11.2013 Programarea calculatoarelor 44

    i in inf info infor inform informa informat informati informatic informatica

    a ca ica tica atica matica rmatica ormatica formatica nformatica informatica

  • Probleme propuse spre rezolvate iruri de caractere

    2. Se citete de la tastatur un caracter c i un text de maxim 100 de carectere. Afiai de cte ori apare caracterul c n cadrul textului. Literele mari se vor considera diferite de literele mici. Exemplu: Date de intrare: Acesta este un simplu exemplu Caracterul e Date de ieire:

    13.11.2013 Programarea calculatoarelor 45

    Litera e apare de 5 ori

  • Probleme propuse spre rezolvate iruri de caractere

    3. Se citete de la tastatur un ir de maxim 100 de carectere format numai din litere i cifre. Afiai numrul literelor mari, numrul literelor mici i numrul caracterelor de tip cifr din textul dat. Exemplu: Date de intrare: S-a nascut la Targu Jiu in 1968 pe 21 martie Date de ieire:

    13.11.2013 Programarea calculatoarelor 46

    Se gasesc 25 de litere mici, 2 litere mari si 6 cifre

  • ntrebri?

    13.11.2013 Programarea calculatoarelor 47