Está en la página 1de 6

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

/*
* Quota prestecs
*/

#include<stdio.h>
#include<math.h>
#define MESOS 12
double calculQuota(double, int, double);
void descripcio(void);
void mostraEntrada(double, double, int);
void mostraResults(double, double);
int main(void) {
double diners, intAnual, quota;
int anys;
descripcio();
printf(" total (EUR)?");
scanf("%lf", &diners);
printf(" interes anual?");
scanf("%lf", &intAnual);
printf("anys?");
scanf("%d", &anys);
mostraEntrada(diners, intAnual, anys);
quota = calculQuota(intAnual, anys, diners);
mostraResults(quota, quota * anys * MESOS);
return 0;
}
double calculQuota(double intAnual, int periode, double prestec) {
double intMens, pagMensual;
int mesos;
intMens = intAnual / 100. / MESOS;
mesos = periode * MESOS;
pagMensual = (prestec * intMens) / (1 - pow(1 + intMens, -mesos));
return pagMensual;
}
void descripcio() {
printf("El programa calcula els pagaments mensuals i total\n");
printf("per a una hipoteca de x euros, interes anual i\n");
printf("durada (# d'anys)\n");
}
void mostraEntrada(double prestec, double intAnual, int anys) {
printf("Per un total de %.2f EUR\n", prestec);
printf("a un interes anual del %g%% ", intAnual);
printf("durant %d anys\n", anys);
return;
}
void mostraResults(double quota, double total) {
printf("la quota mensual es %.2f EUR\n\n", quota);
printf("Pagament TOTAL %.2f EUR\n", total);
return;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

/*
* ============================================================================
*
Descomposicio de n en factor primers
* ============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
int multi ( int, int );
int main ( void ) {
int num, i, j, k;
scanf ( "%d", &num );
if ( num <= 1 ) {
printf ( " %d incorrecte\n", num );
exit ( 1 );
}
printf ( "Pel valor %d tenim:\n", num );
for ( i = 2; num > 1; ++i ) {
k = multi ( num, i );
if ( k != 0 ) {
for ( j = 1; j <= k; ++j ) {
num /= i;
}
printf ( " divisor primer: %d, potencia:%d\n", i, k );
}
}
return 0;
}
/* La funcio multi retorna quantes vegades apareix p en n, 0 si no hi es */
int multi ( int n, int p ) {
int k = 0;
while ( n % p == 0 ) {
++k;
n /= p;
}
return k;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

/*
* ============================================================================
*
Descomposicio de n en factor primers
* ============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
int multi ( int *, int );
int main ( void ) {
int num, i, k;
scanf ( "%d", &num );
if ( num <= 1 ) {
printf ( " %d incorrecte\n", num );
return 1;
}
printf ( "Pel valor %d tenim:\n", num );
for ( i = 2; num > 1; ++i ) {
if ( ( k = multi ( &num, i ) ) != 0 ) {
printf ( " divisor primer: %d, potencia:%d\n", i, k );
}
}
return 0;
}
/* La funcio multi retorna quantes vegades apareix p en n, 0 si no hi es
i elimina els factors */
int multi ( int *n, int p ) {
int k = 0;
while ( *n % p == 0 ) {
++k;
*n /= p;
}
return k;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

/*
* intercanvi de valors. Pas per valor/referencia
*/

#include<stdio.h>
void intval(int, int);
void intref(int *, int *);
void intvec(int[]);
int main(void) {
int m, n, p, q, v[2];
printf("valors enters per a intercanviar?");
scanf("%d %d", &m, &n);
/*

fem copies */

p = m;
q = n;
v[0] = m;
v[1] = n;
printf("volem intercanviar
intval(m, n);
printf("despres d'intval
intref(&p, &q);
printf("despres d'intref
intvec(v);
printf("despres d'intvec
return 0;
}
void intval(int a, int b) {
int aux = a;
a = b;
b = aux;
return;
}
void intref(int *a, int *b) {
int aux = *a;
*a = *b;
*b = aux;
return;
}
void intvec(int a[]) {
int aux = a[0];
a[0] = a[1];
a[1] = aux;
return;
}

%d,%d\n", m, n);
%d,%d\n", m, n);
%d,%d\n", p, q);
%d,%d\n", v[0], v[1]);


ELEMENTS DE PROGRAMACIO
Examen final del 19 de gener de 2012
Exercici 1 Escriviu un programa complet (amb include, capcaleres, ...) on main llegeixi parelles de valors enters fins a
llegir dos zeros.
Calcular`a el producte dels dos enters utilitzant una funcio multi(m,n) que tractar`a els casos de valors negatius o zero
dels arguments i que invocar`a la funcio prod(i,j), amb arguments positius, que no utilitzar`a loperador aritm`etic .
La funcio prod(i,j) (amb i j > 0) invocar`a la funcio suma(p,q) per a calcular la suma de p i q de forma que nom`es
sumi o resti 1 (amb els operadors ++ o ) quan calgui.
Les funcions suma, prod i multi retornaran el resultat enter calculat. (M`axim 35 lnies)
n

mn =

p + q = (p + 1) + (q 1)

k=1

Solucio:
#include< stdio .h >
int multi (int, int );
int prod (int, int );
int suma (int, int );
int main (void){
int x ,y;
scanf ("%d %d" ,&x ,& y );
while ( x !=0 || y !=0) {
printf (" %d * %d = %d\n" ,x ,y , multi (x ,y ));
scanf ("%d %d" ,&x ,& y );
}
}
int multi (int m ,int n ){
int signe =1;
if ( n ==0 || m ==0) return 0;
if ( n <0 ) { signe =- signe ; n=-n ;}
if ( m <0) { signe =- signe ; m=-m ;}
if ( n >m) m= prod (n ,m );
else m= prod (m ,n );
if ( signe >0) return m;
return -m;
}
int prod (int p ,int q ){ /* amb p>=q */
int res = 0;
if (q == 1) return p; /* p * 1 = p */
for(; q >=1; --q)
res = suma (res ,p );
return res ;
}
int suma (int a ,int b ){
while(b >0) {
a ++;b - -;
}
return a;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

/*
* Producte de matrius
* A nxp i B pxm (resultat C nxm)
*/

#include<stdio.h>
#include<stdlib.h>
#define NMAX 10
void prodMat(int, int, int, double[][NMAX], double[][NMAX], double[][NMAX]);
int main(void)
{
double a[NMAX][NMAX], b[NMAX][NMAX], c[NMAX][NMAX];
int i, j, n, m, p;
do {
scanf("%d %d %d", &n, &p, &m);
} while ((n < 2 && p < 2 && m < 2) || (n > NMAX && p > NMAX && m > NMAX));

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


for (j = 0; j < p; j++)
scanf("%e", &a[i][j]);
for (i = 0; i < p; i++)
for (j = 0; j < m; j++)
scanf("%e", &b[i][j]);

prodMat(n, p, m, a, b, c);
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
printf("%15.7e", c[i][j]);
printf("\n");
}
return 0;
}

void prodMat(int n, int p, int m, double a[][NMAX], double b[][NMAX], double c[][
NMAX])
{
int i, j, k;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
c[i][j] = 0.;
for (k = 0; k < p; k++)
c[i][j] += a[i][k] * b[k][j];
}
return;
}