Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: h0oke en 13 Junio 2009, 23:26 pm



Título: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 13 Junio 2009, 23:26 pm
Variables Simples.

Problema 1: Diseñe un diagrama para resolver una ecucación cuadrática.

Problema 2: N! se define como n!=1*2*3*4...*(n-1)*n, diseñe un algoritmo que calcule n! con n>=0.

Problema 3:Dada una lista de N números, desarrollar un algoritmo que permita determinar el más grande.

Problema 4: Diseñe un programa para encontrar el segundo número más grande de N números distintos.

Problema 5: Diseñe un programa que permita descomponer un número N en sus dígitos individualmente.


Problema 6: Dado un número real mostrar la cantidad de dígitos de la parte entera y luego la cantidad que posee la parte decimal.

Problema 7: Dado un número NUM que se encuentra en base B con 1<B<10, mostrar todos los enteros entre 0 y NUM en base B.

Ejemplo: NUM=10 B=2 Mostrar: 0 1 10
              NUM=22 B=3 Mostrar: 0 1 2 10 11 12 20 21 22

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

Problema 9: Diseñar un diagrama que dado un número lo descomponga en sus factores primos, informando la cantidad de veces que dicho factor primo integra el número.


La idea es ir resolviendo los problemas de a poco en distintos lenguajes.

Se permitirán diagramas y pseudocódigo.







Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: Jubjub en 13 Junio 2009, 23:53 pm
EL 2 seria asi?:

Python
Código
  1. n = int(raw_input())
  2. a = 1
  3. while (n!=0):
  4.    a = a * n
  5.    n = n - 1
  6. print str(a)
  7.  

El 5 me quedo de esta forma:
Código
  1. n = raw_input()
  2. a = 1
  3. tmp = ""
  4. while (a<=len(n)):
  5.    tmp += n[len(n)-a]
  6.    a +=1
  7. print tmp
  8.  

gracias por los ejercicios :D


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 13 Junio 2009, 23:59 pm
Primeros 3 en c:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. int main()
  7. {
  8.    int a,b,c;
  9.    double d,x1,x2,x;
  10.    printf("Ingrese A: ");
  11.    scanf("%d",&a);
  12.    printf("Ingrese B: ");
  13.    scanf("%d",&b);
  14.    printf("Ingrese C: ");
  15.    scanf("%d",&c);
  16.    d=(pow(b,2))-(4*a*c);
  17.    printf("D: %f",d);
  18.    if(d>0)
  19.    {
  20.        x1=(-b+sqrt(d))/(2*a);
  21.        x2=(-b-sqrt(d))/(2*a);
  22.        printf("X1: %f X2: %f ",x1,x2);
  23.    }
  24.    else
  25.    {
  26.        if(d==0)
  27.        {
  28.            x=-b/(2*a);
  29.            printf("Unica Solucion: %f",x);
  30.        }
  31.        else
  32.        {
  33.            printf("No hay solucion en reales");
  34.        }
  35.    }
  36.  
  37.    return 0;
  38. }

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int f=1;
  7.    int n,i;
  8.    printf("Ingrese n: ");
  9.    scanf("%d",&n);
  10.    for(i=0;i<n;i++)
  11.    {
  12.        f*=i+1;
  13.    }
  14.    printf("F: %d ",f);
  15.    return 0;
  16. }

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int n,x,big,i;
  7.    printf("N: ");
  8.    scanf("%d",&n);
  9.    printf("X: ");
  10.    scanf("%x",&x);
  11.    big=x;
  12.    for(i=1;i<n;i++)
  13.    {
  14.        printf("X: ");
  15.        scanf("%x",&x);
  16.        if(x>big)
  17.            big=x;
  18.    }
  19.    printf("El mas grande : %d",big);
  20.    return 0;
  21. }

