Documente Academic
Documente Profesional
Documente Cultură
Tablouri de date
Tablouri unidimensionale(siruri de date sau vectori)
I. Operaii asupra irurilor de date monodimensionale
Definiie
Tablou = succesiune de locaii de memorie recunoscute prin acelai identificator
i prin poziia fiecreia n cadrul irului. Poziia este dat printr-un numr pozitiv numit
index.
Valorile atribuite elementelor tabloului trebuie s fie de acelai tip.
Organizarea unui tablou n memorie este de forma:
a) Declararea vectorilor
Ex. int x[8];
[0]
23
[1]
[2]
[3]
[4]
[5]
[6]
[7]
67
A
x[0] = 23;
x[5] = 67;
b) Citirea vectorilor
Ex.
int tablou[10];
int i;
printf(\n Introduceti dimensiunea tabloului );
scanf(%d,&n);
for(i=0; i<n; i++)
{
printf(\n tablou[%d] = ,i); //se va afisa tablou[i]= i se ateapt
scanf(%d,&tablou[i]);
//introducerea valorii care se atribuie
}
//
variabilei tablou[i]
Obs:
1. Dimensiunea tabloului introdus de ctre utilizator (n) nu trebuie s
depeasc dimensiunea cu care a fost declarat vectorul, (n cazul anterior n introdus de
utilizator nu trebuie s depeasc 10 ntruct declaraia a fost tablou[10]).
2. Identificarea zonei de memorie unde va fi reinut tabloul se face cu ajutorul
numelui tabloului. Acesta are ca valoare adresa primului element din tablou), ceea ce l
deosebete de variabilele simple care nu reprezint o adres.
&st st &st[0];
3. Instruciunea printf() din interiorul buclei cu contorizare va afia numai
numele variabilei care se citete.
Obs.
n acest caz elementele tabloului au fost iniializate direct. Pentru aceasta valorile
care trebuiesc reinute n tablou au fost trecute ntre acolade {}.
d) Prelucrri asupra vectorilor
Ex.
x2 9
x {-5, - 2, 0, 5, 7, 9}
Obs.
Prin caracterul x s-a reprezentat faptul c respectivele valori x[i] nu aparin
domeniului de definiie.
Etapele cara trebuiesc parcurse pentru determinarea valorilor funciei:
-
verificarea apartenenei valorii x[i] la D i a valorilor funciei (pentru x[i] D). Dac
x[i] nu aparine lui D atunci evident calculul valorii lui f nu este posibil. De aceea s-a
folosit variabila j care s indice poziia valorii care a putut fi calculat n vectorul f.
Totodat valorile x[i] care aparin domeniului sunt memorate n vectorul x1;
afiarea vectorilor x1, i f;
Secvena de program este:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
int i,j,n;
float x[10], x1[10], f[10],aux;
printf("\n Introduceti o valoare reala oarecare");//vezi observatia de mai jos
scanf("%f",&aux);
//vezi observatia de mai jos
clrscr();
printf("\n Introduceti dimensiunea vectorului x ");
scanf("%d",&n);
printf("\n introduceti elementele vectorului x ");
for(i=0; i<n; i++)
{
printf("\n x[%d] = :",i);
scanf("%f",&x[i]);
}
//AICI TREBUIE SA INTRODUCETI ECOUL
j=0;
for(i=0; i<n; i++)
if( (x[i] <= -3) || (x[i]>= 3))
{
x1[j] = x[i];
f[j] = sqrt( pow(x[i], 2) - 9);
j++;
}
printf("\n Afisarea vectorilor x1 si f");
for(i=0;i<j;i++)
printf("\n Pentru valoarea lui x=%.2f, valoarea functiei este f=%.2f",x1[i], f[i]);
getch();
}
ATENIE
ntruct versiunea de Borland C++ pe care o folosim are un bug la citirea unui
vector de valori reale, vom citi mai nti o valoare real aleatoare, dupa care vom citi
vectorul x de numere reale
Obs.
{
printf("\n ptablou[%d] = :",i);
scanf("%d",(ptablou+i));
}
printf("\n Elementele tabloului sunt: ");
for(i=0; i<5; i++)
{
printf("\n ptablou[%d]= %d",i,*(ptablou+i));
}
getch();
}
III.
se declar mai nti un pointer spre primul element din irul de caractere,
se aloc spaiu de memorie avnd grij s existe o locaie pentru caracterul terminator
de ir \0,
se citete irul folosind descriptorul de format %s, sau se iniializeaz direct folosind
ghilimelele
Ex. 12
S se memoreze cuvntul ACUM.
char* p;
p = (char *)malloc(5);
scanf(%s,p);
char* p;
p = (char *)malloc(5);
*p = ACUM;
Ex.
S se memoreze cuvntul abracadabra
S se nlocuiasc toate caracterele a dintr-un cuvnt citit de la tastatur cu
caracterul o.
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
void main()
{
char* cuvant;
int i, dim;
clrscr();
cuvant=(char *)malloc(100);
printf("\n Introduceti cuvantul care va fi prelucrat ");
scanf("%s",cuvant);
dim=strlen(cuvant);
printf("\n Dimensiunea cuvantului introdus este de %d caractere ",dim);
for(i=0;i<dim;i++)
if(cuvant[i]=='a')
cuvant[i]='o';
printf("\n Cuvantul rezultat in urma prelucrarii este %s ", cuvant);
getch();
}
Obs.
Penrtu lungimea irului se va afia valoarea 11, deci terminatorul nu se
consider ca fcnd parte din string
Ex.
S se ordoneze in ordine alfabetic dou cuvinte introduse de la tastatur cuvnt1,
cuvant2
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
void main()
{
char* cuvant1, *cuvant2;
clrscr();
cuvant1=(char *)malloc(100);
cuvant2=(char *)malloc(100);
printf("\n Introduceti primul cuvant ");
scanf("%s",cuvant1);
printf("\n Introduceti al doilea cuvant ");
scanf("%s",cuvant2);
printf("\n Cuvintele afisate in ordine alfabetica: ");
0, daca s1 si s2 coincid
valoarea ntoars de funcie:
0, daca s2 este inaintea lui s1