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;
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;
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; }