A partir del 4:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int n,p,s,aux,i,a;
  7.    printf("Ingrese cantidad: ");
  8.    scanf("%d",&n);
  9.    printf("Ingrese Primero: ");
  10.    scanf("%d",&p);
  11.    printf("Ingrese Segundo: ");
  12.    scanf("%d",&s);
  13.    if(p<s)
  14.    {
  15.        aux=p;
  16.        p=s;
  17.        s=aux;
  18.    }
  19.    for(i=0;i<n-2;i++)
  20.    {
  21.        printf("Ingrese Numero: ");
  22.        scanf("%d",&a);
  23.        if(p<a)
  24.        {
  25.            s=p;
  26.            p=a;
  27.        }
  28.        else
  29.        {
  30.            if(s<a)
  31.                s=a;
  32.        }
  33.    }
  34.    printf("Segundo mas grande: %d",s);
  35.  
  36.    return 0;
  37. }

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int num,n,d;
  7.    printf("Ingrese Numero: ");
  8.    scanf("%d",&n);
  9.    num=n;
  10.    while(num!=0)
  11.    {
  12.        d=num%10;
  13.        num=num/10;
  14.        printf("%d, ",d);
  15.    }
  16.    return 0;
  17. }

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. int main()
  7. {
  8.    int PE,PF,CE,CD;
  9.    printf("Numero: ");
  10.    scanf("%d.%d",&PE,&PF);
  11.    CE=0;
  12.    CD=0;
  13.    printf("%d\n",PE);
  14.    printf("%d\n",PF);
  15.    while(PE!=0)
  16.    {
  17.        PE=PE/10;
  18.        CE++;
  19.    }
  20.    while(PF!=0)
  21.    {
  22.        PF=PF/10;
  23.        CD++;
  24.    }
  25.    printf("Parte entera: %d, Parte decimal: %d",CE,CD);
  26.    return 0;
  27. }


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 14 Junio 2009, 00:02 am
Jubjub Me olvidé, pon el lenguaje que utilizas, al parecer es python y está muy bien.  :P Luego postearé algunos con vectores, luego matrices y asi...


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: Jubjub en 14 Junio 2009, 00:03 am
Perfecto, quizas ahora haga alguno mas :D
Gracias ;)


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 14 Junio 2009, 00:10 am
OK... cualquier duda consulten y trataremos de resolver entre todos.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: Jubjub en 14 Junio 2009, 01:48 am
Ahi esta mi version del 5, espero que sea eficiente ;D


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 14 Junio 2009, 01:52 am
Supongo que esta bien el 5, ya que nose manejar muy bien python igualmente lo analicé y parece estar correcto. Buen trabajo, dentro de poco tendremos mas codes.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 14 Junio 2009, 03:22 am
Los ultimos 3 en c++:
Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.    int NUM,B,D,N;
  6.    std::cout<<"Ingrese numero"<<std::endl;
  7.    std::cin>>NUM;
  8.    std::cout<<"Ingrese B"<<std::endl;
  9.    std::cin>>B;
  10.    for(int i=0;i<=NUM;i++)
  11.    {
  12.        N=i;
  13.        do
  14.        {
  15.            D=N%10;
  16.            N=N/10;
  17.        }while((N=0)||(D>=B));
  18.        if(D<B)
  19.            std::cout<<i<<std::endl;
  20.    }
  21.    return 0;
  22. }
Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.    int K,P,S,C,N,i;
  6.    P=1;
  7.    S=1;
  8.    C=1;
  9.    std::cout<<"Ingresa cantidad"<<std::endl;
  10.    std::cin>>K;
  11.    std::cout<<"1"<<",";
  12.    while(C<K)
  13.    {
  14.        N=P+S;
  15.        i=2;
  16.        while(N%i!=0){i++;}
  17.        if(i==N)
  18.        {
  19.            std::cout<<N<<",";
  20.            C++;
  21.        }
  22.        P=S;
  23.        S=N;
  24.    }
  25.    return 0;
  26. }

Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.    int NUM,N,i,c;
  6.    std::cout<<"Ingrese NUM"<<endl;
  7.    std::cin>>NUM;
  8.    N=NUM;
  9.    i=2;
  10.    while(N!=1)
  11.    {
  12.        c=0;
  13.        while(N%i==0)
  14.        {
  15.            c++;
  16.            N=N/i;
  17.        }
  18.        if(c!=0){std::cout<<i<<","<<c<<std::endl;}
  19.        i++;
  20.    }
  21.    system("pause");
  22.    return 0;
  23. }


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: leogtz en 15 Junio 2009, 03:42 am
El 2 en Batch:
Código
  1. @echo off
  2. :code
  3. set /p "numero=Numero : "
  4. if not defined numero (goto:code)
  5. if %numero% equ 0 (
  6. echo.Error
  7. exit /b 1
  8. )
  9. set /a "factorial=1"
  10. for /l %%_ in (1 1 %numero%) do (
  11. set /a factorial=factorial * %%_
  12. )
  13. echo.Factorial : %factorial%
  14. pause>nul
  15. exit /b 0
Salida:
Código:
Numero : 5
Factorial : 120

