sábado, 30 de mayo de 2009

Ayuyadigital

Un número es "Ayuyadigital" si todos sus digitos son distintos, esta es una variación del programa esPandigital que se paso en el laboratorio 6, en esta ocacion se usan punteros de una forma basica.
____________________________________________________
#include <stdio.h>
#include <stdlib.h>

int cuentadigitos(long long unsigned int);
int esAyuyadigital(long long unsigned int);

int main(void){
long long unsigned int numero;
printf("Ingrese su numero: ");
scanf("%I64u", &numero);
if (esAyuyadigital(numero)==-1){
printf("no se pudo asignar memoria\n");
system("pause"); return 0;}
/*esto de arriba es solo formalidad, es raro que con un programa como este se
acabe la memoria del computador*/
else if (esAyuyadigital(numero)==1) printf("%I64u es ayuyadigital\n", numero);
else printf("%I64u no es ayuyadigital\n", numero);
system("pause");
return 0;
}
int esAyuyadigital(long long unsigned int argumento){
short int* puntero,i,j; /*short porque solo almacenaremos los digitos que
son números pequeños, y contadores que no llegaran a numeros muy grandes*/
int n=cuentadigitos(argumento);/*Aca llamamos a una funcion simple que
cuenta los digitos del número*/
puntero=(short int*)malloc(n*sizeof(short int));//Asignamos memoria
if (puntero==NULL)
return -1;//retorna -1 para decir que hubo error en memoria
for(i=0;n>i;i+++){
*(puntero+i)=argumento%10;/*Guardamos cada digito en la
i-esima posicion del puntero*/
argumento/=10;
}
for(i=0;n>i;i++)/*ahora revisamos si tiene dos digitos iguales, si es asi,
se sale inmediatamente del programa, se debe considerar la salvedad de que i
y j deben ser distintos*/
for(j=0;n>j;j++){
if ((*(puntero+i)==*(puntero+j))&&(i!=j))
return 0;
}
}
return 1;
}

int cuentadigitos(long long unsigned int argumento){
/*Esto ya se a explicado bastante por lo cual no lo comentare*/
int contador=0;
while (argumento>0){
argumento/=10;
contador++;
}
return contador;
}
________________________________________________________

jueves, 28 de mayo de 2009

Aquí les entrego el programa para calcular raices cuadradas por el metodo de Newton Rapson que vimos en la practica de hoy.
__________________________________________________________
#include <stdio.h>
#include <stdlib.h>

double newton(double, double); /*Declaramos un prototipo de
funcion que recibe dos argumentos de tipo double*/
int main(void){
double x, e; //esta x no es necesariamente igual que la x
//de la funcion, ya que no es de alcance global
printf("Ingrese x: ");scanf("%lf", &x);//los datos deben ser de tipo flotante
printf("Ingrese e: ");scanf("%lf", &e);//y de doble presición
printf("La raiz de x es %lf, con una tolerancia de %.10lf\n", newton(x,e), e);
//en la linea superior llamamos a la funcion dentro del printf.
system("pause");
return 0;
}
double newton(double x,double epsilon){
double a=1; //La aproximación inicial es 1
int i=0, max_iter=100000000;//iteraciones maximas, si sobrepasa dichas iteraciones
//El programa se cierra, es opcional
if (x<0) //si calculamos la raiz de un número negativo
return -1; //el programa retorna un -1
while (((a*a-x)>=epsilon)||((a*a-x)<=(-1*epsilon))) //mientras el error sea
{a=(x/a+a)/2;i++; //Mayor que la tolerancia
//Siga realizando el ciclo
if (i>max_iter){
printf("Warning: Maximo numero de iteraciones excedidas\n");
return a;}}
return a;
} //luego retorne el valor
________________________________________________________
La comente bastante, pero si hay dudas posteenlas en los comentarios o a mi correo

sábado, 16 de mayo de 2009

Laboratorios Resueltos

Aca les entrego una copia de mis resoluciones de los laboratorios, les recuerdo que a pesar de que las resuelvo yo, no estan revisadas por el profesor y podrían tener uno que otro error  ya que los realizo rapido solo para ver si tiene la dificultad adecuada(Aunque de verdad no creo que haya error alguno).

Ademas les ruego a todos que se pongan de acuerdo deprisa en cuando al horario que les acomoda para la hora extra de practica, ya que mientras mas esperamos mas se perderan en la materia.

jueves, 7 de mayo de 2009

Ciclos y funciones

Aca les entrego un ejemplo más de ciclos, para los que estan perdidos todavia, en esta oportunidad es un programa que calcula el factorial de un número, y tambien entrego su equivalente en funciones, para que vayan adelantando algo de materia.
Si no entienden el ciclo todavia.... PONGANSE A ESTUDIAR.
Pueden descargar los códigos aqui