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

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

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

Mensaje por m0skit0 »

Perdón pues:

Código: Seleccionar todo

int* vector = (int*)malloc(tamanio * sizeof(int));

~Rdavid~ escribió:Pero no veo que tú hayas hecho algo de eso :lol:, supongo que algo debo de haber entendido mal :?

No, has entendido bien. Lo que pasa es que obviamente el tamaño del vector hay que pasarlo, algo que se me había pasado. Además, eso lo hice basándome en cómo lo habías hecho tú, pero aquí me dices que lo haga yo, así que lo hago a mi manera :lol:
Imagen

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

Mensaje por ~Rdavid~ »

Ok, creo que ahora si ya no tengo dudas :lol:, voy a hacer los ejercicios que tenía que corregir :oki:
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

Pido perdón, por varios motivos xD.

Ejercicio 1. Rellenar vector y decir qué número es mayor.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

void rellenaVector(int vector[])
{
   int i;
   for ( i = 0; i < 20; i++)
      if ( i % 2 == 0) vector[i] = i;
      else
      vector[i] = i * -1;
}

void rellenaVectorUsuario(int vector[])
{
   int i;
   for ( i = 0; i < 20; i++)
   {
      printf("\nIntroduce entero-> ");
      scanf("%d",&vector[i]);
   }
}


void recorreVector(int vector[])
{
   int i;
   for ( i = 0; i < 20; i++) printf("%d\n", vector[i]);
}

int mayorVector(int vector[], int pos)
{
   static int i = 0;
   //también podemos usar como static pos

   if ( i < 20 )
   {
      if ( vector[pos] < vector[i] ) pos = i;
      i++;
      mayorVector(vector, pos);
   }
   else return pos;
// también return vector[pos] para que pase directamente el número en lugar de la posición
}

void main(void)
{
   int vectorEnt[20];
   int pos = 0;

   rellenaVectorUsuario(vectorEnt);
   pos = mayorVector(vectorEnt, pos);
   //Tened en cuenta que la posición que doy es teniendo en cuenta 0..19, si no simplemente es (pos + 1)
   printf("El mayor es->%d en la posición del vector %d\n",vectorEnt[mayorVector(vectorEnt, pos)], pos);
}

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

Mensaje por m0skit0 »

@arisma:

m0skit0 escribió:Implementar un programa que busca el número máximo en un vector de 20 enteros con signo introducidos por el usuario usando recursividad

;)

@~Rdavid~:

m0skit0 escribió:Implementar un programa que busca el número máximo en un vector de 20 enteros con signo aleatorios (el signo de cada elemento también debe ser aleatorio) usando recursividad.

:mrgreen:
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

No sé si me entero jefe, voy a cambiarlo pero dentro de la función se llama a sí misma.

Código: Seleccionar todo

mayorVector(vector, pos);


Ejercicio 3. Sigo opinando que no es lo mío xD.

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int potencia(int base, int exponente)
{
   if ( exponente == 1) return base;
   else return base * potencia(base, exponente - 1);
}
void main(int argc, char *argv[])
{
   int base, exponente;
   printf("Introduce la base: ");
   scanf("%d",&base);
   printf("Introduce el exponente: ");
   scanf("%d",&exponente);
   printf("%d\n", potencia(base, exponente));
}
Última edición por arisma el 21 Dic 2010, 16:48, editado 1 vez en total.

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

Mensaje por m0skit0 »

Cierto, pero es todo el ejercicio con recursividad. Se trata de practicarlo ;)
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

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

Mensaje por arisma »

m0skit0 escribió:Cierto, pero es todo el ejercicio con recursividad. Se trata de practicarlo ;)


¿Jefe, te refieres al primer o tercer ejercicio?

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

Mensaje por m0skit0 »

¡Todos! Y yo no soy el jefe, ese es Kravenbcn :lol:
Imagen

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

Mensaje por ~Rdavid~ »

m0skit0 escribió:
Y añado una parte a este ejercicio: implementar una función de búsqueda (exacta) de número y/o nombre :canuto:



He añadido opciones para escoger por nombre y por número :oki:

Spoiler:

Código: Seleccionar todo

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

//Struct que contiene las variables de cada entrada
struct Entradas
{
      int tel;
      char nombre[30];
      int accesos;
         
};

struct Entradas agenda[20];

//Funcion que muestra el menu y regresa la opcion que se escogió
int menu(int opcion, int libre)
{
      system("clear");
      printf("               Menu\n\n");
      printf("Presione 1 para crear una nueva entrada, libres [%d]\n", libre);
      printf("Presione 2 para ver las entradas\n");
      printf("Presiona 3 para editar una entrada\n");
      printf("Presiona 4 para borrar una entrada\n");
      printf("Presiona 5 para salir\n");
            
      scanf("%d", &opcion);
      
      return opcion;
}

//Funcion registra una nueva entrada regresando el id
int nueva_entrada(int id)
{                  
      printf("Escribe el nombre: ");
      scanf("%s",agenda[id].nombre);
      printf("Escribe el numero de telefono: ");
      scanf("%d", &agenda[id].tel);
      agenda[id].accesos=1;
      printf("Su ID es: %d\n", id);
      printf("Presione enter para regresar al menu\n");
      system("read foo");
   
      return id;
}

int seleccionar_id(int id, int escog)
{
      //Utiliza la recursividad mientras id sea menor que 20
      if(id<20)
      {
            if(agenda[id].accesos!=0)
                  {
                        printf("%d ", id);
                        id++;
                        
                        seleccionar_id(id,escog);
                  }
      }

         
      printf("\nID: ");
      scanf("%d", &escog);
      
      return escog;
}

//Funcion para ver el id escogido
void ver_id(int escog)
{
      if(agenda[escog].accesos == 0||escog<0||escog>20)
      {
            printf("ID erronea\n Presione enter para regresar al menu\n");
            system("read foo");
      }
      else
      {
            printf("Nombre: %s\n",agenda[escog].nombre);
            printf("Telefono: %d\n\n", agenda[escog].tel);
            printf("Presione enter para regresar al menu\n");
            system("read foo");
      }
}

//Funcion para editar un id escogido
void editar_id(int escog)
{
      if(agenda[escog].accesos == 0||escog<0||escog>20)
      {
            printf("ID erronea\n Presione enter para regresar al menu\n");
            system("read foo");
      }
      else
      {
            printf("Nombre: %s\n",agenda[escog].nombre);
            printf("Telefono: %d\n\n", agenda[escog].tel);
                  
                  
              printf("Escriba el nuevo nombre: ");
            scanf("%s", agenda[escog].nombre);
            printf("Escriba el numero de telefono: ");
            scanf("%d", &agenda[escog].tel);
            printf("\n");
            printf("Presione enter para regresar al menur\n");
            system("read foo");
      }
}


//Funcion que sale del programa al pulsar 5
int menu_salir(int opcion, int salir)
{
      if(opcion!=5)
      {
            printf("No has presionado ninguna de las opciones\n");
            printf("Presione enter para regresar al menur\n");
            system("read foo");   
      }
      else
      {
            printf("Saliendo...\n");
            salir = 0;
            return salir;
      }
}   

//Funcion que le da el valor de 0 a todos los accesos
void accesibilidad(int id)
{   
      //Utiliza la recursividad mientras id sea menor que 20
      if(id<20)
      {   
            agenda[id].accesos = 0;   
            id++;
            accesibilidad(id);
      }

}

int menu_de_seleccion(int busqueda)
{
      system("clear");
      printf("Presione 1 para seleccionar por ID\n");
      printf("Presione 2 para buscar por nombre\n");
      printf("Presione 3 para buscar por numero\n");
      scanf("%d", &busqueda);
         
      return busqueda;
}
//Busca una entrada comparando si el nombre es igual
void buscar_nombre(char busc_nombre[], int i)
{
      if(i<20)
      {
            //Si existe
            if(agenda[i].accesos == 1)
            {
                  //Compara si el nombre es igual (regresa 0) al de la entrada
                  if(strcmp(busc_nombre,agenda[i].nombre)==0)
                  {
                        printf("Nombre: %s\n",agenda[i].nombre);
                        printf("Telefono: %d\n", agenda[i].tel);
                        printf("ID: %d\n\n", i);
                        
                  }
                           
            }
            i++;
            buscar_nombre(busc_nombre,i);
      }
}   
//Busca una entrada comparando si el numero es igual
void buscar_numero(int busc_numero, int i)
{
      if(i<20)
      {
            //Si se existe
            if(agenda[i].accesos == 1)
            {
                  if(busc_numero == agenda[i].tel)
                  {
                        printf("Nombre: %s\n",agenda[i].nombre);
                        printf("Telefono: %d\n", agenda[i].tel);
                        printf("ID: %d\n\n", i);
                        
                  }   
            }
            i++;
            buscar_numero(busc_numero,i);
      }
}

//Funcion principal
int main(int argc, char *argv[])
{
      int libre = 20;
      int salir =1;
      int id=0, escog,i=0;
      int opcion;
      int busqueda;
      int busc_numero;
      char busc_nombre[30];
      
      accesibilidad(id);
      
      //Permite que el menu se repita hasta que se desee salir
      while(salir==1)
      {
            
            opcion = menu(opcion, libre);
            
            //Switch con para iniciar cada opcion del menu
            switch(opcion)
            {
               case 1:
                  //Si no hay entradas libres regresa al menu
                  if(libre==0)
                  {
                        printf("No quedan entradas disponibles\n Presiona enter para regresar al menu");
                        system("read foo");
                  }
                  else
                  {
                        
                        id=nueva_entrada(id);
                        id++;
                        libre--;
                  }
                  
                  break;
               
               case 2:
                  busqueda = menu_de_seleccion(busqueda);
                  
                  if(busqueda==1)
                  {
                        printf("Seleccione una de las siguientes IDs: ");
                        escog = seleccionar_id(id, escog);
                        //Si la id no ha sido accedida o es < que 0 o > que 20 regresa la menu
                        if(agenda[escog].accesos == 0||escog<0||escog>20)
                        {
                              printf("ID erronea\n Presione enter para regresar al menu\n");
                              system("read foo");
                        }   
                        ver_id(escog);
                  }         
                  else if(busqueda == 2)
                  {
                        printf("Escriba el nombre: ");
                        scanf("%s", busc_nombre);
                        buscar_nombre(busc_nombre,i);
                        printf("Presione entre para regresar al menu \n");
                        system("read foo");
                  }         
                  else
                  {
                        printf("Escriba el numero: ");
                        scanf("%d", &busc_numero);
                        buscar_numero(busc_numero,i);
                        printf("Presione entre para regresar al menu\n");
                        system("read foo");
                  }
                           
                  break;
                  
               case 3:
                  escog = seleccionar_id(id, escog);
                  editar_id(escog);
                  
                  break;
                  
               case 4:
                  escog = seleccionar_id(id, escog);
                  //Si la id no ha sido accedida o es < que 0 o > que 20 regresa la menu
                  if(agenda[escog].accesos == 0||escog<0||escog>20)
                  {
                        printf("ID erronea\n Presione enter para regresar al menu\n");
                        system("read foo");   
                  }
                  else
                  {
                        printf("Nombre: %s\n",agenda[escog].nombre);
                        printf("Telefono: %d\n\n", agenda[escog].tel);
                        
                        libre++;
                        agenda[escog].accesos = 0;
                        printf("ID borrado\n");
                        escog--;
                        printf("Presione enter para regresar al menur\n");
                        system("read foo");         
                  }
                  
                  break;
                  
               default:
                  //Sala del programa al pulsar 5
                  salir = menu_salir(opcion, salir);
                  break;
            }
      }

      return 0;
}
Imagen

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

Mensaje por m0skit0 »

:oki:
Imagen

Responder