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 - avesudra

#231
Cita de: Seazoux en  7 Abril 2013, 20:45 PM
Potar
Tartamudo

PD: Esto está distraído :xD
#234
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 20:23 PM
Cita de: rir3760 en  7 Abril 2013, 18:27 PM
Puedes evitarlo cambiando la llamada a scanf:
printf("Selecciona una opcio:\n");
scanf("%c",&opcio);

Por:
printf("Selecciona una opcio:\n");
scanf(" %c",&opcio);

Al utilizar " %c" el espacio le indica a la funcion que descarte todo espacio blanco, de forma similar a "%d", "%f", etc.

Un saludo
;-) ;-) ;-) ;-) desde luego por día me impresiona más lo que sabéis algunos por aquí.

¡Muchísimas gracias!
#235
Programación C/C++ / Re: Ayuda Struct
7 Abril 2013, 20:16 PM
Quizás es lo que tu dices rir3760 lo de la referencia circular.
En Pj.h
#include "IdObjeto.h"
#include "Includes.h"

En idObjeto.h
#include "Includes.h"
#include "Bounding.h"

En Bounding.h
#include "Includes.h"
#pragma once
#include "Pj.h"

Yo que tú metería en  Includes.h esto:
#include "Bounding.h"
#include "Pj.h"
#include "idObjeto.h"

Y dejaría a los demás con la cabecera Includes.h únicamente, prueba tu porque yo no tengo OpenGL instalado. Creo que es una referencia circular dado que bounding incluye a pj y pj incluye a idObjeto que incluye a pj y así sucesivamente ...
#236
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 16:49 PM
Cita de: 85 en  7 Abril 2013, 16:41 PM
qué citón que se mandó XD, por cierto que idioma es ese de kayron8, parece español pero no precisamente..

Saludos
Te respondo por kayron8 si no te importa.Es Catalán, se habla en Cataluña, comunidad autónoma de España y cuya capital es Barcelona.(la zona resaltada es la comunidad autónoma). Si eres Argentino o del otro lado del charco como aquí decimos, creo que es algo normal que no lo conozcas, a no ser que seas culé(aficionado al F.C Barcelona).
#237
Cita de: dato000 en 27 Marzo 2013, 22:03 PM
:xD :xD :xD :xD ;-) ;-) ;-) ;-) yo pense lo mismo, este tipo habla como al revés y como invertido dentro de un enigma rodeado de plutonio en un campo minado, seguro no se entiende ni el mismo  :silbar: :silbar:
Es como si se lo hubiese traducido Google Traductor  :laugh:
#238
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 15:27 PM
Ni idea, supongo que podrás sustituirlo por su valor simbólico pero es lo mismo osea que nada. Una sugerencia, no cites cuando los comentarios son tan largos  ;)
#239
Programación C/C++ / Re: Me tiene loco
7 Abril 2013, 14:16 PM
Cosas que comentarte:
- Al pasarle los parámetros a la función "operación" , éstos tienen que tener el mismo nombre que el que has puesto en el prototipo dado que tu    puedes pasarle cualquier variable del mismo tipo...Me refiero a esta línea:
operacion(n1, n2, oper, *resul, *error);
Donde:
-No están declaradas ni n1 ni n2 ni oper. Y resul no existe, es result.
- Al pasarle a la función un parámetro por referencia le tienes que pasar la dirección de memoria de la variable, con el operador &.Me refiero a la misma línea de antes quedando:
operacion(num1,num2,&result,&error);
Dado que el prototipo es un puntero y le tienes que pasar una dirección de memoria,  como por ejemplo result que es donde se va a guardar el resultado.
-En la función fact, vuelves a llamar a la misma función pero esta se llama fact no factorial  ;)
return n1*factorial(n1-1);
El código lo he corregido así por encima:#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//PROTOTIPS
void operacion(int n1, int n2, char oper, float *resul, int *error);
float fact(float n1);

//BLOC PRINCIPAL
int main()
{
   char opcio;
   int num1 = 0,num2 = 0,error;
   float result = 0;

   //Demanem 2 numeros a l'usuari
   printf("Introdueix el primer numero:\n");
   scanf("%d",&num1);

   printf("Introdueix el segon numero:\n");
   scanf("%d",&num2);
   /*Limpio stdin (el buffer de entrada) porque a mí no me funciona...
    *Las llaves son para marcar bloques,así la variable c no existirá despues de ese bloque.
    */
   {
       char c = 5;
       while( (c != EOF) && c != '\n')
       {
           c = getchar();
       }
   }
   //Mostrem el menú
   do
   {
       printf("+ --> SUMAR\n");
       printf("- --> RESTAR\n");
       printf("* --> MULTIPLICAR\n");
       printf("/ --> DIVIDIR\n");
       printf("^ --> POTENCIA\n");
       printf("! --> FACTORIAL\n");
       printf("s --> SALIR\n");

       //Usuari tria una opció
       printf("Selecciona una opcio:\n");

       scanf("%c",&opcio);
       //Cridem el procediment
       operacion(num1, num2, opcio, &result, &error);
       printf("%f\n",result);
       /* Esto tampoco me funciona a mí y tengo que poner dos getchar o limpiar el buffer de nuevo.*/
       {
           char c = 5;
           while( (c != EOF) && c != '\n')
           {
               c = getchar();
           }
       }
       getchar();

       system("cls");// "clear" en linux...
       //Condició de sortida de while
   }
   while(opcio!='s');

   system("pause");
   return 0;
}

//PROCEDIMENT
void operacion(int n1, int n2, char oper, float *resul, int *error)
{
   *error=1;
   switch(oper)
   {
   case '+':
       *resul=n1+n2;
       break;
   case '-':
       *resul=n1-n2;
       break;
   case '*':
       *resul=n1*n2;
       break;
   case '/':
       if(n2==0)*error=-1;
       else *resul=n1/n2;
       break;
   case '^':
       *resul=pow(n1,n2);
       break;
   case '!':
       if(n1==0 || n2==0)*error=-1;
       else
           printf("El factorial de n1 es: %lf\n",fact(n1));
       printf("\n");
       break;
   case 's':
       system("exit");
       break;
   default:
       printf("No has escollit una opcio correcta\n");
   }
}

//FUNCIÓ
float fact(float n1)
{
   if(n1==0 || n1==1)
       return 1;
   else
       return n1*fact(n1-1);
}

Lo de limpiar el buffer no es algo que me guste, lo veo chapucero, pero bueno...
Creo que el problema es que sigues sin tener soltura con las funciones,y entonces si ya te meten punteros... Una función la declaras:
int miFuncion(int miParametro1,int miParametro2);
Y después al llamarla puedes pasarle la variable que quieras siempre respetando que sea un entero! Así por ejemplo:
valorDeRetorno = miFuncion(1,2);
O :
valorDeRetorno = miFuncion(num1,num2);
En el caso del paso de parámetros por referencia, lo que se le pasa es la dirección de la variable en vez de copiar su valor, un programa de ejemplo vale más que mi palabras:
#include <stdio.h>

/*
* Se copian los valores en direcciones de memoria distintas.
* @param[in] miParametro1 Valor de una variable.
* @param[in] miParametro2 Valor de otra variable.
* @return    Multiplicación de miParámetro1 por miParametro2.
*/
int miFuncionNormal(int miParametro1,int miParametro2);
/*
* Se pasan las direcciones a esos valores.
* @param[in] miParametro1 Dirección de variable.
* @param[in] miParametro2 Dirección de otra variable.
* @return    Multiplicación de miParámetro1 por miParametro2.
*/
int miFuncionPorReferencia (int * miParametro1,int * miParametro2);
/*
* Las variables de los parámetros asumen la dirección de la variables pasadas.
* @param[in] miParametro1 Variable.
* @param[in] miParametro2 Variable.
* @return    Multiplicación de miParámetro1 por miParametro2.
*/
int miFuncionPorReferencia2(int &miParametro1,int &miParametro2);

