Upload
vitaliano-soruco
View
220
Download
0
Embed Size (px)
Citation preview
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 1/8
1 #include<stdio.h>
2
3 int main(void) {4 int dia, mes, any;5 printf("Doneu dia/mes/any?");6 scanf("%d/%d/%d", &dia, &mes, &any);7
8 switch (mes) {9 case 1:
10 case 3:11 case 5:12 case 7:13 case 8:14 case 10:15 case 12:16 if (dia >= 1 && dia <= 31)17 printf("Data correcta\n");18 else19 printf("Data incorrecta\n");20 break;21 case 4:22 case 6:23 case 9:24 case 11:25 if (dia >= 1 && dia <= 30)26 printf("Data correcta\n");27 else28 printf("Data incorrecta\n");29 break;30 case 2:31 if ((dia >= 1 && dia <= 28) ||32 (dia == 29 && (any % 400 == 0 || (any % 4 == 0 && any % 100 != 0))))
33 printf("Data correcta\n");34 else35 printf("Data incorrecta\n");36 break;37 default:38 printf("Data incorrecta\n");39 }40 return 0;41 }42
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 2/8
1 /*
2 Llegir dos nombres enters a i b per teclat (poden ser negatius) i trobar el resultat de
3 realitzar la seva multiplicacio a partir de sumes. Es a dir:
4 a * b = a + a + a + ... + a (a sumat b vegades)
5 */
6 #include <stdio.h>
7 int main(void) {
8 int a, b, i;
9 long mult;
1011 printf("Calcul del producte d'enters a partir de sumes\n");
12 printf("----------------------------------------------\n");
13
14 printf("Introdueix el primer nombre : ");
15 scanf("%d", &a);
16 printf("Introdueix el segon nombre : ");
17 scanf("%d", &b);
18
19 /* Podem optimitzar el codi si ara afegim les seguents linies, que intercanviaran
20 * els valors de a i b si a < b. D'aquesta manera sumarem a cops b, en lloc de b cops a.
21 * Cal haver declarat previament una variable 'aux' de tipus 'int'.
22 *
23 * if (a < b) {
24 * aux = a;
25 * a = b;
26 * b = aux;
27 * }
28 */
29
30 /* Calcul del producte a partir de sumes, tenint en compte que 'b' pot ser negatiu. */
31 mult = 0;
32 if (b >= 0)
33 for (i = 1; i <= b; i++)34 mult += a;
35 else
36 for (i = 1; i <= -b; i++)
37 mult -= a;
38
39 /* Una altre manera d'haver tingut en compte que b podia ser negatiu era calcular
40 * la multiplicacio de la seguent manera. Ull caldra #include <stdlib.h> per la funcio abs()
41 *
42 * mult = 0;
43 * for (i = 1; i < abs(b); i++)
44 * mult += a;
45 * if (b < 0)
46 * mult = -mult;
47 *
48 * ! Una altre manera d'haver tingut en compte que b podia ser negatiu era calcular aixi
49 *
50 * mult = 0;
51 * if (b < 0) {
52 * a = -a;
53 * b = -b;
54 * }
55 * for (i=1;i<b;i++)
56 * mult += a;57 */
58 /* Donem el resultat */
59 printf("El producte de %d per %d es %ld\n", a, b, mult);
60 return 0;
61 }
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 3/8
1 /* suma una serie alternada2 * 1 -1/5 + 1/8 - 1/13 ..... 1/(4*i-3)3 * Val pi*sqrt(2)/8+sqrt(2)*log(1+sqrt(2))/4 ~ 0.866972987...4 */5 #include<stdio.h>6
7 int main(void) {8 double sum=0., sumR=0., t=1.;9 int i=1, s=1, n=0;10
11 printf("entra n (parell)?");12 scanf("%d",&n);13
14 for(i=1; i< n; i++) {15 t = 1./(4.*i-3.);16 sum += s*t;17 s = -s;18 }19
20 s = -s;21 for(i=n-1; i>0; i--) {22 t = 1./(4.*i-3.);23 sumR += s*t;
24 s = -s;25 }26
27 printf(" suma = %.14e\n",sum);28 printf(" suma = %.14e\n",sumR);29 return 0;30 }31
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 4/8
1 /*
2 * Donat un n natural calcular quants primers hi ha <=n
3 * Algorisme cutre provant dividir per tots els senars
4 */
5
6 #include<stdio.h>
7 #include<time.h>
8
9 int main(void) {
10 int n, k, j, tot = 1; /* Comptem el 2, ja que nomes treballarem amb els senars */11 float t;
12 do {
13 printf("n>0?");
14 scanf("%d", &n);
15 } while (n < 2);
16
17 t = (float) clock() / CLOCKS_PER_SEC; /* Temps actual en segons */
18
19 for (k = 3; k <= n; k += 2) {
20 j = 3;
21 while (j < k && k % j != 0)
22 j += 2;
23 if (j >= k)
24 tot++;
25 }
26 printf(" n= %d\n", n);
27 printf(" quantitat de primers= %d\n", tot);
28 printf(" temps = %.2f segs\n", (float) clock() / CLOCKS_PER_SEC - t);
29 return 0;
30 }
31
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 5/8
1 /*2 * Llegir quantitat indeterminada de notes (real entre 0 i 10)3 * Quants llegits, quants aprovat (>=5), mitjana, maxim i minim4 */56 #include<stdio.h>78 int main(void) {9 int tot = 0, apr = 0;
10 float x, max = 0., min = 10., sum = 0.;
1112 scanf("%f", &x);13 if (0 <= x && x <= 10) {14 tot = 1;15 sum = max = min = x;16 scanf("%f", &x);17 }18 while (0 <= x && x <= 10) {19 tot++;20 sum += x;21 if (x > max) {22 max = x;23 } else if (x < min) {
24 min = x;25 }26 if (x >= 5) {27 apr++;28 }29 scanf("%f", &x);30 }31 if (tot == 0) {32 printf("No hi ha dades\n");33 } else {34 printf(" %d notes llegides\n", tot);35 printf(" %d aprovats\n", apr);36 printf(" mitjana = %.2f\n", sum / tot);
37 printf(" nota max = %.2f\n", max);38 printf(" nota min = %.2f\n", min);39 }40 return 0;41 }42
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 6/8
1 /* iteracio.c */2 /* sigui f(n)= n/2 (si n parell)3 * 3n+1 (si n senar)4 * per cada n=1,2,...,50, s'itera la funcio fins que s'arriba a 45 * cal escriure6 * quants iterats cal fer per a arribar al valor 47 * el maxim que s'assoleix8 */9 #include <stdio.h>
10
11 int main(void) {12 int n, max, k, num;1314 for (num = 1; num <= 50; num++) {15 n = num;16 k = 0;17 max = n;18 while (n != 4) {19 if (n % 2 == 0) {20 n = n / 2;21 } else {22 n = 3 * n + 1;23 }
24 /* n = ( n%2 == 0? n/2: 3*n+1); */25 k++;26 if (n > max) {27 max = n;28 }29 }30 printf(" n = %2d, k = %3d, maxim = %4d \n", num, k, max);31 }3233 return 0;34 }35
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 7/8
1 /* Calcul d'arrels quadrades usant metode de Newton */
2
3 #include<stdio.h>
4 #include<math.h> /* al crear executable cal posar -lm */
5 #define PREC 1e-10
6 #define N 50
7
8 int main(void) {
9 int k = 0, signe = 1;
10 double a, x, y;11 printf("valor real?\n");
12 scanf("%lg", &a);
13 printf(" a=%g\n", a);
14
15 if (a < 0) {
16 signe = -1;
17 a = -a;
18 }
19
20 x = (1 + a) / 2;
21 printf(" k=%3d x=%23.16e\n", 0, x);
22 do {
23 k++;
24 y = x;
25 x = 0.5 * (y + a / y);
26 printf(" k=%3d x=%23.16e\n", k, x);
27 } while (k <= N && (fabs(x * x - a) > PREC && fabs(y - x) > PREC));
28
29 if (k > N) {
30 printf("no hi ha hagut convergencia en %d iteracions\n", N);
31 printf(" |df|= %e, |dx|=%e, k=%d\n", fabs(x * x - a), fabs(y - x), k);
32 } else {
33 if (signe > 0) {34 printf("arrel=%27.20e\n", x);
35 printf("sqrt =%27.20e\n", sqrt(a));
36 } else {
37 printf("arrel=%27.20e *i\n", x);
38 printf("sqrt =%27.20e *i\n", sqrt(a));
39 }
40 }
41 return 0;
42 }
43
7/25/2019 exemples_tarda.pdf
http://slidepdf.com/reader/full/exemplestardapdf 8/8
12 /* Calcul del sinus usant Taylor amb precisio PREC3 * 1) sense reduir x, nomes fent canvi de signe si cal4 * 2) reduint x a [0,pi/2] */56 #include<stdio.h>7 #include<math.h>8 #define PREC 1e-109 #define MPI 3.14159265358979323846 /* pi */
10 #define MPI2 1.57079632679489661923 /* pi/2 */
1112 int main(void){13 int s=1,den=1;14 double x, sum=0., term;15 printf("x=?(en radians)\n");16 scanf("%le",&x);17 printf ("x=%e\n",x);18 if (x<0) {19 x=-x;20 s=-1;21 }22 /* metode 1 */23
24 term =x;25 while (fabs(term) > PREC ) {26 sum += term;27 den +=2;28 term*= -(x*x)/(den*(den-1));29 }30 sum *= s;3132 printf ("sense reduccio\n");33 printf (" %20s %20s %16s %16s\n","sinus de math.h","Taylor","dif","sumands");34 printf (" %23.16e %23.16e %16.7e %6d\n\n",s*sin(x),sum,s*sin(x)-sum,(den+1)/2);3536 /* metode 2 */
37 while (x>MPI) x-= 2*MPI;38 if (x>MPI2) x=MPI-x;39 sum=0;40 den=1;41 term=x;42 while (fabs(term) > PREC ) {43 sum += term;44 den +=2;45 term*= -(x*x)/(den*(den-1));46 }47 sum *= s;4849 printf ("amb reduccio\n");50 printf (" %20s %20s %16s %16s\n","sinus de math.h","Taylor","dif","sumands");51 printf (" %23.16e %23.16e %16.7e %6d\n\n",s*sin(x),sum,s*sin(x)-sum,(den+1)/2);5253 return 0;54 }55