[Curso] Introducción a la programación en C (VI)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por ~Rdavid~ »

Entonces porque no usas Dev c++ , según recuerdo eso formateaba automáticamente.
Imagen

Avatar de Usuario
jon_17_
Enteradillo
Enteradillo
Mensajes: 76
Registrado: 10 Jul 2010, 05:04
Contactar:

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por jon_17_ »

ese es el que tengo (Dev c++) y no veo que formatea automaticamente a menos q haiga que activar esa funcion, nose.
"Cada Dia Sere mejor Q El dia Anterior" Esa es mi meta, Aunq Q Tenga k Superarlos a Todos.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por m0skit0 »

Dev-C++ formatea automáticamente por defecto.

Y es "haya", no "haiga".
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por Dark Pallacus »

Hola! Hay alguien ahí? XD

Primer ejercicio: Crear un juego para adivinar el número que ha pensado el otro jugador.
Pues me lo he currado y funciona DPM, el problema que tengo es al introducir el nombre de los jugadores (Al ejecutarlo me da "violación de segmento" :S) y la verdad es que estoy bastante perdido. :(
Spoiler:

Código: Seleccionar todo

//Incluimos las librerias requeridas
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
   char *usuario_1, *usuario_2;
   int ronda , clave_secreta, respuesta;
// Preguntamos como se llaman los jugadores:
   printf("\nIntroduce el nombre del jugador 1: ");
   scanf("%s", usuario_1);
   printf("\nIntroduce el nombre del jugador 2: ");
   scanf("%s", usuario_2);


// Pedimos un número al usuario 1
   printf("%s introduce tu clave secreta: ", usuario_1);
   scanf("%d", &clave_secreta);
   printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

      while (ronda<=2)
      {
      ronda = ronda + 1;
      printf("\nRonda %d.", ronda);
      printf("%s, cual crees que es la clave secreta de %s? ", usuario_2, usuario_1);
      scanf("%d", &respuesta);
      if(respuesta==clave_secreta)
         ronda = ronda + 5;
      if(respuesta>clave_secreta)
         printf("Tas pasao!\n");
      if(respuesta<clave_secreta)
         printf("Te has quedado corto.\n");
      }

   if(respuesta == clave_secreta)
   printf("\nFelicidades %s has acertado la clave secreta de %s.\n Eres un listillo!\n\n", usuario_2, usuario_1);
   if(respuesta != clave_secreta)
   printf("\nLo siento %s no has conseguido descifrar la clave secreta de %s.\n Eres un fracasado.\n\n", usuario_2, usuario_1);
}

Segundo ejercicio: Hacer un programa que nos diga cual de los dos es mayor.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, int *argv[])
{
   int primer_numero, segundo_numero;
   printf("\n Introduce un numero entero: ");
   scanf("%d", &primer_numero);
   printf("\n Introduce otro numero entero: ");
   scanf("%d", &segundo_numero);

   if(primer_numero > segundo_numero)
   printf("\n\n %d es mayor que %d", primer_numero, segundo_numero);
   else if(primer_numero < segundo_numero)
   printf("\n\n %d es menor que %d", primer_numero, segundo_numero);
   else
   printf("\n\n No te has dado cuenta que %d es igual que %d?", primer_numero, segundo_numero);

   printf("\n\n");
}

Tercer ejercicio: Lo mismo pero calculando el cuadrado primero.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, int *argv[])
{
   int primer_numero, segundo_numero, cuadrado_1, cuadrado_2;
   printf("\n Introduce un numero entero: ");
   scanf("%d", &primer_numero);
   printf("\n Introduce otro numero entero: ");
   scanf("%d", &segundo_numero);

   cuadrado_1 = primer_numero * primer_numero;
   cuadrado_2 = segundo_numero * segundo_numero;

   if(cuadrado_1 > cuadrado_2)
   printf("\n\n El cuadrado de %d es mayor que el cuadrado de %d", primer_numero, segundo_numero);
   else if(cuadrado_1 < cuadrado_2)
   printf("\n\n El cuadrado de %d es mayor que el cuadrado de %d", segundo_numero, primer_numero);
   else
   printf("\n\n No sabias que el cuadrado de %d es igual que el cuadrado de %d?", primer_numero, segundo_numero);

   printf("\n\n");
}

Y cuarto ejercicio: Crear un programa que sepa si un numero es par o no.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{

   int numero_introducido;

   printf("\n Por favor, introduce un número: ");
   scanf("%d", &numero_introducido);

   if ( numero_introducido % 2 == 0)
   printf("\n %d es par.\n\n", numero_introducido);
   else
   printf("\n %d es impar.\n\n", numero_introducido);
   
}
PS3 - PSP 2000

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por ~Rdavid~ »

Dark Pallacus escribió:Hola! Hay alguien ahí? XD

Primer ejercicio: Crear un juego para adivinar el número que ha pensado el otro jugador.
Pues me lo he currado y funciona DPM, el problema que tengo es al introducir el nombre de los jugadores (Al ejecutarlo me da "violación de segmento" :S) y la verdad es que estoy bastante perdido. :(
Spoiler:

Código: Seleccionar todo

//Incluimos las librerias requeridas
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
   char *usuario_1, *usuario_2;
   int ronda , clave_secreta, respuesta;
// Preguntamos como se llaman los jugadores:
   printf("\nIntroduce el nombre del jugador 1: ");
   scanf("%s", usuario_1);
   printf("\nIntroduce el nombre del jugador 2: ");
   scanf("%s", usuario_2);


// Pedimos un número al usuario 1
   printf("%s introduce tu clave secreta: ", usuario_1);
   scanf("%d", &clave_secreta);
   printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

      while (ronda<=2)
      {
      ronda = ronda + 1;
      printf("\nRonda %d.", ronda);
      printf("%s, cual crees que es la clave secreta de %s? ", usuario_2, usuario_1);
      scanf("%d", &respuesta);
      if(respuesta==clave_secreta)
         ronda = ronda + 5;
      if(respuesta>clave_secreta)
         printf("Tas pasao!\n");
      if(respuesta<clave_secreta)
         printf("Te has quedado corto.\n");
      }

   if(respuesta == clave_secreta)
   printf("\nFelicidades %s has acertado la clave secreta de %s.\n Eres un listillo!\n\n", usuario_2, usuario_1);
   if(respuesta != clave_secreta)
   printf("\nLo siento %s no has conseguido descifrar la clave secreta de %s.\n Eres un fracasado.\n\n", usuario_2, usuario_1);
}


Bueno lo he visto por encima y vi que no pusiste el maximo de caracteres de los nombre, por ejemplo has: char usuario_1[20], usuario_2[20];

Código: Seleccionar todo

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");


system("clear"); ;) y pon stdlib.h en las librerías (creo que es necesaria)
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por Dark Pallacus »

system clear es legal? Lo digo porque luego el profe se mosquea porque lo hace menos compatible... ;)

Y: Es necesario establecer un límite para las variables de texto?

Voy a ir implementando las mejoras.

EDITO:

Ya está, mi primer juego XD XD XD. Hasta me parece adictivo :juasjuas:
Spoiler:

Código: Seleccionar todo

//Incluimos las librerias requeridas
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
   char usuario_1[20], usuario_2[20];
   int ronda , clave_secreta, respuesta;
// Preguntamos como se llaman los jugadores:
   printf("\n Introduce el nombre del jugador 1: ");
   scanf("%s", usuario_1);
   printf("\n Introduce el nombre del jugador 2: ");
   scanf("%s", usuario_2);


// Pedimos un número al usuario 1
   printf("\n\n %s introduce tu clave secreta (0-9): ", usuario_1);
   scanf("%d", &clave_secreta);
   system("clear");

      while (ronda<=2)
      {
      ronda = ronda + 1;
      printf("\n Ronda %d. ", ronda);
      printf(" %s, cual crees que es la clave secreta de %s? ", usuario_2, usuario_1);
      scanf("%d", &respuesta);
      if(respuesta==clave_secreta)
         ronda = ronda + 5;
      if(respuesta>clave_secreta)
         printf(" Tas pasao!\n");
      if(respuesta<clave_secreta)
         printf(" Te has quedado corto.\n");
      }

   if(respuesta == clave_secreta)
   printf("\n Felicidades %s has acertado la clave secreta de %s.\n Eres un listillo!\n\n", usuario_2, usuario_1);
   if(respuesta != clave_secreta)
   printf("\n Lo siento %s no has conseguido descifrar la clave secreta de %s.\n Eres un fracasado.\n\n", usuario_2, usuario_1);
}
POSESO, la pregunta sigue en pie: Es necesario establecer un límite de longitud para las variables de texto?
Gracias, de nuevo.
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por m0skit0 »

Dark Pallacus escribió:Es necesario establecer un límite de longitud para las variables de texto?

Por ahora, sí ;) C es un lenguaje bastante primitivo, en cuanto que se parece a ensamblador. Me gusta para aprender porque te enseña cómo funcionan realmente las cosas. Al introducir un número, ese espacio se reserva en la memoria automáticamente por parte del compilador. Si no especificas un número, tendrías que encargarte manualmente de reservar dicha memoria antes de utilizarla. De otra forma estarías escribiendo en memoria no reservada, y posiblemente meando fuera del tiesto, de ahí la violación de segmento. Ten en cuenta que al no darle un valor explícitamente a una variable, ésta puede tener cualquier valor aleatorio. En tu caso, una dirección de memoria inválida, lo que viene a ser todo lo que no es el trasto.
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por Dark Pallacus »

Gracias maestro. Así da gusto aprender. :oki:

Otra duda a parte: Si quisiera copilar el código para que funcionase en Windows como se haría?
PS3 - PSP 2000

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por m0skit0 »

Parecido, sólo que cambian algunas cosas:

Código: Seleccionar todo

#include <unistd.h>

creo que Windows debes poner

Código: Seleccionar todo

#include <windows.h>

si no recuerdo mal. Ya me dices si lo recuerdo mal, y ya lo busco por Google :lol:

Código: Seleccionar todo

system("clear");

cambiaría por

Código: Seleccionar todo

system("cls");


Y yo creo que eso es todo ;)
Imagen

Avatar de Usuario
Dark Pallacus
ViP Hordes
ViP Hordes
Mensajes: 1509
Registrado: 03 Sep 2009, 00:35
PSN ID: Pallacus
Ubicación: Barcelona
Contactar:

Re: [Curso] Introducción a la programación en C (VI)

Mensaje por Dark Pallacus »

Y entonces el ejecutable se renombra a exe y funciona?
PS3 - PSP 2000

Responder