Curso de Programación en C/Prog57
Ir a la navegación
Ir a la búsqueda
Prog57
1 #include <stdio.h>
2 #include <stdbool.h>
3
4 int obten_int( void ); // Validar que ingreso es int
5 bool mal_limites( int inicia, int termina, int bajo, int alto );
6 double suma_cuadrados( int a, int b );
7
8 int main( void )
9 {
10 const int MIN = -1000;
11 const int MAX = +1000;
12 int inicio;
13 int termina;
14 double respuesta;
15
16 printf( "Este programa calcula la suma de los cuadrados de enteros\n"
17 "en un rango entre -1000 y +1000.\n"
18 "Entra los limites (0 en los dos limites para terminar)\n"
19 "Limite bajo: " );
20 inicio = obten_int();
21 printf( "Limite alto: " );
22 termina = obten_int();
23 while( inicio !=0 || termina != 0 )
24 {
25 if( mal_limites( inicio, termina, MIN, MAX ) )
26 printf( "Otra vez por favor.\n" );
27 else
28 {
29 respuesta = suma_cuadrados( inicio, termina );
30 printf( "La suma de los cuadrados de los enteros " );
31 printf( "entre %d y %d es %g\n", inicio, termina, respuesta );
32 }
33 printf( "Entra los limites (0 en los dos "
34 "para terminar)\n" );
35 printf( "limite bajo: " );
36 inicio = obten_int();
37 printf( "limite alto: " );
38 termina = obten_int();
39 }
40 printf( "Listo.\n" );
41
42 return 0;
43 }
44
45 int obten_int( void )
46 {
47 int ingreso;
48 char ch;
49
50 while( scanf( "%d", &ingreso ) != 1)
51 {
52 while( ( ch = getchar() ) != '\n' )
53 putchar( ch );
54 printf( " no es un entero.\nFavor entrar un " );
55 printf( "entero cómo 25, -178, o 3: " );
56 }
57
58 return ingreso;
59 }
60
61 double suma_cuadrados( int a, int b )
62 {
63 double total = 0;
64 int i;
65
66 for( i = a; i <= b; i++ )
67 total += i * i;
68
69 return total;
70 }
71
72 bool mal_limites( int inicio, int termina, int bajo, int alto )
73 {
74 bool no_bueno = false;
75
76 if( inicio > termina )
77 {
78 printf( "%d no es menor que %d.\n", inicio, termina );
79 no_bueno = true;
80 }
81
82 if( inicio < bajo || termina < bajo )
83 {
84 printf( "Valores deben ser >= %d.\n", bajo );
85 no_bueno = true;
86 }
87
88 if( inicio > alto || termina > alto )
89 {
90 printf( "Valores deben ser <= %d.\n", alto );
91 no_bueno = true;
92 }
93
94 return no_bueno;
95 }
Resultado
[rrc@Pridd CClase]$ gcc -Wall -O2 -o Prog57 Prog57.c [rrc@Pridd CClase]$ ./Prog57 Este programa calcula la suma de los cuadrados de enteros en un rango entre -1000 y +1000. Entra los limites (0 en los dos limites para terminar) Limite bajo: 4r limite alto: r no es un entero. Favor a entrar un entero cómo 25, -178, o 3: 999 La suma de los cuadrados de los enteros entre 4 y 999 es 3.32833e+08 Entra los limites (0 en los dos para terminar) limite bajo: 45 limite alto: 33 45 no es menor que 33. Otra vez por favor. Entra los limites (0 en los dos para terminar) limite bajo: 999 limite alto: 2000 Valores deben ser <= 1000. Otra ves por favor. Entra los limites (0 en los dos para terminar) limite bajo: -1200 limite alto: 3 Valores deben ser >= -1000. Otra vez por favor. Entra los limites (0 en los dos para terminar) limite bajo: 3 limite alto: 4 La suma de los cuadrados de los enteros entre 3 y 4 es 25 Entra los limites (0 en los dos para terminar) limite bajo: -3 limite alto: 3 La suma de los cuadrados de los enteros entre -3 y 3 es 28 Entra los limites (0 en los dos para terminar) limite bajo: 0 limite alto: 0 Listo. [rrc@Pridd CClase]$
Explicación
Linea 50. scanf() != 1: significa q ingreso no ha sido asignado pq el texto ingresado no coincide con un entero.