C cosas basicas…

Algo para recordar en C…

Estructuras de Datos…

su sintaxis es:_

struct nombre { 
    tipo miembro1; 
    tipo miembro2; 
    ... 
} 
identificador1, identificador2, ...; 

Un Ejemplo de esto es:

struct fecha {
    int mes;
    int día;
    int año;
};      //Estructura "Fecha" 

struct cuenta {
    int cuen_no;
    char cuen_tipo;
    float saldo;
    struct fecha ultimo_pago;
} cliente[100];   // Estructura "cuenta"

Si se dan cuenta, la Primera estructura (“fecha”), contiene sus propias variables de cualquier tipo. Al ser declarada la estructura “fecha” ya es un tipo de dato y se puede usar como tal, y en la siguiente estructura se demuestra lo que les acabo de decir; la estructura “cuenta”, cuenta con diferentes tipos de variables declarados incluyendo el nuevo tipo de dato (el que acabamos de crear cuando declaramos la estructura) “fecha”…

Curso de C y C++…

Hoy después de tanto tiempo si haber podido escribir algo por falta de tiempo, finalmente pude hacer algo al respecto.

El lenguaje de programacion C

El lenguaje de programacion C

Saliendo de lo anterior, estuve buscando en Internet con palabras en la caja del buscador, “curso”, “c”, “c++”, “tutorial”, y valla! que si encontre muy buenos resultados, con esto voy a que quizas hacer un curso ya esta demas en la web, seria como “otro curso de C o de C++”.

Las cosas en lenguajes como C y C++ cambian pero no mucho, ya que en su estructura para programar con tales casi siempre es lo mismo, claro no digo con esto que no sean importantes y que la programación en C y C++ siempre sera la misma, no, siempre hay nuevas estandarizaciones y hay que actualizarse (para los que les guste estos lenguaje)…

Entonces lo que veremos de hoy en delante seran solo ejemplos rapidos como un repaso, solo para recordar y tambien si hay cosas nuevas aquí se pondrán, de todos modos lo que llevo escrito acerca del “intento de curso del lenguaje C y C++” no lo voy a eliminar por si a alguien le sirve…

Pero para el que quiera el curso de C o C++ completo-básico, encontre dos sitios en los cuales se explica muy bien y lo recomiendo….

Lenguaje C...

Para el curso de C, me refiero al curso de C de Francisco de Sande González.

CURSO AQUI…

Para el curos de C++ (Incluyendo POO), el curso de Josue Diaz Cuenca.

CURSO AQUI…

Por ultimo el que quiera ayudar con el blog (me refiero a contenido, “posts”) mandeme un mail, para ver que onda, pues aquí como que anda algo solo…

GEANY, MINGW y GTK…

GTK...

AH!…. VALLA!… MIL ANIOS SIN UN POST…

Hoy traigo un tutorial (readactado por mi) en el que explico como configurar Geany para trabajar con el compilador MinGW asi como la implementacion de las Librerias GTK o GIMP TOOLKIT…
Dejo el link…

para descarga en megaupload:


http://www.megaupload.com/?d=NE4JD1SD

Desde PDF host…


http://www.pdfhost.net/index.php?Action=Download&File=2093d0df8ca9c8de1a90e9c9adf45544

y taringa:


http://www.taringa.net/posts/ebooks-tutoriales/5774934/Configurar-Geany-para-compilador-MinGW-y-librerias-GTK.html

Saludos…
Ah!.. Decirles que ahora tendre mas tiempo para el blog… y comenzare dentro de poco un tutorial de programacion con gtk en c++…

UN Nuevo Estilo, Una nueva IMagen…

Conforme pasa la vida, se cambian mushas cosas, y ps creo que ahora toco cambiar estilo del blog… Espero sea de su agrado…

ip shit-down

Aun no esta terminada completamente… (faltan: el buscador de la pag principal, categorias del inicio, algunos detalles al igual que el FOro…)

pero Comenten companieros…

kamara!..

Leer el resto de esta entrada »

