Diferencia entre revisiones de «Curso de Programación en C/Prog57»

De WikiCabal
Ir a la navegación Ir a la búsqueda
(Resultado)
 
(Sin diferencias)

Revisión actual del 21:25 2 may 2014

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.