int main(int argc, char *argv[])
{
   int miNumero1 = 1;
   int miNumero2 = 2;
   printf("Direccion de memoria de miNumero1: \t 0x%X \t Valor: %d\n",&miNumero1,miNumero1);
   printf("Direccion de memoria de miNumero2: \t 0x%X \t Valor: %d\n",&miNumero2,miNumero2);
   /*
    * Pasamos los valores.
    */
   miFuncionNormal(miNumero1,miNumero2);
   /*
    * Pasamos las direcciones de memoria.
    */
   miFuncionPorReferencia(&miNumero1,&miNumero2);
   /*
    * Pasamos las direcciones de memoria y se les hace el cast.
    */
   miFuncionPorReferencia2(miNumero1,miNumero2);
   return 0;
}
int miFuncionNormal(int miParametro1, int miParametro2)
{
   printf("\n\nDireccion de memoria de miParametro1: 0x%X \t Valor: %d\n",&miParametro1,miParametro1);
   printf("Direccion de memoria de miParametro2: 0x%X \t Valor: %d\n",&miParametro2,miParametro2);
   printf("Direcciones de memoria diferentes a las de miNumero, pero valores iguales.\n\n");
   return miParametro1 * miParametro2;
}
int miFuncionPorReferencia (int * miParametro1,int * miParametro2)
{
   printf("Direccion de memoria de miParametro1: 0x%X \t Valor: %d\n",miParametro1,*miParametro1);
   printf("Direccion de memoria de miParametro2: 0x%X \t Valor: %d\n",miParametro2,*miParametro2);
   printf("Direcciones de memoria iguales a las de miNumero, accediendo a los mismos valores obviamente.\n\n");
   /*
    *  Accediendo a los valores de las direcciones de memoria con el operador '*'.
    */
   return *miParametro1 * *miParametro2;
}
int miFuncionPorReferencia2(int &miParametro1,int &miParametro2)
{
   printf("\n\nDireccion de memoria de miParametro1: 0x%X \t Valor: %d\n",&miParametro1,miParametro1);
   printf("Direccion de memoria de miParametro2: 0x%X \t Valor: %d\n",&miParametro2,miParametro2);
   printf("Direcciones de memoria diferentes a las de miNumero, pero valores iguales.\n\n");
   return miParametro1 * miParametro2;
}

La función miFuncionPorReferencia2 no la tengo muy clara,se utilizarla pero no se explicarla resulta raro pero así es, a ver si alguno de aquí te lo puede explicar mejor.Ejecuta ese programa y mira detenidamente las salidas, te dejo mi salida por si no puedes o lo que sea:
Direccion de memoria de miNumero1: 0x1A9CBD38 Valor: 1
Direccion de memoria de miNumero2: 0x1A9CBD3C Valor: 2


Direccion de memoria de miParametro1: 0x1A9CBD0C Valor: 1
Direccion de memoria de miParametro2: 0x1A9CBD08 Valor: 2
Direcciones de memoria diferentes a las de miNumero, pero valores iguales.

Direccion de memoria de miParametro1: 0x1A9CBD38 Valor: 1
Direccion de memoria de miParametro2: 0x1A9CBD3C Valor: 2
Direcciones de memoria iguales a las de miNumero, accediendo a los mismos valores obviamente.



Direccion de memoria de miParametro1: 0x1A9CBD38 Valor: 1
Direccion de memoria de miParametro2: 0x1A9CBD3C Valor: 2
Direcciones de memoria diferentes a las de miNumero, pero valores iguales.
#240
¡Buena recopilación! No conocía de algunos y están bastante bien.

¡Muchas gracias!