“Mi estilo es el arte de luchar, sin luchar”

Artes Marciales

2007-11-12 21:47:39-06

General





Permalink: http://www.mononeurona.org/users/entry/vendaval/940


Aprendiendo C (5ta Parte)

2007-11-09 10:59:25-06

Software

veremos un nuevo ejemplo para introducirnos

#include<stdio.h>
#define NUM 10

int main()// Inicio del programa
{
int A[NUM], i; /*Vector,arreglo de enteros y un indice*/

printf("Introduce 10 numeros\n");

for(i=0;i<10;i++)
    scanf("%d", &A[i]);
 
printf("Tus numeros son:\n");
for(i=9;i>=0;i--)
    printf("%d ",A[i]);

printf("\n");

return 0;
}//fin del programa


En la primera linea del main() declaramos un Arreglo (int A[NUM]) la declaracion del arreglo se hace asignadole un nombre (A) y un tamaño (NUM), asi como un tipo (int). Un arreglo es una estructura de datos que asigna espacios consecutivos en memoria del tamaño del tipo declarado.

Para "movernos" dentro del arreglo ocupamos los subindices, cada subindice indica un valor dentro del arreglo, en C los subindices comienzan en 0, la asignacion de un valor se hace a cada elemento, nota que usamos un ciclo for para llenar el arreglo, aunque se puede usar otro ciclo o asignar individualmente una valor a cada elemento. tambiense pueden asignar los valores en la declaracion, veamos el siguiente ejemplo:

#include<stdio.h>
#define TAM 10

int main()//Inicio de la funcion principal
{
int Arreglo[]={1,2,3,4,5,6,7,8,9,0};//declaracion del arreglo
int i,j;

for(i=0;i<TAM;i++)//imprime un histograma de frecuencias
    {
    for(j=1;j<=Arreglo[i];j++)
        printf("*");
    printf("\n");
    }    

printf("Cambia los valores: ");

for(i=0;i<TAM;i++)
    scanf("%d",&Arreglo[i]); //Modificalos valores iniciales

for(i=0;i<TAM;i++)//imprime un nuevo histograma
    {
    for(j=1;j<=Arreglo[i];j++)
        printf("*");
    printf("\n");
    }

return 0;
}//Fin funcion principal

Nota que esta vez declaramos el arreglo con la lista de sus elementos,no declaramos el numero de elementos que tenia,pero si el tipo y el nombre. un arreglo se puede ver como un conjunto de variables del mismo tipo,eso nos evita declarar muchas variables individuales y ademas facilita la programacion gracias a los subindices.

El tipo del arreglo puede ser cualquiera, ademas un arreglo tiene una fuerte conexion con los apuntadores, que es una de las caracteristicas mas poderosas del lenguaje. dada esta conexion nota que si asignas un valor a Arreglo, es lo mismo que si asignaras un valor a Arreglo[0].

Es importante saber que los subindices son siempre valores enteros, no tiene sentido una posicion no entera,bueno dada esta propiedad de los subindices juguemos y vamos unas posibilidades en el siguiente ejemplo:

#include<stdio.h>

int main()/*Inicio funcion principal*/
{
int i,j,tam;
float temp;

printf("Introduce el tamanio del arreglo: ");
scanf("%d", &tam);

float A[tam];//declaracion del arreglo

printf("Introduce los valores flotantes");
for(i=0;i<tam;i++)
    scanf("%f", &A[i]);

for(i=1;i<tam;i++)//Ordenamiento metodo de la burbuja
    for(j=0;j<tam-1;j++)
        if(A[j]>A[j+1])
            {
            temp=A[j];
            A[j]=A[j+1];
            A[j+1]=temp;
            }
           
printf("Arreglo ordenado\n");
for(i=0;i<tam;i++)
    printf("%f ", A[i]);

printf("\n");

return 0;
}//Fin Funcion principal


Nota como podemos hacer operaciones en los subindices, esto siempre y cuando regresen valores enteros

Solo una nota breve sobre el ordenamiento, El ordenamiento es una de las aplicaciones computacionales mas  importantes, el metodo de ordenamiento de la burbuja (Bubble Sort) es muy facil de programar y entender, sin embargo, es la PEOR forma de ordenar un conjunto de datos, existen alrededor de unos 300 metodos de ordenamiento, yo sinceramente conozco como quince, sea cual sea el caso, Nunca ordenen por este metodo cuando la cantidad de datos sea grande, para aprender esta bien ;).

Hoy vimos

1.-Declaracion de arreglos
2.-Manejo de subindices
3:-Asignaciones de valor a elementos del arreglo.

Les dejo un pequeño problema: Imagina un ordenamiento en zic zac, es el metodo de la burbuja, pero pasa hacia delante y luego hacia atras, esto quiere decir que en una pasada  (ida y vuelta) el valor mas grande y mas pequeño quedan acomodados y asi sucesivamente, notaras que no requiere todas las iteraciones del metodo de la burbuja tradicional.