El problema 3 en Batch:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "numero=Numeros : "
  5. if not defined numero (goto:code)
  6. for /l %%_ in (1,1,%numero%) do (set /p "numeros[%%_]=numeros[%%_] : ")
  7. set "mayor=!numeros[1]!"
  8. for /l %%_ in (1,1,%numero%) do (
  9. if !numeros[% style="color: #448888;">%_]! geq !mayor! (set "mayor=!numeros[% style="color: #448888;">%_]!")
  10. )
  11. set "mayor"
  12. pause>nul
  13. exit /b 0

Salida:
Código:
Numeros : 5
numeros[1] : 34
numeros[2] : 6
numeros[3] : 36
numeros[4] : 567
numeros[5] : 23
mayor=567

El 5 en Batch:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. set "numero_=%numero%"
  7. set /a "contador-=1"
  8. :bucle
  9. set "numero=%numero:~1%"
  10. set /a "contador+=1"
  11. if defined numero (goto:bucle)
  12. :end
  13. for /l %%_ in (0,1,%contador%) do (<nul set /p "=!numero_:~% style="color: #448888;">%_,1! ")
  14. pause>nul
  15. exit /b 0

Salida:
Código:
Numero : 314592
3 1 4 5 9 2

El 6 en Batch:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. :: Checar que sea un numero real :
  7. echo %numero% | find "." > nul 2>&1 || (
  8. echo.El numero no es real.
  9. exit /b 1
  10. )
  11. for /f "tokens=1-2 delims=." %%^1 in ("%numero%") do (
  12. call:lenght %%^1
  13. echo.El numero "!numero!" tiene !contador! de parte entera.
  14. call:lenght %%^2
  15. echo.El numero "!numero!" tiene !contador! de parte decimal.
  16. )
  17. pause>nul
  18. exit /b 0
  19. :lenght
  20. set "cadena=%*"
  21. set /a "contador=0"
  22. :lenght2
  23. set "cadena=%cadena:~1%"
  24. set /a "contador+=1"
  25. if defined cadena (goto:lenght2)
  26. goto:eof
Salida:
Código:
Numero : 123.456456345
El numero "123.456456345" tiene 3 de parte entera.
El numero "123.456456345" tiene 9 de parte decimal.

Saludos.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke 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.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke 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. }


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: j retirado 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.  


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: ny0x 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.  


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 21 Junio 2009, 17:07 pm
x0ʎu
Muchas gracias, a esto quería llegar...
Diferentes soluciones, en diferentes lenguajes.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: ghastlyX 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 ;)


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke 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.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke 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. }


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN 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. }


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: leogtz 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;


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 7 Julio 2009, 02:06 am
Recien comenzando con python:

Ejercicio 2:
Código
  1. f=1
  2. n=input("Ingresa n:")
  3. i=1
  4. while(i<=n):
  5.    f=f*i
  6.    i=i+1
  7. print "F:",f

Ejercicio3

Código
  1. n=input("Ingresa Cantidad")
  2. x=input("Ingresa Numero")
  3. big=x
  4. i=1
  5. while(i<n):
  6.    x=input("Ingresa Numero")
  7.    if x>big:
  8.        big=x
  9.    i=i+1
  10. print "El mas grande: ",big


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 7 Julio 2009, 02:20 am
Ejercicio 4:

Código
  1. n=input("Ingrese cantidad")
  2. p=input("Ingrese primer numero")
  3. s=input("Ingrese segundo numero")
  4. if p<s:
  5.    aux=p
  6.    p=s
  7.    s=aux
  8. i=1
  9. while(i<=n-2):
  10.    a=input("Ingrese numero")
  11.    if p<a:
  12.        s=p
  13.        p=a
  14.    elif s<a:
  15.        s=a
  16.    i=i+1
  17. print "Segundo numero mas grande",s

Ejercicio 5
Código
  1. a=input("Ingrese numero")
  2. while(a!=0):
  3.    d=a%10
  4.    a=a/10
  5.    print "Digito:",d
   


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 7 Julio 2009, 02:50 am
Ejercicio 1. Variables indizadas:

Código
  1. import math
  2. import random
  3. n=input("Ingresa cantidad")
  4. list=[0]*n
  5. for i in range(n):
  6.    lista[i]=random.randint(0,100)
  7. menor=math.fabs(lista[0]-lista[1])
  8. print "Mostrar lista obtenida:"
  9. i=0
  10. tam=len(lista)
  11. while(i<tam):
  12. print lista[i]
  13. i=i+1
  14. menor=math.fabs(lista[0]-lista[1])
  15. pos1=0
  16. pos2=1
  17. i=0
  18. j=0
  19. while(i<tam):
  20. while(j<tam):
  21. if i<>j:
  22. vab=math.fabs(lista[i]-lista[j])
  23. if vab<menor:
  24. menor=vab
  25. pos1=i
  26. pos2=j
  27. j=j+1
  28. i=i+1
  29. print "Menor distacia:",menor," POS1: ",pos1," POS": ",pos2


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 7 Julio 2009, 21:46 pm
Programa para buscar primos en una matriz NxM, parecido al ejercicio 5 de FSend.

