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

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

Avatar de Usuario
miguelamacias
Experto
Experto
Mensajes: 960
Registrado: 03 Sep 2009, 14:16
Ubicación: Coria del Río, Sevilla
Contactar:

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

Mensaje por miguelamacias »

m0skit0 escribió:También tu agenda tiene un bug, ya que si rellenas toda la agenda y luego borras un contacto que no esté al final, al introducir uno nuevo, simplemente ni aparecerá, ya que lo escribirías fuera de la memoria de tu programa, corrompiendo tu programa, otros o a saber el qué :adora: Esto te lo digo sin haberlo probado, pero puedes probarlo y ver lo que te estoy diciendo.


Lo he probado en Windows y funciona. Relleno todos los huecos, borro uno que no sea el último, añado uno nuevo y funciona. Eso de corromper me llamaba la atención...

Saludos!

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

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

Mensaje por Dante »

Perdón por la inactividad, pero ya tratare de estar mas activo en adelante, voy a revisar la agenda para solucionar el bug, por ahora dejo el ejercicio 1 , el 2° me falta sacar la moda.

Código: Seleccionar todo

[spoiler]#include <stdio.h>

int main(int argc, char* argv[])
{
   int i=0, j = 0, k = 0;

   int pares[10];   
   int impares[10];

   for(i=1; i<21; i++)
   {
     if(i % 2 == 0)
     {     
      pares[j++] = i;
      printf("Par: %d\n", i);
     }
   
     else
     {
      impares[k++] = i;
      printf("Impar: %d\n", i);
     }

    }
 
  return 0;
}[/spoiler]

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 (X)

Mensaje por m0skit0 »

Dante escribió:ahora dejo el ejercicio 1

Nada que objetar, su señoría :oki:
Imagen

Avatar de Usuario
Dante
Enteradillo
Enteradillo
Mensajes: 42
Registrado: 28 May 2010, 01:51

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

Mensaje por Dante »

Ejercicio 4
Spoiler:

Código: Seleccionar todo

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

typedef struct
{
   char nombre[80];
   int numero;   
} agenda; 

int main (int argc, char* argv[])
{
   agenda datoscont[19];
   int puesto = 0, opcion;   
   int fullcontactos = 1;
   int activo = 1;
   char disponible[5]

   strcpy(disponible, "VACIO");
   printf("Buen dia, ¿que desea hacer?\n");
   printf("Seleccione una opcion.\n");

   do
   {   
    printf("1.-Agregar conctacto nuevo.\n");
    printf("2.-Ver contacto.\n");
    printf("3.-Modificar conctacto.\n");
    printf("4.-Eliminar conctacto.\n");
    printf("5.-Salir\n");
    scanf("%d", &opcion);

    switch(opcion)
    {

     case 1: for(puesto = 0; puesto <= 19; puesto++)
             {   

            if(strcmp (datoscont[puesto].nombre, disponible) == 0)
              {
               printf("Introduce el nombre del conctacto: ");
                    scanf("%s", &datoscont[puesto].nombre);
                    printf("\nIntrodusca numero telefonico: ");
                    scanf("%d", &datoscont[puesto].numero);
                    printf("\nConctacto numero: %d\n", puesto);
                   }

                   if(fullcontactos < 19)
              {
               printf("Introduce el nombre del conctacto: ");
                    scanf("%s", &datoscont[puesto].nombre);
                    printf("\nIntrodusca numero telefonico: ");
                    scanf("%d", &datoscont[puesto].numero);
                    printf("\nConctacto numero: %d\n", puesto);
                    fullcontactos++;
                    puesto++;
              }   

                else
              {
               printf("\nNo hay espacios disponibles, necesitara borrar alguno.");
              }
    }
        break;

      case 2: printf("Introduce el numero de conctaco a cosultar: ");
         scanf("%d", &puesto);
              printf("Nombre de conctacto:%s\nTel.%d\n\n", datoscont[puesto].nombre, datoscont[puesto].numero);
              break;

      case 3: printf("Numero de conctacto que desea editar: ");
         scanf("%d", &puesto);
              printf("\nNuevo nombre de conctacto: ");
              scanf("%s", &datoscont[puesto].nombre);
              printf("\nNuevo numero telefonico: ");
              scanf("%d", &datoscont[puesto].numero);
              break;
   
      case 4: printf("Numero de conctacto que desea eliminar: ");
         scanf("%d", &puesto);
              strcpy(datoscont[puesto].nombre, "VACIO");   
              datoscont[puesto].numero = 0;
              printf("\nNumero borrado.\n");
              fullcontactos--;
              break;
   

      case 5: printf("Aplicacion terminada.\n");
         activo = 0;
         break;

      default: printf("\"ERROR\"opcion no valida.\n");
    }

   }

   while(activo == 1);

   return 0;
}


PD: El formato se me volvió a desacomodar al enviar, no se si eso pase por el tamaño del texto o quien sabe, espero que no le reste demasiada legibilidad.

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 (X)

Mensaje por Dark Pallacus »

En el primer ejercicio se trataba de hacer esto? Luego leo los otros y me copio ;)
Spoiler:

Código: Seleccionar todo

//Versión del Pallacus. Si i siempre empieza siendo 1 podemos ahorrarno el trabajo de comprobar si cada número es par e ir metiendo todos los números alternativamente en cada vector.
#include <stdio.h>
int main(int argc, char* argv[])
{
  int i = 1, j = 0, k = 0;
  // Dos vectores de 10 enteros cada uno
  int pares[10];
  int impares[10];
  // Recorremos los números desde el 1 hasta el 20 (ambos inclusive)
  while ( i <= 20 )
  {
    impares[k++] = i;
    i++;
    pares[j++] = i;
    i++;
  }
  // Imprimimos el vector de pares
  for (i=0; i<10; i++)
    printf("%d ", pares[i]);
  printf("\n");
  // Imprimimos el vector de impares
  for (i=0; i<10; i++)
    printf("%d ", impares[i]);
  printf("\n");
  return 0;
}
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 (X)

Mensaje por m0skit0 »

Perfecto Pallacus, pero usa llaves para los for ;)
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 (X)

Mensaje por Dark Pallacus »

OK, Llaves puestas.

Te dejo el segundo, tengo que confesar que he copiado algo :tongue:
Lo he estado optimizando y no se si se puede optimizar todavía mas...
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
  //Definimos los vectores y las variables.
  int vectores[50];
  int modas[100]={0};
  int mayor = 0, menor = 0, moda = 0, total = 0, posicion_media = -1;
  int media, i;
 
  //Inicializamos el generador de numeros "aleatorios".
  srand(time(NULL));
 
  //Llenamos vectores de números al azar. A medida que se generan los números los comparamos y guardamos la posición de mayor y del menor. También vamos calculando el total para calcular la media y vamos contando cuantas veces se repite cada número.
  for(i = 0; i < 50; i++)
  {
    vectores[i] = (rand() % 100);
    if (vectores[i] > vectores[mayor])
    {
      mayor = i;
    }
    if (vectores[i] < vectores[menor])
    {
      menor = i;
    }
    total = total + vectores[i];
    modas[vectores[i]]++;
  }
 
  //Calculamos la media.
  media = (total / 50);
  for(i = 0; i < 50; i++)
  {
    if (vectores[i] == media)
    {
      posicion_media = i;
    }
  }
 
  //Calculamos la moda.
  for(i = 0; i < 100; i++)
  {
    if (modas[i] > modas[moda])
    {
      moda = i;
    }
  }
 
  //Imprimimos un montón de cosas.
 
  printf("\n Los valores del vector son: ");
 
  for(i = 0; i < 50; i++)
  {
    if ((i % 10) == 0)
      printf("\n ");
    printf("%2.d, ", vectores[i]);
  }
 
  printf("\n ");
  printf("\n El mayor de ellos es el %dº: %d.", (mayor +1), vectores[mayor]);
  printf("\n El menor de ellos es el %dº: %d.", (menor +1), vectores[menor]);
  printf("\n La media de los elementos del vector es: %d. ", media);
  //Si algún vector coincide con la media lo imprimimos.
  if (posicion_media >= 0)
  {
    printf("Y la podemos encontrar en la posicion %d", (posicion_media +1));
  }
  printf("\n El número que está de moda es el: %d. Y se repite en las posiciones: ", moda);
  //Buscamos los vectores con el valor de moda y los imprimimos.
  for(i = 0; i < 50; i++)
  {
    if (moda == vectores[i])
    {
      printf("%d, ", (i + 1));
    }
  }
  printf("\n\n ");
 
  return 0;
}


Dejo también el tercero:
Vale, vale, voy a ordenarlos también de mayor a menor sin hacer trampa XD
Spoiler:

Código: Seleccionar todo

//Ordenar los valores de un vector
#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
  //Definimos los vectoreses y las variables.
  int vectores[50] = {99};
  int i, j, k, numero;
 
  //Inicializo el generador de numeros "aleatorios".
  srand(time(NULL));
 
  //Lleno el vectores de números al azar. A medida que se generan los números los comparamos y guardamos ordenadamente.
  for(i = 0; i < 50; i++)
  {
    numero = (rand() % 100);
    j = 0;
    while(numero > vectores[j])
    {
      j++;
    }
    for(k = i; k >= j; k--)
    {
      vectores[k+1] = vectores[k];
    }
    vectores[j] = numero;
  }
 
  //imprimimos el vector entero de menor a mayor.
  printf("\n Los valores del vector, de menor a mayor son: ");
 
  for(i = 0; i < 50; i++)
  {
    if ((i % 10) == 0)
    {
      printf("\n ");
    }
    printf("%2.d, ", vectores[i]);
  }
  printf("\n ");
 
  //Y ahora lo imprimimos al reves :D
  printf("\n Y de mayor a menor: \n ");
 
  for(i = 49; i >= 0; i--)
  {
    printf("%2.d, ", vectores[i]);
    if ((i % 10) == 0)
    {
      printf("\n ");
    }
  }
  printf("\n\n ");
 
 
  return 0;
}
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 (X)

Mensaje por m0skit0 »

Cuando los hagas sin trampa, me vuelves a avisar :lol: :oki:
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 (X)

Mensaje por Dark Pallacus »

Estoy en ello XD

Por cierto, me había olvidado de que tengo algo para ti:
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
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 (X)

Mensaje por m0skit0 »

:oki:
Imagen

Responder