elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Ejercicios con arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicios con arrays  (Leído 8,896 veces)
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Ejercicios con arrays
« en: 5 Junio 2009, 00:38 am »

Ejercicio: Se posee un mazo de cartas españolas sin comodines, de dicho mazo sacar 1 carta a la vez, hasta obtener 3 números iguales sin importar el palo, indicar la secuencia de cartas obtenidas y la cantidad de cartas ingresadas sobre el proceso.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int mi_mazo[100],secuencia[100];
  6.  
  7. int main()
  8. {
  9. bool e=0;
  10. int i=0;
  11. int j,k,AUX,n;
  12. while(!e)
  13. {
  14. i++;
  15. cout<<"Ingrese carta: "<<endl;
  16. cin>>mi_mazo[i];
  17. secuencia[i]=mi_mazo[i];
  18. n=i;
  19. for(j=2;j<=n;j++)
  20. {
  21. AUX=mi_mazo[j];
  22. mi_mazo[0]=AUX;
  23. k=j-1;
  24. while(AUX<mi_mazo[k])
  25. {
  26. mi_mazo[k+1]=mi_mazo[k];
  27. k--;
  28. }
  29. mi_mazo[k+1]=AUX;
  30. }
  31. for(j=1;j<=n;j++)
  32. {
  33. if((mi_mazo[j]==mi_mazo[j+1])&&(mi_mazo[j]==mi_mazo[j+2]))
  34. {
  35. e=1;
  36. }
  37. }
  38. }
  39. cout<<"Cantidad de cartas"<<endl;
  40. cout<<"Secuencia"<<endl;
  41. for(i=1;i<=n;i++)
  42. {
  43.    cout<<secuencia[i]<<",";
  44. }
  45. system("PAUSE");
  46. return 1;
  47. }




En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #1 en: 5 Junio 2009, 00:39 am »

Una resolución del ejercicio anterior por un forero fue esta:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. bool Valores[12][3];
  5. unsigned char Secuencia[100];
  6. int longitud_secuencia = 0;
  7. int opcion = 1;
  8.  
  9. void meter_carta(const unsigned char valor)
  10. {
  11.    if(!Valores[valor][0])
  12.    {
  13.        Valores[valor][0] = true;
  14.    }
  15.    else if(!Valores[valor][1])
  16.    {
  17.        Valores[valor][1] = true;
  18.    }
  19.    else if(!Valores[valor][2])
  20.    {
  21.        Valores[valor][2] = true;
  22.    }
  23.  
  24.    Secuencia[longitud_secuencia] = valor;
  25.    longitud_secuencia++;
  26. }
  27.  
  28. int buscar_equivalencias(const unsigned char valor)
  29. {
  30.    for(int i = 0; i <= 2; i++)
  31.    {
  32.        if(!Valores[valor][i])
  33.        {
  34.            return i;
  35.        }
  36.    }
  37.  
  38.    return 3;
  39. }
  40.  
  41. int main()
  42. {
  43.    while(opcion)
  44.    {
  45.        std::cout << "Ingrese una carta: ";
  46.        std::cin >> opcion;
  47.  
  48.        // Añadir la carta
  49.        meter_carta(opcion);
  50.        if(buscar_equivalencias(opcion) == 3) // Si hay 3 cartas iguales
  51.        {
  52.            std::cout << "Encontradas tres cartas iguales [" << int(opcion) << "]" << std::endl;
  53.            std::cout << "La secuencia de cartas [" << longitud_secuencia << "] añadidas es la siguiente: " << std::endl;
  54.  
  55.            for(int it = 0; Secuencia[it]; it++)
  56.            {
  57.                std::cout << int(Secuencia[it]) << std::endl;
  58.  
  59.            }
  60.  
  61.            return 1;
  62.        }
  63.    }
  64.  
  65.    system("PAUSE");
  66.    return 0;
  67. }


En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Ejercicios con arrays
« Respuesta #2 en: 5 Junio 2009, 01:13 am »

Si he entendido bien el enunciado, así es bastante más sencillo:
Código
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. int main() {
  7.    queue<int> Q;
  8.    vector<int> cantidad(12, 0);
  9.    int a;
  10.    bool acabado;
  11.    while (not acabado) {
  12.        cout << "Ingresa una carta" << endl;
  13.        cin >> a;
  14.        acabado = (++cantidad[a - 1] == 3);
  15.        Q.push(a);
  16.    }
  17.    cout << "Secuencia" << endl;
  18.    while (not Q.empty()) {
  19.        cout << Q.front() << " ";
  20.        Q.pop();
  21.    }
  22.    cout << endl;
  23. }

Un saludo de ghastlyX ;)
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #3 en: 5 Junio 2009, 01:20 am »

Pues la verdad que si lo veo mas sencillo. Muchas gracias ghastlyX. Sinceramente por el momento yo estoy trabajando con lo más sencillo posible, pero por supuesto tus códigos son mucho más eficientes.

Un saludo! Dentro de un rato estaré subiendo otros  ;)
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #4 en: 5 Junio 2009, 01:26 am »

Algoritmo de Euclides para buscar el MCD entre dos números enteros.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int mcd(int ,int );
  6.  
  7. int a;
  8. int b;
  9.  
  10. int main()
  11. {
  12.    cout<< "Introduce primer numero" << endl;
  13.    cin>>a;
  14.    cout<<"Introduce segundo numero"<<endl;
  15.    cin>>b;
  16.    cout<<"MCD de "<<a<<" y "<<b<<" es: "<<mcd(a,b)<<endl;
  17.    system("PAUSE");
  18.    return 0;
  19. }
  20.  
  21. int mcd(int a, int b)
  22. {
  23.   int r[1000]; //Reservamos 1000 espacios para el Array que va a guardar los restos sucesivos
  24.   for(int i = 0; i < 1000; i++) //Inicializamos los valores a 0
  25.   {
  26.      r[i]=0;
  27.   }
  28.   int i = 1;
  29.   r[0] = a; //Damos al resto r[0] el valor de a
  30.   r[1] = b; //Damos al resto r[1] el valor de b
  31.   while(r[i] != 0) //Vamos calculando los restos hasta llegar al mcd
  32.   {
  33.      r[i+1] = r[i-1] % r[i];
  34.      i++;
  35.   }
  36.   int mcd = r[i-1]; //Damos el valor d r[i-1] al mcd
  37.   return mcd; //Se retorna el mcd
  38. }
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #5 en: 5 Junio 2009, 01:30 am »

Ejemplo: Se posee la lista LIB, conteniendo M números de documento
correspondientes a alumnos libres en una materia un determinado año. Se desea
ingresar N documentos de alumnos que cursarán la misma materia al siguiente año, creando la lista ACT, previa eliminación de ese elemento en LIB si se trata de un alumno libre el año anterior. Mostrar la lista ACT y la lista LIB si es que se redujo.


Código
  1. #include <iostream>
  2.  
  3. int ACT[100];
  4. int LIB[10]={1,2,3,10,9,8,7,4,5,6};//Llenamos nuestro vector con cualquier doc
  5. int i,j,k,l,N,MAX;
  6. bool f_ELIM;
  7.  
  8. using namespace std;
  9.  
  10.  
  11.  
  12. int main()
  13. {
  14.    int MAX=10;
  15. int k=0;
  16. f_ELIM=0;
  17. cout<<"Ingrese N:"<<endl;
  18. cin>>N;
  19. for(i=1;i<=N;i++)
  20. {
  21. cout<<"Ingrese documentos:"<<endl;
  22. cin>>ACT[i];
  23. j=1;
  24. while(j<=MAX)
  25. {
  26. if(ACT[i]==LIB[j])
  27. {
  28. for(l=1;l<=MAX-1;l++)
  29. {
  30. LIB[l]=LIB[l+1];
  31. }
  32. MAX=MAX-1;
  33. f_ELIM=1;
  34. j=MAX++;
  35. }
  36. else
  37. {
  38. j++;
  39. }
  40. }
  41. }
  42. cout<<"Lista ACT"<<endl;
  43. for(i=1;i<=N;i++)
  44. {
  45. cout<<ACT[i]<<",";
  46. }
  47. cout<<"Lista LIB"<<endl;
  48. if(f_ELIM=1)
  49. {
  50. for(i=1;i<=MAX;i++)
  51. {
  52. cout<<LIB[i]<<",";
  53. }
  54. }
  55. else
  56. {
  57. cout<<"None"<<endl;
  58. }
  59. system ("PAUSE");
  60. return 0;
  61. }
En línea

Eliptico

Desconectado Desconectado

Mensajes: 153


Ver Perfil
Re: Ejercicios con arrays
« Respuesta #6 en: 5 Junio 2009, 06:01 am »

¡¡¡Buenas!!!

El algoritmo de euclides solo tiene que calcular el MCD de dos enteros, no tienes porque guardar los restos sucesivos a no ser que luego te pidan los coeficientes de la Identidad de Bezout.

Te planteo dos soluciones, una iterativa y otra recursiva:

Iterativa:
Código
  1. int mcdEuclides(int a, int b)
  2. {
  3.    int aux,resto;
  4.  
  5.    if(a<0)
  6.        a*=-1;
  7.    if(b<0)
  8.        b*=-1;
  9.  
  10.    if(a<b)
  11.    {
  12.        aux=a;
  13.        a=b;
  14.        b=aux;
  15.    }
  16.  
  17.    if(b==0)
  18.        return a;
  19.  
  20.    do{
  21.        resto=a%b;
  22.        a=b;
  23.        b=resto;
  24.    }while(b!=0);
  25.  
  26.    return a;
  27. }
  28.  

y recursiva:
Código
  1. int mcdEuclides(int a,int b)
  2. {
  3.    int aux;
  4.  
  5.    if(a<0)
  6.        a*=-1;
  7.    if(b<0)
  8.        b*=-1;
  9.    if(a<b)
  10.    {
  11.        aux=a;
  12.        a=b;
  13.        b=aux;
  14.    }
  15.  
  16.    if(b==0)
  17.        return a;
  18.  
  19.    return mcdEuclides(b,a%b);
  20. }
  21.  

Espero que os sea util.

¡¡¡Un saludo!!!
« Última modificación: 5 Junio 2009, 06:06 am por Eliptico » En línea

Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #7 en: 5 Junio 2009, 07:25 am »

Hombre pues si, pero no todo el mundo conoce el algoritmo de euclides, yo hace 3 meses antes de ver matematicas discretas lo desconocia y la forma habitual de uno hallar el mcd es sacando los divisores y buscar el mayor, pero dale que cuando uno ve como funka el algoritmo de ecuclides, sabiendo pues que el minimo residuo es, basta con un algoritmo recursivo y ya sale  ;)

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ejercicios con arrays
« Respuesta #8 en: 5 Junio 2009, 20:18 pm »


y recursiva:
Código
  1. int mcdEuclides(int a,int b)
  2. {
  3.    int aux;
  4.  
  5.    if(a<0)
  6.        a*=-1;
  7.    if(b<0)
  8.        b*=-1;
  9.    if(a<b)
  10.    {
  11.        aux=a;
  12.        a=b;
  13.        b=aux;
  14.    }
  15.  
  16.    if(b==0)
  17.        return a;
  18.  
  19.    return mcdEuclides(b,a%b);
  20. }
  21.  


 ;) Muchas gracias Eliptico.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicios de arrays y punteros
Programación C/C++
luis9829 0 1,615 Último mensaje 27 Agosto 2017, 03:00 am
por luis9829
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines