Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con mi programa

Estas en el tema de Problema con mi programa en el foro de C/C++ en Foros del Web. Hola, estoy empezando en el lenguaje c pero como ya me se un poco mas el lenguaje python he intentado hacer un programa para hacer ...
  #1 (permalink)  
Antiguo 10/01/2013, 03:09
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Problema con mi programa

Hola, estoy empezando en el lenguaje c pero como ya me se un poco mas el lenguaje python he intentado hacer un programa para hacer de faciles a facilicimo pero cuando quiero poner datos desde pantalla me da errores
puedo poner valores en a y en b pero no puedo escoger una funcion desde pantalla,
he intentado mucho y seguire intentando pero si me ayudais os lo agradecedia
(el programa es para calcular densidad poblacion, taxas de natalidad, mortalidad, mortalidad infantil,etc).
el codigo es:
#include<stdio.h>

double DP(double poblacio_total, double superficie){
double DP;
DP=poblacio_total/superficie;
return DP;
}

double TN(double naixements,double poblacio_total){
double TN;
TN=(naixements/poblacio_total)*1000;
return TN;
}

double TM(double morts, double poblacio_total){
double TM;
TM=(morts/poblacio_total)*1000;
return TM;
}

double TMI(double morts_menors_1_any,double morts){
double TMI;
TMI=(morts_menors_1_any/morts)*1000;
return TMI;
}

double CV(double naixements,double morts){
double CV;
CV=naixements-morts;
return CV;
}

int main(void){
double a=0,b=0,resultado=0;//a=(nº)b=(nº).
printf("Valor1: ");
scanf("%g",&a);
printf("\nValor2: ");
scanf("%g",&b);
printf("DP, TN, TM, TMI o CV?");
scanf("%s",&resultado);//resultado=escrivir DP,TN,TM,TMI o CV y (a,b) dejar tal i como esta.//resultado=x(a,b); anterior
if (resultado=="DP"){
resultado=DP(a,b);
}
if (resultado=="TN"||"TM"){
resultado=TN(a,b);
}
if (resultado=="TMI"){
resultado=TMI(a,b);
}
if (resultado=="CV"){
resultado=CV(a,b);
}
if (resultado!="DP"||"TN"||"TM"||"TMI"||"CV"){
printf("ERROR");
}
printf("%g",resultado);
return 0;
}

y me marca error en los if.
Muchisimas gracias por la ayuda XD
  #2 (permalink)  
Antiguo 10/01/2013, 06:53
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años, 7 meses
Puntos: 8
Respuesta: Problema con mi programa

Perdona, pero se nota que vienes de Python xP

Declaraste resultado como double, y con scanf lo usas como string, al igual que en los if's...

Te aconsejo, o hacer esto:

declarar la variable "opcion" de tipo int.

Código C:
Ver original
  1. printf("1 - DP, 2 - TN,  3 - TM,  4 -TMI, 5 - CV: ");
  2. scanf(%d, &opcion);
  3.  
  4. if(opcion == 1) // DP
  5. { ...}

O usas un switch:

Código C:
Ver original
  1. switch(opcion)
  2. {
  3.    case 1:
  4.       ...
  5.        break;
  6.    case 2:
  7.       ...
  8.       break;
  9. }

Recuerda siempre usar tipos que tengan valor entero en las condiciones. Saludos.
  #3 (permalink)  
Antiguo 11/01/2013, 01:49
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con mi programa

muchissimas gracias, ahora lo tengo de esta forma:
Cita:
#include<stdio.h>

double DP(double poblacio_total, double superficie){
double DP;
DP=poblacio_total/superficie;
return DP;
}

double TN(double naixements,double poblacio_total){
double TN;
TN=(naixements/poblacio_total)*1000;
return TN;
}

double TM(double morts, double poblacio_total){
double TM;
TM=(morts/poblacio_total)*1000;
return TM;
}

double TMI(double morts_menors_1_any,double morts){
double TMI;
TMI=(morts_menors_1_any/morts)*1000;
return TMI;
}

double CV(double naixements,double morts){
double CV;
CV=naixements-morts;
return CV;
}

int main(void){
double a=0,b=0,resultado=0;//a=(nº)b=(nº).
int opcion;
printf("Valor1: ");
scanf("%g",&a);
printf("\nValor2: ");
scanf("%g",&b);
printf("\n1=DP, 2=TN, 3=TM, 4=TMI o 5=CV?");
scanf("%d",&opcion);//resultado=escrivir DP,TN,TM,TMI o CV y (a,b) dejar tal i como esta.//resultado=x(a,b); anterior
if (opcion == 1){
resultado=DP(a,b);
}

if (opcion == 2||3){
resultado=TN(a,b);
}

if (opcion == 4){
resultado=TMI(a,b);
}

if (opcion == 5){
resultado=CV(a,b);
}

while (opcion != 1||2||3||4||5){
printf("ERROR\n");
printf("\n1=DP, 2=TN, 3=TM, 4=TMI o 5=CV?");
scanf("%d",&opcion);
}

printf("%g",resultado);
return 0;
}
y no tengo errores en el codigo pero no me da ningun resultado y se encaia en el ciclo while
"!=" es = a: "si esto no pasa...". verdad?
  #4 (permalink)  
