Sunteți pe pagina 1din 9

LUCRAREA DE LABORATOR 3

Prelucrarea tablourilor unidimensionale n TP i C


Obiectivele temei
1.
2.
3.
4.

Familiarizarea cu principiile prelucrrii elementelor tablourilor unidimensionale.


Algoritmizarea i nsuirea procedeelor stereotipe de declarare, introducere, afiare i formare prin
parcurgere i calcule ale valorilor elementelor tablourilor unidimensionale.
nsuirea procedeelor avansate de realizare a structurilor ciclice cu instruciunile for, while i repeat,
aplicnd diverse tehnici de programare.
nsuirea procedeelor de operare n interfaa TP i C la nivelul submeniurilor DEBUG i
BREAK/WATCH (mijloacele de depanare-urmrire a variabilelor i punctele de ntrerupere).

Subiectele temei i ordinea executrii


1.
2.
3.
4.
5.
6.
7.

Studierea principiilor prelucrrii (descrierii, declarrii, formrii, etc.) tablourilor unidimensionale -variabilelor cu indici i instruciunilor ciclice n C i recapitularea n TP.
Studierea metodelor de introducere i afiare clar a tablourilor unidimensionale.
nsuirea tehnicilor fundamentale de programare a nmagazinrii diferitor valori n baza
elementelor: sumei i produsului; determinrii valorilor maxime i minime; diferitor cutri,
rearanjri i transformri ale elementelor tablourilor.
Elaborarea algoritmului i programului TP i C pentru rezolvarea problemei (variantele vezi n Anexa
L.lab nr.3), asigurnd universalitatea.
Depanarea programului i verificarea la PC a problemei trasate cu diverse combinaii de date.
Controlul corectitudinei programului cu ajutorul variantei de testare.
Analiza eficienei programului i soluiei problemei trasate.

Coninutul raportului
1. Drile de seam (rapoartele) la toate lucrrile de laborator, ncepnd cu aceast lucrare, se cere obligator s
se includ schemele logice ale algoritmilor cu exemplificarea corectitudinii prin date concrete. Analiza erorilor
admise pe parcursul efecturii lucrrii i modalitile de excludere. Restul vezi cerinele din lucrarea de
laborator nr.1.

Noiuni generale
1. Tipul tablou (array, masiv).
Tablouri: O metod de organizare a datelor este - t a b l o u l (tabele) cu iruri (de o lungime cunoscut) de
variabile de acelai tip. Structura:
Ansamblu omogen de variabile numite componentele tabloului
Toate componentele aparin aceluiai tip
Componentele sunt identificate cu ajutorul indicilor
Tablouri:
Unidimensionale (1 dimensionale)
Bidimensionale (2 dimensionale), etc.
Un ir de elemente de acelai tip se mai numete i vector sau tablou unidimensional. Deci tabloul este un
tip de date compus dintr-un numr precizat de date de acelai tip. Referirea la elementele tabloului se face
prin numele variabilei tablou urmat de indexul elementului pus ntre paranteze drepte [ ].
1.1 Tipul tablou i modurile de declarare n C
In C, tablourile unidimensionale sunt alctuite dintr-un grup de elemente de acelai tip (numit tip de baza)
si referite printr-un nume comun.
Variabilele de tip tablou se definesc in maniera:
tip_de_baza nume_var [dimensiune];
. Deci tabloul se poate caracteriza prin tip, nume i dimensiune. Formatul comun de descriere a tablourilor
este: tip nume[d1][d1][dn]; unde :
- tip este tipul comun pentru toate elementele tabloului, adic tipul tabloului de_baza. Tip al unui tablou
poate fi orice tip de date deja definit: ntreg, real, caracterial .a. nume este numele tabloului. In calitate de
nume al tabloului este folosit orice identificator. Mai mult ca att, deoarece numele tabloului este
identificator, asupra lui se rspndete totul ce-i indicat n compartimentul Nume de variabile
(identificatori), d1,d2,dn- dimensiunile tabloului (cifre ntregi sau variabile i atunci trebuie definite
nainte de declararea tablourilor).
[1]

