Documente Academic
Documente Profesional
Documente Cultură
RAPORT
la lucrarea de laborator nr. 3
la Programarea Calculatoarelor
Varianta 5 25
Chişinău 2020
Scopul lucrării
Obiectivele temei
1. Extras Teoretic
Numim tablou o colectie (grup, multime ordonata) de date, de acelasi tip, situate
intr-o zona de memoriecontinua (elementele tabloului se afla la adrese succesive).
Tablourile sunt variabile compuse (structurate),deoarece grupeaza mai multe
elemente. Variabilele tablou au nume, iar tipul tabloului este dat de
tipulelementelor sale. Elementele tabloului pot fi referite prin numele tabloului si
indicii (numere intregi) carereprezinta pozitia elementului in cadrul tabloului. Deci
este o metodă de organizare a datelor este - t a b l o u l(tabele) cu şiruri (de o
lungime cunoscută) de variabile de acelaşi tip.
Structura:
• Ansamblu omogen de variabile numite componentele tabloului
• Toate componentele aparţin aceluiaşi tip
• Componentele sunt identificate cu ajutorul indicilor
• Tablouri:
• Unidimensionale (1 – dimensionale)
• Bidimensionale (2 – dimensionale), etc
Un şir de elemente de acelaşi tip se mai numeşte şi vector sau tablou
unidimensional. Deci tabloul este untip de date compus dintr-un număr precizat de
date de acelaşi tip. Referirea la elementele tabloului se faceprin numele variabilei
tablou urmat de indexul elementului pus între paranteze drepte [ ].
2. Rezolvare
#include <conio.h>
#include <stdio.h>
int main()
{
unsigned int n,i,u,d[40],cont=0;
printf ("Introduceti un numar : ");
scanf ("%d",&n);
for (i=2;i<=(n/2);i++)
if (n%i==0)
{
printf("Cel mai mic divizor propriu al lui %d este %d \n\n",n,i);
cont=1;
break;
}
if(cont==0)
printf("Numarul este prim!\n\n");
return 0;
}
3.2*. Elaboraţi algoritmul şi programul pentru cazul dacă suma a trei numere reale
cu valori diferite x,y,z este mai mica decât unitatea, atunci cel mai mic număr din
aceste trei, de schimbat cu semisuma a celorlalte două, în caz contrar (Cândsuma
este mai mare ) de schimbat valoarea minimală dintre x şi y cu semisuma a
celorlalte valori rămase
#include <conio.h>
#include <stdio.h>
int main()
{
float x, y, z;
printf("Dati valoarea lui X\n");
scanf("%f", &x);
printf("Dati valoarea lui Y\n");
scanf("%f", &y);
printf("Dati valoarea lui Z\n");
scanf("%f", &z);
if (x+y+z<1){
if ((x < y) && (x < z))
{
x = (y+z) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("X este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este: %f .\n\n", x);
return 0;
}
if ((y < x) && (y < z))
{
y = (x+z) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("Y este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este: %f .\n\n", y);
return 0;
}
if ((z < x) && (z < y))
{
z = (x+y) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("Z este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este este: %f .\n\n", z);
return 0;
}
}
if(x+y+z>1)
{
if (x<y)
{
x = (z+y)/2;
printf("Suma tuturor numerelor este mai mare decat o unitate.\n\n");
printf("X este mai mic ca Y, deci, a fost inlocuit cu semisuma celorlalte
numere care este egala cu : %f\n\n", x);
return 0;
}
if (y<x)
{
y = (z+x)/2;
printf("Suma tuturor numerelor este mai mare decat o unitate.\n\n");
printf("Y este mai mic ca X, deci, a fost inlocuit cu semisuma celorlalte
numere care este egala cu : %f\n\n", x);
return 0;
}
}
}
3.3. Modificaţi exemplul 3.2* pentru trei tablouri unidimensionale X, Y, Z şi
efectuaţi aceleaşi calculi.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i=0 , n, m;
double a=0, b=0, c=0;
printf("Dati numarul elementelor fiecarui tabel\n\n");
scanf("%d", &n);
if(n<1){
printf("Eroare!\n");
return 0;
}
printf("\n\n");
printf("Pentru a usura generarea sirurilor, dati un numar natural de n care va
respecta conditia 2 < n < 10 \n\n");
scanf("%d", &m);
if((m<2) || (m>10))
{
printf("Eroare!");
return 0;
}
printf("\n\n");
float x[n], y[n], z[n];
srand(time(NULL));
for(i=0;i<n;i++){
x[i]=((rand()%m)*0.1);
}
for(i=0;i<n;i++){
y[i]=((rand()%m)*0.1);
}
for(i=0;i<n;i++){
z[i]=((rand()%m)*0.1);
}
printf("\n\n\nValorile sirului X:\n");
for(i=0;i<n;i++){
printf("%d) %f\n", i+1, x[i]);
}
printf("\n\n\nValorile sirului Y:\n");
for(i=0;i<n;i++){
printf("%d) %f\n", i+1, y[i]);
}
printf("\n\n\nValorile sirului Z:\n");
for(i=0;i<n;i++){
printf("%d) %f\n", i+1, z[i]);
}
for (i=0;i<n;i++){
a += x[i];
b += y[i];
c += z[i];
}
printf("\n\n\n");
printf("Suma numerelor sirului X = %f\n", a);
printf("Suma numerelor sirului Y = %f\n", b);
printf("Suma numerelor sirului Z = %f\n", c);
printf("\n\n\n");
if (a+b+c<1){
if ((a < b) && (a < c))
{
a = (b+c) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("X este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este: %f .\n\n", a);
return 0;
}
if ((b < a) && (b < c))
{
b = (a+c) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("Y este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este: %f .\n\n", b);
return 0;
}
if ((c < a) && (c < b))
{
c = (a+b) / 2;
printf("Suma tuturor numerelor este mai mica decat o unitate.\n\n");
printf("Z este cel mai mic numar, deci el a fostu inlocuit cu semisuma celorlalte
numere\nAceasta este este: %f .\n\n", c);
return 0;
}
}
if(a+b+c>1)
{
if (a<b)
{
a = (c+b)/2;
printf("Suma tuturor numerelor este mai mare decat o unitate.\n\n");
printf("X este mai mic ca Y, deci, a fost inlocuit cu semisuma celorlalte
numere care este egala cu : %f\n\n", a);
return 0;
}
if (b<a)
{
b = (c+a)/2;
printf("Suma tuturor numerelor este mai mare decat o unitate.\n\n");
printf("Y este mai mic ca X, deci, a fost inlocuit cu semisuma celorlalte
numere care este egala cu : %f\n\n", b);
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ă şi minimimă între ele.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char v;
printf("Selectati varianta de calcul:\n");
printf("a - diferenta maxima a sirului numeric\n");
printf("b - diferenta minima a sirului numeric\n");
scanf(" %c", &v);
if (!(v=='a' || v == 'b'))
{
printf("Eroare ! Nu ati selectat varianta corecta!\n");
return 0;
}
int n,m,i, m2, min, a, max;
printf("Dati numarul de elemente al sirului\n");
scanf("%d", &n);
if ((n<1) || (n >= 100))
{
printf ("\nEroare! dati un numar care va respecta conditia 1 < n < 100\n");
return 0 ;
}
printf("\nDati numarul maxim generat si tastati Enter\n\n");
scanf("%d", &m);
m2 = m*2;
printf("\n\n");
int x[n];
srand(time(NULL));
for(i=0; i<n; i++)
{
x[i]=((rand()%m2)-m);
}
for(i=0;i<n;i++){
min = min - x[i];
}
printf("\nDiferenta maxima este : %d\n", min);
break;
case 'b':
for(i=0; i<n; i++)
{
if(x[i]< max)
{
max = x[i];
a = i;
}
}
for(i=0;i<n;i++){
max = max - x[i];
}
printf("\nDiferenta minima este : %d\n", max);
break;
}
return 0;
}
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)
# include <stdio.h>
int main()
{
int i,n,a = 0 ;
printf("\n Introduceti de la tastatura numarul pe care vreti sa-l verificati daca este
perfect \n") ;
scanf("%d", &n) ;
for(i = 1 ; i < n; i++)
{
if(n % i == 0)
a=a+i;
}
if (a == n)
printf("\n %d este un numar perfect", n) ;
else
printf("\n%d nu este un numar perfect", n) ;
return 0 ;
}
Include <stdlib.h>
Int main()
{
Int i, n;
Scanf (“%d”, &n);
Int x[n];
For (i=0;i<n;i++)
{
x[i] = i + 1;
printf(“%d”, x[i]);
}
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:
Raspuns : “c”;
3.10 Fie X[1..n] si Y[1..n] vectori de numere reale. După execuţia secvenţei de
program:
Raspuns : “a”;
Raspuns : “d”;
3.12 Ce face următoarea secvenţă ?
Raspuns : “a”
Raspuns : “c”;
Raspuns : “c”;
Raspuns “c”;
K = 5;
M = 11;
Analizaţi şi apreciaţi ce efectuiază următorul program C:
Programul dat reprezinta jocul BlackJack, astfel acesta ofera puncte random, suma
carora nu trebuie sa depaseasca 21 altfel, jocul se considera pierdut.
int main()
{
char c='a',cc;
int i=4;
float f=5.95;
printf("%d %f\n",i,f);
i=f; // conversie implicita, trunchiere
printf("%d %f\n",i,f);
f=i+100000; // conversie implicita a rezultatului expresiei
printf("%d %f\n",i,f);
i=-99.001; // conversie implicita, trunchiere
f='a';
c=0x3239; cc=-i; // preluarea ultimului octet
printf("%d %f %c %c\n",i,f,c,cc);
float r1=5/2,
r2=(float)5/2,
r3=(float)(5/2),
r4=5/(float)2,
r5=(float)5/(float)2;
printf("%f %f %f %f %f\n",r1,r2,r3,r4,r5);
int main()
{
printf("Int - %d\n",sizeof(int));
printf("Double - %d\n",sizeof(double));
printf("Long double - %d\n",sizeof(long double));
printf("'a' - %d\n",sizeof('a'));
printf("char 'a' - %d\n",sizeof((char)'a'));
printf("33000 - %d\n",sizeof(33000));
printf("1.3+'a' - %d\n",sizeof(1.3+'a'));
printf("1.3f - %d\n",sizeof(1.3f));
printf("1.3 - %d\n",sizeof(1.3));
printf("1.3l - %d\n",sizeof(1.3l));
printf("5/2 - %d\n",sizeof(5/2));
printf("float 5/2 - %d\n",sizeof((float)5/2));
}
b) Gasiti ce tipareste pe ecran urmatorul program? Verificati, rulandu-l.
#include <stdio.h>
int main (void){
puts("Dimensiunea in octeti ocupata de:");
printf("int\t%d\n",sizeof(int));
printf("char\t%d\n",sizeof(char));
printf("long\t%d\n",sizeof(long));
printf("32780\t%d\n",sizeof(32780));
printf("32780u\t%d\n",sizeof(32780u));
printf("-10000\t%d\n",sizeof(-10000));
printf("'a'\t%d\n",sizeof('a'));
printf("07111111\t%d\n",sizeof(07111111));
printf("22l\t%d\n",sizeof(22l));
}
1.38. Rulati programele de mai jos pas cu pas, urmarind valorile variabilelor in
fereastra Watch, in baza 10 si 16 (nume_variabila,x ):
#include <stdio.h>
int main(void){
int i=20000,j=15000,k;
float r;
scanf("%d",&k);
printf("%d %p\n",k,&k);
k=i+j;
r=i+j;
r=(float)i+j;
r=(long)i+j;
r=i/j;
k=i/j;
r=(float)i/j;
k=i%j;
k=+ - - -i;
k=+ - --i;
k=- +j--;
i=k/(j-j);
}
int main2(void){
int a,b,c; float z;
a=25000;b=20000;
c=a+b;
z=a+b;
c=(float)a+b;
z=(float)a+b;
c=a/b;
c=a%b;
c=a>b;
c=a==b;
a=3;b=11;
c=a++ + ++b;
c=a&b;
c=a|b;
c=a^b;
c=b<<2;
c=-a>>3;
c=~a;
a=0;
c=a&&b;
c=a||b;
c=!a;
a=4;
c=a&&b;
c=a||b;
c=!a;
a=2;c=3;
c*=a;
b=5;
c=(a>b)?a:b;
}
#include <stdio.h>
int main(){
int n,i,dim=sizeof(i)*8,masca=1;
while(1){
printf("n=");scanf("%d",&n);
for(i=dim-1;i>=0;i--)
putchar(n&masca<<i?'1':'0');
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main()
{
int F,n,m,i, m2, c=0, max=0, d=0, e = 0, min=0;
float a=0, b=0;
printf("Dati numarul de elemente al sirului\n");
scanf("%d", &n);
if ((n<10) || (n >= 100))
{
printf ("\nEroare! dati un numar care va respecta conditia 10 < n < 100\n");
return 0 ;
}
printf("\nDati numarul maxim generat si tastati Enter\n\n");
scanf("%d", &m);
m2 = m*2;
printf("\n\n");
int x[n];
x[0] = 0;
srand(time(NULL));
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n,m,i,j, a=0;
printf("Dati numarul de elemente al sirului\n");
scanf("%d", &n);
if ((n<10) || (n >= 100))
{
printf ("\nEroare! dati un numar care va respecta conditia 10 < n < 100\n");
return 0 ;
}
printf("\nDati numarul maxim generat astfel in cat n > 1000 si tastati
Enter\n\n");
scanf("%d", &m);
if (m < 1000)
{
printf("Eroare ! Dati un numar care va respecta conditia n > 1000\n");
return 0;
}
printf("\n\n");
int x[n];
int y[n];
srand(time(NULL));
c)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int check,u,k,n,m,i,j,l;
printf("Dati numarul de elemente multimii X\n");
scanf("%d", &n);
if ((n<1) || (n >= 100))
{
printf ("\nEroare! dati un numar care va respecta conditia 1 < n < 100\n");
return 0 ;
}
int x[n];
for(i=0; i<n; i++)
{
printf("X[%d]= ", i+1);
scanf("%d", &x[i]);
}
for(j=0;j<m;j++)
{
check =0;
for(l=0;l<n;l++)
{
if(y[j]==x[l])
{
check = 1;
k--;
break;
}
}
if(check == 0)
{
z[n]=y[j];
n++;
}
}
for(i=0; i<k; i++)
{
printf("%d\t", z[i]);
}
}
d)
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Acest program efectueaza diferenta a 2 multimi\n\n");
int check,k,n,m,i,j,l;
printf("Dati numarul de elemente multimii X\n");
scanf("%d", &n);
if ((n<1) || (n >= 100))
{
printf ("\nEroare! dati un numar care va respecta conditia 1 < n < 100\n");
return 0 ;
}
int x[n];
for(i=0; i<n; i++)
{
printf("X[%d]= ", i+1);
scanf("%d", &x[i]);
}