Sunteți pe pagina 1din 31

Stagiu de practica

1.1

Pentru un tablou cu cel mult 50 de elemente de tip real, citit de la


tastatură, să se construiască un nou tablou în următorul mod:
între două elemente consecutive se inserează maximul lor în valoare
absolută, dacă diferența lor este strict mai mică decât 10.
Ex: pentru n=5 şi (-20,-5,15,-13,14) => (-20,20,-5,15,15,-13,14,14).

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int i,n=5,val,c,max,cnt=0;

int v[500]={-20,-5,15,-13,14};

void citire()

{ printf("Dati marimea vectorului: ");

scanf("%d",&n);

for(i=0;i<n;i++)

printf("v[%d]= ",i);

scanf("%d",&v[i]);

void afisare()

for(i=0;i<n+cnt;i++)

{
printf("%d ",v[i]);

int maxim(int a,int b)

if(abs(a)>abs(b))

max = abs(a);

else

max = abs(b);

return max;

void creaza_spatiu()

for(c=n;c>=val+1;c--)

v[c]=v[c-1];

int verificare(int c, int d)

if(c-d<10)

return 1;

else

return 0;
}

void numara()

for(i=0;i<n;i++)

if(verificare(v[i],v[i+1])==1)

cnt++;

printf("\nContor: %d\n",cnt);

void inserare()

for(i=0;i<n;i++)

val=i+1;

if(verificare(v[i],v[i+1])==1)

creaza_spatiu();

v[val]=maxim(v[i],v[i+1]);

int main()
{

//citire();

numara();

inserare();

afisare();

return 0;

1.2

Se citesc două mulțimi de numere întregi cu cel mult 20 de elemente; să se


afișeze reuniunea, intersecția, diferența și produsul cartezian al lor.

#include <stdio.h>

#include <stdlib.h>

int n,m,v[50],vv[50],i,in[50],j,q;

void citire_mult1()

printf("\n Dati nr de elemente: ");

scanf("%d",&n);

for(i=0;i<n;i++)

printf("Citirea elementului %d: ",i);

scanf("%d",&v[i]);

void citire_mult2()

{
printf("\n Dati nr de elemente: ");

scanf("%d",&m);

for(i=0;i<m;i++)

printf("Citirea elementului %d: ",i);

scanf("%d",&vv[i]);

void inter()

{ q=0;

for(i=0;i<n;i++)

for(j=0;j<m;j++)

if(v[i]==vv[j])

in[q]=v[i];

q++;

printf("Intersectia: ");

for(i=0;i<q;i++)

{
printf("%d ",in[i]);

int maxim()

if(n>m)

return n;

else

return m;

int main()

citire_mult1();

citire_mult2();

inter();

return 0;

#include<stdio.h>

#include<stdlib.h>

int a[20], b[20], c[50], i, j, m, n, k, gasit;

//--------------------------------------------------------------------------

void dif()

{
k=0;

for(i=0; i<n; i++)

gasit=0;

for(j=0; j<m && !gasit; j++)

if(a[i]==b[j])

gasit=1;

if(!gasit)

c[k++]=a[i];

printf("\nDiferenta A-B: \n");

for(i=0; i<k; i++)

printf("%d ",c[i]);

//--------------------------------------------------------------------------

void prodCart()

{printf("\nProd cartezian: \n");

for(i=0;i<n;i++)

printf("%d ",a[i]);

for(j=0;j<m;j++)

printf("%d ",b[j]);

//--------------------------------------------------------------------------

int main()

{
printf("Nr de elemente al multimii a: ");

scanf("%d",&n);

for(i=0; i<n; i++)

scanf("%d",&a[i]);

printf("Nr de elemente al multimii b: ");

scanf("%d",&m);

for(i=0; i<=m-1; i++)

scanf("%d",&b[i]);

k=0;

for(i=0; i<=n-1; i++)

gasit=0;

for(j=0; j<=m-1 && !gasit; j++)

if(a[i]==b[j])

gasit=1;

if(!gasit)

c[k++]=a[i];

printf("\nReuniunea: ");

for(i=0; i<k; i++)

printf("%d ",c[i]);
for(i=0; i<=m-1; i++)

printf("%d ",b[i]);

dif();

prodCart();

return 0;

1.3

Implementarea operațiilor cu matrici (suma, produsul) folosind meniu.


Pentru citirea matricelor, calculul sumei si calculul produsului se vor utiliza
funcţii.

#include <stdio.h>

#include <ctype.h>

void suma()

int m, n, c, d, mat1[10][10], mat2[10][10], matricea_summat1[10][10];

printf("Numarul de linii si coloane \n");

scanf("%d%d", &m, &n);

printf("Elem mat1\n");

for(c=0;c<m;c++)

for(d=0;d<n;d++)

scanf("%d", &mat1[c][d]);

printf("Elem mat2\n");
for(c=0;c<m;c++)

for(d=0;d<n;d++)

scanf("%d",&mat2[c][d]);

for(c=0;c<m;c++)

for(d=0;d<n;d++)

matricea_summat1[c][d]=mat1[c][d]+mat2[c][d];

printf("Suma:\n");

for(c=0;c<m;c++)

for(d=0;d<n;d++)

printf("%d\t", matricea_summat1[c][d]);

printf("\n");

void produs()

int mat1[10][10], mat2[10][10],mat3[10][10],i,j,k,sum=0,m,n,o,p;

printf("\nNumarul de linii si coloane (mat1)");

scanf("%d %d",&m,&n);

printf("\nNumarul de linii si coloane (mat2)");

scanf("%d %d",&o,&p);

if(n!=o){
printf("\nEROARE!");

else{

printf("\nMat1 ");

for(i=0;i<m;i++)

for(j=0;j<n;j++)

scanf("%d",&mat1[i][j]);

printf("\nMat2 ");

for(i=0;i<o;i++)

for(j=0;j<p;j++)

scanf("%d",&mat2[i][j]);

printf("\nMat1 \n");

for(i=0;i<m;i++){

printf("\n");

for(j=0;j<n;j++){

printf("%d\t",mat1[i][j]);

printf("\nMat2 \n");

for(i=0;i<o;i++){

printf("\n");

for(j=0;j<p;j++){

printf("%d\t",mat2[i][j]);

}
for(i=0;i<m;i++)

for(j=0;j<p;j++)

mat3[i][j]=0;

for(i=0;i<m;i++){ //rand mat1

for(j=0;j<p;j++){ //coloana mat2

sum=0;

for(k=0;k<n;k++)

sum=sum+mat1[i][k]*mat2[k][j];

mat3[i][j]=sum;

printf("\nInmultirea \n");

for(i=0;i<m;i++){

printf("\n");

for(j=0;j<p;j++){

printf("%d\t",mat3[i][j]);

int main()

{char ch;

printf("\nS-Suma\nP-Produs\nE-Exit\n");
printf("Introdu comanda: ");

do

scanf("%c",&ch); toupper(ch);

switch(ch)

case'S':suma();

break;

case'P':produs();

break;

case'E':break;

default:break;

}while(ch!='E');

return 0;

1.4

Se citește o matrice A(n,n) n cel mult 5. Să se formeze o nouă matrice B astfel

#include <stdio.h>

#include <stdlib.h>

int A[50][50],B[50][50],i,j,n,At[50][50],q,w;
void citire()

printf("Dati 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]);

void transp()

for(i=0;i<n;i++)

for(j=0;j<n;j++)

At[j][i]=A[i][j];

void creareB()

{
for(i=0;i<n;i++)

for(j=0;j<n;j++)

B[i][j]=At[i][j];

q=0;w=0;

for(i=n;i<2*n;i++)

{w=0;

for(j=0;j<n;j++)

B[i][j]=A[q][w];

w++;

q++;

q=0;w=0;

for(i=n;i<2*n;i++)

{w=0;

for(j=n;j<2*n;j++)

B[i][j]=At[q][w];

w++;
}

q++;

q=0;w=0;

for(i=0;i<n;i++)

{w=0;

for(j=n;j<2*n;j++)

B[i][j]=A[q][w];

w++;

q++;

void afisare()

for(i=0;i<2*n;i++)

for(j=0;j<2*n;j++)

{
printf("%d ",B[i][j]);

printf("\n");

int main()

citire();

transp();

creareB();

afisare();

return 0;

1.5

Simetrii într-o matrice. Fiind dată o matrice pătratică A(n,n), să se împartă


matricea după cele două diagonale în patru regiuni, numerotate ca în figură

2 4

1
Se consideră că elementele de pe diagonal nu aprţin nici unei regiuni.
Să se calculeze cel mai mare element din regiunea 1, cel mai mic element din
regiunea 2, suma elementelor din regiunea 3 și produsul elementelor din regiunea
4;

#include <stdio.h>
#include <stdlib.h>

int i,j,A[50][50],n;
void citire()
{
printf("Dati 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]);
}
}
}
void regiunea1()
{
int maxim=-32767;
for(i=1;i<n;i++)
{
for(j=0;j<n;j++)
{ if(i>j && i+j>n-1)
{
if(maxim<A[i][j])
{
maxim=A[i][j];
}
}
}
}
printf("\nMaximul din regiunea 1 este: %d\n",maxim);

}
void regiunea2()
{int minim=32767;
for(i=1;i<n;i++)
{
for(j=0;j<n;j++)
{ if(i>j && i+j<n+1)
{
if(minim>A[i][j])
{
minim=A[i][j];
}
}
}
}
printf("\nMinimul din regiunea 2 este: %d\n",minim);
}
void regiunea3()
{int suma=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n-i-1;j++)
{
suma=suma+A[i][j];

}
}
printf("\nSuma elementelor din regiunea 3 este: %d\n",suma);
}
void regiunea4()
{ int produs=1,cnt=0;
for(i=1;i<n;i++)
{
for(j=n-i;j<n-1;j++)
{

produs=produs*A[i][j];
}

}
printf("\nProdusul elementelor din regiunea 4 este: %d\n",produs);
}
int main()
{
citire();
regiunea1();
regiunea2();
regiunea3();
regiunea4();
return 0;
}

1.6
Citește un șir de numere întregi și îl ordonează crescător folosind sortarea prin
metoda inserției. Elementele se citesc pe rând și se inserează în vector astfel
încât acesta să rămână ordonat.
Ex: n=5 și se citesc numerele: 4 -3 3 1 15
6=>
4 -3
4
-3 3 4 -3 3
4 15
-3 3 4 6 15

#include <stdio.h>
#include <stdlib.h>

int n,v[50],i,j,a;

void sort_ins()
{
printf("Dati n: "); scanf("%d",&n);
printf("v[%d]= ",1); scanf("%d",&v[1]);
for(i=0;i<n;i++)
{
printf("v[%d]= ",i);
scanf("%d",&v[i]);
}
for(j=1;j<n;j++)
{
a=v[j];
i=j-1;
while(a<v[i] && i>=0)
{
v[i+1]=v[i];
i=i-1;
}
v[i+1]=a;
}
}
void afisare()
{
for(i=0;i<n;i++)
{
printf("%d",v[i]);
}
}
int main()
{

sort_ins();
afisare();
return 0;
}
1.10
Scrieti o functie care primeste ca argument un vector de numere intregi, de
dimensiune n si il sorteaza in functie de suma cifrelor elementelor constituente.
Se va scrie programul care citeste vectorul si afiseaza vectorul sortat.
De exemplu pentru tabloul [18, 13, 6] => [13,6,18]

#include <stdio.h>
#include <stdlib.h>

int i,j,v[50],n,q,t[50],aux;
void citire()
{
printf("Dati n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("v[%d]= ",i);
scanf("%d",&v[i]);
}
}
void transformare()
{int s;
for(i=0;i<n;i++)
{ s=0;
while(v[i]!=0)
{ s=s+v[i]%10;
q=q*10+v[i]%10;
v[i]/=10;
}
t[i]=s;
}
}
void afisare()
{
for(i=0;i<n;i++)
{
printf("%d ",v[i]);
}
}
void sortare()
{
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(t[j]>t[j+1])
{
aux=v[j];
v[j]=v[j+1];
v[j+1]=aux;
}
}
}
}
int main()
{

citire();
transformare();
sortare();
afisare();

return 0;
}
2.1

1.Să se scrie un program C care realizează următoarele:

a.Şterge dintr-un şir de caractere un subşir specificat prin poziţie şi lungime.

b.Inserează într-un şir începând cu o poziţie dată un alt şir.

c.Citeşte două cuvinte şi înlocuieşte într-un text introdus de la tastatură toate apariţiile
primului cuvânt prin cel de-al doilea.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char sir[20];

int l,p,i,j;

int main()

char sir[]="abcdefghijk";

printf("Dati lungimea si pozitia de unde va incepe stergerea: ");scanf("%d%d",&l,&p);

if(l>strlen(sir)-2)

printf("EROARE! Lungime prea mare!");

else

for(i=p;i<p+l;i++)

sir[i]='0';
}

for(i=0;i<strlen(sir)-1;i++)

while(sir[i]=='\0')

sir[i]=sir[i+1];

for(i=0;i<strlen(sir)-1-l;i++)

if(sir[i]!='0')

printf("%c",sir[i]);

return 0;

2.2

Se citesc de la tastatură elementele unei matrici de caractere (nr. linii=nr.


coloane), A(NxN), N<=10.
Să se afişeze matricea A;
Să se formeze şi să se afişeze cuvântul format din caracterele pe pe diagonala
principală a matricii A;
Să se calculeze şi să se afişeze numărul de litere mari, litere mici şi cifre din
matrice;
Să se afişeze cuvântul format din caracterele de pe diagonala secundară;
Să se afişeze procentul literelor mari, al literelor mici şi al cifrelor de pe cele 2
diagonale;
Să se afişeze caracterele comune aflate pe liniile p şi q (p, q < N, p şi q citite de la
tastatură);
Să se afişeze in ordine alfabetică, crescătoare, literele mari aflate pe coloanele
impare.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char a[50][50];
int i,j,n;

void citire()
{
printf("Dati n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("a[%d][%d]= ",i,j);
scanf("%s",&a[i][j]);
}
}
}
void afisare()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%c ",a[i][j]);
}
printf("\n");
}
}
void diagPrinc()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if((i==j) && (isdigit(a[i][j])==0))
printf("%c",a[i][j]);
}
}
printf(" <== Cuvantul de pe diagonala principala\n");
}
void numara()
{
int nr=0,l_mare=0,l_mica=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(isdigit(a[i][j])==1)
{
nr++;
}
if(a[i][j]>=97 && a[i][j]<=122)
{
l_mica++;
}
if(a[i][j]>=65 && a[i][j]<=90)
{
l_mare++;
}
}
}
printf("Numere: %d\n",nr);
printf("Litere mici: %d\n",l_mica);
printf("Litere mari: %d\n",l_mare);
}
void diagSec()
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if((j==n-1-i) && (isdigit(a[i][j])==0))
printf("%c",a[i][j]);
}
}
printf(" <== Cuvantul de pe diagonala secundara\n");
}
void alphab()
{int cnt=0;
char subSir[50],aux;
for(i=0;i<n;i++)
{
for(j=1;j<n;j=j+2)
{
if(a[i][j]>=65 && a[i][j]<=90)
{
subSir[cnt]=a[i][j];
cnt++;
}
}
}
for(i=0;i<cnt;i++)
{
if(subSir[i]>subSir[i+1])
{
aux=subSir[i];
subSir[i]=subSir[i+1];
subSir[i+1]=aux;

}
}
for(i=0;i<cnt;i++)
{
printf("%c",subSir[i]);
}
}
int main()
{
citire();
afisare();
diagPrinc();
numara();
diagSec();
alphab();

return 0;
}
2.3
Se citeşte un şir de caractere alfanumerice. Considerăm că literele sunt
separatorii numerelor. Afişaţi datele de tip numeric preluate în ordine din şirul
citit. Numerele vor fi scrise câte unul pe o linie.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char a[50];
int i;
void afisare()
{
for(i=0;i<strlen(a);i++)
{
if(isdigit(a[i])==1)
printf("%c",a[i]);
else
printf("\n");
}
}
int main()
{ printf("String: ");
scanf("%s",a);
afisare();
return 0;
}

S-ar putea să vă placă și