Dimensiunea tabloului indica numarul de elemente prezente in tablou. Dimensiunea tabloului poate fi o
expresie constanta cu rezultat intreg.
Un element al tabloului este accesat folosind ca index poziia elementului, astfel tabloul_meu[6] va referi
al saptelea element al tabloului tabloul_meu.
Atentie! In C, "numerotarea" elementelor tablourilor ncepe cu poziia 0, astfel, daca avem definitia:
int tabloul_meu[100]; unde primul element al tabloului va fi tabloul_meu[0], iar ultimul
tabloul_meu[99].
Tablourile sunt stocate in memorie la locaii consecutive, un tablou ocupnd o zona contigua de memorie,
cu primul element al tabloului aflat la adresa mai mica.

Ex.:

int x[8];

[0]
valorile X

[1]

[2]

[3]

[4]

23

[5]

[6]

[7]

67

x[0]=23;
x[5]=67;
Atentie! O problema legata de tablouri este ca in C nu se face nici o verificare legata de "marginile"
tabloului, astfel ca se pot accesa greit elemente din afara tabloului. De exemplu, pentru definiia:
int tabloul_meu[100]; daca accesam tabloul_meu[105] nu se va semnala nici o eroare, returnndu-se
valoarea de la o locaie de memorie aflata la o distanta de 5 locaii fa de sfritul tabloului, fapt ce va duce la
comportri "bizare" ale programului. Aceeai situaie, dar fa de nceputul tabloului, se ntmpla la accesarea
tabloul_meu[-5].
Accesul la elementele tabloului Cu toate c tabloul este un tot ntreg, nu se poate vorbi
despre valoarea tabloului ntreg. Tablourile conin elemente cu valorile crora se opereaz n program. Fiecare
element n tablou i are indicele i valoarea sa. n calitate de indice a unui element se folosete un numr
ntreg ce indic numrul de ordine al elementului n tablou. Enumerarea elementelor n tablou conform
numrului de ordine se ncepe de la zero. Deci, indicele unui element poate avea valori de la 0 pna la d-1,
unde d este dimensiunea tabloului.
n calitate de valoare a unui element din tablou poate servi orice numr de tipul indicat la descrierea
tabloului, adica tipul valori atribuit oricrui element din tablou trebuie s fie compatibil cu tipul tabloului.
Sintaxa de acces la orice element a unui tablou este urmtoarea: nume[i1][i2]..[in]. Unde nume este numele
tabloului, i1 indicele elementului n dimensiunea 1, i2-indicele elementului n dimensiunea 2, in - indicele
elementului n dimensiunea n. n cele mai dese cazuri se opereaz cu massive unidimensionale i
bidimensionale. Accesul la un element al unui tablou unidimensional se face n felul urmtor: nume[i]; unde
nume - numele tabloului, i-numarul de ordine a elementului n tablou.
Iniializarea tablourilor. Deseori e necesar ca elementele tabloului s posede valori chiar la momentul
descrierii tabloului. Procesul de atribuire a valorilor elementelor tabloului n timpul descrierii lui se numete
iniializarea tabloului. Sintaxa de iniializare a unui tablou unidimensional este:
tip nume[d]={v0,v1,v2,,vn-1};
unde tip este tipul tabloului, nume este numele tabloului, v0,v1,v2,vn-1 valorile respective ale elementelor
nume[0],nume[1] etc. Exemplu:
int x[8]={1,3,15,7,19,11,13,5};
E de menionat faptul, c indicii tabloului se schimb ncepnd dela zero.Adic la descrierea tabloului
valoarea maxim a indicelui tabloului coincide cu numrul de elemente n tablou minus unu. La iniializarea
tabloului nu e numaidect de indicat dimensiunile tabloului.Compilatorul va determina numrul elementelor
dup descrierea tabloului i va forma un tablou cu mrimea respectiv. De exemplu:
int x[]={1,3,15,7,19,11,13,5};
2 Instruciunile ciclice i cele adiionale n C
Instruciunea while
Format:
while (expresie)
instruciune
Instruciunea se execut repetat atta timp ct valoarea expresiei este diferit de zero. Testul are loc
naintea fiecrei execuii a instruciunii. Prin urmare ciclul este urmtorul: se testeaz condiia din paranteze
dac ea este adevrat, deci expresia din paranteze are o valoare diferit de zero, se execut corpul instruciunii
while, se verific din nou condiia, dac ea este adevrat se execut din nou corpul instruciunii. Cnd
condiia devine fals, adic valoarea expresiei din paranteze este zero, se face un salt la instruciunea de dup
corpul instruciunii while, deci instruciunea while se termin.
[2]

Example:
a)calculeaz suma componentelor vectorului a de dimensiune m
suma=i=0;
while(++i< m) suma+=a[i];
b)citirea repetat de caractere pn la tastarea lui 'Y'
while(getche()!='Y');
c) char *adr; while(*adr!=NULL) { if(*adr=='*')*adr='+';
adr++;
};
d) while (*p == ' ') p++;
Instruciunea do
Format:
do instruciuni while (expresie);
Instruciunea se execut repetat pn Cnd valoarea expresiei devine zero. Testul are loc dup fiecare
execuie a instruciunii.
Example:
i = 1; n = 1;
do {
n *= i;
i++;
} while (i <= factorial);
Instruciunea for
Format:
for (expresie-1<opt>; expresie-2<opt>; expresie-3<opt>)
instruciune
Aceast instruciune este echivalent cu:
expresie-1;
while (expresie-2) {
instruciune;
expresie-3;
}
Expresie-1 constituie iniializarea ciclului i se execut o singur dat naintea ciclului.
Expresie-2 specific testul care controleaz ciclul. El se execut naintea fiecrei iteraii. Dac condiia din
test este adevrat atunci se execut corpul ciclului,
dup care se execut expresie-3, care const de cele mai multe ori n modificarea valorii variabilei de
control al ciclului. Se revine apoi la reevaluarea condiiei. Ciclul se termin Cnd condiia devine fals.
Oricare dintre expresiile instruciunii for sau chiar toate pot lipsi.
Dac lipsete expresie-2, aceasta implic faptul c clauza while este echivalent cu while (1), ceea ce
nseamn o condiie totdeauna adevrat. Alte omisiuni de expresii snt pur i simplu eliminate din expandarea
de mai sus.
Instruciunile while i for permit un lucru demn de observat i anume, ele execut testul de control la
nceputul ciclului i naintea intrrii n corpul instruciunii.
Dac nu este nimic de fcut, nu se face nimic, cu riscul de a nu intra niciodat n corpul instruciunii.
Examples:
for (i=0; i<100; i++)
sum += x[i];
for (i=0, t=string; i < 40 && *t; i++, t++)
putch(*t);
putch('\n');
Instruciunea continue
Format:
continue;
Aceast instruciune determin trecerea controlului la poriunea de continuare a ciclului celei mai
interioare instruciuni while, do sau for care o conine, adic la sfritul ciclului i reluarea urmtoarei iteraii a
ciclului. n while i do se continu cu testul, iar n for se continu cu expresie-3.
Mai precis n fiecare dintre instruciunile:
[3]