Código
  1. import random
  2. n=int(input("Ingresa las filas\n"))
  3. m=int(input("Ingresa las columnas\n"))
  4. matriz=[[0 for x in range(m)]for y in range(n)]
  5. i=0
  6. j=0
  7. while(i<n):
  8. while(j<m):
  9. matriz[i][j]=random.randint(0,100)
  10. j = j+1
  11. i = i+1
  12. j = 0
  13. i=0
  14. j=0
  15. print(matriz)
  16. def buscaprimo(num):
  17.    PD=2
  18.    while((PD<=num/2) and (num%PD<>0)):
  19.        PD=PD+1
  20.    if((PD>num/2) and (num<>1)):
  21.        return 1
  22.    else:
  23.        return 0
  24. i=0
  25. j=0
  26. while(i<n):
  27.    while(j<m):
  28.        z=matriz[i][j]
  29.        if(buscaprimo(z)==1):
  30.           print z
  31.        j=j+1
  32.    j=0
  33.    i=i+1


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 8 Julio 2009, 15:48 pm
El 2 y el 4 en Pascal:

Código
  1. program factorial;
  2. uses
  3.    crt;
  4. var
  5.   i,n,f:integer;
  6. begin
  7.     clrscr;
  8.     f:=1;
  9.     readln(n);
  10.     for i:=1 to n do
  11.     begin
  12.          f:=f*i;
  13.     end;
  14.     write(f);
  15.     readln(n);
  16. end.

Código
  1. program Untitled;
  2. uses
  3.    crt;
  4. var
  5.   n,p,s,i,a,aux:integer;
  6. begin
  7.     clrscr;
  8.     readln(n);
  9.     readln(p);
  10.     readln(s);
  11.     if p<s then
  12.     begin
  13.          aux:=p;
  14.          p:=s;
  15.          s:=aux;
  16.     end;
  17.     for i:=1 to n-2 do
  18.     begin
  19.          readln(a);
  20.          if p<a then
  21.          begin
  22.               s:=p;
  23.               p:=a;
  24.          end
  25.          else
  26.          begin
  27.              if s<a then
  28.              begin
  29.                 s:=a
  30.              end;
  31.          end;
  32.     end;
  33.     write(s);
  34.     readln(n);
  35. end.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: VonN en 8 Julio 2009, 16:44 pm
Ejercicio inserión + búsqueda binaria. Tema: Variables indizadas unidimensionales:

Código
  1. program Untitled;
  2. uses
  3.    crt;
  4. var
  5.   e,l,r,n,m,i,j:integer;
  6.   a: array[1..100] of integer;
  7. begin
  8.     clrscr;
  9.     writeln('Ingrese cantidad elementos');
  10.     readln(n);
  11.     writeln('Ingreso de elementos');
  12.     for i:=1 to n do
  13.     begin
  14.          readln(a[i]);
  15.     end;
  16.     writeln('Lista ingresada:');
  17.     for i:=1 to n do
  18.     begin
  19.          write(a[i],',');
  20.     end;
  21.     writeln('Ingrese e buscado');
  22.     readln(e);
  23.     l:=1;
  24.     r:=n+1;
  25.     while l<r do
  26.     begin
  27.          m:=((l+r)div 2);
  28.          if a[m]<e then
  29.          begin
  30.               l:=m+1;
  31.          end
  32.          else
  33.          begin
  34.               r:=m;
  35.          end;
  36.     end;
  37.     if a[r]=E then
  38.     begin
  39.          writeln('Su posicion es:');
  40.          write(r);
  41.     end
  42.     else
  43.     begin
  44.          for j:=n downto r do
  45.          begin
  46.               a[j+1]:=a[j];
  47.          end;
  48.          a[r]:=e;
  49.          writeln('Se produjo una insercion');
  50.     end;
  51.     readln();
  52. end.


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 11 Julio 2009, 02:37 am
Muy bien VonN, gracias por tu aporte!

