elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con un programa en lenguaje C if , if else dentro de un if else
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un programa en lenguaje C if , if else dentro de un if else  (Leído 1,936 veces)
osnov

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con un programa en lenguaje C if , if else dentro de un if else
« en: 29 Septiembre 2012, 23:42 pm »

No entiendo por que el programa se salta unas indicaciones, en la parte donde hace la comparacion si es mayor a 365 siempre omite el ultimo else if (ROJO) aunque quede esta especificacion se la salta, creo q es un problema al ordenar los if pero no se como.


for(k=1;k<12;k++)
{

for(i=0;i<13;i++)
{

  if(contador>m[k] && contador<=m2[k])
 {contador=contador-m[k];
 printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A);}

else if(contador==m[k])
 {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A);}

else if(contador>365)
{ contador=contador-365;

 if(contador>=1 && contador<=31)
  {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,1,A+1);} [/color]

 else if (contador==m[k])
 {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A+1);}

 else if(contador>m[k] && contador<=m2[k])
   {contador=contador-m[k];
   printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A+1);}


       }
 
}}





« Última modificación: 29 Septiembre 2012, 23:46 pm por osnov » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con un programa en lenguaje C if , if else dentro de un if else
« Respuesta #1 en: 30 Septiembre 2012, 00:32 am »

He hecho diversas pruebas y si va el "elseif". Tal vez si pones más de código:
Código
  1. #include<stdio.h>
  2.  
  3. main()
  4. {
  5.    int i,k,A=0,m2[]={10,20,30,40,50,60,70,80,90,100,110,120,130},
  6.    m[]={0,10,20,30,40,50,60,70,80,90,100,110,120,},contador=465,Md=1;
  7.    for(k=1;k<12;k++)
  8.        {
  9.            for(i=0;i<13;i++)
  10.                {
  11.  
  12.                      if(contador>m[k] && contador<=m2[k])
  13.                     {contador=contador-m[k];
  14.                     printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A);}
  15.  
  16.                    else if(contador==m[k])
  17.                     {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A);}
  18.  
  19.                    else if(contador>365)
  20.                        { contador=contador-365;
  21.  
  22.                         if(contador>=1 && contador<=31)
  23.                          {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,1,A+1);}
  24.  
  25.                         else if (contador==m[k])
  26.                         {printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A+1);}
  27.  
  28.                         else if(contador>m[k] && contador<=m2[k])/*<==contador=465-365=10>m[2] y <m2[2k] ==>*/
  29.                           {contador=contador-m[k];
  30.                           printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A+1);}
  31.                        }
  32.                    }
  33.                }
  34. }
  35.  
Citar
Salida:
El disco de compresion 1 del motor 1 fallara el 10/10/0 por horas
Tal vez es que con tus valores no se alcance esa posibilidad.


En línea

osnov

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con un programa en lenguaje C if , if else dentro de un if else
« Respuesta #2 en: 30 Septiembre 2012, 01:29 am »

Gracias, pero es que si alcanza los valores pero los evalua con el primer if del ciclo for, y hace lo que esta indicado ahi, es que las comparaciones son las mismas y solo hace los del primero
En línea

overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
Re: Ayuda con un programa en lenguaje C if , if else dentro de un if else
« Respuesta #3 en: 30 Septiembre 2012, 01:42 am »

Me he fijado un poco y creo que se donde está el problema, la variable contador se inicializa con un valor 465 en el primer bucle cuando la variable que vale 12 empieza, se ejecuta otro bucle que empieza con valor 0, en la primera vuelta salta el primer else if y al tener valor mayor de 365 se ejecuta la primera asignación, contador = contador - 365 quedándose esta a 0, donde aquí es donde nosotros queremos comprobar el else if que da problemas y nos fijamos en una cosa.

En su primera vuelta:

Código
  1. if(contador>m[k] && contador==m2[k])

m[k] = 0
m2[k] = 10
contador = 0

Por tanto contador no es mayor que m[k] pero si menor o igual que m2[k], aquí está el problema. No se puede iniciar el condicional sin cumplir los 2 requisitos, eso nos indica el operador and cortocircuitado.

Por tanto la condición sería que se ejecutase al cumplirse una de las dos premisas.

Código
  1. if(contador>m[k] || contador==m2[k])



No conozco muy bien el objetivo de tu programa pero supongo que ese sería el fallo, suele pasar. Por otro lado te propongo mejorar la indentación es una manía personal y seguramente tu te aclares más de esa manera, pero siempre que hay problemas ayuda a indentificarlos, te dejo el code arreglado :).

Código
  1. #include<stdio.h>
  2. #include <iostream>
  3. using namespace std;
  4. int main(int argc,char* argv)
  5. {
  6.    int i,k,A=0,m2[]={10,20,30,40,50,60,70,80,90,100,110,120,130},
  7.    m[]={0,10,20,30,40,50,60,70,80,90,100,110,120,},contador=375,Md=1;
  8.    for(k=1;k<12;k++)
  9.    {
  10.        for(i=0;i<13;i++)
  11.        {
  12.            if(contador>m[k] && contador<=m2[k])
  13.            {
  14.                contador=contador-m[k];
  15.                printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A);
  16.            }
  17.            if(contador==m[k])
  18.            {
  19.                    printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A);
  20.            }
  21.  
  22.            if(contador>365)
  23.            {
  24.  
  25.                    contador = contador - 365;
  26.                    if(contador>=1 && contador<=31)
  27.                    {
  28.  
  29.                        printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,1,A+1);
  30.                    }
  31.                    if (contador==m[k])
  32.                    {
  33.  
  34.                        printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,1,k+1,A+1);
  35.                    }
  36.                    if(contador>m[k] || contador==m2[k])/*<==contador=465-365=10>m[2] y <m2[2k] ==>*/
  37.                    {
  38.                        contador=contador-m[k];
  39.                        printf("\nEl disco de compresion %i del motor %i fallara el %i/%i/%i por horas",i+1,Md,contador,k+1,A+1);
  40.                    }
  41.            }
  42.        }
  43.    }
  44.    return 0;
  45. }
« Última modificación: 30 Septiembre 2012, 01:47 am por overxfl0w13 » En línea

[/url]
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines