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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #10 en: 17 Junio 2009, 00:35 am »

Muchas gracias por su cooperación ahora pasamos al siguiente tema.

VARIABLES INDIZADAS UNIDIMENSIONALES

Problema1: Un vector está compuesto por una cantidad N de números distintos. Se deberá mostrar los dos más próximos.

Problema2: Inserta un elemento X dentro de un vector ordenado de N elementos. *En caso de que exista dar su posición.
a) Dar una solución implementando búsqueda secuencial.
b) Dar una solución implementando búsqueda binaria.

Problema3: Diseñar un algoritmo que permita ordenar una lista de alumnos con sus correspondientes calificaciones obtenidas en un parcial.

Se destaca que el elemento de nombre(X) tiene su correspondiente nota(X).

Problema 4: Diseñar un algoritmo que ordene números distintos de 0 mientras se vayan ingresando.

Problema 5: Dado un número en base B, donde 1<B<10, generar todos los enteros entre 0 y el número dado en base B.
Tener en cuenta el problema nº7 de variables simples.


« Última modificación: 17 Junio 2009, 01:44 am por Emt.dev » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #11 en: 17 Junio 2009, 01:11 am »

Lenguaje C:

Código
  1. /*Problema1: Un vector está compuesto por
  2. una cantidad N de números distintos. Se deberá mostrar los dos más próximos.*/
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    int x[100];
  10.    int i,j,n,p1,p2,d,men;
  11.    printf("Ingrese cantidad:");
  12.    scanf("%d",&n);
  13.    for(i=0;i<n;i++)
  14.    {
  15.                  printf("Ingrese numero\n");
  16.                  scanf("%d",&x[i]);
  17.    }
  18.    men=abs(x[0]-x[1]);
  19.    p1=1;
  20.    p2=2;
  21.    for(i=0;i<n;i++)
  22.    {
  23.                    for(j=0;j<n;j++)
  24.                    {
  25.                                    if(i!=j)
  26.                                    {
  27.                                            d=abs(x[i]-x[j]);
  28.                                            if(d<men)
  29.                                            {
  30.                                                     men=d;
  31.                                                     p1=i;
  32.                                                     p2=j;
  33.                                            }
  34.                                    }
  35.                    }
  36.    }
  37.    printf("%d,%d",p1,p2);
  38.    getch();
  39.  return 0;
  40. }