Programalo y optimizalo. Si puedes ponlo en los comentarios,recuerda "Muestra tu Codigo".

Permalink: http://www.mononeurona.org/users/entry/vendaval/937


Aprendiendo C (4ta Parte)

2007-11-01 10:23:18-06

Software

Una nota breve acompañada de una pequeña historia.

Un día un reportero se le acerco a Bruce Lee y le dijo que había alguien que lo retaría y que podia lanzar miles de patadas distintas, Bruce Contesto "No tengo miedo del hombre que pueda lanzar 10,000 patadas distintas, temo al hombre que a lanzado una patada 10,000 veces". Disculpen que los problemas parezcan sencillos y repetitivos, pero yo en lo particular pienso ( y es la filosofia de este curso) que el maestro domina lo basico y ese diminio lo lleva a comprender las cosas superiores.

Retomando el curso veamos un nuevo ejemplo de código:

/*Programa que hace una cuenta hacia delante y hacia atrás del numero dado*/
#include<stdio.h>

int main() /*Inicio del programa*/
{
int n, i=0, j; /*Declaro variables*/

printf("Hasta que numero quieres contar??? : ");
scanf("%d", &n); /*Leo y asigno un valor entero a la variable*/

while(i<=n) /*Ciclo While mientras 'i' sea menor o igual que 'n'*/
{
printf("%d ",i);
++i; //Operador de incremento (++) suma uno a la variable es igual a i=i+1; pero mas elegante
}

for(j=n;j>=0;j--) /*Ciclo for, cuenta regresiva usando el operador decremento (--)*/
printf("%d ",j);

return 0;
}//Fin de main()


Pues tenemos un nuevo elemento se trata del ciclo while, este realizara las instrucciones que estén dentro de su cuerpo mientras su condición sea verdadera (distinta de cero 0), la condición se encuentra entre los paréntesis y debe modificarse (comúnmente) dentro del cuerpo del ciclo, Dese este momento debemos cuidar que nuestros programas no se ciclen hasta el infinito ("y mas alla" ;) ) , es importante saber que la expresion se evalua antes de iniciar el ciclo, entonces si la condición es falsa no se realizara ninguna acción del cuerpo del ciclo. Su sintaxis es así

while(expresion)
instrucciones

ó

while(expresion)
{
Instruccion
instruccion
...
instruccion
}

La expresión suele ser una comparación pero puede ser una variable o -incluso- una constante. el ciclo for es una version simplificada de while, pues incluye todos los elementos de control del ciclo en una sola parte.

for( Expresion1;Expresion2; Expresion3)
{
....
}

Es igual a:

Expresion1;
while(Expresion2)
{
....
Expresion3;
}

Expresion1 suele ser la inicializacion de una variable, la Expresion2 podria ser una comparacion y la tercera una modificación en una variable, pero todo esto es optativo para el ciclo for, pues la sintaxis puede ser asi for( ; ; ) lo que nos llevaría a un ciclo infinito

Decidir entre una u otra expresión suele ser cuestión de gustos o legibilidad. Aunque en situaciones mas complejas como cuando se usa continue del que hablare mas adelante.

Tambien tenemos los operadores de incremento(++) y decremento(--), estos operadores son muy utiles pues facilitan muchas operaciones. Existen algunos detalles que es importante destacar, estos operadores dependiendo de que lado del operando se ponga se evalúan en un tiempo distinto, si ponen antes (++i) se incrementan primero y luego se evalúan, si lo pones del lado derecho (i++) primero se evaluan y luego se incrementa, es lo mismo para el operador decremento. Estas anotaciones tienen que ser tomadas en cuenta cuando los operadores estan dentro de una expresión mas compleja.

Veamos un nuevo ejemplo

/*Otro Contador*/
#include<stdio.h>

int main() // Inicio programa principal
{
int i;
for(i=0;i<=10;i++)
{
if(2==i)
continue; //indica que continue en la sig. iterasion del ciclo
if(9==i)
break; // Indica que salga del ciclo
printf("%d ",i); //Imprime el valor de i
}

return 0;
} /* Fin programa principal*/


Compila y prueba.

Continue indica que pase a la siguiente Iteracion del ciclo,sin terminar las instrucciones de la iteracion presente, esta sentencia NUNCA debe usarse en el ciclo while esto por que se desconocera cual es la siguiente iteracion debido a que las variables de control estan en el cuerpo del ciclo.

Break dice que se saldra del ciclo donde se encuentre, esto permite terminar ciclos antes de que se cumpla la condicion de paro.

Un ultimo ejemplo por hoy.

/*Programa "hoy es navidad???"*/
#include<stdio.h>

int main() /*Inicio del programa */
{
char c;
do
{
printf("HOY ES NAVIDAD??? (y/n)");
scanf("%c", &c);
if(c=='y')
printf("FELIZ NAVIDAD\n");
}While(c=='n');

return 0;
}/*Fin */


DO...WHILE() -hacer...mientras- Es una variante del ciclo while que ejecuta al menos una vez la accion, esto por que primero realiza las instruciones dentro del cuerpo y luego evalua la expresion si la expresiones verdadera repite el ciclo.Su sintaxis es asi:

do
{
Instruccion
Instruccion
....
Instruccion
}while(Expresion);

Nota el punto y coma despues de while.


Hoy aprendimos:

1.-Ciclo while.
2.-Ciclo for
3.-Operadores de incremento y decremento (++ y --)
4.-Continue y break;
5.-Do..while

Despues de la siguiente entrada vendra una ronda de ejercicios, algunos que no los dejaran dormir.

Permalink: http://www.mononeurona.org/users/entry/vendaval/914


Aprendiendo C (3ra Parte)

2007-10-26 13:20:40-05

Software

Continuamos con la explicación sobre los tipos de datos.

Bueno diremos que existen tipos de datos primitivos y otros creados por el usuario.
los datos primitivos son los siguientes (ya había mencionado a varios de ellos)

Tipo Descripcion
char Caracteres
int Entero
float Numero de punto flotante con precisión simple
double Numero de punto flotante con precisión doble
void Tipo Nulo
apuntador Direccion de memoria

Los tipos de datos están sujetos aun tamaño, esto quiere decir que hay un valor máximo que se puede representar con una variable de ese tipo. El tamaño de dato depende fuertemente de la maquina,por ejemplo el tamaño de un int (entero) puede estar en 16 bits o 32 bits, El tipo char en C estándar mide siempre 8 bits este numero basta para poder representar cualquier carácter ascii,  El float esta en 32bits y el double en 64bits. pero como exprese antes depende de tu maquina, pero pues podemos hacer algo para saberlo, C ofrece la función "sizeof()" que obtiene el tamaño de su argumento. veamos como se usa con un ejemplo sencillo:

#include<stdio.h>

int main()
{
printf("%d %d %d %d\n",sizeof(char), sizeof(int), sizeof(float), sizeof(double));
return 0;
}


El Resultado lo entrega en bytes (8 bits), digamos que tu necesitas valores mas chicos o grandes, pues puedes usar modificadores como "short" y "long", habrá otras veces que solo quieras trabajar con números positivos, entonces defines la variable como "unsigned", que tiene una contra parte "signed" que es el dafault.

/*Ejercicio: Modifica el programa anterior para que muestre los tamaños de long int y shot int, lo mismo para los demás tipos ,escribe los así sizeof(long int),etc*/

Tal vez alguien dijo y ese tipo nulo "void", seguro que alguna vez querrás hacer algo que ejecute una acción pero que no te devuelva nada, para eso es el tipo void, si no me entendiste cuando veamos funciones te quedara muy claro

Los datos definidos por el usuario los veremos mas adelante, de momento no los necesitaremos, pero su existencia le dan gran potencia C.

Usemos un ejemplo para entrar en otros temas.

#include<stdio.h>
#define PI 3.1416 /*Constante simbolica*/

int main()
{
float entrada, salida;
char c;

printf("Introduce que deseas calcular del circulo:\n");
printf("Area presiona 'a'\nPerimetro presiona 'p'\n");
scanf("%c", &c);

if(c=='a') /*sentesia if y expresion  de comparación*/
    {
    printf("Introduce el radio:");
    scanf("%f"",&entrada);
    salida=PI*(entrada*entrada);
    }
else if(c=='p') /*else y segunda comparacion*/
    {
    printf("Introduce el diametro:");
    scanf("%f", &entrada);
    salida=entrada*PI;
    }
else /*caso default*/
    printf("Entrada Erronea\n");

printf("El resultado es:%f\n", salida);
return 0;
} //fin de la funcion principal


La primera novedad en la segunda linea encontramos una "constante simbolica" que llamamos varias veces en el cuerpo del programa,no se le puede asignar ningun valor dentro del programa por que generaria un error, en realidad, el #define le dice al preprocesador de C,que en cualquier lugar que encuentre la coincidencia PI la substituya por 3.1416, esto es de gran utilidad, imagina que de repente solo quieren que hagas el calculo con 3.14 o 3.1415...,entonces solo basta modificar el valor de la constante y listo. gracias a esta opcion podemos substituir muchas cosas como valores de constantes fisicas o formulas, Nota que se escribe como un encabezado pero que en vez de #include ocupa un #define.

Encontramos las sentencia if, esta sentencia es muy importante, pues permite que nuestros programas "Tomen decisiones" por medio de la condicion que reciben como argumento, veamos el primer if:  if(c=='a') dentro de su argumento tenemos una comparacion (o podemos encontrar otro tipo de operacion) ,  las comparaciones siempre devuelven un valor entero que se interpreta como falso o verdadero,falso es cero (0), verdadero es cualquier otro numero.

Las acciones a ejecurar si la condicion se cumple pueden ser una o muchas, si son muchas usaremos llaves para encerrarlas, mira:

if(algo)
    haz esto
if(otra cosa)
    {
    haz esto
    y esto
    ...
    esto otro y ya
    }

Un if puede estar acompañado de la sentencia else trabajando juntos mas o menos asi:

SI (if)
    haces algo
SI NO (else)
    haces otra cosa

Las mismas reglas para cuantas instrucciones ejecuta el if se aplican al else, es importante que si quieres que se ejecuten varias instrucciones en el "cuerpo" del else usas las llaves {}, de no hacerlo, tu programa no  hara lo quieres.

Dentro del codigo podemos ver algo como "else if" que es algo como SI NO y SI haz esto. aunque solo hemos acupado comparaciones de igualdad, podriamos checar si el valor es menor o mayor que otro. vamos a  reescribir el programa anterior pero usando  tambien operadores logicos:

#include<stdio.h>
#define PI 3.14159265

int main() /*Inicio programa principal*/
{
float  In,Out;
char c;

printf("Que deseas calcular area (a) o perimetro  (p)\n"); //Despliego letrero
scanf("%c", &c); //leo y asigno una variable tipo char

if( (c=='p') || (c=='a'))  /*Si es 'p' O 'a'*/
    {
    printf("Introduce el radio:");
    scanf("%f",&In);/*Lee y asigna una un valor flotante la variable In*/
    if('p'==c) //Si es perimetro hace
        Out=2*PI*In;  
    else //Si no (entonces es area)hace lo siguiente
       Out=PI*In*In;
    }
else
    printf("Entrada no valida");

printf("Resultado= %f\n", Out); /*Imprime el resultado*/
return 0;
} /*Fin programa principal*/

El programa debe entregar (casi)la misma salida que el enterior, la primera diferencia es que esta vez definimos PI con un valor un mas cercano a la realidad, despues y importante esta el primer if.

if((c=='p') || (c==a))

Los "||" denotan la operacion logica OR que dice que si al menos uno de las dos comparaciones es verdadera realice la instruccion. hay otros dos operadores logicos && y ! (AND y NOT),  El && realiza la operacion si y solo si los dos operandos son verdaderos,si no, pues no. el ! solo opera sobre un operando y lo niega (si es verdadero lo vuelve falso, si es falso lo vuelve verdadero). ejemplos del uso de estos operadores los veremos despues y los usaran en los proximos ejercicios.

Hoy vimos:

1.-El tamaño de los tipos de datos.
2.-Constantes simbolicas
3.-Instruciones If y else
4.-Comparaciones
5.-Opereadores logicos

Dudas, aclaraciones y correcciones en los comentarios

Permalink: http://www.mononeurona.org/users/entry/vendaval/890


Aprendiendo C (Notas del Autor)

2007-10-26 08:10:35-05

Software

Primero una disculpa,parece ser que en ningún momento dije cuales serian los objetivos y los temas del curso, sobre los temas yo mismo no lo se, terminare con algo como estructuras, pasando por dos o mas entradas sobre apuntadores, si sera algo largo y prefiero escribirlo en intervalos reducidos para no perder la continuidad (ni el interés). Le estoy tratando de dar un enfoque practico, aprendiendo por medio de ejemplos, mi base para hacerlo son mis propios conocimientos y un par de libros, que me ayudan a aprender, entonces no siempre daré toda la referencia técnica,  sobre el tema, pues el objetivo es que adquieran las habilidades y el conocimiento necesarios para que puedan hacer programas con dos intereses: Optimos (mas al final del curso) y Aplicaciones gráficas (no se aun si con gtk o qt, voten) estas las aprenderé con ustedes, pues solo he usado gtk en C#, pero bueno, al final tendremos alguna aplicación con interfaz gráfica y con desempeño optimo (o casi).

Una cosa mas sobre la optimizaron, estoy consiente de que este es el objetivo mas difícil y hay que tener corazón espartano para lograrlo, todos podemos hacer programas que resuelvan un problema, pero que ese problema sea resuelto de la mejor forma posible es objetivo de investigadores y cursos muy avanzados de algoritmia, aquí solo sentare las bases para un asunto muy (muy) especifico, pero al final tendremos la satisfacción de haber hecho las cosas realmente bien.

El libro que mas consulto es el "El Lenguaje de programación C" de Ritchie y Kernighan

Sin duda,mi mayor compromiso es ofrecerles calidad, tal vez tenga que agregar cosas en entradas anteriores, pero siempre  les avisare de ello.

Saludos
.

Permalink: http://www.mononeurona.org/users/entry/vendaval/889


Aprendiendo C (Ejercicios 1)

2007-10-25 09:53:09-05

Software

Dicen Kernighan y Ritchie que "La unica manera de aprender un lenguaje es haciendo programas en el."

Y yo aprendí (aprendo todavía) haciendo muchos programas y ustedes tambien (estoy planeado llegar en este cursito al menos a 150)

1.-Haz un programa que imprima  una frase (como "Hola Nena como estas hoy" o "Debian Rulez")  una palabra por linea.

2.-Haz un programa que imprima la misma frase pero las palabras separadas por tabulaciones y emita una alerta al final.

3.-Haz un programa que lea tu edad desde el teclado y luego te lo escriba en pantalla.

4.-Haz un programa que lea 3 números enteros, sume los dos primeros y al resultado le reste el tercero, muestra el total en la pantalla.

5.-Haz un programa que lea tres enteros,los muestre por separado y después su suma.

6.-Haz un programa que lea el radio de un circulo y te diga su perímetro y su área.

7.-Haz un programa al cual le introduzcas los lados de un rectángulo y te regrese su perímetro y su area.

8.-Haz un programa que imprima una arbolito de Navidad con '*' así : (tal vez un poco mas grande y mejor hecho)
      *
    ***
  *****
     *
9.- Al árbol del ejercicio anterior ponle esferas y música.(coff*coff* o,0 y \a) /*manejo de printf*/

10.- Haz un programa que te convierta una entrada a de grados Celsius a Fahrenhait

11.-Haz un programa que cuando se le introduzca un numero de 4 digitos,lo separe por cada digito (si entra 1234, regresa  1 2 3 4) /* Usa modulo y divisiones */

Todos los programas se pueden resolver con lo que hemos visto hasta ahora. Si tienes alguna duda, puedes mandar tu código para que lo veamos y mejoremos juntos.

Nota mia: Me acabo de dar cuenta que omití algunos asuntos técnicos de importancia, como la longitud (tamaño) de los datos, esto lo explicare en la siguiente entrada. saludos

Permalink: http://www.mononeurona.org/users/entry/vendaval/888


Aprendiendo C (2da Parte)

2007-10-24 09:35:21-05

Software

Bueno ya conocemos la estructura básica de un programa en C, ahora aprenderemos sobre algunas cosas mas. modificaremos el programa Hola Nena de la entrada anterior para probar mas características:

#include<stdio.h>

int main() //inicio función principal
{
int besos; //declaración de la variable tipo entero "besos"

printf("Cuantos Besos quieres darle a la nena??"); /*Despliega letrero*/
scanf("%d",  &besos); /*Recibe datos de la entrada estándar, los transforma y guarda en la variable besos*/

printf("Hola Nena quiero darte %d besos", besos); /*saluda a la nena y le dice cuantas veces quieres besarla*/

return 0; /*terminación exitosa del programa */
} //fin función principal


ahora compila...

De inicio tenemos la declaración de la variable "besos" le antecede la palabra reservada "int", en C TODAS las variables deben ser declaradas antes de ser usadas, existen diferentes tipos de datos como enteros, números de punto flotante y tipo carácter. Una formalidad muy importante,una variable es un espacio de memoria donde la computadora puede guardar un dato para utilizarlo durante el programa.

El nombre de la variable es una combinación de caracteres alfanuméricos pero cuenta con algunas restricciones:

1.-Toda variable (o constante simbólica, de esto les platico luego) debe empezar con letra.
2.- '_' cuenta como letra, sin embargo, debe evitarse por que muchas subrutinas de la biblioteca estándar empiezan con ese carácter.
3.-Las letras mayúsculas y minúsculas son DISTINTAS.

Esta ultima siempre merece un poco mas de explicación, BEsos es distinto de besos o BESOS o bEsOs. puedes comprobarlo cambiando el nombre de la variable en cualquier lugar del programa y compilarlo.

Toda variable corresponde a un tipo de datos, veamos algunos tipos de datos

Tipo de dato descripción especificador de conversión
int Números enteros %d
float Números de punto flotante %f
double Números de punto flotante de doble precisión %f
char carácter ascii %c

Sigamos, la función printf definida en la biblioteca de entrada y salida estándar "stdio.h"  "imprime" su argumento con o sin formato, en el segundo "printf" podemos ver un %d, esto es un especificador de conversion, indica que va a imprimir un valor de tipo int,  también podemos ver de nuevo a '\n'. En general, la funcion "printf" tiene como primer argumento una cadena de caracteres entre comillas dobles ("), con cada % uno de los argumentos siguientes seran sustituidos por su correspondiente, deben ser iguales en numero y tipo.

Existen caracteres que por su naturaleza o por tener algún significado especial, requieren ser escritos de una manera un poco distinta, como por ejemplo el carácter nueva linea (un enter, pues), aqui hay una pequeña lista de los caracteres que se muestran con secuencias de escape, notece que cada uno cuenta como un solo carácter.

\a Alerta Emite un aviso sonoro
\b Espacio atras
\" Imprime comillas
\n Nueva Linea
\r Retorno de carro
\t Tabulacion
\% Imprime simbolo "por ciento" (%)
\\  Imprime diagonal invertida
\0 Carácter Nulo (MUY IMPORTANTE)

Ahora veremos la funcion "scanf", esta funcion "lee" un dato de la entrada estandar (normalmente el teclado) y lo asigna al espacio de memoria apuntado por una variable, el simbolo '&' es necesario para indicar la asignacion del espacio de memoria.

Probemos otro ejemplo para reafirmar y utilizar nuevos conceptos

#include<stdio.h>

int main()
{
float desayuno, comida, cena, total;

printf("Dime cuanto gastas en el desayuno,comida y cena\n");
scanf("%f%f%f", &desayuno, &comida, &cena); /*Lee 3 numeros flotantes*/

total=desayuno+comida+cena;  //Operaciones aritmeticas
printf("Gastas en total: %f\n",total);

return 0;
}/*fin del programa*/


¿Que hay de nuevo aqui? pues usamos el especificador de conversion %f para indicar que recibimos e imprimimos numeros de punto flotante (¿por que conversion? lo explicare con mas detalle despues, pero recibimos una secuencia de caracteres desde el teclado, cuando scanf lee algo, lo convierte para poder trabajar con el).Tambien usamos opereciones aritmeticas, en C hay definidas opereraciones  aritmeticas, logicas, de comparacion entre otras. veamos la siguiente tabla:

simbolo tipo descripcion ejemplo
+ Aritmetico Suma a + b
- Aritmetico Resta c - d
* Aritmetico Multiplicacion a * d
/ Aritmetico Divicion e / r
% Aritmetico Modulo (resto) a%2
(  ) ---- Parentesis (a+b)*c
== Comparacion Igualdad a == b
!= Comparacion Desigualdad c != d
< Comparacion Menor que a < b
> Comparacion Mayor que a > b
>= Comparacion Mayor o igual que a >= b
<= Comparacion Menor o igual que a <= b
&& Logico AND logico si && si
|| Logico Or logico Si || No
! Logico Not logico !NO
 

Si no entiendes el uso de alguno de estos simbolos, no te preocupes,apenas vamos empezando, con ejemplos y ejercicios los aprenderas en poco tiempo. es importante anotar que en C el valor falso corresponde a 0, el verdadero es cualquier otro numero,no existe un tipo bool como en otros lenguajes,pero la verdad no es necesario.

Haremos un programa pequeño programa que nos sirva de ayuda para entender como se usan los operadores aritmeticos, cuando veamos la instruccion if mostraremos e luso de las demas.

#include<stdio.h>

int main()
{
int a, b, suma, resta, mult, div,  mod, comp; /*declaramos la variables que vamos a usar*/

printf("Escribe dos enteros, pueden ser negativos:");
scanf("%d %d",&a, &b);

suma=a+b;
resta=a-b;
mult=a*b;
div=a/b;
mod=a%b;

printf("a + b=%d \na - b=%d \na * b=%d,a / b=%d \na mod b= %d\n",suma,resta,mult,div,mod);

printf("Veamos por son importantes los parentesis\n");

comp=a*b-suma;
printf("a * b - (a+b)= %d \n",comp);

comp=a * (b - sum);
printf("a*(b - (a + b)=%d\n",comp);

printf("Notaste alguna diferencia ????\n);

return 0;
} //Fin programa principal


compila.....

OK, hoy vimos:

1.-Defincion de variables.
2.-Tipos basicos de datos.
3.-printf y secuancias de escape.
4.-scanf y especificadores de conversion basicos.
5.-operadores aritmeticos (mencionamos de comparacion y logicos)

La siguiente entrada seran ejercicios, si tienes dudas o sugerencias o dije algo mal y estas enojado por eso, comentalo, tratare de responder lo mas pronto posible.

Permalink: http://www.mononeurona.org/users/entry/vendaval/884


Aprendiendo C (1ra. parte)

2007-10-23 13:12:26-05

Software

Bueno, hace un tiempo, le preguntaban a Thot sobre un curso "Basico" de programación en C, reconozco la autoridad de el en este campo, pero el esta acostumbrado a tratar temas mas interesantes y avanzados, como los que muestra en su pagina. Asi que en un pequeño interés por aportar algo, agrego este pequeño apartado al blog, iniciaremos con asuntos muy básicos y el objetivo del curso es que los que hagan los ejercicios y practiquen puedan después entender programas mas complejos como los que Thot presenta. Requiero mucho su critica para este trabajo, para mejorarlo,esperando que le sirva a alguen.

Aqui unos pequeñas cosas a tener en cuenta cuando programas en cualquier Lenguaje

"La computadora hace lo que tu le dices que haga, No lo que tu quieres que haga"

"Toda entrada del usuario es estupida o maliciosa, hasta que se demuestre lo contrario"

"Reutiliza codigo, usa las bibliotecas"

"Corrige siempre el primer error que te muestra el compilador, puede resolver los siguientes"

"Enseña tu codigo, mejoraras mucho con la critica"
y
"La unica manera de aprender un lenguaje de programación es programando en el"

Así que iniciaremos, como debe de ser, con lo primero,estableceremos un método de trabajo, lo primero que necesitaremos invariablemente es un compilador de C, yo uso GCC (GNU Compiler Collection), tal vez aquí tengamos algún problema, para los que Usen Debian / Ubuntu:

$sudo apt-get install binutils gcc

Estos son los paquetes mas básicos, si tu distribución no es alguna de estas dos, solo instala estos paquetes, tambien puede ser que uses Sistema Operativo (coff coff Win2) el Devcpp te vendría muy bien para nuestros menesteres, aunque nuestra recomendación es instalar o probar algún SO libre, si no te interesa instalar otro SO puedes probar con un LiveCD como Knoppix.

Ahora que la instalación mas recomendable es con el metapaquete build-essentials

$sudo apt-get install build-essentials

Aprenderemos a usar gcc (coff*coff* Solo para compilar en C)

La sintaxis es sencilla

$gcc NombreArchivo.c

Esta nos entregara un ejecutable de nombre "a.out", ademas el archivo debera tener extension ".c", La siguiente forma es mas completa

$gcc -o NombreEjecutable NombreFuente.c

Ok, esto devuelve un archivo ejecutable con el nombre especificado.

Ahora necesitaremos un editor de texto plano, este puede ser VI(M), nano, gedit, jedit o cualquier otro que edite texto plano, yo uso nano, aunque hay gente que preferira usar alguna IDE como DevCpp (Win2) o Anjuta(*nix),estos no necesitan de dicho editor de texto plano.

Ya con esto podemos empezar, Asi que escribiremos nuestro primer programa El Famoso "HOLA NENA". En nuestro editor favorito (o la ide) y escribimos lo siguiente:

#include <stdio.h>/*Biblioteca con funciones para la entrada y salida Estandar*/

int main() //inicia la funcion principal
{

printf("¡HOLA NENA! \n");/*escribimos "¡Hola Nena!" en la salida estandar*/
return 0;

} /*Fin de la función principal*/

La linea que contiene #include es una directiva del compilador que indica que abra funciones de esa biblioteca y que el compilador tiene que ir a buscarlas en dicha biblioteca.

La linea que indica int main() esta definiendo una función llamada main que no recibe argumentos "()" y que devuelve un entero "int", todos los programas en C tienen una funcion main que es la que se ejecutara primero y en su cuerpo puede tener llamadas a otras funciones.

Las llaves"{}" indican los limites de la función, también son usadas para indicar el cuerpo de ciclos o acciones.

printf("¡HOLA NENA! \n"); es un función definida en la libreria estándar stdio.h, esta función escribe su argumento (con algún o ningún formato) en la salida estándar, en nuestro caso el monitor, pero lo podemos cambiar, después veremos como. Nota el carácter '\n' indica nueva linea, y que la instrucción termina en punto y coma (;),es importante,pues muchos errores de sintaxis son por no escribir el punto y coma que indica el fin de la instrucción.

return 0; indica una terminación exitosa del programa,un retorno distinto a cero,indicara al SO algún error dentro de la ejecución del programa.

el uso de "//" y "/* hola*/" son para los comentarios,el compilador omitira el linea marcada con // e ignorara lo que este entre /* y */, los comentarios son importantes para la documentación y para hacer el codigo mas legible. ademas se puede agregar el preámbulo GLP, BSD, MIT, ETC, para licenciar tu trabajo,y esto se hace entre comentarios.

Ahora hay que guardarlo con terminación .c digamos que nombre el archivo "nena.c"
con gcc:
$gcc -o nena nena.c

Ejecutamos con:
$./nena
nota: Esta forma de ejecutar sirve en BASH y KSH, que son las shells que yo uso.

Si usamos alguna IDE, existirá alguna opción rápida de compilar y ejecutar en la barra de herramientas, ademas si usas devcpp es posible que se te abra y cierre muy rápido una ventana de DOS y no te permita ver el resultado de tu programa, asi lo mas facil es agregar una llamada al sistema system("PAUSE"); antes de return 0;

Bueno hasta aqui hemos visto:

1.-Algunos consejos de programacion.
2.-Que necesitamos para empezar a programar en C.
3.-Como usar gcc para compilar programas escritos en C.
4.-La estructura basica de un programa en C
5.-Ejecucion de nuestros programas escritos en C.

Permalink: http://www.mononeurona.org/users/entry/vendaval/872


ASMs en *NIX

2007-10-22 10:24:22-05

Software

El lenguaje ensamblador permite manipular directamente los registros y las funciones del procesador, el lenguaje ensamblador es de relativo bajo nivel, sin embargo es muy apreciado por su servidor por que permite entender que pasa en los fierros, ahora algunos hemos tenido que hacer nuestros pininos en este lenguaje,(por cierto dependiente del ensamblador y la maquina), encontré una comparativa sobre dos ensambladores de libre distribución.

$sudo apt-get install nasm
bueno,los programas se escriben en archivos de texto plano con extensión ".asm", luego se creas un binario con

$nasm -f <tipo> <nombre del archivo>

por tipo me refiero al formato del binario, elf u otro

se le pueden agregar formatos de salida especifica, para mas información

$nasm -h
Nota: Si no usas un SO basado en el nucleo linux, probable que encuentres los binarios para tu SO aqui (si te gusta compilar tambien esta el codigo fuente)

La  verdad uso el NASM y el MASM (este ultimo por obligación, aunque lo recomiendo también) no conocía el GAS,pero seria bueno probarlo.

tal cual sea el asunto si a alguien le interesan algunas practicas en ensamblador que las pidan y las mando a su correo.


P.D. No es "oye vendaval, tendrás uno que haga esto u lo otro con interrupciones y poleo y...." es tengo unos programas en ensamblador que les doy, estan bien comentados y pueden ayudar a alguien.


Saludos.

Permalink: http://www.mononeurona.org/users/entry/vendaval/871


Para Pensar

2007-10-22 09:02:05-05

Ciencia y Tecnologia

 

Permalink: http://www.mononeurona.org/users/entry/vendaval/870


Login



Remember me:
vendaval
Alberto Rodriguez Sanchez Estudiante de Ingenieria en Computacion en la UAM-A, programo en C, C#, Python y Haskell. Uso Debian GNU/Linux, Mac-OS X, OpenSolaris, NetBSD y Win2. Pienso especializarme en computo cientifico y criptografia que son mis grandes pasiones.

Tambien pienso que la programacion computacional es un Arte y que un programa de computadora puede llegar a ser realmente bello si cumple con algunas caracteristicas, prefiero la Sintaxis Avanzada en los programas por que muestra un dominio del lenguaje y un buen grado de abstraccion.

NetBSD, C, Enlightenment y VI(M) son mis SO, Lenguaje de programación, manejador de ventanas y editor favoritos.

Practico Limalama y JKD (soy seguidor de la filosofía de Bruce Lee) y tambien escribo con cierta regularidad en este blog.

"Se como el agua, pero piensa como el fuego"
alchemy corn pop cryptography dark side education hacking humor ladies mathematics music my life nanoblogging no more triviality programming martial arts
Powered by:
Despabilando la MonoNeurona.org
Livechat

<-Nombre
m@t@ŧ@n wrote:
Eso de Programa bello es patisimo
1 week, 5 days ago

m@t@ŧ@n wrote:
un programa de computadora puede llegar a ser realmente bello si cumple con algunas caracteristicas,
1 week, 5 days ago

m@t@ŧ@n wrote:
Pana una pregunta ??? --- tu eres gay o q ?
1 week, 5 days ago

vendaval wrote:
Con una mentira suele irse muy lejos, pero sin esperanzas de volver
on 24/7/08

asarch wrote:
Simon. De preferencia ponle una nalga pa' que llame la atencion
on 25/6/08

vendaval wrote:
hola roberto, lo mejor seria poner lo que quieres comunicarnos como una noticia en portada
on 28/3/08

roberto wrote:
como envio un email a todos los miembros de mononeurona
on 26/3/08

vendaval wrote:
pienso que debria crear una version viva para ms necesidades
on 28/1/08

asarch wrote:
O tambien en: http://www.openbsd.org/ en la forma más pura que puedas encontrar en la red
on 26/1/08

¿Qué estuve haciendo?
regreso donde todo empezo...Estudio algebra lineal
1 day, 19 hours ago
hay documentacion aqui en la mononeurona.
1 day, 20 hours ago
es mas a la portada..
2 days, 23 hours ago
esta muy buena!!!!
3 days ago
Pobre aarkerio, nunca quisiste hacerlo compatible por simple desden.
3 days, 4 hours ago
Sintiendo algo de nostalgia,
3 days, 20 hours ago
Checando Austrumi.
4 days, 5 hours ago
ya salio fedora 10, pero mejor aun Revolucionemos Oaxaca cumple un año, felicidades
5 days, 19 hours ago
que chido que no fue nada, asarch
6 days, 10 hours ago
Noooooo!!!!!, asarch, responde, Toritoooooo!!!
6 days, 20 hours ago
Galerias
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2008.