Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#861
Cita de: Zodiak98 en 17 Abril 2013, 23:54 PM
A qué se debe esto?

Porqué no trabaja con una y luego con otra?
Porque las constantes que utilizas en las dos llamadas:
Código (cpp) [Seleccionar]
holaxd(12.2, 12.2);
holaxd(24.2, 24.2);

Son de tipo double y eso resulta en dos llamadas a la misma funcion.

Para obtener el resultado que esperas debes utilizar como argumentos variables de tipo float o bien utilizar constantes con el sufijo 'F'. Por ejemplo:
Código (cpp) [Seleccionar]
holaxd(12.2, 12.2);
holaxd(24.2F, 24.2F);


Cita de: Zodiak98 en 17 Abril 2013, 23:54 PMOtra cosa en la sobrecarga de funciones el codigo debe ser siempre el mismo o puede variar?
Esta parte no la entendi, ¿Puedes explicarlo de una forma mas clara?

Un saludo
#862
Como ya te indico mr.blood en otro tema no es necesario pedir los datos dentro del cuerpo de cada condicional, en su lugar los colocas antes y te ahorras las repeticiones.

Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cctype>
using namespace std;

int main()
{
   char a;
   int uno;
   int dos;
   
   do {
      cout << "(S)Suma (R)Resta (M)Multiplicacion (D)Division: ";
      cin >> a;
      a = tolower(a);
   }while (a != 's' && a!= 'r' && a != 'm' && a != 'd');
   
   cout << "Ingresa un numero: ";
   cin >> uno;
   cout << "Ingresa otro numero: ";
   cin >> dos;
   
   if (a == 's')
      cout << "Suma = " << uno + dos << endl;
   else if (a == 'r')
      cout << "Resta = " << uno - dos << endl;
   else if (a == 'm')
      cout << "Multiplicacion = " << uno * dos << endl;
   else // a == 'd'
      cout << "Division = " << uno / dos << endl;
   
   return 0;
}


Un saludo
#863
Programación C/C++ / Re: Hola una duda
17 Abril 2013, 02:40 AM
El pseudocodigo es un lenguaje informal y las sustituciones que mencionas no se pueden abstraer. Ellas dependerán de la operación a realizar, por ejemplo para la entrada puedes utilizar:

* get si se trata de un carácter.
* el operador ">>" si se trata de una palabra
* getline si se trata de una linea de texto

Si te interesa el tema una descripción a detalle se encuentra en la pagina Wikipedia: Pseudocódigo.

Un saludo
#864
Cita de: do-while1 en 16 Abril 2013, 20:35 PM
cualquier cosa que escriba me arroja como resultado "4210716"
El programa dará el resultado esperado si realizas el cambio que ya te indicaron e introduces los datos correctamente.

El problema (error lógico) se debe a que al pedir los datos indicas que el separador es '/':
printf("Dame la primera fecha más reciente (dd/mm/aa):\n");
/* ... */
printf("Dame la segunda fecha (dd/mm/aa):\n");


Pero al utilizar scanf indicas que el separador es '*':
scanf("%d*%d*%d", &fechauno.dia , &fechauno.mes, &fechauno.year);
/* ... */
scanf("%d*%d*%d", &fechados.dia , &fechados.mes, &fechados.year);


Para explicarlo mejor:
Dame la primera fecha mas reciente (dd/mm/aa):
31*01*2010
Dame la segunda fecha (dd/mm/aa):
01*01*2010

Hay 30 dias entre las dos fechas insertadas.


Un saludo
#865
Cita de: sora_ori en 16 Abril 2013, 11:29 AMEl problema me surge en los If, Else de las estaciones que me da error cuando el usuario escribe el hemisferio.
En la llamada a scanf:
scanf("%d", hemis);
Te falta el operador "dirección de" (el '&').

Y deberías utilizar los operadores lógicos "&&" y "||" en lugar de los operadores a nivel de bits "&" y "|" ya que los primeros son mas eficientes y garantizan un orden de evaluación.

Un saludo
#866
Cita de: Ruben_efl18 en 16 Abril 2013, 01:29 AMquisiera añadirle una forma de regresar al inicio, y que lo haga atravez de un mensaje que diria:
"Quiere regresar al inicio s/n "
Basta con colocar todas las operaciones de tu programa dentro de un bucle do ... while. Al final de este pides confirmación y verificas el carácter introducido por el usuario.

Mas o menos asi:
Código (cpp) [Seleccionar]

#include <iostream>
using std::cin;
using std::cout;
// ...

int main()
{
   // Declaraciones
   char cont;
   
   do {
      // Menu
     
      // Operaciones
     
      cout << "Desea continuar (S/N): ";
      cin >> cont;
   }while (cont == 'S' || cont == 's');
   
   return 0;
}


Un saludo
#867
Programación C/C++ / Re: duda matrices c++
16 Abril 2013, 02:18 AM
Cita de: indict en 15 Abril 2013, 18:03 PM
Ahora bien, para calcular la nota media por asignaturas, he pensado de hacerlo de dos maneras
Un detalle con los tres fragmentos de código es que estos no calculan la media, solo obtienen los totales de la fila o columna.

Cita de: indict en 15 Abril 2013, 18:03 PMme gustaría que me dijerais si está bien de las dos maneras
La primera funcionara correctamente.

La segunda solo si se trata de una matriz cuadrada, esto es, si el numero de filas es igual al numero de columnas.

Si no es es el caso (por ejemplo una matriz de 100 alumnos con 5 asignaturas) utilizar el bucle con los indices cambiados no es valido (debido a un indice fuera de rango).

Un saludo
#868
Programación C/C++ / Re: Funciones !
15 Abril 2013, 04:58 AM
Los dos errores que mencionas se deben a que en esa función falta la llave de cierre del bucle do ... while:
int menu(void)
{
   int opc;

   printf("\t\t\tMENU");
   printf("\n\n1 para calculo de una funcion");
   printf("2 para calcular el area y perimetro de un triangulo");
   printf("3 para finalizar");
   
   do {
      printf("\nElija su opcion: ");
      scanf("%d",&opc);
     
      if (opc < 1 || opc > 3){
         printf("Opcion incorrecta. Ingresela de nuevo: ");
         getch();
      }
   /* } */ while(opc<1 || opc>3);
   
   return opc;
}


También hay otros errores, por ejemplo en la función principal:
void main()
{
   int opcion;
   float valorX,val_fun,angulo,ladoC,ladoA;
   
   do {
      switch(opcion) /* Proceso de la variable */
     
      /* ... */
         
   }while((opcion=menu())!=3); /* Lectura de la variable */
}

Primero procesas la opción mediante el switch y solo después lees el valor cuando debe ser al revés:
void main()
{
   int opcion;
   float valorX,val_fun,angulo,ladoC,ladoA;
   
   while ((opcion = menu()) != 3){ /* Lectura de la variable */
      switch(opcion) /* Proceso de la variable */
     
      /* ... */
         
   }
}


Cita de: ThronerAXE en 15 Abril 2013, 02:05 AMmuchos me han sugerido ya que no utilize la libreria conio.h por lo que no es standar, pero la profesora de la universidad lo evalua entonces debo utilizarla
Lo malo de esa biblioteca es que surgió con los compiladores Turbo C de Borland para MS-DOS. Como espero entenderás es algo ... viejo (o nostálgico, dependiendo de la perspectiva).

Un saludo
#869
Cita de: eLPortaFrases en 14 Abril 2013, 01:15 AMpero no se porque no me corren en mi programa ... solo me corre el primer ejercicio de OxDani .. pero el segundo de OxDani no me corre ni el primero de Leosansan ..
En el segundo programa de 0xDani falta incluir el encabezado <string.h>, este es necesario para tener acceso al prototipo de la función strcmp.

En el caso del programa de leosansan el problema se debe a que utiliza un array de arrays, ya que cada elemento solo puede contener una cadena de nueve caracteres no puede detectar "SEPTIEMBRE". Eso se soluciona cambiando la declaración de ese array a:

char aux[11], *mes[] = {
   "ENERO", "FEBRERO", "MARZO", "ABRIL",
   "MAYO", "JUNIO", "JULIO", "AGOSTO",
   "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"
};


También se debería limitar el numero de caracteres a almacenar en el array modificando la llamada a scanf:
scanf("%10s",aux);

Un saludo
#870
Para empezar las funciones para modulo y listar las tienes duplicadas, en el caso de la primera:
int mod(int equis1, int equis2, int equis3){ /*Funcion modulo*/
   float modulo;
   modulo = sqrt((equis1*equis1)+(equis2*equis2)+(equis3*equis3));
   return(modulo);
}

int mod1(int jota1, int jota2, int jota3){
   float modulo1;
   modulo1 = sqrt((jota1*jota1)+(jota2*jota2)+(jota3*jota3));
   return(modulo1);
}

Con una basta (elimina la otra).

----

El programa no funciona correctamente porque las variables que declaras en una función son locales a esta, ninguna otra función puede acceder a ellas.

Caso concreto: declaras variables como "equis1", "equis2", "equis3", etc. en la función main. Esas variables son distintas de las variables que declaras en la función "demostracion". El problema es que las variables en main si tienen un valor inicial mientras que este falta en "demostracion".

Para solucionarlo debes modificar la función "demostracion" para que acepte como argumentos el valor inicial de las siete variables, estas deben ser parámetros de la función.

Los cambios son:

1) Cambiar su declaración a:
void demostracion(
   int equis1, int equis2, int equis3,
   int jota1, int jota2, int jota3,
   int escalar1
);


2) Cambiar su definición a:
void demostracion(
   int equis1, int equis2, int equis3,
   int jota1, int jota2, int jota3,
   int escalar1
)
{
   int modulo, modulo1, resultado; /*Funcion demostracion*/

   suma(equis1,equis2,equis3,jota1,jota2,jota3);
   
   /* ... */
}


3) El caso ocho en la función main cambia a:
case 8:  /*Demostrar*/
   demostracion(1, 2, 3, 4, 5, 6, 2);
   break;


Un saludo