documentt4

8
 Pointeri. Şiruri decaractere. Un pointer  este o dată care are ca valori adrese de memorie. Pointerii sunt utilizaţi în general:   în lucrul cu tablouri  la transmiterea parametrilor în funcţii  pentru accesarea directă a memoriei  la alocarea dinamică a memoriei  Adresa unei variabile este adresa primului octet din reprezentarea internă a variabilei respective. Variabilele de tip pointer au ca valoare adrese de memorie. Obs.1. Limbajul C++ face distincţie între natura adreselor care pot fi memorate. 2. Nu trebuie confundată adresa unei variabile cu conţinutul variabilei respective. Declararea unui pointer de date, are următorul format: tip* var_pointer; // tip reprezintă tipul de bază al pointerului şi va indica tipul  //datei memorate ex: int *p1, *p2; //p1, p2 sunt pointeri la întregi, deci reţin adresele unor zone //de memorie la care vor fi memorate date întregi char *c; // c va indica o zonă de memorie la care va fi memorat un  //caracter Obs. 3.Tipul de bază al pointerului poate fi orice tip al limbajului inclusiv tipul void. Un pointer cu tipul de bază void* se numeşte pointer generic. 4.Există o constantă pointer specială, denumită NULL, cu semnificaţia “pointerul nu conţine adresa nici unei zone de memorie”; valoarea acestei constante este 0. Operaţii cu pointeri 1. Operaţia de referenţiere -este operaţia prin care putem obţine adresa de memorie a unei variabile -adresa unei variabile se poate obţine cu ajutorul operatorului unar & care va precede numele variabilei; rezultatul acestei operaţii este un pointer ex: int *p,a; p=& a; // p va reţine adresa lui a 2. Operaţia de dereferenţiere -este operaţia prin care putem accesa conţinutul memorat la o anumită adresă -operaţia s e realizează folosind operatorul unar * care va precede numele variabilei ex: int *p,a; p=& a; // p va reţine adresa lui a *p=3; cout<<a; //va afişa pe ecran valoarea 3 3. Operaţia de incrementare/decr ementare -are ca efect indicarea elementului următor /anterior celui indicat de pointerul iniţial

Upload: eduardcostea

Post on 05-Oct-2015

224 views

Category:

Documents


0 download

DESCRIPTION

informatica cex

TRANSCRIPT

  • Pointeri. iruri decaractere. Un pointer este o dat care are ca valori adrese de memorie. Pointerii sunt utilizai n general:

    n lucrul cu tablouri la transmiterea parametrilor n funcii pentru accesarea direct a memoriei la alocarea dinamic a memoriei

    Adresa unei variabile este adresa primului octet din reprezentarea intern a variabilei respective. Variabilele de tip pointer au ca valoare adrese de memorie. Obs.1. Limbajul C++ face distincie ntre natura adreselor care pot fi memorate. 2. Nu trebuie confundat adresa unei variabile cu coninutul variabilei respective. Declararea unui pointer de date, are urmtorul format: tip* var_pointer; // tip reprezint tipul de baz al pointerului i va indica tipul //datei memorate ex: int *p1, *p2; //p1, p2 sunt pointeri la ntregi, deci rein adresele unor zone //de

    memorie la care vor fi memorate date ntregi char *c; // c va indica o zon de memorie la care va fi memorat un //caracter Obs. 3.Tipul de baz al pointerului poate fi orice tip al limbajului inclusiv tipul void. Un pointer cu tipul de baz void* se numete pointer generic. 4.Exist o constant pointer special, denumit NULL, cu semnificaia pointerul nu conine adresa nici unei zone de memorie; valoarea acestei constante este 0. Operaii cu pointeri

    1. Operaia de refereniere -este operaia prin care putem obine adresa de memorie a unei variabile -adresa unei variabile se poate obine cu ajutorul operatorului unar & care va precede numele variabilei; rezultatul acestei operaii este un pointer ex: int *p,a; p=& a; // p va reine adresa lui a 2. Operaia de derefereniere -este operaia prin care putem accesa coninutul memorat la o anumit adres -operaia se realizeaz folosind operatorul unar * care va precede numele variabilei ex: int *p,a; p=& a; // p va reine adresa lui a *p=3; cout

  • -se crete/micoreaz adresa memorat n pointer, cu numrul de octei necesari pentru a memora o dat de tipul de baz al pointerului sizeof(tip) ex: long int *p; p++; // adresa memorat de p va crete cu 4 octei p--; //adresa memorat de p se micoreaz cu 4 octei

    4. Adunarea / scderea dintre un pointer i un ntreg p+n / p-n - are urmtorul efect: adresa memorat n pointer crete/se micoreaz cu n*sizeof(tip), unde tip reprezint tipul de baz al pointerului p 5. Scderea a doi pointeri -rezultatul obinut are valoare ntreag i indic numrul de elemente dintre cei doi pointeri

    6. Compararea a doi pointeri -asupra pointerilor care au acelai tip de baz se pot aplica operatorii relaionali i de egalitate ex: int *p1,*p2,a; a=2; p1=&a; p2=p1; if (p1==p2) cout

  • Un ir de caractere este o structur de date format dintr-o succesiune de caractere care se termin cu caracterul NULL ( \0). Implementarea irurilor de caractere se face sub forma unui tablou unidimensional (vector) ale crui elemente sunt de tip caracter, fiecare caracter fiind reprezentat prin codul su ASCII. irul de caractere se deosebete de vectorii cu alte tipuri de elemente prin marcatorul logic utilizat la sfritul irului - NULL (care are codul ASCII 0). Declararea ex: char x[5]; // am declarat irul x care va putea conine maxim 5 caractere cin>>x;

    x

    Dimensiunea vectorului de caractere trebuie declarat cu un caracter mai mult dect cel mai mare ir de caractere pe care l poate conine, pentru a exista loc i pentru terminatorul irului (caracterul \0). O constant ir de caractere este o succesiune de caractere delimitat de ghilimele. ex: char ir[256]=Buna ziua; Citirea

    n limbajul C++ -se poate utilize operatorul >> sau funciile get sau getline char c, sir[201]; fin>>c; fin.getline(sir, 200); //sau fin.get(sir,200);fin.get();

    n limbajul C -se folosete specificatorul de format %c pentru caractere i %s pentru iruri char c, sir[201]; fscanf(fin,%c, &c); fscanf(fin,%s,sir);

    Prototipul funciilor get i getline sunt: getline(char *s, int n, char c=\n); get(char *s, int n, char c=\n);

    Diferena dintre funciile get i getline este faptul c funcia getline preia din stream-ul de intrare i delimitatorul, n timp ce funcia get nu-l extrage. Scrierea

    n limbajul C++ fout

  • ex:getline(sir,200,!); // sir va conine caracterele citite pn la ntlnirea caracterului ! sau pan la citirea a 200 de caractere. 3.Fiierul antet stdio.h conine o funcie special pentru afiarea irurilor de caractere. Funcia afieaz caracterele irului pn la NULL i apoi afieaz \n. Prototipul ei este: int puts(const char* sir);

    Prelucrarea irurilor de caractere se poate face: a) prin parcurgerea caracterelor din ir (lucrnd indexat sau cu pointeri) b) folosind funciile sistem (din bibliotecile string.h, stdlib.h, conio.h) Utilizarea funciilor standard pentru lucrul cu iruri de caractere

    1.Determinarea lungimii unui ir de caractere

    unsigned strlen(const char *sir);

    ex: char sir[]="informatica"; cout

  • 2.Dac dorim s concatenm doar primele n caractere din irul surs la irul destinaie i lungimea irului surs este 0 dac s1>s2 (dpdv lexicografic) un ntreg
  • //caut i returneaz un pointer ctre prima apariie a irului s2 n irul s1; dac s2 nu se gsete n irul s1, funcia va returna NULL ex: char sir[]="Sambata merg la CEX",sir1[]=merg, *p; p=strstr(sir, sir1); if (p!=0)

    cout

  • Cerin Cunoscnd cuvntul c care trebuie cutat, numrul n de succesiuni de n litere precum i cele n succesiuni, se cere s se determine pe cte linii i coloane apare cuvntul dat. Date de intrare

    Pe prima linie a fiierului de intrare cuvant.in se afl un cuvnt c format din litere mici. Pe linia a 2-a se gsete un numr natural n iar pe urmtoarele linii se dau cele n succesiuni de cte n litere mici fiecare.

    Date de ieire

    Fiierul de ieire cuvant.out va conine numrul de linii i coloane pe care apare cuvntul dat. Restricii Cuvntul c are maxim 20 de litere iar n nu depaeste 100. Exemplu cuvant.in cuvant.out Explicatii ion 6 ionabc ajonoi uuiono aixbnn ionnoi cnrsit

    8

    Aezm succesiunile de litere unele sub altele, ca n careul de mai jos: i o n a b c a j o n o i u u i o n o a i x b n n i o n n o i c n r s i t

    Cuvntul ion se gsete pe liniile 1 i 3 (de la stanga la dreapta), pe linia 2 (de la dreapa la stnga), pe linia 5 (pe ambele direc), pe coloanele 2 i 6 (de sus n jos) i pe coloanele 3 i 5 (de jos n sus), deci n total pe 8 direcii.

    Timp de execuie/test: 1 secund 2. Operaii cu radicali Se citete o expresie aritmetic scris corect din punct de vedere matematic. Aceasta expresie conine numai operatorii + i -, iar operanzii pot avea doar una din formele : n - numr natural fr semn nrm - cu semnificaia n radical din m, unde m si n sunt numere naturale fr semn, n>=2 rm - cu semnificaia radical din m, unde m este numr natural fr semn. Cerin Se cere ca, pornind de la o expresie aritmetic de forma precizat anterior, s se efectueze calculele astfel nct s fie ndeplinite simultan condiiile:

    a) expresia are numr minim de radicali din numere libere de ptrate ( expresia poate avea numai astfel de radicali) i valoarea egal cu cea a expresiei iniiale

  • b) numerele de sub radicalii expresiei de la punctual a) trebuie s apar n ordine cresctoare.

    Date de intrare Pe prima linie a fiierului de intrare radical.in se afl o expresie aritmetic n forma precizat anterior. Date de ieire Fiierul de ieire cuvant.out va conine expresia aritmetic adus n forma cerut n enun.

    Restricii

    Expresia poate avea maxim 10000 de caractere i este corect din punct de vedere matematic.

    0< n , m