Ayuda con un programa en lenguaje C if , if else dentro de un if else

Iniciado por osnov, 29 Septiembre 2012, 23:42 PM

0 Miembros y 1 Visitante están viendo este tema.

osnov

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);}


      }

}}




leosansan

He hecho diversas pruebas y si va el "elseif". Tal vez si pones más de código:
#include<stdio.h>

main()
{
    int i,k,A=0,m2[]={10,20,30,40,50,60,70,80,90,100,110,120,130},
    m[]={0,10,20,30,40,50,60,70,80,90,100,110,120,},contador=465,Md=1;
    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);}

                         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=465-365=10>m[2] y <m2[2k] ==>*/
                           {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);}
                        }
                    }
                }
}

CitarSalida:
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.

osnov

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

overxfl0w13

#3
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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]
#include<stdio.h>
#include <iostream>
using namespace std;
int main(int argc,char* argv)
{
   int i,k,A=0,m2[]={10,20,30,40,50,60,70,80,90,100,110,120,130},
   m[]={0,10,20,30,40,50,60,70,80,90,100,110,120,},contador=375,Md=1;
   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);
           }
           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);
           }

           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);
                   }
                   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);
                   }
                   if(contador>m[k] || contador==m2[k])/*<==contador=465-365=10>m[2] y <m2[2k] ==>*/
                   {
                       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);
                   }
           }
       }
   }
   return 0;
}
[/url]