Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Varianta 6
A efectuat: st.gr.TI-192
Covrig Victor
A verificat: asist.univ.
Cristina Josan
Chisinau-2019
Tema lucrarii:Solutionarea problemelor prin prelucrarea tablourilor unidimensionale în TP şi C.
Obiectivele temei
unidimensionale.
3. Însuşirea procedeelor avansate de realizare a structurilor ciclice cu instrucţiunile for, while şi repeat,
Partea teoretica
Tablourile sunt niste multimi de data uniforme (au acelasi tip de date), care ocupa in secventa de memorie locuri
succesive..Tablourile unidimesionale sunt numite si vectori ,care sunt formate dintr-un sir de date. Ele se declara
cu in forma data :”tipul de date denumirea tabloului[numarul maxim de elemente ]”.De exemplu in cazul: int
a[40] ,avem un tablou unidimensional a ,format din numere intregi ,avand 40 de elemente.Elementele unui tablou
se acceseaza cu urmatoarea sintaxa :”a[i]” ,a-denumirea tabloului ,i-numarul de ordine a elementului care dorim
sa accesam.In C tablourile incep cu numarul de ordine 0.Pentru a scrie tabloul unidimensional de la tastatura este
nevoie de urmatoarea parcurgere a programului:
for (i=0;i<n;i++)
{printf("x[%d]=",i);
scanf("%d",&x[i]);}
Aceasta instructiune se realizeaza de n ori si va afisa a[0]=valoare instrodusa ,a[1]=valoare introdusa … a[n]-
valoare introdusa.
for(i=0;i<n;i++)
printf(“\n tab[%d]=%d”,I,tab[i]);
Partea practica
6. Să se elaboreze algoritmul şi programul pentru următoarele: Sunt date tablourile X={ x i },
lui F:
n
∑ (xi*yi + xi *yi +), dacă k=1;
i=1
(X +X +...+X )(y +y +...+y ),
2
i
2
i
2
i
2
i
2
i
2
i dacă k=2;
F= n
(y + x ),
3
i
3
i dacă k=3;
j=
#include<stdio.h>//Includem biblioteca standard input-output, folosita pentru afisarea sirurilor de caractere din
functiile printf si scanf.
void main(void)//Afisam header-ul programului principal ,care nu returneaza nici o valoare si nu are argumente.
{//Inceputul programului.
int x[100],y[100],i,k,F=0,n,j,x1=0,y1=0;//Declaram variabilele inclusiv tablourile x si y care sunt formate din maxim
100 elemente.
printf("Dam valoarea lui k "); //Folosim printf pentru a sti ca urmeaza sa dam variabila k de la tastatura; k poate sa
fie 1,2 sau 3.
for (i=0;i<n;i++) //Ciclul for initializeaza variabila de contor I cu 0,aplicam conditia i<n(se executa de n
ori,incrementam i la sfarsitul blocului care urmeaza.
for (i=0;i<n;i++) //Ciclul for initializeaza variabila de contor I cu 0,aplicam conditia i<n(se executa de n
ori,incrementam i la sfarsitul blocului care urmeaza.
for (i=0;i<n;i++) //Ciclul for initializeaza variabila de contor I cu 0,aplicam conditia i<n(se executa de n
ori,incrementam i la sfarsitul instructiunii care urmeaza.
for (j=0;j<n;j++) ////Ciclul for initializeaza variabila de contor I cu 0,aplicam conditia i<n(se executa de n
ori,incrementam i la sfarsitul instructiunii care urmeaza.
default : //In caz daca variabila k nu primeste niciuna din valorile 1,2,3.
printf ("K nu este nici una din valorile 1,2,3"); //Afisam ca k nu a primit valorile dorite.
Afisarea rezultatelor:
K=1:
K=2:
K=3:
Verificarea rezultatelor:
K=1:
K=2:
K=3:
Intrebari de autocontrol:
3.2: Elaboraţi algoritmul şi programul pentru cazul dacă suma a trei numere reale cu valori diferite x,y,z este mai mică decât
unitatea, atunci cel mai mic număr din aceste trei, de schimbat cu semisuma a celorlalte două, în caz contrar (Când suma este
mai mare ) de schimbat valoarea minimală dintre x şi y cu semisuma a celorlalte valori rămase.
#include<stdio.h>
int main()
float x,y,z,M,S;
scanf("%f",&x);
scanf("%f",&y);
scanf("%f",&z);
if (x+y+z<1)
if (x<y)
M=x;
else M=y;
if (M>z)
M=z;
if (M==x)
{M=S;
S=(y+z)/2;
else if (M==y)
M=S;
S=(x+z)/2;
else if (M==z)
{M=S;
S=(x+y)/2;
else if (x+y+z>1)
{
if (x<y)
M=x;
S=(y+z)/2;
else {M=y;
S=(x+z)/2;
return 0; }
3.4*. Elaboraţi algoritmul şi programul pentru cazul când sunt date 100 numere întregi pentru care trebuie de calculat
diferenţa maximă între ele:
Algoritmul:
1.Initiem tabloul unidimensional a,I,S,max,min.
2.Prin ciclul for introducem elementele tabloului unidimensional.
3.atribuim elementului maxim si minim primul element.
4.cu ciclul for verificam daca elementul cu numaul de ordine I este mai mare decat min si respective max ,in acest caz atribuim
min si max variabilele respective.
5.Calculam diferenta dintre elementul maxim si minim.
6.Printam diferenta elementelor.
#include<stdio.h>
void main (void)
{
int a[100],i,S,max,min;
for (i=0;i<100;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);}
max=a[0];min=a[0];
for (i=1; i<100; i++) {if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];}
S=max-min;
printf("Diferenta maxima este %d",S);
3.5*. Elaboraţi algoritmul şi programul pentru determinarea. dacă un număr natural e perfect, adică care este egal cu
suma tuturor divizorilor.(de exemplu 6=1+2+3).
Algoritmul:
1.Dam valorile initiale x,suma=0,i,d.
2.Introducem de la tastaura numarul x.
3.Aplicam ciclul for ,care verifica daca x mod i(un numar de la 1 la x) este diferit de 0, daca e asa numarul se include in variabila
d (special rezervata pentru divizori)
4.Calculam suma acestor divizori.
5.Printam rezultatul final (suma).
Programul:
#include<stdio.h>
#include<math.h>
void main()
int x,suma=0,i,d;
scanf("%d",&x);
for (i=1;i<=x;i++)
if (x%i==0)
{d=i;
suma=suma+d;}}
3.6. Ce subînţelegem prin tablou şi cum se notează în program elementele unui tabel?
Un tablou este o totalitate de aceleasi tip de date ,care se afla pe zone de memorie sucesive.In program elementele unui tablou
la initiere se noteaza prin {x1,x2,x3,x4…},unde x1,x2,x3 sunt elementele tabloului.e face referire la elementele tabloului prin
a[i],unde a este denumirea tabloului ,iar i-numarul de ordine a lui care incepe intodeauna de la 0.
Introducerea se realizeaza prin ciclul repetitive for ,care primeste ca argumente valoarea initiala a lui i-0 (prima pozitie),i<n
,unde n este numarul de elemnte ,incrementarea lui i.Ciclul primeste ca bloc de instructiuni {printf("x[%d]=",i);
printf(“\n tab[%d]=%d”,I,tab[i]);
Elementele unui tablou pot fi inmultite intre ele, impartite ,adunate ,scazute,mod(%),comparate,atribuire ,precum si operatii
matematica include in math.h.
3.9. Fie X[1..n] si Y[1..n] vectori de întregi. Care va fi valoarea lui Y[n] după execuţia secvenţei:
Y[1]=x[1];
a) x[n]+x[n-1]
b) x[n]
c) x[1]+x[2]+………..+x[n]
Raspuns:d.
3.10 Fie X[1..n] si Y[1..n] vectori de numere reale. După execuţia secvenţei de program:
y[1]=-x[1];
for(i=2;i<n;i++) y[i]=y[i-1]*x[i];
a) x[1]*x[2]*……*x[n]
b) –x[1]*x[2]*….*x[n]
c) (-1)n x[1]*…..*x[n]
i=1;
Raspuns:b.
scanf(“%d”,&n);
for(i=1;i<n;i++) { ex=0;
Raspuns:a.
Concluzie:
In cadrul acestei lucrari de laborator m-am familiarizat cu tablourile unidimensionale ,creand un program care efectua suma si
produsul cartezian a unor expresii ce utilizau 2 tablouri unidimensionale (x si y) , totodata am efectuat schema bloc a
programului , am afisat rezultatele ,am verificat rezulatatele ,obtinand in fiecare caz rezultatul corect. Programul este impartit in
3 cazuri (k=1,k=2,k=3),pe care le-am efectuat cu ajutorul instructiunii conditionale switch case.Am utilizat in mod repetat
instructiunea repetitiva for ,care este indispensabila cand vine vorba de tablouri unidimensionale si bidimensionale.
Bibliografie:
https://ro.wikipedia.org/wiki/Tabel_de_simboluri_matematice
http://elearning.masterprof.ro/lectiile/informatica/lectie_05/exemple.html