Error con Operadores ternarios ?

Iniciado por Onigiri, 26 Abril 2013, 09:00 AM

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

Onigiri

Hola;
pues estoy practicando con operador ternario.
Y pues aún no logro descubrir cuales son mis errores.

Código (cpp) [Seleccionar]
#include <iostream.h>
#include <conio.h>
#define Td 500
#define Tn 800

main()
{  char t;
int  d,j,h;

     cout<<"\nIngresar Dia de Trabajo (1=Lunes; 2=Martes(..)) : "; cin>>d;

     do
     {
        cout<<"\nIngresar Turno (d/n) = "; cin>>t;
        cout<<"\nIngresar Horas de trabajo = "; cin>>h;

        j = ((d!=7&&t=='d') ? (h*Td) : (d==7&&t=='d') ? (h*(200+Td)) : (d!=7&&t=='n') ? (h*Tn) : (h*(300+Tn)); )

        cout<<"Jornal = "<<j;
     } while (d<0||d>7);

  getch();

}



Son las 3:00 A.M quizas es una tonteria pero de verdad no logro descubrir donde están mis errores.
//edit; no copie todo el codigo

diskontrol

A simple vista eso no debe ni compilar... si eso es lo que te falla revisa los errores que te da el compilador

Si no te refieres a errores de compilación indica al menos que pretendes hacer :-)
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI


Onigiri

El problema dice ésto.
Código (cpp) [Seleccionar]

      Los empleados de una fabrica trabajan en dos turnos, diurno y nocturno.
             Se desea calcular el jornal diario de acuerdo con los siguientes puntos:
              a) la tarifa de las horas diurnas es de 500 pesetas,
b) la tarifa de las horas nocturnas es de 800 pesetas,
c) caso de ser domingo, la tarifa se incrementara en 200 pesetas
                     el turno diurno y 300 pesetas el turno nocturno.
   
   





Si @x64Core ;
Y lo hago asi como esta.

Los errores que me salen son los siguientes por eso no encuentro el error.

Código (cpp) [Seleccionar]

Statement missing ;
(normalmente las condiciones else deben terminar en   ;
pero al ponerlas en casi todos los else me aparece Expression syntax, ahora solo le pongo en el último pero me aparece el statement missing)

Código (cpp) [Seleccionar]
'j' is assigned a value that is never used (esta si, no se porque si le he asumido j como valor int)




diskontrol

Cita de: Onigiri en 26 Abril 2013, 14:07 PM

Código (cpp) [Seleccionar]

Statement missing ;
(normalmente las condiciones else deben terminar en   ;
pero al ponerlas en casi todos los else me aparece expression syntax, ahora solo le pongo en el último pero me aparece el statement missing)


No estás usando elses...

te lo dejo más o menos funcional para que compares, aunque ahora que lo has editado está prácticamente bien

Código (cpp) [Seleccionar]

#include <iostream>
#define Td 500
#define Tn 800

int main () {
  char t;
  int d, h;

  std::cout << "\nIngresar Dia de Trabajo (1=Lunes; 2=Martes(..)) : ";
  std::cin >> d;

  do
    {
      std::cout << "\nIngresar Turno (d/n) = ";
      std::cin >> t;
      std::cout << "\nIngresar Horas de trabajo = ";
      std::cin >> h;

      std::
cout << "Jornal = " << ((d != 7 && t == 'd') ? (h * Td) : (d == 7 && t == 'd') ? (h * (200 + Td)) : (d != 7 && t == 'n') ? (h * Tn) : (h * (300 + Tn))) << std::endl;

    }
  while (d < 0 || d > 7);
  return 0;
}



Y revisa el do-while, no creo que haga lo que pretendes.

Saludos!
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI

Onigiri

Gracias por estar ayudandome diskontrol
tristemente me da un monton de errores (uso borland 5.03)

Lo edite un poco hasta esto;
pero igual siguen saliendo errores

Código (cpp) [Seleccionar]
#include <iostream>
    #define Td 500
    #define Tn 800
     
    int main ()
    {
     char t;
     int d, h;

     cout << "\nIngresar Dia de Trabajo (1=Lunes; 2=Martes(..)) : ";
     cin >> d;

     do
       {
         cout << "\nIngresar Turno (d/n) = ";
         cin >> t;
         cout << "\nIngresar Horas de trabajo = ";
         cin >> h;

         cout << "Jornal = "<< ((d != 7 && t == 'd') ? (h * Td) : (d == 7 && t == 'd') ? (h * (200 + Td)) : (d != 7 && t == 'n') ? (h * Tn) : (h * (300 + Tn)))

       } while(d<0);
       
     }



Lo errores que me da son:

Código (cpp) [Seleccionar]
Statement missing ; y me marca lo que hay en el while.
Código (cpp) [Seleccionar]
Code has no effect me marca lo mismo.
Código (cpp) [Seleccionar]
Do statement must have while me marca el ultimo corchete
Código (cpp) [Seleccionar]
Compound statement missing {

rir3760

* Cambia de compilador. Para recomendaciones utiliza el motor de búsqueda de los foros.

* Cuando utilizas el espacio de nombres estándar (std) debes indicarlo o, en el peor de los casos, utilizar la sentencia:
Código (cpp) [Seleccionar]
using namespace::std;
Antes de cualquier uso.

* En el calculo del jornal te falta el ';' para indicar el final de esa sentencia.

* La condición del bucle esta mal, esta es:
Código (cpp) [Seleccionar]
while (d < 0);
En buen cristiano se traduce a "mientras el día sea menor que cero". Debes cambiarlo para que se ejecute mientras el día sea valido (mayor o igual a 1 y menor o igual a 7):
Código (cpp) [Seleccionar]
while (d >= 1 && dia <= 7);

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Onigiri

Gracias por responder!;
la cuestion es que pese a las modificaciones aun no he podido hacer que funcione.

Por cierto el " ; " siempre va en la úlmo lugar cierto?
o sea solo aqui

Código (cpp) [Seleccionar]
cout<<"Jornal = "<<((d!=7&&t =='d')?(h*Td):(d==7&&t=='d')?(h*(200+Td)):(d!=7&&t=='n')?(h*Tn):(h*(300 + Tn))    :huh:  ;  :huh: )

Estoy practicando estas operaciones
porque quiero aprenderlas.
Tengo un folleto pero solo explica en condiciones cortas como:
Código (cpp) [Seleccionar]
a = (b>a ? 2.0 : 12;)

Por eso aun no estoy segura de aquello

rir3760

Cita de: Onigiri en 26 Abril 2013, 17:06 PMla cuestion es que pese a las modificaciones aun no he podido hacer que funcione.
Cuando eso suceda publica el código fuente completo y actualizado, si no lo haces no es posible solucionar el problema.

Cita de: Onigiri en 26 Abril 2013, 17:06 PMPor cierto el " ; " siempre va en la úlmo lugar cierto?
Correcto. El carácter ';' indica el final de una sentencia en los lenguajes C y C++.

En cuanto al programa con los cambios que te indique funciona correctamente:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace::std;

#define Td 500
#define Tn 800

int main()
{
   char t;
   char cont;
   int d, h;
   
   do {
      cout << "Ingresar Dia de Trabajo (1=Lunes; 2=Martes(..)) : ";
      cin >> d;
     
      cout << "Ingresar Turno (d/n) = ";
      cin >> t;
     
      cout << "Ingresar Horas de trabajo = ";
      cin >> h;
     
      cout << "Jornal = " << ((d != 7 && t == 'd') ? (h * Td) : (d == 7 && t == 'd') ? (h * (200 + Td)) : (d != 7 && t == 'n') ? (h * Tn) : (h * (300 + Tn)));
      cout << endl << endl;
     
      cout << "Continuar? (S/N)";
      cin >> cont;
   }while (cont == 's' || cont == 'S');
   
   return 0;
}


De nuevo si continúan los problemas debes indicar cuales son.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Luz Violeta

1) Cambiame iostream.h por iostream (como corresponde)
2) Evitá conio como la plaga.
3) Siempre posteá la salida del compilador. Ejemplo:

% clang++ code.cxx
In file included from code.cxx:1:
In file included from /usr/include/c++/4.2/backward/iostream.h:31:
/usr/include/c++/4.2/backward/backward_warning.h:32:2: warning: This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++
      standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
      [-W#warnings]
#warning This file includes at least one deprecated or antiquated header. \
^
code.cxx:5:5: error: C++ requires a type specifier for all declarations
    main()
    ^~~~
code.cxx:16:115: error: expected ')'
             j = ((d!=7&&t=='d') ? (h*Td) : (d==7&&t=='d') ? (h*(200+Td)) : (d!=7&&t=='n') ? (h*Tn) : (h*(300+Tn)); )
                                                                                                                  ^
code.cxx:16:18: note: to match this '('
             j = ((d!=7&&t=='d') ? (h*Td) : (d==7&&t=='d') ? (h*(200+Td)) : (d!=7&&t=='n') ? (h*Tn) : (h*(300+Tn)); )
                 ^
code.cxx:16:117: error: expected expression
             j = ((d!=7&&t=='d') ? (h*Td) : (d==7&&t=='d') ? (h*(200+Td)) : (d!=7&&t=='n') ? (h*Tn) : (h*(300+Tn)); )
                                                                                                                    ^
1 warning and 3 errors generated.


4) No abusar el "using namespace", usar "using" o mejor usarlo en un ámbito local ... para algo están los namespaces, piensen un poco // en este caso se perdona, es un código de un ejercicio chiquitito.
5) No anides operadores ternarios de esa manera tan horrenda ...expandí de esta manera:

(condition) ? (if_true) : (if_false)


if (condition)
    if_true;
else
    if_false;
// [etc]



Saludos.
It's sort of like my past is an unfinished painting. And as the artist of that painting, I must fill in all the ugly holes and make it beautiful again.