Sunteți pe pagina 1din 14

Universitatea Tehnic a Moldovei

FCIM
Catedra Informatica Aplicativ

RAPORT
la lucrarea de laborator nr. 5
la Programarea Calculatoarelor
Tema: Tehnicile prelucrrii tablourilor, utiliznd subprograme

A efectuat:

st. gr. Ai-141 Oprea Eugeniu

A verificat:

Marin tefan

Chiinu 2015

Scopul lucrrii: nsuirea tehnicilor de algoritmizare i programare cu


subprograme n prelucrarea structurilor complexe n TP i C.
Obiectivele temei:
1. Aprofundarea cunotinelor n limbajul i mediul TurboC i perfecionarea
tehnicii de programare cu subprograme n prelucrarea structurilor complexe.
2. nsuirea procedeelor de algoritmizare i progamare prin descompunerea
problemei n module autonome care, apoi, vor fi reprezentate prin secvene
/fragmente de program pentru prelucrarea unor informaii dup principii comune
cu apeluri multiple, analiznd soluiile stereotipe i cele eficiente de introducere,
afiare i rearanjri ale tablourilor etc.
3. nsuirea tehnicilor eficiente de parcurgere, cutare, schimbare i ordonare a
structurilor i calculul conform cunotinelor obinute din matematic n baza
ciclurilor i ncorporate ntr-un program complex, alctuit dup principiile
structurale i modulare.
Subiectele temei :
1. Studierea principiilor prelucrrii (descrierii, declarrii, formrii, etc.) tablourilor.
2. Studierea metodei de descompunere top-down a programului pe module aparte
care s fie apelate n diferite sectoare a programului, utiliznd subprograme.
3. nsuirea tehnicilor moderne de elaborare a programelor complexe n C n baza
problemelor din lucr. de laborator nr.3.
4. Elaborarea testelor i depanarea programului diverse moduri n mediul integrat C.
5. Compararea tehnicilor simple i celor bazate pe principiile structurale i modulare.
Laborator 3 (varianta 30)
2.1 Sarcina :

. Este dat un ir de
numere sunt mcar dou numere pozitive.
elementele tabloului unidimensional a1,
puse ntre o pereche de numere pozitive.

numere x 1, x2, xi. xn. Printre aceste


S se evidenieze n aceast succesiune
a2,... ak, (k necunoscut anticipat)Dac k>1, atunci s se calculeze :

Citire
Citim i
i=0
i>n
Citire

i++

tab1[i]

End
tablou

Afisare n
Citim tab1[50], i =
0

i=0

i>n

Afisafe
tab1[i]
da

i++

End;

Start tab n

tab1[50], tab2[50], k = 0, i =
0,inceput=0,sfirsit=0;

i=0

Tab1[i]>0
&&tab1[i+1]
Inceput=i+1

Break;
A

i++

i>n

i=0

Tab1[n-i]>0

Inceput=n-i-1

Break;

i++

i>n

inceput>1
i=0

Tab1[n-i]>0
Inceput=n-i-1

Break;

Start

Citim n,i

Afisare n

tab n,k 11+


++++++=+
+++
Rez I,k,inceput,sfirsit
End;

2.2 Listingul programului :

#include <stdio.h>
#include <conio.h>

#include <math.h>
int citire(n,i)
{
int tab1[50];
for(i=0;i<n;i++) {
printf("tab1[%d]=",i+1);
scanf("%d", &tab1[i]);
}
}
int afisare(n)
{
int tab1[50], i = 0;
printf("\n\nElementele vectorului: ");
for(i=0;i<n;i++)
printf("%d ",tab1[i]);
}
int tab(n)
{
int tab1[50], tab2[50], k = 0, i = 0,inceput=0,sfirsit=0;
for(i=0;i<n;i++){
if(tab1[i] > 0 && tab1[i+1] > 0){
inceput = i+1;
break;
}
}
for(i=0;i<n;i++){
if(tab1[n-i] >0){
sfirsit = n - i - 1;
break;
}
}

if(inceput > 1){


for(i=0;i<n;i++){
if(tab1[n-i] >0){
sfirsit = n - i;
break;
}
}
}
}
int rez(i,k,inceput,sfirsit)
{
int tab1[50], tab2[50];
k=0;
for(i=inceput;i<sfirsit;i++){
tab2[k] = tab1[i];
k++;
}
if(k>1){
printf("\n\nElementele vectorului tab2: ");
for(i=0;i<k;i++)
printf("%d ", tab2[i]);
}
else
printf("\n\nk < 1");
}
int main()
{
int n = 0, k = 0, i = 0;
int inceput = 0, sfirsit = 0;
printf("n=");
scanf("%d",&n);
citire(n,i);
afisare(n);

tab(n);
rez(i,k,inceput,sfirsit);
getch();
return 0;
}

2.3 Rezultatul programului:

Laborator 4 (varianta 42)


2.4 Sarcina :

Se considera un labirint cu n la puterea 2 celule. Fiecare celula are cel putin o usa si

cel mult trei. Sa se determine drumurile care pot fi parcurse de la celula C11 pana la celula Cnn , astfel
incit printr-o usa sa se treaca o singura data

Start
citire(n)
afisare(n)
ElementeleConditiei(n)

i<coun
t
i++

STOP

START(afisare)
START(citire)

i=0
j=0

i=0
j=0
v a[i][j]

j++

j++
i<
n

j<
n

i++

i++
i<
n

i<n

Afisam elimentul

STOP

STOP

START()

k=0

NU

k<n

i=0

i<n
Rez[count++]=a[k][i]

DA

I++

NU
K++

k<n

DA
j=n-1

j<n

Rez[count++]=a[k] [j]

j--

end

2.5 Listingul programului :


#include <stdio.h>
#include <conio.h>
int a[100][100], rez[100];
void citire(int n) {
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
}
void afisare(int n) {
int i,j;
printf("Matricea A:\n");
for(i=0;i<n;i++)
{ printf("\n");
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
}
}
void elementeleConditiei(int n){
int i,j,k,count=0;
for(k=0;k<n;k++){
for(i=0;i<n;i++)
rez[count++] = a[k][i];
k++;
if(k<n){
for(j=n-1;j>=0;j--)
rez[count++] = a[k][j];
}
}
}
void main()
{
int i, n;

printf("Introdu dimensiunea matricei: n="); scanf("%d",&n);


printf("Introdu elementele:\n");
citire(n);
afisare(n);
elementeleConditiei(n);
printf("\n\n\n");
for(i=0;i<n*n;i++)
printf("%d ", rez[i]);

printf("\n\n\n\n");

getch();
}
2.6 Dup execuia programului am obinut urmtorul rezultat pe ecran:

4. Analiza rezultatului:
Concluzii: Efectund aceast lucrare de laborator mi-am aprofundat cunotinele
n limbajul i mediul TurboC i mi-am perfecionat tehnicile de programare cu
subprograme n prelucrarea structurilor complexe,am nsuit procedeele de
algoritmizare i progamare prin descompunerea problemei n module autonome
care, apoi, vor fi reprezentate prin secvene /fragmente de program pentru
prelucrarea unor informaii dup principii comune cu apeluri multiple, analiznd
soluiile stereotipe i cele eficiente de introducere, afiare i rearanjri ale
tablourilor etc,am nsuit tehnicile eficiente de parcurgere, cutare, schimbare i
ordonare a structurilor i calculul conform cunotinelor obinute din matematic
n baza ciclurilor i ncorporate ntr-un program complex, alctuit dup principiile
structurale i modulare.
Bibliografie : Indicatii teretice , en.wikipedia.org/