Salu2!


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: Danther en 29 Julio 2009, 16:51 pm
Las matematicas no son mi fuerte, pero espero no haberme equivocado con lo que se pedia:

El primer ejercicio y el segundo juntos en Java:

Código
  1. import java.io.*;
  2.  
  3. public class Main{
  4.  
  5.    private BufferedReader bf;
  6.  
  7.    public Main(){
  8.        bf = new BufferedReader(new InputStreamReader(System.in));
  9.    }
  10.  
  11.    private int PedirFilas() throws IOException{
  12.  
  13.        int numFilas = 0;
  14.  
  15.        System.out.println("Introduce el numero de filas:");
  16.        String filas = bf.readLine();        
  17.        try{
  18.            numFilas = Integer.parseInt(filas);
  19.            if(numFilas < 0)
  20.                numFilas = Math.abs(numFilas);
  21.        }catch (Exception e){
  22.            System.out.println("El numero introducido no es valido");
  23.            System.exit(1);
  24.        }
  25.        return numFilas;
  26.    }
  27.  
  28.    private int PedirColumnas() throws IOException{
  29.  
  30.        int numColumnas = 0;
  31.  
  32.        System.out.println();
  33.        System.out.println("Introduce el numero de columnas:");
  34.        String columnas = bf.readLine();        
  35.        try{
  36.            numColumnas = Integer.parseInt(columnas);
  37.            if(numColumnas < 0)
  38.                numColumnas = Math.abs(numColumnas);
  39.        }catch (Exception e){
  40.            System.out.println("El numero introducido no es valido");
  41.            System.exit(1);
  42.        }
  43.        return numColumnas;
  44.    }
  45.  
  46.    private void MostrarMatriz(int filas, int columnas) throws IOException{
  47.  
  48.        int numLectura = 0;
  49.        int [][] matriz = new int[filas][columnas];
  50.  
  51.        System.out.println();
  52.        System.out.println("Indicame como quieres que se muestre.");
  53.        System.out.println("-------------------------------------");
  54.        System.out.println("1 - Por filas");
  55.        System.out.println("2 - Por columnas");
  56.        String lectura = bf.readLine();
  57.        InicializarMatriz(matriz, filas, columnas);
  58.  
  59.        try{
  60.            numLectura = Integer.parseInt(lectura);
  61.            if(numLectura != 1 && numLectura != 2){
  62.                System.out.println("El numero introducido no es valido");
  63.                System.exit(1);
  64.            }
  65.        }catch (Exception e){
  66.            System.out.println("El numero introducido no es valido");
  67.            System.exit(1);
  68.        }
  69.  
  70.        System.out.println();
  71.  
  72.        if(numLectura == 1){
  73.            for(int f = 0; f < filas; f++){
  74.                System.out.println("Fila "+(f+1));
  75.                for(int c = 0; c < columnas-1; c++){
  76.                    System.out.print(matriz[f][c]);
  77.                    System.out.print(" -- ");
  78.                }
  79.                System.out.print(matriz[f][columnas-1]);
  80.                System.out.println();
  81.            }
  82.        }else{
  83.            for(int c = 0; c < columnas; c++){
  84.                System.out.println("Columna "+(c+1));
  85.                for(int f = 0; f < filas-1; f++){
  86.                    System.out.print(matriz[f][c]);
  87.                    System.out.print(" -- ");
  88.                }
  89.                System.out.print(matriz[filas-1][c]);
  90.                System.out.println();
  91.            }
  92.        }
  93.    }
  94.  
  95.    private void InicializarMatriz(int[][] matriz, int filas, int columnas) {
  96.        for(int f = 0; f < filas; f++){
  97.            for(int c = 0; c < columnas; c++){
  98.                matriz[f][c] = (int)(Math.random()*100);
  99.            }
  100.        }              
  101.    }
  102.  
  103.  
  104.    public static void main(String[] args) throws IOException {
  105.        Main main = new Main();
  106.        main.MostrarMatriz(main.PedirFilas(), main.PedirColumnas());
  107.    }
  108.  
  109. }
  110.  


Pd: O java usa mucho codigo, o yo soy muy torpe... T.T XD


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: h0oke en 29 Julio 2009, 22:42 pm
Nunca he estudiado Java, pero puedo apreciar que te esmeras más en la "interfaz" que en el algoritmo del problema. Espero que se de una pasada Amerik@no para chekar el problema.

Un saludo!


Título: Re: Algoritmia-Ejercicios introductorios.
Publicado por: Shadowofvilla en 4 Agosto 2009, 05:39 am
muchas gracias por el aporte
saludos