7/25/2019 exFuncions
1/6
1 /*
2 * Quota prestecs
3 */
4
5 #include
6 #include
7 #define MESOS 12
8
9 double calculQuota(double, int, double);
10 void descripcio(void);11 void mostraEntrada(double, double, int);
12 void mostraResults(double, double);
13
14 int main(void) {
15 double diners, intAnual, quota;
16 int anys;
17 descripcio();
18 printf(" total (EUR)?");
19 scanf("%lf", &diners);
20 printf(" interes anual?");
21 scanf("%lf", &intAnual);
22 printf("anys?");
23 scanf("%d", &anys);
24 mostraEntrada(diners, intAnual, anys);
25 quota = calculQuota(intAnual, anys, diners);
26 mostraResults(quota, quota * anys * MESOS);
27 return 0;
28 }
29
30 double calculQuota(double intAnual, int periode, double prestec) {
31 double intMens, pagMensual;
32 int mesos;
33 intMens = intAnual / 100. / MESOS;34 mesos = periode * MESOS;
35 pagMensual = (prestec * intMens) / (1 - pow(1 + intMens, -mesos));
36 return pagMensual;
37 }
38
39 void descripcio() {
40 printf("El programa calcula els pagaments mensuals i total\n");
41 printf("per a una hipoteca de x euros, interes anual i\n");
42 printf("durada (# d'anys)\n");
43 }
44
45 void mostraEntrada(double prestec, double intAnual, int anys) {
46 printf("Per un total de %.2f EUR\n", prestec);
47 printf("a un interes anual del %g%% ", intAnual);
48 printf("durant %d anys\n", anys);
49 return;
50 }
51
52 void mostraResults(double quota, double total) {
53 printf("la quota mensual es %.2f EUR\n\n", quota);
54 printf("Pagament TOTAL %.2f EUR\n", total);
55 return;
56 }57
7/25/2019 exFuncions
2/6
1 /*2 * ============================================================================3 * Descomposicio de n en factor primers4 * ============================================================================5 */6
7 #include 8 #include 9
10 int multi ( int, int );
1112 int main ( void ) {13 int num, i, j, k;14 scanf ( "%d", &num );15 if ( num 1; ++i ) {21 k = multi ( num, i );22 if ( k != 0 ) {23 for ( j = 1; j
7/25/2019 exFuncions
3/6
1 /*2 * ============================================================================3 * Descomposicio de n en factor primers4 * ============================================================================5 */67 #include 8 #include 9
10 int multi ( int *, int );
1112 int main ( void ) {13 int num, i, k;14 scanf ( "%d", &num );15 if ( num 1; ++i ) {21 if ( ( k = multi ( &num, i ) ) != 0 ) {22 printf ( " divisor primer: %d, potencia:%d\n", i, k );23 }
24 }25 return 0;26 }2728 /* La funcio multi retorna quantes vegades apareix p en n, 0 si no hi es29 i elimina els factors */30 int multi ( int *n, int p ) {31 int k = 0;32 while ( *n % p == 0 ) {33 ++k;34 *n /= p;35 }36 return k;
37 }38
7/25/2019 exFuncions
4/6
1 /*
2 * intercanvi de valors. Pas per valor/referencia
3 */
4
5 #include
6
7 void intval(int, int);
8 void intref(int *, int *);
9 void intvec(int[]);
1011 int main(void) {
12 int m, n, p, q, v[2];
13 printf("valors enters per a intercanviar?");
14 scanf("%d %d", &m, &n);
15 /* fem copies */
16 p = m;
17 q = n;
18 v[0] = m;
19 v[1] = n;
20 printf("volem intercanviar %d,%d\n", m, n);
21 intval(m, n);
22 printf("despres d'intval %d,%d\n", m, n);
23 intref(&p, &q);
24 printf("despres d'intref %d,%d\n", p, q);
25 intvec(v);
26 printf("despres d'intvec %d,%d\n", v[0], v[1]);
27 return 0;
28 }
29
30 void intval(int a, int b) {
31 int aux = a;
32 a = b;
33 b = aux;34 return;
35 }
36
37 void intref(int *a, int *b) {
38 int aux = *a;
39 *a = *b;
40 *b = aux;
41 return;
42 }
43
44 void intvec(int a[]) {
45 int aux = a[0];
46 a[0] = a[1];
47 a[1] = aux;
48 return;
49 }
50
7/25/2019 exFuncions
5/6
ELEMENTS DE PROGRAMACIO
Examen final del 19 de gener de 2012
Exercici 1 Escriviu un programa complet (ambinclude, capcaleres, ...) onmainllegeixi parelles de valors enters fins a
llegir dos zeros.
Calculara el producte dels dos enters utilitzant una funcio multi(m,n) que tractara els casos de valors negatius o zero
dels arguments i que invocara la funcioprod(i,j), amb arguments positius, que no utilitzara loperador aritmetic .
La funcioprod(i,j)(ambi j > 0) invocara la funciosuma(p,q)per a calcular la suma de p i q de forma que nomes
sumi o resti 1 (amb els operadors++o ) quan calgui.
Les funcionssuma,prodi multiretornaran el resultat enter calculat. (Maxim 35 lnies)
mn=n
k=1
m p + q= (p + 1) + (q1)
Solucio:
#include
int multi(int, int );
int prod(int, int );
int suma(int, int );
int main(void){
int x , y ;
s c a nf ( " % d % d " , & x ,& y ) ;
while ( x !=0 || y != 0) {
p ri n tf ( " % d * % d = % d \ n" , x ,y , m ul t i (x , y ) );
s c an f ( " % d % d " , & x ,& y ) ;
}
}
int multi(int m ,int n ){
int signe=1;
if ( n = =0 | | m = =0 ) return 0;if ( n < 0 ) { s ig ne = - si gn e ; n =- n ;}
if ( m < 0) { s ig ne = - s ig ne ; m = - m ;}
if ( n > m ) m = p ro d ( 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;
}
7/25/2019 exFuncions
6/6
1 /*
2 * Producte de matrius
3 * A nxp i B pxm (resultat C nxm)
4 */
5
6 #include
7 #include
8 #define NMAX 10
9
10 void prodMat(int, int, int, double[][NMAX], double[][NMAX], double[][NMAX]);11
12 int main(void)13 {14 double a[NMAX][NMAX], b[NMAX][NMAX], c[NMAX][NMAX];15 int i, j, n, m, p;16
17 do {18 scanf("%d %d %d", &n, &p, &m);19 } while ((n < 2 && p < 2 && m < 2) | | (n > NMAX && p > NMAX && m > NMAX));20
21
22 for (i = 0; i < n; i++)23 for (j = 0; j < p; j++)24 scanf("%e", &a[i][j]);25 for (i = 0; i < p; i++)26 for (j = 0; j < m; j++)27 scanf("%e", &b[i][j]);28
29
30 prodMat(n, p, m, a, b, c);31
32 for (i = 0; i < n; i++) {
33 for (j = 0; j < m; j++)34 printf("%15.7e", c[i][j]);35 printf("\n");36 }37 return 0;38 }39
40
41 void prodMat(int n, int p, int m, double a[][NMAX], double b[][NMAX], double c[][NMAX])
42 {43 int i, j, k;
44 for (i = 0; i < n; i++)45 for (j = 0; j < m; j++) {46 c[i][j] = 0.;47 for (k = 0; k < p; k++)48 c[i][j] += a[i][k] * b[k][j];49 }50 return;51 }52