Ubuntu 10.4, Un poco mas…

Solo un poco, solo un poco…

Ya casi llega Ubuntu 10.4 Lucid Lynx el cual promete muchas mejoras para esta nueva version… Ya han salido varias versiones beta y parece ser un sistema operativo superior a lo que todos nosotros pensamos, pues:

1. El tema de escritorio de gnome que traia por defecto en versiones anteriores (human), sera cambiado, este tendra un disenio mas shido (por decirlo asi), ademas de que se incluye un nuevo motor que permite opacidad de la interfaz de forma nativa (murrine).

2. Al igual que en todas las versiones, se ha ido mejorando el tiempo de arranque, y en esta version no es la excepcion, este ubuntu nuevo arraca en 24s ya que se ahn mejorado los componentes de arranque.

3. Una de las cosas en las que sobresale esta version es que esta incorporara de forma nativa la posibilidad de soporte para el iPhone y el iPod touch.

4. Los drivers para los graficos de nvidia seran controlados con Nouveau (driver).

5. La pagina de incio por defecto en versiones anteriores (Google mozilla) en firefox sera sustituida por Yahoo, en todo caso si no nos gusta la pagina de incio por defecto (mi caso), la podemos cambiar sin ningun problema.

6. Igual como en otras versiones, esta trae consigo mejoras del Kernel, Soporte de EXT4 y  nuevas aplicaciones.

7. Una de las malas!, GIMP, no vendra por defecto en esta nueva version (“que por que su interfaz es un poco compleja”), en su lugar vendra F-spot, no obstante, podremos descargarlo e instalarlo manualmente, pero de todos modos es una pavada!.

8. Tambien, vendra una interfaz en el menu de instalacion de ubuntu (en el disco arrancable).

9. Una de las cosas que diferencia esta version entre otras, es que esta version es LTS (“Long Term Support”) o sea que tendra un periodo de soporte mas largo que sus versiones anteriores por lo que sera mas estable y solida.

10. Nuevo calendario de desarrollo para esta version:

  • Alpha 1 – 3 de Diciembre de 2009
  • Alpha 2 – 7 de Enero de 2010
  • Alpha 3 – 4 de Febrero de 2010
  • Beta 1 – 4 de Marzo de 2010
  • Beta 2 – 1 de Abril de 2010
  • RC – 15 de Abril de 2010
  • Final – 29 de Abril de 2010

y Pues eso es todo… Esperemos que ya falta poco… Nos vemos…

C++ punteros y direcciones de memoria…

Hoy, de nuevo, pero con punteros y memoria dinamica…
Los punteros y direccionamientos de memoria en c++ forman parte fundamental y son muy utiles a la hora de programar en c++…
Para eso, primeramente tenemos que saber que es un puntero:
Un puntero es una vairable que contiene la dirección de un objeto, este puede ser del tipo que nosostros queramos (int, char, bool, float, etc).
La declaracion de un puntero se hace de esta forma:

int main(){
int *p;//declaramos nuestro puntero de tipo entero...
}

Como dijimos antes, un puntero almacena direcciones de memoria. Lo que haremos a continuacion sera un ejemplo de esto:


int main(){
int *p, va; //declaramos nuestro puntero (p), y nuestra variable, ambos de tipo entero...
va = 10; //valor a nuestra variable...
p = &va; //asignamos direccion a p de va...
cout << va << "\t" << p; //imprimimos en pantalla...
}

Como vimos en el ejemplo anterior asignamos a p la direccion de va…
mas facil:
en la memoria:
si va vive en la direccion: 0×0001ff
y le asignamos a p la direccion de va, este contendra: 0×0001ff
pero su direccion propia no sera modificada, solamente apuntara a otra direccion.

Ahora, es lo mismo si queremos asignar la direccion de un arreglo a un puntero.

Asignacion de espacio con parametro New.
El operador new nos ayuda a tomar espacios de memoria del tipo de dato que queramos, incluso si son datos definidos por nosotros mismos (estructuras).
ejemplo de uso:

Direccion a puntero simple con parametro new.


int main(){
int *p; //declaramos variable de tipo puntero p.
p = new int; //Asignamos espacio de memoria de tipo entero a p.
(*p) = 5; // Asignamos valor a p.
(*p) *= 2; // Operaciones con el valor de p (recordemos usar el * para indicar que trabajaremos con el valor y no con la direccion...
}

Arreglos dinamicos (vectores dinamicos)
Si queremos realizar un vector dinamico utilizaremos las funciones new, delete, y otras…
Ejemplo de como hacerlo:


int main(){
int *p, lim; //declaramos puntero y variable de tipo
cout << "Introduce limite de vector dinamico"; cin >> lim; //capturamos desde teclado limite...
p = new int [lim]; //creamos nuestro vector...
for (int i = 0; i < lim; i++)
cin >> p[i]; //y ya podemos usarlo como si se tratase de un puntero normal...
}

Puntero a puntero y mas punteros anidados… (Matrices dinamicas, cubos, poligonos…)
Bien, vimos como crear un vector dinamico, pero, ahora como creamos una matriz dinamica?
En esto de los punteros es posible crear un vector dinamico, pero tambien este de tipo puntero, y a cada una de las casillas del vector puntero, asignarle un vector “real” (no puntero).

Declarando un 2ble puntero (o puntero a puntero (**)), tratando de entender que cada * es para cada direccion.
ejemplo:


int main(){
int **m, filas, columnas; //declaramos doble puntero (p), filas y columnas, todos de tipo entero.
cout << "Introduzca filas: ";     cin >> filas; //Introducimos numero de filas.
cout << "Introduzca columnas: ";     cin >> columnas; //Introducimos numero de columnas.
m = new int *[filas]; //creamos vector dinamico (puntero).
for (int i = 0; i < filas; i++)         m[i] = new int [columnas]; /*En lo anterior, pasamos por cada una de las casillas de nuestro vector puntero y creamos para cada una un vector (no puntero)... asi obteniendo una matriz que se puede usar normalmente como p[filas][columnas].*/

}

y ahora un cubo o poligono dinamico?.
Sencillo, para esto, ps solo hay que ver que para crear algo tridimencional necesitamos eje x, eje y, eje z. y listo con esto deducimos para el siguiente ejemplo:


int main(){
int ***c, x, y, z;
cout << "Introduce limite de y: ";     cin >> y;
cout << "Introduce limite de x: ";     cin >> x;
cout << "Introduce limite de z: ";     cin >> z;
c = new int *[y];
for (int i = 0; i < y; i++)         c[i] = new int *[x];     for (int i = 0; i < y; i++)         for (int j = 0; j < x; j++)              c[i][j] = new int [z]; /*Sencillo, con esto creamos un cubo/poligono en el cual nos moveremos como c[x][y][z].*/

}

Operador delete/delete[]
Ahora para cada cosa que creamos al terminar de usarla, hay que destruirla, pues asi en un programa grande no desperdiciamos memoria a lo inutil, lo que hacemos es una designacion o liberacion de memoria… (atencion: este operador (delete y delete[]) solo sirve para eliminar lo que se ha creado con new.
Los vectores creados con new deben ser destruidos necesariamente con delete, y las matrices o poligonos creados con delete[ ].

Ejemplo de uso con delete.
Supongamos que tenemos nuestro programa con un puntero al que le asignamos un espacio de memoria con new, y queremos destruirla despues de haberla utilizado…


int main(){
int p; //declaramos variable de tipo puntero p.
p = new int; //asignamos espacio de memoria de tipo puntero para p.

... //transcurso del programa

delete p; //liberamos direccion que contiene p, liberamos memoria...
}

Ahora con delete [ ].
ejemplo de desasignacion de memoria en vector dinamico (new [ ]):


int main(){
int *p, lim; //declaramos puntero y variable de tipo
cout << "Introduce limite de vector dinamico"; cin >> lim; //capturamos desde teclado limite...
p = new int [lim];


delete [] p; //eliminamos espacio creado por new.
}

Igualmente para eliminar una columna de una matriz:


int main(){
int **m, f, c; //declaramos puntero a puntero y variables...
cout << "inttroduzca filas: "; cin >> f;
cout << "Introduzca columnas: "; cin >> c;
m = new int *[f];
for (int i = 0; i < f; i++)

m[i] = new int [c];
...
for (int i = 0; i < f; i++)
delete [] m[i]; //Eliminamos columnas...

delete [] m; //Eliminamos filas y con todo esto, la matriz completa...
}

Y pues, bueno, ya vimos como y en que nos facilitan los punteros y la dinamica de la memoria…
En el siguiente post veremos punteros con funciones… Nos vemos…

C. funciones importantes.

Que onda de nuevo… mucho tiempo sin escribir algo, unos cuantos problemas de la humanidad…
bien explicare algunas funciones y paramentros que existen en c…
TIPOS DE DATOS EN C.
Tipos de datos usados en C (Entrada y salida de datos, declaracion de variables, constantes, y demas)…
Descripción.
Nombre Tamaño Rango.
abr i/o.
——————————————-
caracteres o enteros pequeños
char 1 byte -128 a 127
abr i/o: c.
——————————————
números enteros cortos
short 2 bytes -32768 a 32767
——————————————
números enteros
int 4 bytes -2147483648 a 2147483647
abr i/o: i, d.
——————————————
números de punto flotante
float 4 bytes 3.4E+/-38 (7 dígitos)
abr i/o: f.
——————————————
números flotantes de doble precisión
double 8 bytes 1.7E+/-308 (15 dígitos)
——————————————
carácter amplio
wchar 2 bytes 1 carácter amplio
——————————————

EXPRESIONES LOGICAS:

————– no:   !(<>)
————– and:  &&
————– or: ||

EXPESIONES RELACIONALES….

Signo   Operación   Ejemplo
==       igual a        2 == 3
!=      no igual a     2 != x
>       mayor que      y>z
<       menor que     X<3
>=  mayor igual a  x >= y
<=  menor igual a  y <= 3

PRINTF
esta funcion es de tipo salida pues imprime en (pantalla), pero para usarla necesitas llamar a la libreria stdio.h (recordemos que C no fue propiamente construido para interactuar con el usuario, entonces claramente no es una funcion nativa de C).
Sintaxis:
printf ("Hola mundo...");

ejemplo:


#include //incluimos libreria estadar de entrada y salida.
int main(){//iniciamos funcion main()...
printf ("Hola Mundo");//Imprimimos hola mundo.
return 0;
}

SCANF
esta otra funcion es de tipo entrada, obtiene datos desde teclado, igualmente es una funcion de tipo entrada/salida y para poder utilizarla se tiene que declarar la libreria stdio.h.
Sintaxis:

scanf ("[tipo de dato]", &[variable]);

ejemplo:


#include //incluimos libreria estadar de entrada y salida.
int main(){ //iniciamos funcion main()...
int dato; //Declaramos variable dato de tipo entero.
printf ("Hola Mundo");//Imprimimos hola mundo.
scanf ("%i", &dato);//Capturamos desde teclado y lo guardamos en dato.
return 0;
}

Tenemos otras funciones para lenguaje C pero estas estan al igual que las de flujo de entrada y salida de datos en diferentes librerias.

Revista LINUX FEBRERO 2010

Que onda de nuevo…
esta vez… les traigo nueva revista LINUX+ Febrero…


Esta vez algunos de los temas que se tratan son:

*Infraestructuras de Clave Pública (KPI) en GNU/Linux
*CAINE & DEFT Distribuciones Forenses GNU/Linux
*Introducción al desarrollo de aplicaciones web con Mono
*Clonación automática de equipos con FOG
*Reciclando hardware obsoleto con GNU/Linux
*KnowledgeTree, del papel al byte
*LyX: escribe tus artículos científicos con estilo
*Linux en el instituto, segunda parte
*Joomla: Ventajas e inconvenientes de utilizar Joomla en tu página Web
*AXiS Virtual en Android: Un instrumento musical de nueva generación



Descargala en PDF.
Sitio official

Tipos de programadores…

Hey, que onda de nuevo…
Sabian que existen todo tipo de programadores (esto biene a que un companiero me pregunto, “todos los programadores saben y aplican lo mismo como una jerarquia?… yo = no…)…

Algo gracioso (por dar una idea):

Algo para variar…

Introduccion a c y el hola mundo!…

Lenguaje C
El lenguaje C, fue diseñado por Dennies Ritchie en 1970, en los laboratorios Bell de Estados Unidos.
Este lenguaje presenta varias características, entre las cuales están:
 
Estructura de Un programa en C
Ya estamos apunto de entrar a lo más interesante, a la programación en sí; pero es necesario, primero; mencionar algunos de los errores típicos al programar, para que el lector sepa como identificarlos y así los pueda corregir.

1.ERROR DE SINTAXIS: Estos errores son producidos, cuando se hace mal uso de las reglas del lenguaje de programación, y se violan las normas de sintaxis, de ese lenguaje (en nuestro caso C); estos errores son fáciles de detectar por que generalmente es el compilador, que los identifica (Y hasta muestra la línea donde se encuentra dicho error, pero eso depende de la versión del compilador que estemos usando). En este curso he usado Turbo C, en su versión 2 y 3.

2.ERRORES DE EJECUCIÓN: Estos errores se producen , cuando le indicamos a la computadora, realizar una determinada acción, y esta la comprende, pero no puede ejecutarla. Por ejemplo, indicarle a la computadora una división entre cero, sumar dos variables a las cuales no se les ha signado valor alguno, etc.

3.ERRORES DE LÓGICA: Muchas veces, cuando estamos programando, el compilador no nos indica errores de sintaxis, ni de lógica; pero el resultado de nuestro programa, esta fuera del rango esperado, esto es producto de un error de lógica en el código de nuestro programa. Este tipo de errores son muy difíciles de identificar y por supuesto de corregir, ya que generalmente hay que revisar línea por línea de nuestro programa. Ejemplo: El sueldo negativo de un empleado, etc.

Cada función debe contener :
>Directivas de pre-procesador (instrucciones que se le dan al compilador #include antes de compilar)
ejemplo:

#include

*Este lenguaje no era propiamente para establecer control con el usuario, por lo tanto las funciones de entrada y salida no existen (propiamente en el lenguaje de c “puro”), pero con ayuda de la libreria “stdio.h” podemos establecer la salida y entrada de datos…

>Declaraciones Globales
pueden ser:
*Prototipos de Funciones: También llamadas declaraciones de funciones, lo cual se tratará más adelante
*Declaraciones de Variables
cabe destacar, que esto se hace seguido de los #include y los #define.
>Función Principal main()

Esta es la función principal de nuestro programa, su cuerpo, por ello NUNCA debe faltar, ya que en ella van contenidas todas las instrucciones de nuestro programa.

int main()
{
declaraciones locales /*Comentarios */
sentencias
}

la función main() va al inicio, luego abrimos llaves y dentro de ellas van las declaraciones de variables, las sentencias de lectura, cálculos, asignaciones e impresiones, y con la última llave ( } ), le indicamos el final del programa.

Nuestro primer ejemplo de un programa en C, el “HELLO WORLD!” en C :

#include //Agregamos libreria de entrada y salida estandar…
#include //Agregamos libreria estandar de C…

int main(){//Inicializamos la funcion main()…
//Esta funcion imprime el mensaje HELLO WORLD!..
printf (“HELLO WORLD!”);
//Esta funcion le dice a la consola que haga una pausa…
system (“pause”);
//Esta funcion regresa un valor cero a la funcion…
return 0;
}

Muy bien nos vemos en el siguiente post…

Categorias
Player
Unas frases

Contador
Sitios Recomendados…

Debian...  Tux... GTK...

Ubuntu... OpenSuse Linux curses...