Proyecto para todos ( MINI - PROYECTOS )

Responder
Mensaje
Autor
WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#61 Mensaje por WaRc3L » 20/08/2008 9:45 am

WaRc3L la funcion menu esta bien, pero la leer_opcion tendria que repetirse si la opcion no es valida, es decir , pedir la opcion hasta que sea valida


Lo corrigo con un momento ok? no lo tendra compilado, pero lo entrego ahora ( tengo que ir a un sitio dentro de poco ) . Bueno te lo hago:


leer_dato ( Corregido ) :

Código: Seleccionar todo


void leer_opcion(int *opcion)
{
    int Salir = 0;

    while ( Salir == 0 )
    {
    scanf("%d",opcion);

    if ( *opcion < 1 || *opcion > 5 )
    {
   printf("La opcion que escogio, no es correcta ( 1 - 5 )\n\n\a");
    }
    
    else
    {
      printf("\tOpcion Correcta\n\n");
      Salir = 1;
    }

    }
}
Corregido! creo que asi esta mejor!

Saludos! y perdon por equivocarme!
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

clavo
Mensajes: 30
Registrado: 13/08/2008 11:38 pm

#62 Mensaje por clavo » 20/08/2008 10:00 am

bueno aqui mi aportacion

interfaz:

Código: Seleccionar todo

double operando1,operando2;


void interfaz_division(double *operando1,double *operando2)
{
   printf("\n Introduzca el numero dividendo: ");
   scanf("%i", operando1);
   printf("\n Introduzca el numero divisor: ");
   scanf("%i", operando2);

  if ( *operando2 == 0 )
  {
        printf("Division incorrecta. No se puede dividir por 0");
  }

}

operacion de division:

Código: Seleccionar todo

double division( double operando1,double operando2)
{
    return operando1 / operando2;
} 
bueno me a ayudado WaRc3L porque nunca e trabajado con este tipo de datos (double, void) double porque aun no e tenido ocasion de probarlo pero con void casi siempre me suele dar problemas para compilar

bueno este codigo lo rellene para compilarlo y asi ver como queda pero me dio el siguiente error:
[linker error] undefined reference to `WinMain@16'
id returned 1 exit status
lo malo esque no me dice que parte del codigo esta mal.

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#63 Mensaje por WaRc3L » 20/08/2008 12:39 pm

ya ta!! ya se, creo que es porque no has puesto la funcion principal. Para poderlos llamar, prueva de hacer lo siguiente ( copia mi codigo y prueva )

Código: Seleccionar todo

#include <stdio,h>

// Declaracines de las funciones
void interfaz_division(double*operando1,double*operando2);

double division(double operando1,operando2);

// programa principal main()
int main(void)
{
   int a = 10;
   int b = 16.4;

   interfaz_division(&a,&b)
   division(a,b);
    return 0;
}

void interfaz_division(double *operando1,double *operando2)
{
   printf("\n Introduzca el numero dividendo: ");
   scanf("%i", operando1);
   printf("\n Introduzca el numero divisor: ");
   scanf("%i", operando2);

  if ( *operando2 == 0 )
  {
        printf("Division incorrecta. No se puede dividir por 0");
  }

} 

double division( double operando1,double operando2)
{
    return operando1 / operando2;
} 
Con el codigo de arriba te compilara, pero lo que has entregado ( las definiciones ) no lo he tocado, tu trabajo ya esta entregado y sin ningun error ( el error creo que era porque no havia la fucnion main )

Saludos, y perdona por no haverme enterado antes!
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

clavo
Mensajes: 30
Registrado: 13/08/2008 11:38 pm

#64 Mensaje por clavo » 20/08/2008 1:07 pm

tuve que hacer cambios para que me compilara pero aun sigue habieno un fallo que no se resolver:

Código: Seleccionar todo

#include <stdio.h>

// Declaracines de las funciones
void interfaz_division(double*operando1,double*operando2);

double division(double operando1,double operando2); // aqui tuve que poner double delante de operando2

// programa principal main()
int main(void)
{
   int a = 10;
   int b = 164; //aki tuve que quitar el punto

   interfaz_division(&a,&b);
   division(a,b);
    return 0;
}

void interfaz_division(double *operando1,double *operando2)
{
   printf("\n Introduzca el numero dividendo: ");
   scanf("%i", operando1);
   printf("\n Introduzca el numero divisor: ");
   scanf("%i", operando2);

  if ( *operando2 == 0 )
  {
        printf("Division incorrecta. No se puede dividir por 0");
  }

}

double division( double operando1,double operando2)
{
    return operando1 / operando2;
}
he tenido que cambiarlo un poco pero en la linea 15 me sigue dando un error:
in funcion`int main()':
cannot conveter `int*' to `double*' for argument`1' to `void interfaz_division (double*, double*)'
el dev c no da para mas

saludos

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#65 Mensaje por polly » 20/08/2008 1:16 pm

Buenas, estan casi todas las funciones, excepto las de nicolas_cof que no se ha pasado por aqui, ya la implemento yo su parte y mañana juntamos todas las partes

S2
enrmarc

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#66 Mensaje por polly » 21/08/2008 2:39 am

Pongo todo el programa junto:

Para una lectura mejor del codigo:
http://pastebin.com/m78bb36db

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void menu (void);
void leer_opcion (int *opcion);

void interfaz_suma	(double *op1, double *op2);
void interfaz_resta	(double *op1, double *op2);
void interfaz_multiplicacion	(double *op1, double *op2);
void interfaz_division	(double *op1, double *op2);

double suma	(double op1, double op2);
double resta	(double op1, double op2);
double multiplicacion	(double op1, double op2);
double division	(double op1, double op2);


int main()
{
		int opcion;
		double op1, op2;
		double resultado;

		menu();
		leer_opcion (&opcion);

		switch (opcion)
		{
				case 1:	
						interfaz_suma (&op1, &op2);
						resultado = suma (op1, op2);
						printf ("%3.2f + %3.2f = %3.2f \n", op1, op2, resultado);
						break;
				case 2:
						interfaz_resta (&op1, &op2);
						resultado = resta (op1, op2);
						printf ("%3.2f - %3.2f = %3.2f \n", op1, op2, resultado);
						break;
				case 3:
						interfaz_multiplicacion (&op1, &op2);
						resultado = multiplicacion (op1, op2);
						printf ("%3.2f x %3.2f = %3.2f \n", op1, op2, resultado);
						break;
				case 4:
						interfaz_division (&op1, &op2);
						resultado = division (op1, op2);
						printf ("%3.2f / %3.2f = %3.2f \n", op1, op2, resultado);
						break;
		}

		return 0;
}

void menu(void)
{
    printf("\t Que quiere hacer?\n\n");
    printf("\t 1.- Sumar\n");
    printf("\t 2.- Restar\n");
    printf("\t 3.- Multiplicar\n");
    printf("\t 4.- Dividir\n");
    printf("\t 5.- Salir\n\n");
    printf("\t Opcion: ");
} 


void leer_opcion(int *opcion)
{
    int Salir = 0;

    while ( Salir == 0 )
    {
    scanf("%d",opcion);

    if ( *opcion < 1 || *opcion > 5 )
    {
   printf("La opcion que escogio, no es correcta ( 1 - 5 )\n\n\a");
    }
   
    else
    {
      printf("\tOpcion Correcta\n\n");
      Salir = 1;
    }

    }
} 
void interfaz_resta (double *op1, double *op2)
{
      char operador1[16];
      int valido = 0;
      int i;


			puts  ("Introduzca el primer operando: ");
      while (!valido)
      {
            
            fgets (operador1, 16, stdin);
         
            for (i = 0; i < strlen(operador1) && !valido; i++)
            {
                  valido = isdigit(operador1[i]);
            }
      }

      *op1 = atof (operador1);

      valido = 0;
   
      while (!valido)
      {
            puts  ("Introduzca el segundo operando: ");
            fgets (operador1, 16, stdin);
         
            for (i = 0; i < strlen(operador1) && !valido; i++)
            {
                  valido = isdigit(operador1[i]);
            }
      }

      *op2 = atof (operador1);

            
} 

void interfaz_division(double *operando1,double *operando2)
{
   printf("\n Introduzca el numero dividendo: ");
   scanf("%i", operando1);
   printf("\n Introduzca el numero divisor: ");
   scanf("%i", operando2);

  if ( *operando2 == 0 )
  {
        printf("Division incorrecta. No se puede dividir por 0");
  }

}

void interfaz_suma (double *operando1, double *operando2)
{
   printf("\n[+] 1er operando: ");
   scanf("%lf",operando1);
   printf("                  +");
   fflush(stdin);
   printf("\n[+] 2do operando: ");
   scanf("%lf",operando2);
} 

void interfaz_multiplicacion (double *op1, double *op2)
{
		char operador1[16];
		int valido = 0;
		int i;

		puts  ("Introduzca el primer operando: ");	
		while (!valido)
		{
								fgets (operador1, 16, stdin);
			
				for (i = 0; i < strlen(operador1) && !valido; i++)
				{
						valido = isdigit(operador1[i]);
				}
		}

		*op1 = atof (operador1);

		valido = 0;
	
		while (!valido)
		{
				puts  ("Introduzca el segundo operando: ");
				fgets (operador1, 16, stdin);
			
				for (i = 0; i < strlen(operador1) && !valido; i++)
				{
						valido = isdigit(operador1[i]);
				}
		}

		*op2 = atof (operador1);

				
}


double multiplicacion (double op1, double op2)
{
		return op1 * op2;
}

double resta (double op1, double op2)
{
		return op1 - op2;
}


double suma(double operando1, double operando2)
{
   return operando1 + operando2;
} 

double division( double operando1,double operando2)
{
    return operando1 / operando2;
} 
He juntado el programa tal cual y compila, no he corregido errores aun.

Fallos

La interfaz dividir no recoge los numeros bien
La interfaz suma no vuelve a pedir los numeros en caso de fallo

Creo que eso es todo

S2[/code]
enrmarc

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#67 Mensaje por v4r3t » 21/08/2008 6:53 am

habría que pulir algún detalle más, y bueno, hacer una funcion tipo: es_valido(char *operando), que te devuelva 0 o 1 según si es válido o no. Lo digo por aquello de la redundancia y de no repetir código, aunque sean pocas funciones si nos da por ampliar el programa y pedir más números o hacer nuevas operaciones...pues se agranda la cosa.
-=v4r3t=-

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#68 Mensaje por WaRc3L » 21/08/2008 10:41 am

Como bien dice v4r3t, de reducir el codigo, ( no se si en codigo C se puede, pero seguro segurisimo que si ) es poner las definiciones y los prototipos y declaraciones en un otro fichero, para que el main sea muy poquito codigo ( las llamadas de las funciones ).

Saludos!
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#69 Mensaje por polly » 22/08/2008 11:08 am

Bueno, declarar prototipos de funciones es dificil ( queda claro que en un programa tan sencillo como la calculadora, el codigo es abundante) , haber si nos animamos a hacer algun otro proyecto de la lista (o cualquier otro)
enrmarc

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#70 Mensaje por WaRc3L » 22/08/2008 11:51 am

Buenas! yo he pensado hacer el ahorcado, es facil de hacer, y creo que tambien sera divertido, lo unico que no se son los prototipos, pero si que se hacer el dibujo:

Código: Seleccionar todo

+----+
|/   |
|    O
|   /|\
|   / \
+----+
Lo cogi de unos ejercicios que tengo que hacer, yo solo hacia tres dibujos diferentes. Uno para la cabeza, otro los los brazos y otro para las piernas, y por eso y hacia servir 3 prototipos... Pero me gustaria que el programa enseñe mas cosas y tengas mas opurtanidades en acertar, y asi la cosa se complica un poquito mas.

Podrian ser unas quantas referencias sobre los prototipos:

Dibujar el Ahorcado ( las diferentes partes en una funcion ) .
Saber si ha ganado.
Preguntar la palabra.
Comprovar la palabra.
Subir puntos.

Bueno, de momento solo se me ocurren esas referencias. Si alguien tiene una idea ( y que la diga, aunque sea dificil :wink: )

Saludos!
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#71 Mensaje por polly » 22/08/2008 1:36 pm

Me parece un buen 2º proyecto.

Me pensare un poco los prototipos pero no prometo nada
enrmarc

WaRc3L
Mensajes: 199
Registrado: 12/06/2008 12:27 pm
Ubicación: en el registro de la CPU

#72 Mensaje por WaRc3L » 23/08/2008 3:12 am

ok polly, yo tambien ire pensando algunos prototipos por hacer ok?

Saludos!
ToDos PoDeMoS CoMpaRTiR La Luz De La BoMBiTa!

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#73 Mensaje por polly » 23/08/2008 3:24 am

Tambien podriamos hacer competiciones, es decir cada uno que suba su programa del ahorcado.

Creo que seria mas sencillo y mas motivador, que opinais ??

La primera competicion, en caso de aprobarse, seria la del ahorcado


S2
enrmarc

Avatar de Usuario
v4r3t
Mensajes: 103
Registrado: 06/03/2007 12:00 am

#74 Mensaje por v4r3t » 23/08/2008 5:19 am

Veo bien lo de la competición y si consideráis oportuno poner algún tipo de condiciones o requerimientos mínimos que tiene que tener el programa así como las fecha de inicio y fin. Y quizá deberíamos abrir otro tema, este ya está muy quemado.
-=v4r3t=-

polly
Mensajes: 619
Registrado: 19/07/2007 3:42 pm
Ubicación: Valladolid (Spain)
Contactar:

#75 Mensaje por polly » 23/08/2008 5:22 am

Si mas gente se apunta a esto de las competiciones, habrimos otro post.

Como bien dice v4r3t faltaria poner condiciones:

-Fecha inicio
-Fecha fin
-Lenguajes aceptados
-Estandar o no
-...

S2
enrmarc

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado