Ministerul Educaiei i Tineretului al Republicii Moldova
Universitatea Tehnic a Moldovei
Catedra: Automatica si Tehnologii Informationale
RAPORT
Lucrare de laborator Nr.2
la Programarea Calculatoarelor
A efectuat:
St. gr. TI-141
Bitca Roman
A verificat:
[Link].
M. Potlog
Chiinu 2014
0
Lucrare de laborator Nr.2
Tema: Programarea proceselor cu cicluri i ramificaii
Scopul lucrrii: Elaborarea programelor ce conin procese de calcul cu
cicluri i ramificaii realizate cu diferite instruciuni posibile.
Formularea condiii problemei: De calculat valorile variabilelor indicate
dup formulele de calcul i datele iniiale indicate. De afiat rezultatele obinute pe
ecran.
Varianta VII:
Datele iniiale:
a ln x
2
pentru x - 2 > 0 si a = 0
sin c b
x sin( x 1)
F
pentru x - 2 < 0 si a 0
b
ax c
cos 2 x
in alte cazuri
Mersul lucrrii:
Se cunosc mai multe structuri de algoritmi, i anume:
Structura liniar
Structura ramificat
Structura iterativ (ciclic)
Ciclul este o parte a algoritmului care poate fi repetat de mai multe ori. Fiecare
ciclu trebuie s aib condiie. n dependen de aceasta ciclurile se divizeaz n:
1.
ciclu precondiionat (anterior)
2.
ciclu postcondiionat (posterior)
Pentru crearea ciclurilor se utilizeaz urmtoarele 3 instruciuni:
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.
Instruciunea do
Format:
do instruciune while
(expresie);
Instruciunea se execut repetat pn cnd valoarea expresiei devine zero. Testul
are loc dup fiecare execuie a instruciunii.
Instruciunea for
Format:
for (expresie-1opt; expresie-2opt; expresie-3opt)
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.
Analiza datelor:
a)
Date de intrare: x, b, xi,xf, xd - variabile simple de tip real, variabile de
intrare de la tastatur.
b)
Date de ieire: F,x - variabile simple de tip real, care vor afia valorile
funciei i argumentul la ecran, n variabil simpl de tip ntreg care va afia
ordinea afirii. Schema logic a programului:
2
Start
clrscr();
Introduceti datele
a,b,c,xi,xf,dx
a,b,c,xi,xf,dx
y=y1;
n=0;
Rezultatele
obtinute
x<=xf
NO
x-2<0 && a!=0
x-2>0 && a=0
YES
F = (a+log(x))/(sin(c))-b*b
NO
YES
F = (a*x+c)/(cos(2*x))
F= (x-sin(x+1)/b)
n=n+1
"x= f=" ,n ,x, F
x=x+dx;
Stop
Textul programului in limbajul C
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
//Declaram variabilile
float x,a,b,c,xi,xf,dx,F;
int n;
//Curatirea ecranului
clrscr();
//Afisarea propozitiei de dialog si introducerea datelor
printf("Introduceti datele initiale a,b,c,xi,xf,dx \n");
scanf("%f%f%f%f%f%f",&a,&b,&c,&xi,&xf,&dx);
x=xi;
n=0;
printf("Rezultatele obtinute: \n");
//Calcularile
while (x<=xf)
{
if (x-2>0 && a==0)
{F = (a+log(x))/(sin(c))-b*b;}
else if (x-2<0 && a!=0) F= (x-sin(x+1)/b);
else F = (a*x+c)/(cos(2*x));
n=n+1;
printf("%d x=%.3f f=%.3f \n",n,x,F);
x=x+dx;
}
//Retinerea rezultatelor pe ecran
getch();
return 0;
}
Rezultatele obtinute:
Am introdus datele:
a=2 , b=4, c=2, xi=2, xf=32, dx=4
1. x=2
2. x=6
3. x=10
4. x=14
5. x=18
6. x=22
7. x=26
8. x=30
f=-12.239
f=23.701
f=78.416
f=-45.789
f=-437.624
f=68.011
f=-490.825
f=-96.597
Concluzie:
n aceast lucrare am elaborat un program ce conine procese de calcul cu
cicluri i ramificaii realizate cu diferite instruciuni posibile. Din rezultatele
obinute observm c x se mrete cu o unitate ntruct xi, adic pasul este 4, pe
cnd variabila de ieire F i modific valorile doar pna n momentul cnd x atinge
valoarea 32.
Bibliografie:
Liberty Jess, Teach Yourself C++ in 21 Days, SAMS Publishing,
Indianapolis, 1994
Oualline Steve, Practical C++ Programming, O'Reilly & Associates,
Sebastopol, 1997
Brian W Kernigham, Dennis M Ritchie - The C Programming
Language
Prentice-Hall Software Series, 1978
Catrina Octavian, Cojocaru Iuliana, Turbo C++, Teora, 1993
5