Código
  1. /*Problema2: Inserta un elemento X dentro de un vector ordenado de N elementos. *En caso de que exista dar su posición.
  2. a) Dar una solución implementando búsqueda secuencial.*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. int main()
  8. {
  9.    int vector[]={1,1,3,5,4,5,6,3,9,10};
  10.    int i,j,k;
  11.    int n=9;
  12.    for(i=1;i<=10;i++)
  13.    {
  14.        j=1;
  15.        while(vector[i]!=vector[j])
  16.        {
  17.            j++;
  18.        }
  19.        if(j==i)
  20.        {
  21.            printf("Numero: %d, ",vector[i]);
  22.            for(k=i;k<=n;k++)
  23.            {
  24.                if(vector[i]==vector[k])
  25.                    printf("%d\n",k);
  26.            }
  27.        }
  28.    }
  29.    return 0;
  30. }


« Última modificación: 17 Junio 2009, 02:05 am por Emt.dev » En línea

j retirado

Desconectado Desconectado

Mensajes: 61



Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #12 en: 21 Junio 2009, 03:24 am »

Edito: le agregue la opcion GeSHi, jeje. Ahora aprendi y queda mas lindo el código.

Citar
Problema 8: Desarrollar un algoritmo para generar los primeros K primeros números primos de la serie Fibonacci.
Ejemplo:
K=6
1 2 3 5 13 89

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define FALSE 0
  6. #define TRUE !FALSE
  7. typedef int Bool;
  8.  
  9. int fib(double n);
  10. Bool es_primo(int num);
  11.  
  12. int main()
  13. {
  14. int n; printf("Cantidad de primos a obtener:  "); scanf("%d", &n);
  15.  
  16. int i=0, j;
  17. for(j=0; j<n;)
  18. {
  19. if( es_primo(fib(i)) )
  20. {
  21. printf("%d  ", fib(i));
  22. j++;
  23. }
  24. i++;
  25. }
  26.  
  27. printf("\n\n");
  28. system("pause");
  29. return 0;
  30. }
  31.  
  32. int fib(double n)
  33. {
  34. double a = 1/sqrt(5);
  35. double b = (1+sqrt(5))/2;
  36. double c = (1-sqrt(5))/2;
  37. double fib_n = a*pow(b, n) - a*pow(c, n);
  38.  
  39. return fib_n;
  40. }
  41.  
  42. Bool es_primo(int num)
  43. {
  44.        Bool b = TRUE;
  45.        int i, divisores=0;
  46.  
  47.        if(num == 0)
  48.                return b=FALSE;
  49.  
  50.        for(i=1; i<=num; i++)
  51.        {
  52.                if((num%i) == 0)
  53.                        divisores++;
  54.                if(divisores > 2)
  55.                {
  56.                        return b=FALSE;
  57.                }
  58. }
  59.  
  60. return b;
  61. }
  62.  
« Última modificación: 28 Julio 2009, 01:03 am por j.rm » En línea

ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #13 en: 21 Junio 2009, 04:47 am »

el 2 en asm (el mas facil) conforme vaya mejorando mi uso de arrays pongo los otros (claro si no me da weba  :laugh: )

Código
  1. format pe console
  2. include 'c:\fasm\include\win32ax.inc'
  3. entry main
  4. .data
  5.        number  dd      ?
  6. .code
  7. main:
  8.        invoke printf,"Escribe un numero, 0 para salir: "
  9.        add esp,4
  10.        invoke scanf,"%d",number
  11.        add esp,8
  12.        cmp [number],0
  13.        jle salir
  14.        push [number]
  15.        call factorial
  16.        invoke printf,"El factorial es %d",eax
  17.        add esp,8
  18.        push 10
  19.        call [putchar]
  20.        jmp main
  21.        salir:
  22. ret
  23.  
  24. factorial:
  25.        push ebp
  26.        mov ebp,esp
  27.        mov ecx,[ebp + 8]
  28.        mov eax,1
  29.        fact@L1:
  30.                cdq
  31.                mul ecx
  32.                dec ecx
  33.                cmp ecx,0
  34.                jg fact@L1
  35.        pop ebp
  36. retn 4
  37. section '.idata' import data readable
  38. library msvc,'msvcrt.dll'
  39. import msvc,printf,'printf',scanf,'scanf',putchar,'putchar'
  40.  
« Última modificación: 21 Junio 2009, 05:15 am por x0ʎu » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #14 en: 21 Junio 2009, 17:07 pm »

x0ʎu
Muchas gracias, a esto quería llegar...
Diferentes soluciones, en diferentes lenguajes.
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #15 en: 21 Junio 2009, 20:36 pm »

Para el 3, pongo varios algoritmos de ordenación en C++ que permiten ordenar un vector de reales:

Ordenación por inserción (O(n2)):
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void ordena_por_insercion(vector<double>& v) {
  6.    for (int i = 1; i < v.size(); ++i) {
  7.        double x = v[i];
  8.        int j = i;
  9.        while (j > 0 and v[j-1]>x) {
  10.            v[j] = v[j-1];
  11.            --j;
  12.        }
  13.        v[j] = x;
  14.    }
  15. }


Ordenación por selección (O(n2)):
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int posicion_maximo(const vector<double>& v, int n) {
  6.    int pos = 0;
  7.    for (int i = 1; i <= n; ++i)
  8.        if (v[i] > v[pos]) pos = i;
  9.    return pos;
  10. }
  11.  
  12. void ordena_por_seleccion(vector<double>& v, int n) {
  13.    if (n > 0) {
  14.        swap(v[posicion_maximo(v,n)],v[n]);
  15.        ordena_por_seleccion(v,n-1);
  16.    }
  17. }

Ordenación por burbuja (O(n2)):
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void ordena_por_burbuja(vector<double>& v) {
  6.    for (int i = 0; i < v.size(); ++i) {
  7.        for (int j = v.size()-1; j >= i + 1; --j) {
  8.            if (v[j] < v[j - 1] ) swap(v[j], v[j - 1]);
  9.        }
  10.    }
  11. }

Y un par de algoritmos Divide&Conquer, primero Merge Sort (Ordenación por fusión, O(n log n)):
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void fusiona(vector<double>& v, int e, int m, int d) {
  6.    int n = d-e+1;
  7.    vector<double> aux (n);
  8.  
  9.    int i = e;
  10.    int j = m + 1;
  11.    int k = 0;
  12.    while (i <= m and j <= d) {
  13.        if (v[i] <= v[j]) {
  14.            aux[k] = v[i];
  15.            ++i;
  16.            ++k;
  17.        }
  18.        else {
  19.            aux[k] = v[j];
  20.            ++j;
  21.            ++k;
  22.        }
  23.    }
  24.    while (i <= m) {
  25.        aux[k] = v[i];
  26.        ++k;
  27.        ++i;
  28.    }
  29.  
  30.    while (j <= d) {
  31.        aux[k] = v[j];
  32.        ++j;
  33.        ++k;
  34.    }
  35.    for (k = 0; k < n; ++k) v[k+e] = aux[k];
  36. }
  37.  
  38. void ordena_rec(vector<double>& v, int e, int d) {
  39.    if (e < d) {
  40.        int m = (e+d)/2;
  41.  
  42.        ordena_rec(v,e,m);
  43.        ordena_rec(v,m+1,d);
  44.        fusiona(v,e,m,d);
  45.    }
  46. }
  47.  
  48. void ordena_por_fusion(vector<double>& v) {
  49.    ordena_rec(v, 0, v.size()-1);
  50. }

Otro Divide&Conquer, Quicksort (O(n log n) en caso promedio, O(n2) en el peor caso, aunque en general es más rápido que el Merge Sort):
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int pivota(vector<double>& v, int ini, int fin) {
  6.    double valor_pivote = v[ini];
  7.    int p1 = ini + 1, p2 = fin - 1;
  8.    while (p1 <= p2) {
  9.        if (v[p1] < valor_pivote) ++p1;
  10. else if (v[p2] >= valor_pivote) --p2;
  11. else {
  12.    swap(v[p1], v[p2]);
  13.    ++p1;
  14.    --p2;
  15. }
  16.    }
  17.    swap(v[ini], v[p1 - 1]);
  18.    return p1 - 1;
  19. }
  20.  
  21. void quicksort_rec(vector<double>& v, int ini, int fin) {
  22.    if (ini >= fin - 1) return;
  23.    int pivote = pivota(v, ini, fin);
  24.    quicksort_rec(v, ini, pivote);
  25.    quicksort_rec(v, pivote + 1, fin);
  26. }
  27.  
  28. void quicksort(vector<double>& v, int r) {
  29.    quicksort_rec(v, 0, r);
  30. }

Un saludo de ghastlyX ;)
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #16 en: 24 Junio 2009, 02:39 am »

ESRUCTURAS ESTATICAS BIDIMENSIONALES

1-Mostrar una matriz por filas.
2-Mostrar una mtriz por columnas.
3-Mostrar una matriz por recorrido en caracol.
4-Mostrar los elementos que se encuentran en el triangular inferior.
   ------------------------------------------------------------------------------, junto a su diagonal.
5-Sea una tabla NxM ordenada por filas ascendentemente y dada una lista tamaño M² insertar en la fila correspondiente utilizando el método de Búsqueda Binaria.
              
6- Se posee una tabla de A de M filas y N columnas, conformada por números naturales. Se deberá mostrar la posición del menor número repetido junto con su frecuencia de aparición.

7- De una tabla NxM informar la posición del primer elemento primo de cada fila y la posición del primer elemento primo de la tabla.
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #17 en: 24 Junio 2009, 03:08 am »

1-2

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int N,M,i,j;
  7.    int a[100][100];
  8.    printf("Ingrese cantidad filas(M)\n");
  9.    scanf("%d",&M);
  10.    printf("Ingrese cantidad columnas(N)\n");
  11.    scanf("%d",&N);
  12.    for(i=0;i<M;i++)
  13.    {
  14.        for(j=0;j<N;j++)
  15.        {
  16.            printf("Elemento\n");
  17.            scanf("%d",&a[i][j]);
  18.        }
  19.    }
  20.    for(i=0;i<M;i++)
  21.    {
  22.        for(j=0;j<N;j++)
  23.        {
  24.            printf("%d",a[i][j]);
  25.        }
  26.    }
  27.    return 0;
  28. }
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int N,M,i,j;
  7.    int a[100][100];
  8.    printf("Ingrese cantidad filas(M)\n");
  9.    scanf("%d",&M);
  10.    printf("Ingrese cantidad columnas(N)\n");
  11.    scanf("%d",&N);
  12.    for(j=0;j<N;j++)
  13.    {
  14.        for(i=0;i<M;i++)
  15.        {
  16.            printf("Elemento\n");
  17.            scanf("%d",&a[i][j]);
  18.        }
  19.    }
  20.    for(j=0;j<N;j++)
  21.    {
  22.        for(i=0;i<M;i++)
  23.        {
  24.            printf("%d",a[i][j]);
  25.        }
  26.    }
  27.    return 0;
  28. }
« Última modificación: 24 Junio 2009, 03:22 am por Emt.dev » En línea

VonN

Desconectado Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #18 en: 3 Julio 2009, 02:06 am »

El algoritmo para recorrer y mostrar el triangulo superior:

Código
  1. for(int i=0,i<n-1;i++)
  2. {
  3.     for(int j=i+1;j<n;j++)
  4.     {
  5.          std::cout<<vec[i][j]<<std::endl;
  6.     }
  7. }

Triangulo superior y diagonal:


Código
  1. for(int i=0,i<n;i++)
  2. {
  3.     for(int j=i;j<n;j++)
  4.     {
  5.          std::cout<<vec[i][j]<<std::endl;
  6.     }
  7. }
En línea




Se toma por necios a aquellos que dicen lo que todos pesamos
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Algoritmia-Ejercicios introductorios.
« Respuesta #19 en: 3 Julio 2009, 19:30 pm »

El 2 en Perl:
Código
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. print "Numero : ";
  5. my $numero = <stdin>;
  6. my $factorial = 1;
  7. for(my $i = 1; $i <= $numero; $i++)
  8. {
  9. $factorial *= $i;
  10. }
  11. print $factorial;
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio de algoritmia para c++
Programación C/C++
NRRR 1 2,602 Último mensaje 28 Septiembre 2011, 11:56 am
por skapunky
Algoritmia « 1 2 3 »
Programación General
AoX04 21 12,368 Último mensaje 1 Diciembre 2012, 18:47 pm
por $Edu$
Subforos de programacion pero.. Y Algoritmia?
Sugerencias y dudas sobre el Foro
NikNitro! 4 3,105 Último mensaje 6 Mayo 2014, 18:16 pm
por ivancea96
Algoritmia
Programación General
MOD 1 2,042 Último mensaje 31 Agosto 2017, 14:06 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines