Estimados Alumnos:
No habra clases el jueves practicas el jueves, espero que entiendan que dichas practicas son un esfuerzo extra de mi parte, y en estos momentos estoy con certamenes, asi que intentare subirles algun ejemplo durante la semana en lugar de la practica.
lunes, 8 de junio de 2009
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
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.
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
Si no entienden el ciclo todavia.... PONGANSE A ESTUDIAR.
Pueden descargar los códigos aqui
domingo, 26 de abril de 2009
Consultas.
Esta semana solo atendere consultas el dia lunes, el martes tengo clases todo el dia y el miercoles voy a estudiar para un certamen del jueves, asi que aprovechen para hacer todas las consultas que tengo el lunes, estare practicamente todo el dia en la sala de estudio del DIE, el resto de los dias solo atendere consultas via E-mail a alejandrowolf@udec.cl con asunto en el mensaje ALP2009, y no les garantizo que les responda el mismo día
Como bonus les entrego un programita que tal vez los ilumine un poco ;-)
Como bonus les entrego un programita que tal vez los ilumine un poco ;-)
___________________________________________________
#include <stdio.h>#include <stdlib.h>
#include <limits.h>int main(void){ /*Este programa imprime el valor maximo de cada tipo de dato y la forma que se debe usar para imprimirlo*/ printf("Short int max=\t\t%i\n", SHRT_MAX); printf("int max=\t\t%d\n", INT_MAX); printf("Unsigned int max=\t%u\n", UINT_MAX); printf("Long Max=\t\t%I64d\n", LONG_MAX); printf("Long Long Max=\t\t%I64d\n", LLONG_MAX); system("pause"); return 0; }
miércoles, 22 de abril de 2009
Tarea 1:
Con respecto a la tarea 1, me ha llegado varias veces la misma duda:
lo que le piden calcular es la sumatoria de fiboncacci(n) con fibonacci(n) par,no con n par.
Con respecto a la tarea 1, me ha llegado varias veces la misma duda:
lo que le piden calcular es la sumatoria de fiboncacci(n) con fibonacci(n) par,no con n par.
Por ejemplo, la serie de fibonacci comienza asi:
Fibonacci(0)=0
Fibonacci(1)=1
Fibonacci(0)=0
Fibonacci(1)=1
Fibonacci(2)=1
Fibonacci(3)=2
Fibonacci(3)=2
Fibonacci(4)=3
Fibonacci(5)=5
Fibonacci(6)=8
Fibonacci(7)=13
etc etc...
entonces la suma de los terminos pares de la serie de fibonacci sería:
0+2+8+..... etc etc
Fibonacci(5)=5
Fibonacci(6)=8
Fibonacci(7)=13
etc etc...
entonces la suma de los terminos pares de la serie de fibonacci sería:
0+2+8+..... etc etc
Atendere consultas a travez de mi correo alejandrowolf@udec.cl, Favor de poner en el asunto ALP2009.
Es recomendable que hagan la tarea desde ya
domingo, 12 de abril de 2009
Ejemplos Bucles
Les escribo dos programas que hacen exactamente lo mismo. Solo que uno con ciclo while, y otro con ciclo for, lo que hacen es imprimir una tabla de equivalencia entre grados Celsius y Fahrenheit.
_________________________________________________________________
_________________________________________________________________
#include <stdio.h>
#include <stdlib.h>
int main(void){
float Celsius, fahr;
int lower = 0;
int upper = 300;
int paso = 30;
fahr=lower;
while (fahr <= upper){
Celsius = 5.0/9.0*(fahr-32);
printf("%.1f\t%.1f\n", fahr, Celsius);
fahr=fahr+paso;
}
system("pause");
return 0;
}
_________________________________________________________________
#include <stdio.h>
#include <stdlib.h>
int main(void){
float i;
for(i=0;i<300;i=i+30)
printf("%.1f\t%.1f\n", i, 5.0/9.0*(i-32));
system("pause");
return 0;
}
_________________________________________________________________
Analisenlos y preparense para el laboratorio del miercoles
el \t en el printf es un tabulador, y el .1 antes indica que se mostraran hasta 1 decimal de la variable en punto flotante, las expresiones que aparecen en el ciclo While, son expresiónes logicas (algebra y algebra lineal, supongo que todos fueron a las primeras clases en ese curso y si no, mejor ponganse a estudiar logica) Mientras esa expresión logica sea verdad, el ciclo seguira su funcionamiento, en el ciclo for, la expresión logica es la del medio, las otras dos, son la inicialisación de una variable y el incremento que se le da en cada ciclo.
Ya les di bastante información, Se que la mayoria tiene certamen de electromagnetismo, pero no les quitara mucho tiempo hecharles un ojo a los codigos
Ya les di bastante información, Se que la mayoria tiene certamen de electromagnetismo, pero no les quitara mucho tiempo hecharles un ojo a los codigos
miércoles, 8 de abril de 2009
Corrección del Laboratorio 1
En el laboratorio 1 algunos alumnos me preguntaron por el procedimiento para realizar el problema 4, el codigo aca:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int dato;
unsigned char byte3, byte2, byte1, byte0;
printf("Ingrese un numero: ");
scanf("%d", &dato);
/*Inserte su codigo aqui*/
byte0=dato&(0xff);
byte1=(dato>>8)&(0xff);
byte2=(dato>>16)&(0xff);
byte3=(dato>>24)&(0xff);
printf("El numero es %#x\n", dato);
printf("Sus bytes son %#x %#x %#x %#x\n", byte3, byte2, byte1, byte0);
system("pause");
return 0;
}
Suscribirse a:
Entradas (Atom)