Laborator 4
Obiectiv – Tipul tablou unidim –vector
Teorie: tip structurat de date care cuprinde un numar de componente de acelasi fel (tip).
Tipul componentelor da tipul vectorului. Accesarea unei comp se realiz prin intermediul
unui indice.
Declaratia unei variabile de tip vector: tip nume[n];
Referirea la elementul unui vector: a[0]- primul elem al vectorului a, a[5] – al saselea
elem al vectorului a...
Obs: numele unui tablou are ca valoare adresa primului sau element. Comp unui vector
sunt pastrate in memorie una dupa alta, in zone continue, in ordinea crescatoare a val.
indicelui.
Initializarea unui vector se poate face la declaratie sub forma: tip nume[n]={t1,t2,...,tn};
nr. expr. de initializat poate fi mai mic decat nr. elem. Vectorului. Daca toate elem
vectorului se initializeaza atunci n nu mai e nec: tip nume[]={t1,t2,...,tn};
Probleme:
1. Se citeste un sir de numere intregi de dimensiune n si un numar intreg b.
a) Sa se ordoneze crescator numerele sirului
a) Sa se calculeze media elementelor strict pozitive.
b) Sa se determine nr. elementelor negative.
c) Sa se caute daca exista elementul 0 in vector.
d) Sa se determine numarul de aparitii a lui b in sirul dat.
#include<stdio.h>
#include<conio.h>
void main(){
int v[50],n,i,cod,aux,b, poz=0,neg=0, gasit=0, nr=0;
float med=0;
printf("\nIntroduceti nr de elemente ");
scanf("%d",&n);
printf("\nIntroduceti elementele\n");
for(i=0;i<n;i++)
{printf("v[%d]=",i+1);
scanf("%d",&v[i]);}
do{cod=1;
for(i=0;i<n-1;i++)
if(v[i]>v[i+1])
{aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
cod=0;}
}
while(cod==0);
printf(„\nSirul ordonat este:”);
for(i=0;i<n;i++)
printf(„%d ”,v[i]);
printf("\nIntroduceti b ");
scanf("%d",&b);
for(i=0;i<n;i++)
{if(v[i]>0) {poz++;med=med+v[i];}
if(v[i]<0) neg++;
if(v[i]==b)nr++;
if(v[i]==0)gasit=1;
}
med=med/poz;
printf("\nMedia elem strict pozitive este %.2f",med);
printf("\nNumarul elem negative este %d", neg);
if(gasit==1)printf("\nElem 0 este in sir");
else printf("\nNumarul 0 nu este in sir");
if(nr==0) printf("\nNumarul %d nu este in sir",b);
else printf("\nNumarul de aparitii al valorii %d in sir este %d",b,nr);
getch();
}
2. Se consideră un şir de dimensiune n.
a) Sa se inverseze elem sirului.
b) Sa se adauge in sirul cu elem inversate, pe pozitia k<n elementul a carui valoare
este data de suma elem sirului
c) Sa se ordoneze crescator elem noului sir.
#include<stdio.h>
#include<conio.h>
void main(){
int v[50],n,i,s,aux,k,cod;
printf("\nIntroduceti nr de elemente ");
scanf("%d",&n);
printf("\nIntroducerea elementelor si calculul sumei\n");
s=0;
for(i=0;i<n;i++)
{printf("v[%d]=",i+1);
scanf("%d",&v[i]);
s+=v[i];}
for(i=0;i<n/2;i++)
{aux=v[i];
v[i]=v[n-1-i];
v[n-1-i]=aux;}
printf("\nSirul inversat este\n");
for(i=0;i<n;i++)
printf("%2d",v[i]);
printf("\nIntroduceti k: ");
scanf("%d",&k);
for(i=n-1;i>=k-1;i--) v[i+1]=v[i];
v[k-1]=s;
n++;
printf("\nNoul sir este\n");
for(i=0;i<n;i++)
printf("%4d",v[i]);
do
{ cod=1;
for(i=0;i<n-1;i++)
if(v[i]>v[i+1])
{aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
cod=0;}
}while(cod==0);
printf("\nSirul ordonat este\n");
for(i=0;i<n;i++)
printf("%4d",v[i]);
getch();
}
3. Să se scrie un program care să afişeze rezultatul reuniunii a două mulţimi de numere
întregi citite de la tastatură.
#include<stdio.h>
#include<conio.h>
void main()
{
int a[20],b[20],r[40],n,m,k, i,j, gasit;
printf("\n Introduceti n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("a[%d]=",i+1);
scanf("%d",&a[i]); }
printf("\n Introduceti m:");
scanf("%d",&m);
for(i=0;i<m;i++)
{printf("b[%d]=",i+1);
scanf("%d",&b[i]); }
for(i=0;i<n;i++)r[i]=a[i];
k=n;
for(i=0;i<m;i++)
{gasit=0;
for(j=0;j<n;j++)if(b[i]==a[j])gasit=1;
if(gasit!=1){r[k]=b[i];k++;}
}
for(i=0;i<k;i++)
printf("%d\t",r[i]);
getch();
}
Tema:
1. Sa se realizeze un program pentru calculul produsului scalar a 2 vectori , pentru
determinarea sumei elem vectorilor, pentru cautarea elem min si max din fiecare
vector.
2. Să se scrie un program care să afişeze rezultatul intersecţiei a două mulţimi de
numere întregi citite de la tastatură.
3. De-a lungul unei perioade de n zile se înregistrează temperaturile zilnice. Să se
determine care a fost cea mai mare şi cea mai mică temperatură înregistrată. De
asemenea, să se determine numărul de temperaturi negative înregistrate şi câte
temperaturi s-au încadrat în limitele obişnuite ale perioadei respective (limitele
sunt introduse de la tastatură).
4. După desfăşurarea unui concurs, cei n candidaţi au obţinut fiecare un punctaj. Să
se determine al câtelea candidat a obţinut postul.
5. Se consideră notele unui student obţinute la cele n examene din timpul unui an
universitar. Să se determine media generală a studentului, numărul de examene
nepromovate, care a fost cea mai mare şi cea mai mică notă obţinută şi dacă
acesta a obţinut note de zece.