Diferencia entre revisiones de «Curso de Programación en C/Prog108»
Ir a la navegación
Ir a la búsqueda
(→Prog108) |
(Sin diferencias)
|
Revisión actual del 05:42 15 jul 2012
Prog108
1 // Archivo Prog108.h
2 extern int ContarLosTiros;
3 int Tira_n_Dados(int, int );
4
5 // Archivo Prog108a.c
6 #include <stdio.h>
7 #include <stdlib.h> /* Prototipo para srand() */
8 #include <time.h> /* Prototipo para time() */
9 #include <string.h> /* Prototipo para strlen() */
10 #include "Prog108.h" /* Prototipo para roll_n_Dados()
11 y para ContarLosTiros */
12
13 int main(void)
14 {
15 int Dados,
16 Lados = 0,
17 NumCharsLeidos,
18 NumValidosChars,
19 Tira,
20 i;
21
22 char NumSTR[10];
23
24 srand( (unsigned int)time( 0 ) ); /* random semilla */
25 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
26
27 while( fgets( NumSTR, 9, stdin ) )
28 {
29 NumValidosChars = 0;
30 NumCharsLeidos = strlen( NumSTR );
31
32 if( NumSTR[0] == '0' )
33 break;
34
35 if( *(NumSTR + NumCharsLeidos - 1) != '\n' )
36 {
37 puts( "Entrada ¡INVALIDA!" );
38 while( getchar() != '\n' );
39 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
40 continue;
41 }
42 else
43 *(NumSTR + NumCharsLeidos - 1) = '\0';
44
45 for( i = 0; i < NumCharsLeidos -1; i++ )
46 if( ( *(NumSTR + i ) >= '0' && *(NumSTR + i ) <= '9' ) )
47 NumValidosChars++;
48
49 if( NumCharsLeidos == 1 || NumValidosChars != NumCharsLeidos - 1 )
50 {
51 puts( "Entrada ¡INVALIDA!" );
52 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
53 continue;
54 }
55 Lados = atoi( NumSTR );
56
57 printf( "¿Cuantos dados? " );
58 fgets( NumSTR, 9, stdin );
59 NumValidosChars = 0;
60 NumCharsLeidos = strlen( NumSTR );
61
62 if( *(NumSTR + NumCharsLeidos - 1) != '\n' )
63 {
64 puts( "Entrada ¡INVALIDA! por returno" );
65 while( getchar() != '\n' );
66 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
67 continue;
68 }
69 else
70 *(NumSTR + NumCharsLeidos - 1) = '\0';
71
72 for( i = 0; i < NumCharsLeidos -1; i++ )
73 if( ( *(NumSTR + i ) >= '0' && *(NumSTR + i ) <= '9' ) )
74 NumValidosChars++;
75
76 if( NumCharsLeidos == 1 || NumValidosChars != NumCharsLeidos - 1 )
77 {
78 puts( "\nEntrada ¡INVALIDA!" );
79 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
80 continue;
81 }
82
83 Dados = atoi( NumSTR );
84 if( Dados < 1 )
85 {
86 puts( "\nNúmero de dados ¡INVALIDA!" );
87 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
88 continue;
89 }
90
91 Tira = Tira_n_Dados( Dados, Lados );
92 printf( "Tiraste %d usando %d dados de %d lados.\n", Tira, Dados, Lados );
93 printf( "Ingreso el número de lados de los dados, 0 para terminar: " );
94 }
95 printf( "La función rollem() se usó %d veces.\n", ContarLosTiros );
96 puts( "¡Buen suerte!\n" );
97
98 return 0;
99 }
100
101 // Archivo Prog108b.c
102 #include "Prog108.h"
103 #include <stdio.h>
104 #include <stdlib.h> /* Prototipo para rand() */
105
106 int ContarLosTiros = 0;
107
108 static int rollem( int Lados )
109 {
110 int Tira;
111
112 Tira = rand() % Lados + 1;
113 ++ContarLosTiros; /* contar usos de función */
114 return Tira;
115 }
116
117 int Tira_n_Dados( int Dados, int Lados )
118 {
119 int d;
120 int total = 0;
121
122 for( d = 0; d < Dados; d++ )
123 total += rollem( Lados );
124
125 return total;
126 }
Resultado
[rrc@llawyr CClase]$ gcc -Wall -o Prog108 Prog108a.c Prog108b.c [rrc@llawyr CClase]$ ./Prog108 Ingreso el número de lados de los dados, 0 para terminar: 6 Cuantos dados? 2 Tiraste 5 usando 2 dados de 6 lados. Ingreso el número de lados de los dados, 0 para terminar: 6 Cuantos dados? 2 Tiraste 9 usando 2 dados de 6 lados. Ingreso el número de lados de los dados, 0 para terminar: 6 Cuantos dados? 2 Tiraste 3 usando 2 dados de 6 lados. Ingreso el número de lados de los dados, 0 para terminar: 6 Cuantos dados? 2 Tiraste 6 usando 2 dados de 6 lados. Ingreso el número de lados de los dados, 0 para terminar: 6 Cuantos dados? 2 Tiraste 12 usando 2 dados de 6 lados. Ingreso el número de lados de los dados, 0 para terminar: 0 La función rollem() se usó 10 veces. ¡Buen suerte! [rrc@llawyr CClase]$