do {
while (...) {
for (...) {
...
...
...
contin:;
contin:;
contin:;
} while (...);
}
}
dac apare o instruciune continue aceasta este echivalent cu un salt la eticheta contin. Dup contin:
urmeaz o instruciune vid (vezi seciunea 6.11).
Poriunea de program din exemplul urmtor prelucreaz numai elementele pozitive ale unui masiv.
for (i=0; i<n; i++) {
if (a[i]<0)
/* sare peste elementele negative */
continue;
...
/* prelucreaz elementele pozitive */
}
Instruciunea return
O instruciune return permite ieirea dintr-o funcie i transmiterea controlului apelantului funciei. O
funcie poate returna valori apelantului su, prin intermediul unei instruciuni return.
Formate:
return;
return expresie;
n primul caz valoarea returnat nu este definit. n al doilea caz valoarea expresiei este returnat
apelantului funciei. Dac se cere, expresia este convertit, ca ntr-o atribuire, la tipul funciei n care ea apare.
Instruciunea vid
Format:
;
Instruciunea vid este util pentru a introduce o etichet naintea unei acolade drepte, ntr-o
instruciune compus, sau pentru a introduce un corp nul ntr-o instruciune de ciclare care cere corp al
instruciunii, ca de exemplu while sau for.
Exemplu:
for (nc=0; s[nc]!=0; ++nc) ;
Aceast instruciune numr caracterele unui ir. Corpul lui for este vid, deoarece tot lucrul se face n
partea de test i actualizare dar sintaxa lui for cere un corp al instruciunii. Instruciunea vid satisface acest
lucru.
Instruciune de salt Pernmite ntreruperea necondiionat a unei secvene i continuarea programului
dintr-un alt punct.
Instruciunea BREAK. Se utilizeaz n dou contexte, pentru a marca ncheierea secvenei de instruciuni
asociate unui selector case, i instruciunea de ciclare, pentru a determina ieirea forat dintr-un ciclu while,
do_while, sau for.
Instructiunea cu etichet GOTO:goto identificator. Are ca efect ntreruperea secvenei curente i
continuarea execuiei de la instruciunea cu eticheta identificatorului, ce trebuie s se afle n aceai funcie.
1.3 Organizarea prelucrrilor tablourilor n C
a)Citirea valorilor
Ex.
int tablou[10];
printf(\nIntroduceti dimensiunea tabloului);
scanf(%d,&n);
for(i=0;I,1;i++);
{
printf(\n tablou[%d]=,i); //se va afia tablou[i]= si se asteapta
scanf(%d,&tablou[i]); //introducerea valorii care se atribue variabilei tabloului
}
Obs:
1.Dimensiunea tabloului introdus de ctre utilizator (n) nu trebue sa depaeasca dimensiunea cu care a
fost declarat vectorul,(in cazul anterior n introdus de utilizator nu trebue sa depaseasca 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 il deosebete de variabilele simple care nu
reprezinta o adresa.
&stst&st[0];
3.Instructiunea printf() din interiorul buclei cu contorizare va afia numai numele variabilei care se
citeste.
[4]

4.Instructiunea scanf() va prelua si va memora valoarea pentru pozitia respective (tablou[i]).


5. Daca secventa de citire este alcatuita sub forma:
for(i=0;i<n;i++)
{
printf(\n tablou[%d]=%d:,I,tablou[i]);
scanf(%d,&tablou[i]);
}
Se va afia,pentru i=0,tablou[0]=-30731 si se va executa apoi instructiunea de citire, deci se va astepta
introducerea valorii care se va memoria in locatia tablou[0];
Valoarea afiata -30731 provine din faptul ca in momentul afiarii variabila tablou[i] nu este initializata si
de aceea se va afia o valoare aleatoare care va fi gasita in memorie la adresa respectivului element.
b)Afiarea vectorilor
Ex.
int tab[5]={1,2,3,4,5}; //sau vectorul este introdus ca la exer. de mai sus
printf(\nElementele vectorului sunt:);
for(i=0;i<5;i++)
printf(\n tab[%d]=%d,I,tab[i]);
Obs. In acest caz elementele tabloului au fost initializate direct.Pentru aceasta valorile care trebuesc
retinute in tablou au fost trecute intre accolade{}.
c) Prelucrri asupra vectorilor
Ex. Sa se afieze valorile unei functii considerind ca apartine unui vector de valori.
f : DC
D=(-,-3]U[3,)
x {-5,-2,0,5,7,9} f(x) {4,x,x,4,
,
}
f(x)=
Obs. Prin caracterul x sa reprezentat faptul ca respectivele valorix[i] nu apartin domeniului de definitie.
Etapele care trebuesc parcurse pentru determinarea valorilor functiei:
Declararea vectorului de intrare xfloat x[5] si a vectorului de iesire f float f[5]
Citirea numarului de elemente din x si a valorilor acestuia;
Verificarea numarului de elemente din x si a valorilor fumctiei (pentru x[i] D).Daca x[i] nu
apartine lui D atunci evident calculul valorii lui f nu este posibil.De aceea sa folosit variabila j care sa
indice pozitia valorii care a putut fi calculate in vectorul f.Totodata valorile x[i] care apartin
domeniului sunt memorate in vectorul x1;
Afiarea vectorilo x1, sir f;
CONDITIA: Este dat tabloul unidimensional X={Xi},i=1,,n; cu elemente reale.Alcatuiti algoritmul si
programul pentru urmatoarele:obtinerea tabloului unidimensional T cu valori logice , reesind din urmatoarele:
a) variabilei t sa-I fie atribuita valoarea TRUE, daca elementele tabloului X unt ordonate strict in ordinea
crescatoare, iar valoatrea FALSE in caz contrar;
b) variabilei t sa-I atribue valoarea TRUE, daca in tabloul X nu sunt prezente elementele de zero si
totodata eleentele positive se alterneaza cu cele negative,iar valoarea FALSE in caz contrar;
c) variabilei k sa-I fie atribuit numarul primei intrari y in tabloul X, astfel, adica daca y nu se contine in
X1 sa se calculeze K=X1+X1X2+X1X2X3+.+XX1X2Xm, unde m este numarul primului
element negative al tabloului X
Listingul programului:
# include <stdio.h>
# include <conio.h>
int i,a[10],t,n,p=0,d=0,r=0,z=1,y=0,k=0;
void main()
{
clrscr();
printf("Introducem nr. de elemente al tabloului n=");
scanf("%d",&n);
printf("Introducem y=");scanf("%d",&y);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
if (a[i]<a[i+1]) p++;
[5]

if (p==n-1) t=1;
else t=0;}
printf("\nt=%d",t);
for(i=0;i<n;i++)
{
if(a[i]>0&&a[i+1]>0||a[i]==0) d++;
if(a[i]<0&&a[i+1]<0&&a[i+2]<0) r++;
if(d>=1||r>=1) t=0;
else t=1;
}
printf("\nt=%d",t);
for(i=0;i<n;i++)
{
if (y==a[i]) {k=i;break;}
if(a[i]>=0)
{z=z*a[i]; k=k+z;}
}
printf("\nk=%d",k);
getche();
}
3.Exerciii pentu analize: Ce se afiseaza pe ecran la executia urmatoarelor programe? Gasiti
raspunsul, dati justificarea, apoi verificati prin executie.
1.Ce valori va afia programul urmtor?
int m=10, i=7,n,k;
do for (k=5; k >2; k--)
{for (n=4; n!=0; n--) m++; i--;
while (i>3);
printf (k=%d m=%d\n,k,m);
2. Analizai i apreciai ce efectuiaz urmtorul program C:
#include <stdio.h>
main(){int sum = 0, card; char answer[36];
srand( getpid()); /* randomizare */
do{ printf( "Avei %d puncte. Inca? ", sum);
if( *gets(answer) == 'n' ) break; /* pentru c vor fi prea puine */
printf( " %d puncte\n", card = 6 + rand() % (11 - 6 + 1));}
while((sum += card) < 21);
/* SIC ! */
printf(sum == 21 ? "puncte\n" :sum >21 ? "depit\n": "%d puncte\n", sum);
}
3. Exemplu de secvent pentru afiarea a n ntregi cte m pe o linie :
for ( i=1;i<=n;i++) { printf ( "%5d%c",i, ( i%m==0 || i==n)? '\n':' ');
O variant mai explicit dar mai lung pentru secventa anterioar:
for ( i=1;i<=n;i++) { printf ("%6d ",i); if(i%m==0) printf("\n"); } printf("\n");
Una dintre conventii se refer la modul de scriere a acoladelor care ncadreaz un bloc de instructiuni ce face parte
dintr-o functie sau dintr-o instructiune if, while, for etc. Cele dou stiluri care pot fi ntlnite n diferite programe si crti
sunt ilustrate de exemplele urmtoare:
void main () // Afiare numere perfecte , stil Linux
{ int n,m,s,d; scanf (%d,&n);
for (m=2; m<=n; m++) { s=0;
for (d=1; d<m; d++) { if ( m % d ==0 ) s= s+ d; }
if ( m==s) printf (%6d\n,m); } }
// Afiare numere perfecte, stil K&R si Java
void main () { int n,m,s,d; scanf (%d,&n);
for (m=2; m<=n; m++){ s=0;
for (d=1; d<m; d++){
if ( m % d ==0 )
s= s+ d;
}
if ( m==s)
printf (%6d\n,m);
}
}
[6]

Obs.
Specific limbajului C este utilizarea de expresii aritmetice sau de atribuire drept conditii n instructiuni if,
while, for, do n absenta unui tip logic (boolean). Exemplu:
while (*d++ =*s++); // copiaza sir de la s la d
Pentru a facilita citirea programelor si trecerea de la C la Java este bine ca toate condiiile s apar ca expresii de
relaie si nu ca expresii aritmetice:
while (*s != 0)
*d++=*s++;
4. Exemplul formrii tabloului:
int main()
{
const int array_size = 10;
int ia[ array_size ];
for ( int ix = 0; ix < array_size; ++ ix )
ia[ ix ] = ix;
}

4. ntrebrile de autocontrol
3.1.Transcriei exemplul programului din lucrarea de laborator nr.2, utiliznd instruciunile ciclice.
3.2*. Elaborai algoritmul i programul pentru cazul dac suma a trei numere reale cu valori diferite x,y,z este mai mic
dect unitatea, atunci cel mai mic numr din aceste trei, de schimbat cu semisuma a celorlalte dou, n caz contrar (Cnd
suma este mai mare ) de schimbat valoarea minimal dintre x i y cu semisuma a celorlalte valori rmase.
3.3. Modificai exemplul 3.2* pentru trei tablouri unidimensionale X, Y, Z i efectuai aceleai calcule
3.4*. Elaborai algoritmul i programul pentru cazul cnd sunt date 100 numere ntregi pentru care trebuie de calculat
diferena maxim i minimim ntre ele.
3.5*. Elaborai algoritmul i programul pentru determinarea. dac un numr natural e perfect, adic care este egal cu suma
tuturor divizorilor.(de exemplu 6=1+2+3).
3.6. Ce subnelegem prin tablou i cum se noteaz n program elementele unui tabel?
3.7. Cum se organizeaz n program introducerea i extragerea unui tablou?
3.8. Ce operaii se pot efectua efectiv cu elementele unui tablou?

Anexa L.lab nr.3


5.
Variantele problemelor prelucrrii tablourilor unidimensionale
1. S se calculeze funcia F dup formulele:
n

Xi / Yi ,

dac c=3;

i=1
n

F=

Xi / ec/yi ,

dac c=2;

i=1

min(Xi) / max (Yj ),


1<=i<=n

dac c=1;

1<=j<=n

unde valorile elementelor tablourilor unidimensionale X=(x1,x2,...,xN) i Y=(y1,y2,...,yN) sunt reale i se


ntroduc de la tastatur.
2. Sunt date tablourile unidimensionale A={ai }; B={bi }, i=1,,n. Reglamentai tablourile date
conform creterii sau descreterii valorilor lor. Folosind interclasarea grupai elementele acestor dou tablouri
ntr-un tablou C={ci }, j=1,,2xn; n aa mod ca ele s fie puse n ordinea de cretere sau descretere.
3. Este dat tabloul unidimensional X={xi }, i=1,,n; cu elemente reale. Alctuii algoritmul i
programul pentru urmtoarele: obinerea
tabloului unidimensional T cu valori logice, reieind din
urmtoarele:
a) variabilei t s fie atribuit valoarea TRUE- dac elementele tabloului X sunt ordonate strict n ordinea
cresctoare, valoarea FALSE n caz contrar;
b) variabilei t s fie atribuit valoarea TRUE dac n tabloul X nu sunt prezente elementele de zero i
totodat elementele pozitive se alterneaz cu cele negative, iar valoarea FALSE n caz contrar;
c) variabilei k s fie atribuit numrul primei ntrri y n tabloul X, altfel, adic dac y nu se conine n X, s
se calculeze =x1 + x1 x2 + x1 x2 x3 +...+x x1 x2 ... xm , unde m este numrul primului element negativ a
tabloului X sau valoarea numrul n dac n tabloul X nu exist elemente negative.
4. Sunt date tablourile unidimensionale X={ xi }, i=1,,n; Y={ Yj }, j=1,,m. S se elaboreze algoritmul i
programul pentru urmtoarele operaii cu tablourile:
a) variabilei logice t s fie atribuit valoarea TRUE dac mulimea elementelor tabloului X este
submulimea mulimii Y i FALSE n caz contrar. Apoi s se aprecieze urmtoarele:
b) Z=X Y - intersecia tablourilor;
[7]

c)
d)

Z=X Y - unificarea tablourilor;


Z=X\Y - diferena tablourilor (n Z conine toate elementele din X care nu se conin n Y).

5. Este dat tabloul X={ xi }, i=1,,n n baza cruia s se calculeze valoarea F:


1,
dac x1 > x2 >.. xi..> xn ;
2,
dac x1 < x2 <.. xi..< xn ;
3,
dac xi <2 <x <2 <...<x <2 ;
F=
4,
dac
max x >
x
5,
dac
min
x < P x ;
cosx sinx
- n cazurile rmase.
6. Sunt date tablourile
X={ xi }, i=1,,n; Y={yi }, i=1,,n i valoarea t n
baza crora s se calculeze valorile lui F:
n

(xi

+yi + xi yi ),

dac k=1;

i=1

(X2i+X2i+...+X2i)(y2i+y2i+...+y2i),
F=

dac k=2;

(y3i + x3i),
j=1

dac k=3;

(ln(xi + yi ) - y2j, n cazurile rmase.


i=1

j=1

7. Este dat un ir de numere x1, x2, xi. xn. Printre aceste numere sunt mcar
dou numere negative. S se evidenieze n aceast succesiune elementele
tabloului unidimensional a1, a2,... ak, (k necunoscut anticipat)- puse ntre o
pereche de numere negative. Dac k>1, atunci s se calculeze :
2
2
2
a) max(a 1, a 2,a k);
b) min(a1, 2a2,... kak);
c) numrul cifrelor pare printre a1, a2,... ak;
8. Este dat tabloul unidimensional
V={ vi }, i=1,,n, cu valori aleatorii, n
baza cruia s se efectuieze urmtoarele:
a) s se aprecieze numrul de ordine i valoarea primului element pozitiv i
celui negativ din tablou, iar dac toate elementele tabloului sunt egale
cu
zero, atunci de afiat mesajul respectiv;
b) s se gseasc numrul de ordine i valoarea
primului element par al
tabloului V, iar dac nu sunt elemente pare, atunci de afiat numrul celor
valori care se gsesc ntr-o succesiune anumit (cretere/ descretere);
c) s se determine numrul i valoarea ultimului element impar al tabloului V,
iar dac nu sunt elemente impare, atunci de afiat numrul celor negative.
9. Este dat un tablou unidimensional de numere ntregi i pozitive
m2,... mn). S se calculeze valoarile sumelor:

S=

M=( m1,

M1 M2
Mn
N
... (e(n-j) /(j+i) -ij 3j/ ij )
i1=L1 i2=L2 in=Ln j=1

10. Sunt date trei tablouri unidimensionale de numere ntregi i pozitive


M=(
m1, m2,...,mn ),L=(l1,l2,...ln),
K=( k1, k2,...,kn), N=25. S se calculeze
valoarea sumei:

S=

M1 M2
Mn
N
... (Lj - Kij )
i1=L1 i2=L2 in=Ln j=1

11. Sunt date valorile elementelor tabloului A={a1,a2,...,an}. S se calculeze


elementele tablourilor unidimensionale
X={ x1, x2,..., xn } i Y={y1,y2,...,yn}
dup formulele:
Xi=

ai/ ai+1
ai+ai+1

dac
dac

ai >0;
ai =0;

[8]

1- ai/ ai+1,

dac

ai/ ai +1// an
dac
Yi = 1+ai +ai +1++ an dac
ai ai +1 an,
dac

ai <0;
ai > 0;
ai = 0;
ai < 0;

12. S se compun un algoritm i s se scrie un program C pentru aflarea tuturor


numerelor naturale ce nu depesc numrul N>9999, considerat cunoscut, i sunt
egale cu
suma cuburilor cifrelor lui. Toate rezultatele s se scrie ntr-un
tablou care s fie afiat ntr-un mod clar.
13. Sunt date valorile elementelor tabloului A={a1,a2,...,an}. Din aceste elemente
s se determine toate perechile de numere naturale din 2 cifre
M N cu
proprietatea c valoarea produsului (M/2)*N nu se schimb dac se schimb locul
cifrelor fiecarui factor (o atare pereche va fi de exemplu 83 i 38 =>
(8/2)*3=3*(8/2) ). Rezultatele s se nscrie n dou tablouri: M n X={xi } i N
n Y={yi }, apoi de afiat n dou linii.
14. Este dat tabloul unidimensional X={xi}, i=1,,n. Transformai tabloul X
conform regulei urmtoare (yk - valoarea elementului k a tabloului dup
transformare):
a) yk = max( xi ) pentru 1<i<k;
b) elementele tabloului necesit s fie arangate n ordinea invers;
c) elementele tabloului necesit s fie mutate ciclic pe m (1<=l<=n-1) poziii
la stnga: yn =xm, , yk =xk-m pentru k=1,...,(n-m).
Printre
aceste
numere sunt
15. Este dat un ir de numere x1, x2, xi. xn.
mcar dou numere pozitive. S se evidenieze n aceast succesiune elementele
tabloului unidimensional a1, a2,... ak, (k necunoscut anticipat)- puse ntre o
pereche de numere pozitive. Dac k>1, atunci s se calculeze :
b) max(a1, a2 a3, ak);
a) min(a1, 2a2,... kak);
c) numrul cifrelor prime la ptrat printre a1, a2,...ak;
d)numrul cifrelor negative la ptrat printre a1,a2,...ak
16. Este dat tabloul unidimensional A={ ai }, i=1,,n, cu valori aleatorii, n
baza cruia s se obin un nou tablou din irul de elemente a1, a2,... an
conform urmtoarelor scheme:
1) an, an-1,... a1,2a1, 3a2,...(n+1)an, dac a1 > an;
2) a1, a2,... an, an+an-1,... a2+a1, dac a1 < an;
3) a1a2, a3a4,...,an-1an, a1+a2+...+an, dac ai<>ai+1;
17. Se consider vectorul A={ ai },1<=i<=n. S se gseasc valorile minimale i
maximale, apoi segmentul de vectori de cea mai mare lungime cu proprietatea
palindromic, adic segmentul de vectori n care primul element este egal cu
ultimul, al doilea cu penultimul .a.m.d. Pentru rezultatul obinut s fie
extras poziia de nceput a segmentului i lungimea sa, afind ntr-un mod
clar.
18. Sunt date tablourile
X={ xi }, i=1,,n; Y={yi }, i=1,,n i valoarea w n
baza crora s se calculeze valorile lui V:
n

(xi*xi +yi * yi + xi * yi ),

dac w=1;

i=1

V=

(x1*x1+...+xn*xn)(y1*y1+...+yi*yi++yn*yn),
n

x1 + xj + yi ),
j=1

dac w=2;

dac w=3;

i=1

19. Sa se scrie un program care citeste ciclic cate trei intregi x,i,j, pana la introducerea lui CTRL/Z, pentru
fiecare grup citit afisandu-se pe cate un rand nou:
- -reprezentarea lui x in zecimal, binar, hexazecimal si octal
- -reprezentarea in zecimal, binar, hexazecimal si octal a complementului lui x
[9]