Dev - C++ - Solo aceptar decimales positivos

 
Vista:
sin imagen de perfil

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:
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Solo aceptar decimales positivos

Publicado por anonymous (4 intervenciones) el 23/03/2016 07:08:46
Ya lo resolví amigos sólo dividí el programa en módulos y usé variables de tipo double ya que con la función atof según leí sólo funciona para variables de este tipo, si alguien necesita del código o que le explique algo parecido con gusto lo haré, de antemano muchas gracias por su atención.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar