Sunteți pe pagina 1din 7

Probleme - Programare procedurala

David Rodica-Mihaela, grupa 104




1. Se citesc n puncte de la tastatur, date prin coordonatele lor: x[i], y[i], i=1,n. S se afieze
perechea de puncte ntre care distana este maxim (dac exist mai multe astfel de perechi, se poate
afia oricare dintre ele), precum i aceast distan.
#include<stdio.h>
#include<math.h>


float dist (int x1, int y1, int x2, int y2)
{
float d;
d = (float)sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}

int main()
{
int n, x[100], y[100],i,j;
float max=0, aux;
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d%d", &x[i], &y[i] );
for ( i=1; i <= n; i ++)
for(j=1; j <= n; j ++)
{
aux = dist(x[i],y[i],x[j],y[j]);
printf("%f",aux);
if(aux>max)
max=aux;
}
printf("%f",max);
int k=1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
while ( k == 1 ){
aux=dist(x[i],y[i],x[j],y[j]);
if ( aux == max ){
printf("%d %d\n%d
%d\n",x[i],y[i],x[j],y[j]);
k = 0;
}
}
printf("%f",max);
return 0;
}


2. Scriei o funcie care s calculeze numrul de cifre ale unui numr ntreg dat ca parametru, N.
n funcia main() citii un numr de la tastatur i afiai rezultatul apelului funciei.

#include <stdio.h>

int nrcf(long n)
{
if (n == 0)
return 1;
int nr = 0; /* declar un contor in care sa numar cifrele */
while (n) /* cat timp mai pot obtine o cifra */
{
n = n/10; /* o trunchiez pe ultima */
nr++; /* incrementez contorul */
}
return nr; /* functia intoarce numarul de cifre */
}

int main(void)
{
long N;
printf("N = "); /* afisam un mesaj pentru utilizator */
scanf("%ld", &N); /* citim numarul introdus de la tastatura */

/* afisez numarul de cifre */
printf("Numarul %ld are %d cifre!\n", N, nrcf(N));

return 0;
}


3. S se scrie un program care citete un ir de numere (pozitive i negative) i afieaz numrul
de numere negative i numrul de numere pozitive din irul citit.
#include<stdio.h>
int main()
{
int N, v[100], p=0, n=0, i;

scanf("%d", &N);

for(i=0; i<N; i++)
{
scanf("%d", &v[i]);
if(v[i]>=0)
p++;
else
n++;
}
printf("Numere negative %d\n ", n);

printf("Numere pozitive %d\n ", p);

return 0;
}

4. Scriei o funcie care s verifice dac un numr ntreg n conine cifra c. Numerele n i c sunt
date ca parametri.
#include<stdio.h>

int cifra ( int n, int c )
{
int p = 0;
while ( n )
{
if ( n % 10 == c )
{
p = 1;
break;
}
n = n / 10;
}
return p;
}

int main ()
{
int N , C;
scanf("%d%d", &N, &C);
if ( cifra (N, C) == 1)
printf("DA");
else printf("NU");
return 0;
}

5. Se citesc numere naturale pn la ntlnirea numrului 0. S se afieze toate perechile (A,
B) de numere citite consecutiv cu proprietatea c al doilea numr reprezint restul mpririi primului
numr la suma cifrelor sale.

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

int suma(int p)
{
int s=0;
while(p!=0)
{
s+=(p%10);
p=p/10;
}
return s;
}

int main()
{
int v[10000];
int i=0;
do
{
scanf("%d", &v[i]);
i++;
}
while(v[i-1]!=0);
int j;
for(j=0; j<i-1; j++)
if(v[j+1]==(v[j]%suma(v[j])))
printf("(%d,%d)", v[j], v[j+1]);
return 0;
}


6. Sa se scrie o functie care sorteaza un vector folosind bubble sort. Functia va primi ca
parametri vectorul care trebuie sortat, precum si numarul de elemente.
#include<stdio.h>

void bubbleSort( int *V , int N )
{
int gata = 0, i, aux;
while(!gata){
gata= 1;
for(i=0; i<N-1; i++)
{
if(V[i]>V[i+1])
{
gata=0;
aux=V[i];
V[i]=V[i+1];
V[i+1]=aux;
}
}
}
}

int main()
{
int n , v[10000];
scanf("%d" , &n);
int i;
for( i= 0; i<n ; i++)
scanf("%d" , &v[i]);
bubbleSort( v , n);
for(i=0; i<n; i++)
printf("%d ", v[i]);
return 0;
}



7. S se scrie o funcie pentru extragerea elementelor dintr-un vector a ce se regasesc si intr-un
al doilea vector b. Cei doi vectori sunt neordonati. Rezultatul va fi pus ntr-un al treilea vector, c.

#include<stdio.h>

int numere( int A[], int nrA , int B[] , int nrB, int C[])
{
int i,j,k;
k=0;
for(i=0; i<nrA; i++)
for(j=0; j<nrB; j++)
if( A[i] == B[j])
{
C[k]=A[i];
k++;
break;
}
return k;
}

int main()
{
int a[1000], b[1000], nra, nrb, c[1000],nrc;
int i;

scanf("%d" , &nra);
for(i=0; i<nra; i++)
scanf("%d", &a[i]);
scanf("%d" , &nrb);
for(i=0; i<nrb; i++)
scanf("%d", &b[i]);
nrc=numere(a, nra, b, nrb, c);
printf("%d\n", nrc);
for(i=0; i<nrc; i++)
printf("%d ", c[i]);
return 0;
}

8. Se citesc de la tastatur patru numere ntregi reprezentnd dou fracii x1 / y1 i x2 / y2.
Aducei fraciile la acelai numitor (cel mai mic posibil) folosind o funcie care calculeaz cel mai mic
multiplu comun a dou numere ntregi.
#include<stdio.h>

int cmmdc( int a, int b)
{
int r;
r = a % b;
while (r)
{
a=b;
b=r;
r=a%b;
}
return b;
}

int cmmmc( int a, int b)
{
int p;
p=(a*b)/cmmdc(a,b);
return p;
}

int main()
{
int x1, y1, x2, y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int mult;
mult = cmmmc(y1,y2);
x1=x1*(mult/y1);
x2=x2*(mult/y2);
y1=mult;
y2=mult;
printf("%d %d\n%d %d",x1,y1,x2,y2);
return 0;
}

9. Program pentru interclasarea a doi vectori ordonai ntr-un singur vector ordonat.
#include<stdio.h>
int main()
{
int N1, N2, v1[1000], v2[1000], v3[2000],i, j, k ;
scanf("%d", &N1);
for(i=0; i<N1; i++)
scanf("%d", &v1[i]);
scanf("%d", &N2);
for(i=0; i<N2; i++)
scanf("%d", &v2[i]);
i=0;
j=0;
for(k=0; k<N1+N2; k++)
{
if(i<N1 && j<N2)
if(v1[i]<v2[j])
{
v3[k]=v1[i];
i++;
}
else
{
v3[k]=v2[j];
j++;
}
else
if(i>=N1)
{
v3[k]=v2[j];
j++;
}
else
{
v3[k]=v1[i];
i++;
}
}
for(i=0; i<N1+N2; i++)
printf("%d ", v3[i]);
return 0;
}

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