exFuncions

download exFuncions

of 6

Transcript of exFuncions

  • 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