Antiguo 11/01/2013, 04:14
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Problema con mi programa

En las comparaciones, no puedes poner, por ejemplo,

if (opcion == 2||3)

(en la que entiendo que lo que quieres es comprobar si opcion es igual a 2 ó opcion es igual a 3). Debes poner una comparación para cada valor:

if ( (opcion == 2) || (opcion == 3) )

y lo mismo ocurre con la condición del bucle while.

Para este caso, deberías utilizar la sentencia switch:

Código C:
Ver original
  1. switch (opcion)
  2. {
  3.     case 1:
  4.         ...
  5.         break;
  6.     case 2:
  7.     case 3:
  8.         ...
  9.         break;
  10.     case 4:
  11.         ...
  12.         break;
  13.     case 5:
  14.         ...
  15.         break;
  16.     default:
  17.         ...
  18.         break;
  19. }

(case 2 y case 3 van juntos porque hacen lo mismo).

Saludos,
  #5 (permalink)  
Antiguo 11/01/2013, 09:51
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con mi programa

muchisimas gracias, al final lo dejo sin el while y tampoco el switch, que por haber empezado hace tan poco y tener la edad que tengo (14 años) creo que ya esta bien
#include<stdio.h>

double DP(double poblacio_total, double superficie){
double DP;
DP=poblacio_total/superficie;
return DP;
}

double TN(double naixements,double poblacio_total){
double TN;
TN=(naixements/poblacio_total)*1000;
return TN;
}

double TM(double morts, double poblacio_total){
double TM;
TM=(morts/poblacio_total)*1000;
return TM;
}

double TMI(double morts_menors_1_any,double morts){
double TMI;
TMI=(morts_menors_1_any/morts)*1000;
return TMI;
}

double CV(double naixements,double morts){
double CV;
CV=naixements-morts;
return CV;
}

int main(void){
double a=0,b=0,resultado=0;//a=(nº)b=(nº).
int opcion;
printf("Valor1: ");
scanf("%g",&a);
printf("\nValor2: ");
scanf("%g",&b);
printf("\n1=DP, 2=TN, 3=TM, 4=TMI o 5=CV?");
scanf("%d",&opcion);//resultado=escrivir DP,TN,TM,TMI o CV y (a,b) dejar tal i como esta.//resultado=x(a,b); anterior
if (opcion==1){
resultado=DP(a,b);
}

if (opcion==2){
resultado=TN(a,b);
}
if (opcion==3){
resultado=TM(a,b);
}

if (opcion==4){
resultado=TMI(a,b);
}

if (opcion==5){
resultado=CV(a,b);
}


printf("%g\n",resultado);
system("pause");
return 0;
}

ya lo mejorare otro dia
  #6 (permalink)  
Antiguo 14/01/2013, 08:02
 
Fecha de Ingreso: enero-2013
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta Otro Problema con mi programa

Sigue el problema pero ahora no se donde esta, todo esta bien, pongo los datos, pongo la opcion pero cuando me ha de dar el resultado, no me lo da correcto.
Por ejemplo:
1-
Valor1: 12
Valor2: 12
Opcion: 1
Resultado: 1
en este caso correcto
2-
V1:12
V2:4
O:1
R:1,01163
Mal, Con la opcion 1: V1/V2 y todos sabemos que en decimal 12/4=3
3-
V1:12.3 (las comas se escriben con puntos, no con comas)
V2:3
O:1
R:1,01586
Mal

El codigo sigue siendo igual con micro variaciones (un par de printf):
#include<stdio.h>

double DP(double poblacio_total, double superficie){
double DP;
DP=poblacio_total/superficie;
return DP;
}

double TN(double naixements,double poblacio_total){
double TN;
TN=(naixements/poblacio_total)*1000;
return TN;
}

double TM(double morts, double poblacio_total){
double TM;
TM=(morts/poblacio_total)*1000;
return TM;
}

double TMI(double morts_menors_1_any,double morts){
double TMI;
TMI=(morts_menors_1_any/morts)*1000;
return TMI;
}

double CV(double naixements,double morts){
double CV;
CV=naixements-morts;
return CV;
}

int main(void){
double a=0,b=0,resultado=0;//a=(nº)b=(nº).
int opcion;
printf("Valor1(les comes es fan amb punts. EX. 12.3): \n");
scanf("%g",&a);
printf("\nValor2(les comes es fan amb punts. EX. 12.3): \n");
scanf("%g",&b);
printf("\n1=DP, 2=TN, 3=TM, 4=TMI o 5=CV?\n");
printf("escoje la opcion con los numeros (1,2,3,4 o 5)\n");
scanf("%d",&opcion);//resultado=escrivir DP,TN,TM,TMI o CV y (a,b) dejar tal i como esta.//resultado=x(a,b); anterior
if (opcion==1){
resultado=DP(a,b);
}

if (opcion==2){
resultado=TN(a,b);
}
if (opcion==3){
resultado=TM(a,b);
}

if (opcion==4){
resultado=TMI(a,b);
}

if (opcion==5){
resultado=CV(a,b);
}
printf("%g\n",resultado);
printf("Programa hecho por I***** N******** M****\n");
system("pause");
return 0;
}

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:22.