|
Mostrar Temas
|
Páginas: [1]
|
1
|
Media / Multimedia / ¿Qué opinan del formato "rmvb"?
|
en: 29 Julio 2009, 14:03 pm
|
Que tal. He bajado varias peliculas en formato .rmvb y la verdad que me pareció muy bueno pues los ficheros pesan poco y la calidad se conserva notablemente. Pero de todas formas por lo visto no se usa mucho pues en la mayoria de los sitios usan otros formatos (que generan ficheros mas pesados y con una calidad en mi opinion practicamente la misma).
¿Alguien usa el formato rmvb? ¿Qué le pareció?
Saludos.
PD: Espero no haber posteado inadecuadamente en este subforo, pues es la primera q lo hago...
|
|
|
2
|
Programación / Ejercicios / Problema de digitos de un número.
|
en: 28 Julio 2009, 00:14 am
|
Enunciado: Un número se dice automórfico si su cuadrado termina en los mismos dígitos que el número original, por ejemplo 76^=5776. Un número se dice trimórfico si su cubo termina en los mismo dígitos que el número original, por ejemplo 5^3=125. Determinar los números automórficos y trimórficos menores que un número natural K dado, indicando además su cualidad de automórfico y/o trimórfico según corresponda. De todas formas esta bueno generalizar la solución para calcular si un número es k-mórfico (o como se quiera llamar). Es decir, hacer un algoritmo que calcule para cualquier potencia, no solo para 2 y 3. Yo llegue a estas dos soluciones: Primera (no óptima...):#include <stdio.h> #include <math.h> #include <stdlib.h> #define FALSE 0 #define TRUE !FALSE typedef int Bool; int cant_digitos(int numero) { int cifras; for(cifras =0; pow(10, cifras )<=numero ; cifras ++) ; return cifras; } void array_digitos(int numero, int numero2) { int cifras = cant_digitos(numero); int *array = (int *) calloc (cifras , sizeof(int)); int *array2 = (int *) calloc (cifras , sizeof(int)); int i = 0; while(cifras>0) { array[i] = numero%10; array2[i] = numero2%10; numero = numero/10; numero2 = numero2/10; i++; cifras--; } int j; for(j=0; j<i; j++) printf("array[%d] = %d y array2[%d] = %d\n", j , array [j ], j , array2 [j ]); Bool b=TRUE; j=0; for(; j<i; j++) { if(array[j] != array2[j]) { b = FALSE; break; } } free(array2 ); array2 =NULL ; if(b ) printf("Si se cumple la propiedad\n"); else printf("No se cumple la propiedad\n"); } void array_digitos2(int numero, int numero2, int n) { int copia = numero; int cifras = cant_digitos(numero); int *array = (int *) calloc (cifras , sizeof(int)); int *array2 = (int *) calloc (cifras , sizeof(int)); int j, i; i=0; while(cifras>0) { array[i] = numero%10; array2[i] = numero2%10; numero = numero/10; numero2 = numero2/10; i++; cifras--; } Bool b=TRUE; for(j=0; j<i; j++) { if(array[j] != array2[j]) { b = FALSE; break; } } free(array2 ); array2 =NULL ; if(b) printf("%d es %d-morfico. Pues %d^%d=%f\n", copia , n , copia , n , pow(copia ,n )); } int main() { printf("Chequear hasta Exponente: "); scanf("%d", &exp ); for(i=2; i<=k; i++) array_digitos2 (i , pow(i , j ), j ); return 0; }
Segunda (mejor pues usa variables simples):#include <stdio.h> #include <stdlib.h> #include <math.h> #define FALSE 0 #define TRUE !FALSE typedef int Bool; long int potencia(int a, int b) { if (b<=0) return 1; else return a*potencia(a,b-1); } void funcion (int num , int exp) { Bool b = TRUE; int num2, cifras, copia=num; num2 = potencia (num , exp); for(cifras=0; potencia(10,cifras)<=num; cifras++) ; /* printf("num: %d, cifras: %d, num2: %d \n", num, cifras, num2); */ while(cifras>0) { /* printf("%d>0, %d(mod 10)=%d == %d(mod 10)=%d \n", cifras, num, num%10, num2, num2%10); */ if(num%10 != num2%10) { /* printf("Luego %d>0, %d(mod 10)=%d == %d(mod 10)=%d \n", cifras, num, num%10, num2, num2%10); */ b = FALSE; break; } num = num/10; num2 = num2/10; cifras--; } if(b ) printf("%d es automórfico. Pues %d^%d=%ld\n", copia , copia , exp, potencia (copia ,exp) ); /* else printf("\nNo es automórfico. Pues %d^%d=%ld\n", copia, exp, potencia(copia, exp)); */ } int main() { printf("ingrese hasta que exponente: "); scanf("%d", &exp ); for(i=2; i<=k; i++) funcion(i, j); return 0; }
Bienvenida es cualquier critica constructiva pues para aprender estamos aqui, y otras soluciones alternativas. Saludos.
|
|
|
3
|
Programación / Ejercicios / Problema: Búsqueda en Array
|
en: 28 Junio 2009, 21:15 pm
|
Problema: Se recibe un arreglo X de numeros enteros definido en [0, n-1] y un entero x. Se quiere determinar si existen i, j en [0, n-1] tal que X + X[j] = x. Diseñe un algoritmo para resolver el problema cuya complejidad sea O(n*log(n)).
Plantear más soluciones. #include <stdio.h> #include <stdlib.h> #define FALSE 0 #define TRUE !FALSE typedef int Bool; /* Algoritmo O(n^2). Analizando todos los casos. */ Bool f1(int *a, int x, int tam); /* Algoritmo O(n*log(n)). Ordeno con quicksort y uso busqueda binaria "n" veces. Me queda 2*n*log(n) que es O(n*log(n))*/ Bool f2(int *a, int x, int tam); void quicksort(int *, int, int); void pivot(int *, int, int, int *); void swap(int *, int, int); int main() { int tam, contador, x; Bool b; printf("Tamaño del array (>=2): "); int *a = (int *) calloc (tam , sizeof(int)); for(contador=0; contador<tam; contador++) { printf("Ingrese el contenido de la celda %d: ", contador ); scanf("%d", &a [contador ]); } for(contador=0; contador<tam; contador++) /* ********************************************** */ b = f2(a, x, tam); /* solo cambiar "f1" por "f2" para cambiar de algoritmos */ if(b == TRUE) else printf("\n\nNo hay solucion\n"); /* ********************************************** */ a=NULL; return 0; } /* Algoritmo O(n^2). Analizando todos los casos. */ Bool f1(int *a, int x, int tam) { Bool b=FALSE; int i, j; for(i=0; i<tam; i++) for(j=0; j<tam; j++) if(a[j]+a[i] == x) return b=TRUE; /* solución encontrada */ return b; /* no hay solución */ } /* Algoritmo O(n*log(n)). Ordeno con quicksort y uso busqueda binaria "n" veces. */ Bool f2(int *a, int x, int tam) { quicksort(a, 0, tam-1); Bool b = FALSE; int izq=0, med, der=tam-1, k=0; while(izq<=der && !b && k<tam) { med = (izq+der)/2; if( x<(a[k]+a[med]) ) der = med; else if ( x>(a[k]+a[med]) ) izq = med; else if ( x==(a[k]+a[med]) ) return b=TRUE; /* hay solución */ k++; } return b; /* no hay solución */ } void quicksort(int *a, int izq, int der) { int piv; if(izq<der) { pivot(a, izq, der, &piv); /* { Para todo x en a: a[izq,piv] son <= a[piv] && */ /* Para todo x en a: a[piv+1,der] son > a[piv] } */ quicksort(a, izq, piv-1); quicksort(a, piv+1, der); } } void pivot(int *a, int izq, int der, int *piv) { int i = izq+1; int j = der; *piv = izq; while(i <= j) { /* { *piv<i<=j+1 && (Para todo x en a: a[izq,i]<=a[*piv]) && (Para todo x en a: a[j+1,der] > a[*piv]) } */ if(a[i] <= a[*piv]) i=i+1; else if(a[j] > a[*piv]) j=j-1; else if(a[i] > a[*piv] && a[j] <= a[*piv]) { swap(a, i, j); i = i+1; j = j+1; } } /* i vale j+1, (Para todo x en a: a[izq,j] <= a[*piv]) && (Para todo x en a: a[i,der] > a[piv] */ /* dejando el pivot en una posición más central */ swap(a, *piv, j); /* nueva posición para pivot */ *piv = j; } void swap(int *a, int i, int j) { int aux = a[i]; a[i] = a[j]; a[j] = aux; }
Saludos
|
|
|
4
|
Programación / Ejercicios / Problema de strings: Palindromos.
|
en: 27 Junio 2009, 21:31 pm
|
Para ver qué es un palindromo, véase Palindromo. Posteen más soluciones. /* Algoritmo que te dice si una palabra es palindromo */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define ES_PALIN printf("\n\nEs palindromo\n\n"); #define NO_PALIN printf("\n\nNo es palindromo\n\n"); #define FALSE 0 #define TRUE !FALSE typedef int Bool; void es_palindromo(char *a) { Bool b = TRUE; int i; for(i=0; i<strlen(a); i++, ultPos--) { if(a[i] != a[ultPos]) { b = FALSE; break; } } if(b) ES_PALIN else NO_PALIN; } int main() { char *a = (char *) calloc (20, sizeof(char)); es_palindromo(a); return 0; }
Saludos.
|
|
|
|
|
|
|