Solo aceptar decimales positivos
Publicado por anonymous (4 intervenciones) el 15/03/2016 21:19:54
Hola que tal comunidad de programadores, un cordial saludo a todos, solicito nuevamente de su ayuda con un ejercicio en lenguaje c, tengo los siguientes programas que hice, el primero es un programa sencillo para calcular el volumen de una cisterna así como su tiempo de llenado y su capacidad en litros utilizando parámetros por referencia y el segundo programa sirve para aceptar sólo numeros decimales positivos sin que intervenga ningun caracter especial o letra:
Primer programa:
Segundo programa:
El problema es que necesito juntar ambos programas es decir validar sólo los decimales para el programa de la cisterna pero al hacerlo no me da los cálculos correctos, además el programa necesita pedir nuevamente el número en caso de que la entrada no sea correcta pero al meterle un while(true) utilizando una constante "#define true 1" antes del if logro hacer que se cicle pero al darle un número válido me vuelve a pedir el número y no termina el ciclo, además es forzoso utilizar parámetros por referencia, no se si me explique.
De antemano gracias nuevamente por su atención y por ayudarme en ocasiones anteriores.
Saludos!!!
Primer programa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
void multiplica(float x, float y, float z, float *litros){
*litros = x * y * z * 1000;
}
void divide(float *bomba, float *litros, float *tiempo){
*bomba;
*tiempo = *litros / *bomba;
}
void vol(float x, float y, float z, float *volumen){
*volumen = x * y* z;
}
main(){
float x, y, z, litros, tiempo, volumen, bomba;
printf("*PROGRAMA QUE CALCULA LA CAPACIDAD DE UNA CISTERNA EN LITROS Y EL TIEMPO DE LLENADO EN MINUTOS*");
printf("\n\nIntroduce el ancho de la cisterna en metros: ");
scanf("%f", &x);
printf("Introduce el largo de la cisterna en metros: ");
scanf("%f", &y);
printf("Introduce la profundidad de la cisterna en metros: ");
scanf("%f", &z);
printf("Introduce la capacidad de llenado de la bomba en litros por minuto: ");
scanf("%f", &bomba);
multiplica(x,y,z,&litros);
divide(&bomba,&litros,&tiempo);
vol(x,y,z,&volumen);
printf("\nEl volumen de la cisterna es de: %.2f metros\n", volumen);
printf("La cantidad de litros son: %.2f\n", litros);
printf("La cantidad de tiempo para llenarse es: %.2f minutos", tiempo);
return 0;
}
Segundo programa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int es_decimal(char *cadena)
{
int i, valor;
int tiene_punto = 0;
for(i=0; i < strlen(cadena); i++)
{
valor = cadena[ i ] - '0';
if(valor < 0 || valor > 9)
{
if(valor==-2 && !tiene_punto)
{
tiene_punto=1;
continue;
}
return 0;
}
}
return 1;
}
void main()
{
char cadena[ 6 ];
printf("Introduce un numero: ");
gets(cadena);
if(es_decimal(cadena))
printf("Es decimal, valor: %lf", atof(cadena));
else
printf("No es un numero");
}
El problema es que necesito juntar ambos programas es decir validar sólo los decimales para el programa de la cisterna pero al hacerlo no me da los cálculos correctos, además el programa necesita pedir nuevamente el número en caso de que la entrada no sea correcta pero al meterle un while(true) utilizando una constante "#define true 1" antes del if logro hacer que se cicle pero al darle un número válido me vuelve a pedir el número y no termina el ciclo, además es forzoso utilizar parámetros por referencia, no se si me explique.
De antemano gracias nuevamente por su atención y por ayudarme en ocasiones anteriores.
Saludos!!!
Valora esta pregunta
0