Documente Academic
Documente Profesional
Documente Cultură
Probleme diverse
Codificare in C:
#include <stdio.h>
#include <stdlib.h>
void main()
{ int n,i; float suma,pi,termen;
printf("n=");
scanf("%d",&n);
suma=0;
termen=1;
for (i=1;i<n;i++)
{ suma=suma+termen/(2*i-1);
termen=-termen;
}
pi=4*suma;
printf("%i", pi);
}
Optimizare:
Este optim.
Set de valori:
Pentru a=3, b=2, c=1, e1 va fi -10 iar e2=2,5 dupa efectuarea calculelor.
Optimizare:
Este optim.
Set de valori:
Pentru n=3 avem:
p=1,s=1
Pentru i=2 : p←2, s←3
Pentru i=3 : p←6, s←9
S=1+1*2+1*2*3+1*2*3*4=1+2+6=9
Codificare in C:
# include <stdio.h>
int n,s,p,i;
void main( )
{
printf("n=");
scanf("%d",&n);
p=1;
s=1;
for (i=2; i<=n; i++)
{ p=p*i;
s=s+p;}
printf("%d",s);
Optimizare:
Este optim.
Pobleme vectori
Set de valori:
Fie n=3 si vectorul cu elementele 5,8,3.Pantru i=1, se ia primul element, 5 si se compara cu
celelalte elemente ale vectorului(cu 8 si cu 3).
5<8 Adevarat
5<3 Fals….atunci cele 2 elemente se interschimba, vectorul fiind format din elementele 3,8,5.
Codificare in C:
#include<stdio.h
Void main()
{ //metoda selectiei
Int n; float x[100], aux;
Printf (“introduceti dimensiunea vectorului, n=”);
Scanf(“%d”, &n);
For(int i=0; i<n, i++)
{printf(“x[%d]=”, i); scanf(“%f”, &x[i]); }
For (i=0, i<n-1, i++)
For(int j=i+1; j<n; j++)
if (x[i]>x[j])
{ aux←x[i];
x[i] ←x[i+1];
x[i+1] ←aux;}
printf(“vectorul sortat este: \n”);
for (i=0, i<n,;i++) printf(“%6.2f “, x[i]);
}
Optimizare:
Este optim.
2. Enunt: Sa se scrie programul care verifica daca elementele unui vector formeaza o
progresie aritmetica.
Pseudocod
{
integer n,i; real x[100];
read n;
if n<3 then write (“vectorul are mai putin de trei elemente!”)
else do_for i=0,n,1
Read (x[i]);
i=2;
while ( i<n) and (x[i]=(x[i-1]+x[i+1])/2)
do if (i=n-1) then write(‘elem. formeaza o progresie aritmetica.’)
else write(‘elem. nu formeaza o progresie aritmetica.’)
endif;
endwhile;
enddo;
endif;
}
Set de valori:
Fie n=4 si vectorul X=(1,2,3,4). Cum n>3 , se parcurg pasii urmatori.
Pentru i=2 se verifica conditiile i<n si 2=(1+3)/2.
Pentru i=3 se verifica conditiile i<n si 3=(2+4)/2.Dar i=3 este si penultimul element (n-1) ce
inseamna ca se va afisa ‘elem. formeaza o progresie aritmetica.’.
Codificare in C:
#include<stdio.h>
Void main()
{int n; float x[100];
Printf(“introduceti dimensiunea vectorului”);scanf(“%d”, &n);
If (n<3) printf(“vectorul are mai putin de trei elemente!”);
Else {
For(int i=0;i<n;i++)
{printf(“x[%d]=”, i);scanf(“%f”, &x[i]); }
While (( i<n) && (x[i] = = (x[i-1]+x[i+1])/2)) i++;
if (i=n-1)
printf(”elem. formeaza o progresie aritmetica.”)
else
printf(“elem. nu formeaza o progresie aritmetica.”)
}
}
Optimizare:
Este optim.
Set de valori:
Fie n=4 x1=2 x2=3 x3=4 x4=4 s5=5
Pentru i=0 j=1 -
Pentru i=1 j=2 –
Pentru i=2, j=3 k=3 x[3]=x[4], n=4, j=2
Codificare C:
#include<stdio.h>
Void main()
{ int n,I,j,k;float x[100];
Printf(“Dimensiunea vectorului:”); scanf(“%d”,&n);
For (i=0;i<n;i++) {printf(“x[%d]=”, i); scanf(“%f”, &x[i]); }
For (i=0;i<n-1; i++)
For (j=0;j<n;j++)
If (x[i] = = x[j])
{for (k=j;k<n-1;k++) x[k]=x[k+1];
n--;j--}
printf(“vectorul rezultat este: \n”);
for (i=0;i<n;i++) printf (“%5.2f”, x[i]);
}
Optimizare:
Este optim.
Set de valori :
Fie n=6 a=3 si b= 10 si cele 8 elemente : 4 6 0 12 13 5 2 8.
5<15, s←0, k←0. Pentru i=1 : a≤4≤b: s←4, k←1
Pentru i=2 : a≤6≤b: s←10, k←2
Pentru i=3 : a≤0≤b fals
Pentru i=4 : a≤12≤b fals
Pentru i=5 : a≤13≤b fals
Pentru i=6 : a≤5≤b: s←15, k←3, deci va afisa 15/3=5.
Codificare in C :
#include<stdio.h>
#include<conio.h>
main()
{
int v[20],n,i,a,b,k,s,c;
float m;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("v(%d)=",i);
scanf("%d",&v[i]);
}
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
if (a>b)
{
c=a;
a=b;
b=c;
}
s=0;
k=0;
for (i=0;i<n;i++)
if ((a<=v[i])&& (b>=v[i]))
{s+=v[i];
k++;}
if (k==0)
printf("nu exista");
else
{ m=(float) s/k;
printf("%.2f",m);}
getch();
}
Optimizare:
Este optim.
Probleme matrici
Set de valori:
introduceti numarul de linii si de coloane : 4
0 1 1 0
2 0 0 2
2 0 0 2
0 1 1 0
Codificare in C:
#include<stdio.h>
void main ()
{int a[20][20],i,j,k,n;
printf("introduceti nr de linii si numarul de coloane:\n");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if((j==n-i-1)||(i==j))
a[i][j]=0;
else
if (((j<i)&&(j<n-i-1))||((j>n-i-1)&&(j>i)))
a[i][j]=2 ;
else
a[i][j]=1;
for (i=0;i<n;i++)
{ printf("\n");
for(j=0;j<n;j++)
printf("%i ",a[i][j]);
}
}
Optimizare:
Este optim.
Set de valori :
2 1 4
A= 1 5 8
Pentru i=1, j=1, a[1],[1]%2=0 deci s←s+2=2, k←1
i=1, j=2, a[1],[2]%2=1
i=1, j=3, a[1],[3]%2=0, deci s←s+4=6, k←2
i=2, j=1, a[2],[1]%2=1
i=2, j=2, a[2],[2]%2=1
i=2, j=3, a[2],[3]%2=1, deci s←s+8=14, k←3
cum k=3<>0 va afisa 14/3=4.6
Codificare in C :
#include<stdio.h>
#include<conio.h>
main()
{
int v[20][20],n,m,i,j,a,b,k,s,c;
float p;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("v[%d][%d]=",i,j);
scanf("%d",&v[i][j]);
}
s=0;
k=0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (v[i][j]%2==0)
{s+=v[i][j];
k++;}
if (k==0)
printf("nu exista");
else
{ p=(float) s/k;
printf("%.2f",p);}
}
Optimizare:
Este optim.
Set de valori:
citim numarul de linii si coloane 3
a[0]=2
a[1]=2
a[2]=3
a[3]=4
a[4]=3
a[5]=6
a[6]=7
a[7]=2
a[8]=9
matricea initiala este :
2 2 3
4 3 6
7 2 9
matricea transpusa este :
2 4 7
2 3 2
3 6 9
Codificare C:
#include<stdio.h>
Void main()
{ float a[10][10], b[10][10];
int n;
printf(“Numarul de linii si coloane: “);
scanf(“%d”, &n);
for (int i=0;i<n;i++)
for (int j=0; j<n; j++)
{ printf(“elemental [%d] [%d]= “, I,j);
Scanf(“%f, & a[i][j]); }
for (i=0;i<n;i++)
for (int j=0; j<n; j++)
{ b[i][j]=a[j][i]; }
printf("matricea initiala este: \n”);
for (i=0;i<n;i++)
{ for (int j=0;j<n;j++) printf(“%2f\t”, a[i][j]);
printf(“\n”); }
printf("matricea transpusa este: \n" );
for (i=0;i<n;i++)
{for (int j=0; j<n; j++) printf(“%.2f\t”, b[i][j]);
printf(“\n”); }
}
Optimizare:
Este optim.
4. Enunt: Pentru fiecare linie a unei matrice, sa se calculeze produsul dintre cel mai mare si
cel mai mic element.
Pseudocod:
{
integer a[10][10],v[10],min,max
integer n,m,i,j,k
write("m=")
read(m)
write("n=")
read(n)
do -for i=0,m,1
read (v[i])
do -for i=0,m,1
do- for j=0,n,1
read(a[i][j])
enddo
enddo
write("matricea initiala este :")
do -for i=0,m,1
do- for j=0,n,1
write(a[i][j])
enddo
enddo
do -for i=0,m,1
min=a[i][0]
max=a[i][0]
do -for j=0,n,1
if(a[i][j]>max) then
max=a[i][j]
endif
if(a[i][j]<min) then
min=a[i][j]
endif
enddo
v[i]=max*min
enddo
do -for i=0,m,1
write(v[i])
enddo
}
Set de valori:
citim m=2 si n=3
a[0][0]=7
a[0][1]=1
a[0][2]=3
a[1][0]=2
a[1][1]=4
a[1][2]=5
matricea initiala este:
7 1 3
2 4 5
Pentru i=0 min=7 max=7 ; a[0][1]=1<7 deci min=1 ; 1<a[0][2]=3<7 deci v[0]=7*1=7
i=1 deci min=2, max=2 ; a[1][1]=4>2 deci max=4, a[1][2]=5>4=> max=5 v[1]=5*2=10
Se afiseza : v[0]=7 v[1]=10
Optimizare:
Este optim.
Set de valori:
citim m=3 n=3
649
3 1 90
234
Va lucra astfel:
Primul for: t=0
Al doilea for(i=0,2,1)
i=0 =>j=1 compara a[0][0] cu a[0][1]=>a[0][0]>a[0][1] =>schimba a[0][0] cu a[0][1]
=>j=2 compara a[0][0]=4 cu a[0][2]=9 =>a[0][0]<a[0][2]
=>i=1 =>j=2 compara a[0][1]=6 cu a[0][2]=9
=>i=2 =n-1
=>t=1
i=0 =>j=1 =>a[1][0]=3>a[1][1]=1 =>a[1][0]=1 si a[1][1]=3
=>j=2=>a[1][0]=1<a[1][2]=90=>
i=1 =>j=2=>a[1][1]= 3<a[1][2]=90=>
=>t= 2
i=0 =>j=1=>a[2][0]=2<a[2][1]=3=>
=>j=2=>a[2][0]=2<a[2][2]=4=>
i=1 =>j=2=>a[2][1]=3<a[2][2]=4=>
se termina sortarea
Si afiseaza:
469
1 3 90
234
Codificare C:
#include<stdio.h>
int a[20][20],m,n,i,j,k,aux,t;
void main()
{k=1;
printf(“introduceti nr de linii si numarul de coloane\n");
scanf("%i",&m);
scanf("%i",&n);
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<n;j++)
{printf("a[%i,%i]=",i,j);
scanf("%i",&a[i][j]);}
}
for(t=0;t<m;t++)
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if( a[t][i]>a[t][j])
{aux=a[t][i];
a[t][i]=a[t][j];
a[t][j]=aux;}
for (i=0;i<m;i++)
{ printf("\n");
for(j=0;j<n;j++)
printf("%i ",a[i][j]); }
}
Optimizare:
Este optim.
Set de valori :
4 3 2
A= 6 5 7 va afisa : b=(3,5,7)
Pentru i=1, j=1, k=2,3 sau 4 => a[1],[1]% 2,3 sau 4=0; ok←0
Pentru i=1, j=2, k=2 => a[1],[2]%2=1<>0, nr←1, b[1]←3 ;
Pentru i=1, j=3, k=2,3 sau 4 =>a[1][3]%2,3 sau 4=0; ok←0;
Pentru i=2, j=1, k=2,3 sau 4 => a[2][1]%2,3 sau 4=0; ok←0;
Pentru i=2, j=2, k=2 3 sau 4 => a[2],[2]% 2 3 sau 4=1<>0 nr←3, b[2]←5 ;
Pentru i=2, j=3, k=2 3 4 5 => a[2],[3]% 2 3 4 5=1 <>0 deci nr←4, b[3]←7
Codificare in C :
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
int a[20][20],b[20],n,m,i,j,k,nr,c,ok;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
nr=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
ok=0;
if (a[i][j]>1)
{
c=int(sqrt(a[i][j]));
for (k=2;k<=c;k++)
{
if (a[i][j]%k==0)
ok=1;
}
if (ok==0)
{
nr=nr+1;
b[nr]=a[i][j];
}
}
}
if (nr==0)
printf("nu sunt nr prime");
else
for (i=1;i<=nr;i++)
printf("%2d",b[i]);
}
Optimizare:
Este optim.
Set de valori :
n=3, x[i]=1 2 3 ;
p=2 a=2 3
14
50
j=1 y[1]=0
k=1 → y[1]=y[1]+x[1]*a[1][1]=>y[1]=0+1*2=2
k=2 → y[1]=y[1]+x[2]*a[2][1]=>y[1]=2+2*1=4
k=3 → y[1]=y[1]+x[3]*a[3][1]=>y[1]=4+3*5=19
j=2 y[2]=0
k=1 → y[2]=y[2]+x[1]*a[1][2]=>y[2]=0+1*3=3
k=2 → y[2]= y[2]+x[2]*a[2][2]=>y[2]=3+2*4=11
k=3 → y[2]= y[2]+x[3]*a[3][2]=>y[2]=11+3*0=11
=>y[j]=(19 ; 11)
Codificare in C :
#include<stdio.h>
#include<conio.h>
void main()
{ int n,p,i,j,k ; int x[10], a[10][10], y[10] ;
printf( "\n Nr de elemente ale vectorului= ") ; scanf("%d", &n) ;
for (j=0 ;j<n ; j++)
{printf ("x[%d]= ",j) ;scanf("%d", &x[j]) ; }
printf("\nMatricea ") ;
printf("\nNr de coloane= ") ; scanf("%d", &p) ;
for (i=0 ;i<n ;i++)
for (j=0 ;j<p ; j++)
{printf("a[%d][%d]= ",i, j) ; scanf("%d", &a[i][i]) ; }
for (j=0 ;j<p ; j++)
{y[j]=0 ;
for (k=0 ;k<n ;k++)
y[j]=y[j]+x[k]*a[k][j] ; }
printf("\n rezultatul este : \n") ;
for (j=0 ; j<p ; j++)
printf("%d", y[j]) ; printf("\n") ;
getch() ;
}
Optimizare:
Este optim.
Ultimele 6 probleme
Set de valori:
Fie A=( 1 5 8 11), m=4
B=( 0 2 6 9 13), n=5
i=1, j=1, k=0 => a[1]>b[1] (1>0) => c[0]=b[1]=0
j=2 => a[1]<b[2] (1<2) => c[1]=a[1]=1;
i=2, j=2 => a[2]>b[2] (5>2) => c[2]=b[2]=2;
j=3 => a[2]<b[3] (5<6) => c[3]=a[2]=5;
i=3, j=3 => a[3]>b[3] (8>6) => c[4]=b[3]=6;
j=4 => a[3]<b[4] ( 8<9) => c[5]=a[3]=8;
i=4, j=4 => a[4]>b[4] (11>9) => c[6]=b[4]=9;
j=5 => a[4]<b[5] (11<13) => c[7]=a[4]=11;
A mai ramas j=5<=n => c[8]=b[5]=13
Se va afisa: C=(0 1 2 5 6 8 9 11 13)
Codificare in C:
#include<stdio.h>
int n,m,i,j,k;
float a[90],b[90],c[90],
// cei 2 vectori trebuie sa fie ordonati crescator
void main ()
{
printf("m=");
scanf("%d",&m);
for (i=1;i<m;i++)
scanf("%d",a[i]);
printf("n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",b[i]);
// interclasarea
i=1;
j=1;
k=0;
while((i<=m)&&(j<=n))
{ if(a[i]<b[j])
{ c[k]=a[i];
}
else
{ c[k]=b[j];
}
}
// adaugam elementele ramase neparcurse
if(i<=m)
{ while(i<=m)
{ c[k]=a[i];
}
}
if(j<=n)
{ while(j<=n)
{ c[k]=b[j];
}
}
// afisez vectorul interclasat
for(i=1;i<=k;i++)
printf(%f\n” , c[i] )
}
Optimizare:
Este optim.
Set de valori:
n=2
d=3
12
34
Va afisa
7 10
15 22
Cand p=1=>1<3=>
A= 1 2
3 4
=>i=0
=>j=0
=>k=0=c[0][0]=>
c[0][0]=c[0][0]+a[0][0]*a[0][0]=0+1*1=1
=>k=1=>
C[0][0]=1+a[0][1]*a[0][1]=1+2*3=7
=>j=1
=>k=0=c[0][1]=>
C[0][1]=0+a[0][0]*a[0][1]=0+1*2=2
=>k=1=>
C[0][1]=2+a[0][1]*a[1][1]=2+2*4=10
=>i=1
=>j=0=>
K=0=c[1][0]
C[1][0]=0+a[1][0]*a[0][0]=0+3*1=3
=>k=1
C[1][0]=6+a[1][1]*a[1][0]=3+12=15
=>j=1=>
K=0=c[1][1]
C[1][1]=0+a[1][0]*a[0][1]=0+3*2=6
K=1=>
C[1][1]=6+a[1][1]*a[1][1]=6+16=22
Codificare in C:
#include<stdio.h>//ridica o matrice la o putere
int a[20][20],n,i,j,k,p,d,c[20][20];
void main()
{printf("introduceti nr n \n");
scanf("%i",&n);
printf("dati puterea");
scanf("%i",&d);
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{printf("a[%i,%i]=",i,j);
scanf("%i",&a[i][j]);}
}
p=1;
while (p<d)
{ for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=c[i][j]=0;k<n;k++)
c[i][j]+=a[i][k]*a[k][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{a[i][j]=0;
a[i][j]=c[i][j];
c[i][j]=0;}
p+=1;}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%i ",a[i][j]);
printf("\n");}
}
Optimizare:
Este optim.
Set de valori:
a=(1,5,5,3)
b=(1,6,3,9)
c=(1*1,5*6,5*3,3*9)=(1,30,15,27)
Codificare in C:
#include<stdio.h>
void main()
{
int a[20],b[20],c[20],n,i,j;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("a(%d)=",i);
scanf("%d",&a[i]);
}
for (i=0;i<n;i++)
{
printf("b(%d)=",i);
scanf("%d",&b[i]);
}
for (i=0;i<n;i++)
c[i]=a[i]*b[i];
for (i=0;i<n;i++)
printf("%d ",c[i]);
}
Optimizare:
Este optim.
Produs scalar
Pseudocod:
{
integer a[20], b[20], s, i, n;
read(n);
do_for i=1,1,n
read(a[i]);
enddo;
do_for j=1,1,n
read (b[j]);
enddo;
s←0;
do_for i=1,1,n
s←s+a[i]*b[i];
write(‘produsul scalar al celor doi vectori este ‘,s)
enddo;
}
Set de valori:
a=(4,10,2,1)
b=(5,3,1,4)
i=1 -> s=4*5=20
i=2 -> S=20 + 10*3=50
i=3 -> S=50 + 2*1=52
i=4 -> S=52 + 1*4=58
Codificare in C:
#include<stdio.h>
void main()
{
int a[20],b[20],n,i,j,s;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("a(%d)=",i);
scanf("%d",&a[i]);
}
for (i=0;i<n;i++)
{
printf("b(%d)=",i);
scanf("%d",&b[i]);
}
s=0;
for (i=0;i<=n;i++)
s=s+a[i]*b[i];
printf("%d",s);
}
Optimizare:
Este optim.
Set de valori:
A=(1,3,6,4,6)
B=(3,2,1)
i=1: k=1, j=1, cum a[1]<>b[1] deci c[1]=a[1]=1, k=2
j=2, cum a[1]<>b[2] deci c[2]=a[1], k=3
j=3, cum a[1]<>b[3] deci c[3]=a[1], k=4
i=2, j=1, a[2]=b[1] deci ok←1
i=3, j=1 cum a[3<>b[1] deci a[]
Y=(1,3,4)
Codificare in C:
#include<stdio.h>
void main()
{
int a[20],b[20],c[20],n,m,k,i,j,ok;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
for (i=0;i<n;i++)
{
printf("a(%d)=",i);
scanf("%d",&a[i]);
}
for (i=0;i<m;i++)
{
printf("b(%d)=",i);
scanf("%d",&b[i]);
}
k=0;
for (i=0;i<n;i++)
{
ok=0;
for (j=0;j<m;j++)
if (a[i]==b[j])
ok=1;
if (ok==0)
{
c[k]=a[i];
k=k+1;
}
}
if (k!=0)
{for (i=0;i<k;i++)
printf("%d ",c[i]);
}
else
printf("diferenta este multimea vida");
}
Optimizare:
Este optim.
Set de valori:
4 3 2
Fie A= 5 2 3
1 6 10
2 8 9
Pentru n=3,m=4, i=0, j=1, k=0 d[0][0]=a[0][0]*a[1][0]=20
k=1 d[0][1]=a[0][1]*a[1][1]=6
k=2 d[0][2]=a[0][2]*a[1][2]=6
nr=1 s.a
Codificare in C:
#include <stdio.h>
#include <math.h>
void main()
{
int a[20][20],d[20][20],n,m,i,j,k,nr;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
nr=0;
for (i=0;i<m-1;i++)
for (j=i+1;j<m;j++)
{
for (k=0;k<n;k++)
d[nr][k]=a[i][k] * a[j][k];
nr=nr+1;
}
for (i=0;i<nr;i++)
{
for (j=0;j<n;j++)
printf("%4d",d[i][j]);
printf("\n");
}
}
Optimizare:
Se putea folosi o functie care sa efectueze produsul scalar a doua linii din o matrice.
6. Enunt: Fie A o matrice patratica de numere reale. Sa se calculeze suma elementelor de sub
diagonala principala, suma elementelor de peste diagonala principala si suma elementelor de
pe diagonala principala.
Pseudocod:
{
real [20],[20]
integer n,s1,s2,s3,i,j
read (n);
do_for i=1,1,n
do_for j=1,1,n
read a[i],[j];
enddo;
enddo;
s1←0;
s2←0;
s3←0;
do_for i=1,1,n
s1=s1+a[i][i]
write (‘suma elementelor de pe diag principala este s1=’,s1);
enddo;
do_for i=1,1,n-1
do_for j=i+1,1,n
s2=s2+a[i],[j]
write(‘suma elem de deasupra diag principala este s2=’,s2);
enddo;
enddo;
do_for i=2,1,n
do_for j=1,1, i-1
s3=s3+a[i],[j]
write (‘suma elem de sub diag principala este s3=’,s3);
enddo;
enddo;
}
Set de valori:
4 8 Pentru i=1 s1=4, pentru i=2 => s1=4+3=10.
Fie A= 0 3 Pentru i=1, j=2 => s2=8.
Pentru i=2, j=1 => s3=0.
Codificare in C:
#include<stdio.h>
#include<conio.h>
main()
{
int a[20][20],n,m,i,j,s1,s2,s3;
float p;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
s1=0;
s2=0;
s3=0;
for (i=0;i<n;i++)
s1=s1+a[i][i];
printf("%d",s1);
for (i=0;i<=n-1;i++)
for (j=i+1;j<=n;j++)
s2=s2+a[i][j];
printf("%5d",s2);
for (i=1;i<=n;i++)
for (j=0;j<=i-1;j++)
s3=s3+a[i][j];
printf("%5d",s3);
}
Optimizare:
Este optim.
Temă Săptămâna 4
12. Să se scrie programul pentru determinarea c.m.m.d.c. dintr-un şir de numere naturale nenule.
Pseudocod:
{
read (n)
do_for i=1,n,1
read (a[i])
enddo
d=a[i]
r=0
i=1
do while (r<>1)& (i<n)
imp=a[i]
do while (i>1)
r=d mod imp
d=imp
imp=r
end while
end while
if r<>1 then scrie ”cmmdc”,d
else scrie”Nr sunt prime intre ele”
endif
}
13. Să se scrie programul care determină amplitudinea unui şir de numere memorate într-un vector
de elemente reale.
Pseudocod:
{
real x[100];
real min,max
intreg i,n
write(„n=”); read (n);
do_for i=1,n,1
read(x[i]);
enddo
min←x[1];
max←x[1];
do_for i=2,n,1
if x[i]<min then
min←x[i]
else
if x[i]>max then
max←x[i]
endif
endif
enddo
write(„Amplitudinea este:’max-min);
}
14. Să se scrie programul care determină toate numerele prime dintr-un şir de numere naturale.
Pseudocod:
{
intreg v[20], n, i, j, k, pr[20]
read (n)
do_for i=1,n,1
read(v[i])
enndo
k=0;
do_for i=1,n,1
nd=0;
Do_for j=1,v[i],1
if (v[i] mod j == 0) then nd=nd+1;
if (nd==2) then {k=k+1;
pr[k]=v[i];
write (v[i]);}
enddo
}
Temă Săptămâna 5
14. Fie o matrice de dimensiuni mxn reprezentând profiturile nete obţinute de m societăţi într-o
perioadă de n ani. Afişaţi societăţile care au înregistrat profitul maxim pe întreaga perioadă
analizată.
Pseudocod:
{
real mat[20][20],v[20],max,s
intreg m,n,i,j
write ("m=")
read (m)
write ("n=")
read (n)
do_for i=1,m,1
do_for j=1,n,1
read (mat[i][j])
enddo
enddo
max=0
do_for i=1,m,1
s=0
do_for j=1,n,1
s=s+mat[i][j]
enddo
v[i]=s
if s>max then max=s
endif
enddo
do_for i=1,m,1
if v[i]=max
then write (" Societatea ",i)
enddo
}
15. Să se verifice dacă două şiruri de numere citite de la tastatură sunt sau nu unul
anagrama celuilalt.
Pseudocod:
{
read ( n);
do_for i=1,n,1
read (a[i]);
enddo
read (m);
do_for i=1,m,1
read (b[i]);
enddo
if n<>m then ok=0
else
do_for i=1,n-1,1
do_for j=i+1,n,1
if a[i]>a[j] then
aux=a[i];
a[i]=a[j];
a[i]=aux;
endif;
if b[i]>b[j]
aux=b[i];
b[i]=b[j];
b[i]=aux;
endif;
enddo;
do_for i=1,n,1
if a[i]<>b[i] then ok=0;
endif;
enddo;
if ok=0 write („cele doua siruri nu sunt anagrame”)
else write („cele doua siruri sunt anagrame”)
}
16. Să se scrie programul pentru determinarea numărului de apariţii ale fiecărui caracter din
alfabetul limbii engleze într-un şir de caractere. Nu se va ţine cont de diferenţele dintre literele mari
şi literele mici.
{
caracter v[100],j
intreg n,i,c,a[30],k
write("n=")
read (n)
do_for i=1,n,1
read v[i]
enddo
k=1
do_for j='a','z',1
c=0
do_for i=1,n,1
if (v[i]=j)
then c=c+1
endif
enddo
a[k]=c
k=k+1
enddo
k=1
do_for j='A','Z',1
c=0
do_for i=1,n,1
if(v[i]=j)
then c=c+1
endif
enddo
a[k]=a[k]+c
k=k+1
enddo
k=1
do_for j='a','z',1
if (a[k]=0)
then write ("Litera ",j," nu apare in sir")
else scrie ("Litera ",j," apare in sir de ",a[k]," ori")
k=k+1
endif
enddo
}
17. Fie un vector care reprezintă vârsta exprimată în ani a n persoane. Să se determine persoanele a
căror vârstă exprimată în luni formează un număr palindrom.
Pseudocod:
{
Read (n)
Do_for i=1,n,1
read v[i]
enddo
do_for i=1,n,1
inv=0;
m=x[i]*12
do_while m<>0
inv=inv*10 + m mod 10
m=m/10
c=inv
end while
if c=x[i]*12 then y[nr]=i
Nr=nr+1
endif
enddo
if nr<>0 then
do for i=1,nr,1
write (y[i]+1)
enddo
else scrie „nu exista niciun palindrom”
endif
}