F1 Help! La solución que buscabas

Desarrollo, programación, tips, consejos y soluciones para los usarios de PC

viernes, 20 de noviembre de 2009

Numeros Palindromos (Capicuas)

En esta entrega chekearemos si un numero es palindromo, es decir, si es capicua (se lee igual de izquierda a derecha o viceversa).

La funcion es simple calculamos el numero inverso y despues camparamos:

int palindromo(int numero){
int original, inverso, digito;
original = numero;
inverso = 0;
while (numero != 0){
digito = numero % 10;
inverso = inverso * 10 + digito;
numero = numero / 10;
}
if (inverso == original) return 1;
return 0;
}

Podemos observar, que en el while se calcula el numero inverso. Simplemente se calcula el resto de dividir el numero por 10. Esto nos da el primer digito. A nuestro numero inverso lo multiplicamos por diez y le sumamos ese resto, para agregarle que obtuvimos antes. Y por ultimo a nuestro numero le calculamos la division entera (en c es por defecto al ser variables enteras) por 10 para quitar el digito leido.

Despues ponemos un IF para determinar la igualdad entre el numero y el inverso obtenido.

Maximo Comun Divisor

En esta entrada les paso un algoritmo hecho en C para calcular el maximo cumun divisor entre dos numeros enteros:

int mcd(int a,int b){
while (a!=b){
if(a>b) a = a -b;
if(b>a) b = b-a;
}
return a;
}

Determinar si un Numero es Primo

Aca les dejo una funcion para calcular si un numero es primo.
#include
int esprimo (int a){
int i;
if ( a == 2 || a==1 || a==3 ) return 1;
for ( i = 3; i <= (int)sqrt (a); i = i + 2) if ( a % i == 0 ) return 0;
return 1;
}

No es de las funciones mas eficiente si hay que calcular muchos numeros primos, pero para saber en particular si un numero es primo sirve.

En una proxima entrada le pasare un algoritmo conocido como la Criba de Eratóstenes, que que permite hallar todos los números primos menores que un número natural dado N.



martes, 17 de noviembre de 2009

Calcular Valor Absoluto

En esta entrada les paso un simple codigo para calcular el valor absoluto de un Short (16 bits) en una sola linea:

n = (n ^ (n>>15)) - (n>>15);

Un simple programa implementando esto:

int main(void){
short int n = -5510;
n = (n ^ (n>>15)) - (n>>15);
printf("Valor Absoluto %i \n",n);
}


En Assembler se puede implementar en tres simples lineas.
Aca les paso la misma funcion para Assembler con Sintaxys de AT&T (compila con Gcc):

.data
num:.long -145 # Numero a negar
p: .string "Numero Negado: %d\n" # String para mostrar el numero
.text
.global main
main:
movl num, %eax
movl %eax,%ebx # esta dos lineas cargo el numero en registro

sarl $15,%ebx
xorl %ebx, %eax
subl %ebx, %eax # esta tres lineas calculan el valor absoluto
pushl %eax
pushl $p
call printf # tres lineas para mostrarlo
addl $8, %esp

ret

lunes, 9 de noviembre de 2009

Agregando usuarios a samba

Es facil, pero puede traer dolores de cabeza

#useradd -s /sbin/nologin usuario
# smbpasswd -a usuario
#smbpasswd -e usuario
/etc/init.d / smbd restart

y voila