Está en la página 1de 17

De Pascal a C

Gonzalo Soriano gonzalo soriano@yahoo.com.ar 25 de junio de 2009

. . . . . . . . . . . . .2. . . . . . . . . . . . . . . . .5. . . . .1. . . . . 2. . . . . . . . . . . . . . . . Diferencias entre C y Pascal 2. . . . . . . . . . . . . . . . . . repeat . . . . . . .3. 2. . . . . . . . . . . . . . . . . . . . 2. .7. . . . . . . . . . . . . . . . . . .1. . . . . . . . . .3. . . . . 5. . . Funciones de Entrada/Salida 2. . . . . . . . . . 4. . . . . . . .2. . . . . . . . . for . . . . . . .5.4. .5. . . . . . . . . . 5. Matrices y Strings 4. . . . 2. . . . . . . . . .1. . . . Registros . . . . . . . . . . . . . . . . .2.3. .1. . . . . . . . . . . . . . . Funciones y Procedimientos 4. . . . . . . . . . . . . . . . . . . 5. . . . . . . . while . . . . . . Algunas funciones para trabajar con los char* 5. . . . . 4. . . . . . . .2.1. . . . . . . . . Windows . . . . .3. . . . . . . . . .3. . . . .1. . . 2. . . .2. . . . . . Vectores. . . . . . . . . . . 2. . o 2. . . . .7. . . . Compiladores y Entornos de Desarrollo 5. . . . Compilador . . . .1. . . . . . . . 2. . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7. . . . . . . Estructuras de selecci´n . if else . . . . . . . . . . Typedef . Definici´n de Variables . . . . . . Ciclos repetitivos . . . . . . . . .4. . . . . . . Matrices . . . . . . . . . . . . . . IDEs . . . . . 3 3 3 4 4 6 6 6 6 6 6 6 7 9 9 10 10 12 12 13 13 13 15 15 15 15 15 16 . 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. . . . . . . Introducci´n o 2. . . . . Palabras reservadas en C . . . Vectores . . 2 . . . . . . . . . Linux . . .´ Indice 1. . . . . . .4. . . . . . . . case . . . . . . . . . . 3. . . . . . . . . . . o 2. . . .6. . . . . . . . . . . . .2. . . . . Debugger . . Strings . . . . . . .2. . . . . . . . . . 2. . . . . . 2. . . . . . . . . . Operadores en C . . .2. .2. . . . . . . . Estructuras de datos .

lo que significa que una variable no puede llamarse con uno de estos nombres. es la forma de delimitar el c´dio go. por lo que cuando se a a usen funciones o cosas que no pertenezcan a ese est´ndar se comentaran. Puede ser catalogado de alto o bajo nivel. Diferencias entre C y Pascal La primer diferencia entre C y Pascal es que C es case sensitive. y en el caso de compilar el c´digo con o un compilador de C++. a 2. dependiendo de c´mo se lo use. C es un lenguaje de programaci´n estructural al estilo o de Pascal [4].1. una variable llamada entero es distinta a Entero. sensible al caso. Palabras reservadas en C Como todos los lenguajes de programaci´n. 3 . C utiliza ciertos nombres para o designar funciones. En Pascal el bloque principal se encuentra entre las sentencias Begin y End. cuando en Pascal quer´ ıamos que un if ejecute varias sentencias las encerr´bamos entre un begin .. dichos nombres se conocen como palabras reservadas. se puede usar // para comentar toda una l´ ınea.. a Y como las {} ahora se usan para encerrar varias sentencias... Introducci´n o El lenguaje de programaci´n C fue creado en 1969 por Dennis Ritchie [1] o y Ken Thompson [2] en los Laboratorios Bell como evoluci´n de un lenguaje o anterior llamado B [3]. end . y argv ser´ una matriz de caracteres a a que contendr´ los caracteres de esos par´metros. Por este motivo. pero con una sintaxis diferente.. es decir. a a Otra gran diferencia entre estos lenguajes. y una funci´n llamada factorial ser´ distinta de otra llamada o a Factorial.1. por lo que ahora se usa /* para abrir un comentario y */ para cerrarlo. ya no se pueden usar para hacer comentarios. pero en C el bloque principal es una funci´n llamada main. pero tienen sintaxis distintas. que son a de tipo entero y char** respectivamente. Argc ser´ el n´mero de par´metros que van en la l´ a u a ınea de comandos (cada par´metro separado por espacios).}. 2. o En este apunte se tratar´ de respetar el est´ndar ANSI C. Un claro ejemplo se ve cuando uno busca el bloque principal del programa. Pascal y C son dos lenguajes estructurales. El tipo char** tambi´n se puede e encontrar como char* [ ]. auto asm break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Cuadro 1: Palabras reservadas en C. El main o retorna un entero y recibe dos par´metros llamados argc y argv. en C para eso usaremos {. es decir.

La funci´n printf toma como argumentos una cadena de caracteres. Al igual que en Pascal. Las variables se imprimen de acuerdo a donde se especific´ en la cadena.h ıa y se incluye poniendo #include <stdio. El formato general es: o 4 . Cabe mencionar que el tipo char puede considerarse como un entero con rango [-128. aunque tambi´n existen getchar. se o usan los enteros con ese fin. en C primero se le declara el tipo. C no tiene una parte identificada para la declaraci´n o de variables. y que si bien no existe el tipo boolean en C.2. y opcionalo mente una lista de variables a ser impresas. y si es distinto de 0. se deben declarar en el bloque de sentencias. e hay que incluir una librer´ (el equivalente a las Unit de Pascal) llamada stdio. Definici´n de Variables o Antes de ver c´mo declarar las variables.2. se deja un espacio.3. Si un entero vale 0 equivale al false de los boolean. e la sentencia ser´: a int entero. putchar. Pascal integer byte longint word real double extented char Pchar string boolean — Pointer C int short int long int unsigned int float double long double char char* — — void void* Cuadro 2: Equivalencias entre tipos. pero siempre antes de la primer instrucci´n o sentencia. C tiene sus propias funciones de ı a entrada/salida. a 2. ser´ true. Para hacer uso de cualquiera de las funciones reci´n mencionadas. e gets y puts. Y a diferencia de Pascal. Funciones de Entrada/Salida As´ como en Pascal est´n el write y el read. tenemos que saber que tipos podeo mos usar.h> al principio. podemos ver c´mo se declaran o o las variables. ıa Ahora que ya sabemos c´mo son los tipos en C. y despu´s el nombre. A diferencia de Pascal. 127]. el alcance de las o variables est´ delimitado por el bloque al que pertenecen. para eso primero veamos una tabla que relaciona los tipos de Pascal con los de C. Tambi´n es importante mencionar que una variable puede e inicializarse en su declaraci´n. y son: printf y scanf . Si queremos declarar una variable de tipo entero.

Car´cter retorno del carro. Coma flotante.h> int main(int argc. a Car´cter fin de l´ a ınea. 5 . seg´n las o a u especificaciones de cadena_de_caracteres. con notaci´n cient´ o ıfica. a Cadena de caracteres terminada en el car´cter nulo (\0). Float o double.2007). hoy es %d/%d/%d\n". lista de punteros a variables). Ejemplo 1: Ahora veamos nuestro primer programa en C: #include <stdio. lista de variables). y asignados a las variables cuyas direcciones se pasan en la lista. Cuadro 3: Especificaciones de conversi´n. o general es: int scanf("cadena_de_caracteres". La funci´n scanf es para entrada de prop´sito general con formato. donde cadena de caracteres puede contener una especificaci´n de conversi´n de o o formato (a la que precede con el s´ ımbolo %) y caracteres normales. El formato o o Especificador %c %s \n \r \t \v \a \o \\ \" %d %i %u %ld %lu %f %e %g %x Tipo: Car´cter ASCII correspondiente. } Ejemplo 2: Hacer un programa que lea un n´mero por entrada est´ndar y lo vuelva a imu a primir. Entero largo sin signo. char *argv[]) { printf("Hola mundo. Entero largo con signo. a Car´cter tabulador horizontal. usando la notaci´n que requiera menor espacio.int printf("cadena_de_caracteres". a Car´cter tabulador vertical. Car´cter nulo.06. La funci´n lee de la entrada est´ndar elementos que son convertidos. Float o double. Decimal sin signo de un entero. o Hexadecimal sin signo. a Timbre. Decimal con signo de un entero.29. a Barra invertida. Comillas.

\n". 2. /* Ver que termina con . do sentencia. break. default: sentencia5. Estructuras de selecci´n o if else if (condici´n) o sentencia1. u scanf("%d". 2.1. case valor3: sentencia3. modificaci´n de la variable) o o o sentencia. case valor2: sentencia2. printf("El n´mero ingresado fue el %d. case valor4: sentencia4.2. 2.#include <stdio. 2. o 6 repeat .4. } 2. Al igual que en Pascal. char *argv[]) { int entero. &entero). break. case switch (variable) { case valor1: sentencia1. break. break. printf("Ingrese un n´mero: "). Ciclos repetitivos for for (condici´n inicial. entero). while while (condici´n) o sentencia. while (condici´n). 2.1.2.4.5. */ else sentencia2.3.5.h> int main(int argc.5.4. condici´n de corte. u } 2.5. el if puede presentarse sin el else: if (condici´n) o sentencia. break.

entero). Suma unitaria. o Operador en Pascal NOT sizeOf ^ @ +* / div mod inc(var) dec(var) := < > <= >= = <> AND OR Cuadro 4: Operadores en C. char *argv[]) { int entero.~ ! sizeof * & +* / / % var++ var-= < > <= >= == != && || Nombre Negaci´n / Complemento. o Operadores de relaci´n. o Comparaci´n con distinto. &entero). Multiplicaci´n.h> int main(int argc. printf("Ingrese un n´mero del 1 al 5: "). o Resto. Operadores en C Operador en C .2. o AND y OR l´gicos. u scanf("%d". o Direcci´n.6. #include <stdio. Resta unitaria. o Comparaci´n por igual. Ejemplo 3: Un ejemplo del if. Asignaci´n. o Obtiene el tama˜o en bytes. */ printf("El n´mero que ingresaste es %d. u else printf("El n´mero que ingresaste es 0.\n".\n"). if (entero) /* Uso un entero como boolean. o Divisi´n Entera. char *argv[]) { int entero. printf("Ingrese un n´mero: "). o Suma y resta. #include <stdio. u } Ejemplo 4: Un ejemplo del case. o Divisi´n. u 7 . n Indirecci´n. y es distinto de 0.h> int main(int argc.

i. char *argv[]) { int entero. &entero).\n").\n").\n". u } } Ejemplo 6: Un ejemplo del while.\n"). &entero). break. break.\n"). u scanf("%d". for(i=0.h> 8 .h> int main(int argc. i++) { printf("Imprimiendo el n´mero %d y me faltan %d. printf("Ingrese un n´mero: "). i. switch (entero) { case 1: printf("Ingresaste el 1. #include <stdio. &entero). #include <stdio.\n"). break. u scanf("%d".\n"). printf("Ingrese un n´mero: "). case 5: printf("Ingresaste el 5. break. #include <stdio. break. case 2: printf("Ingresaste el 2. u scanf("%d". case 3: printf("Ingresaste el 3. } } Ejemplo 5: Un ejemplo del for. while(entero != 5) { printf("Ingrese un n´mero (corta con 5):"). case 4: printf("Ingresaste el 4. default: printf("Ingresaste cualquiera. &entero).h> int main(int argc. i<entero. } } Ejemplo 7: Un ejemplo del do-while. break. char *argv[]) { int entero. entero-i-1).scanf("%d".

&entero).1. an´logamente en C usaremos los struct. u scanf("%d". unsigned long int dni. simplemente con un punto y el nombre del campo: struct tAlumno alumno1.padron. alumno1. si quisi´ramos declarar un struct que represente los datos de un e alumno. char *argv[]) { int entero. char *nombre. 2. Estructuras de datos Registros En Pascal cuando quer´ ıamos agrupar datos de distintos tipos us´bamos los a registros. Para eso veamos primero su a declaraci´n: o struct nombre_estructura { declaraci´n de variables. int p. har´ ıamos: struct tAlumno { unsigned int padron. } 2. para lo que usan los typedef. do { printf("Ingrese un n´mero (corta con 5):"). debemos hacer igual que en Pascal. o }. } while(entero != 5). }.int main(int argc. Por ejemplo.padron = 0.7.7. 9 . Para acceder a un campo de la estructura. p = alumno1. Pero puede ser muy molesto tener que poner siempre struct antes del tipo que se quiere usar. para declarar una variable del tipo o tAlumno tenemos que hacer: struct tAlumno alumno1. Pero eso es solo para la declaraci´n del tipo.

esto no va. Los procedimientos son funciones que retornan void. tipoN xN) { /* Variables.7. unsigned long int dni. /* Si tipo_retorno es void. en C tambi´n podemos definir nuestros propios tipos e usando la palabra reservada typedef: typedef definci´n_del_tipo nombre_del_tipo. Typedef Al igual que en Pascal. }. Y la declaraci´n de una funci´n es: o o tipo_retorno nombreFuncion (tipo1 x1. o Por ejemplo. tipo1 x2. o 10 . tipo1 x2.. tipoN xN). */ return valor_retorno... . } tAlumno. Pero lo que declaramos reci´n es como cuando en Pascal declar´bamos una e a funci´n y le pon´ o ıamos el forward para decirle que la ´ ıbamos a definir m´s abajo. har´ ıamos: typedef struct { unsigned int padron. . a La definici´n ser´ o ıa: tipo_retorno nombreFuncion (tipo1 x1. Y para el caso de los struct. Funciones y Procedimientos En C no existen procedimientos. char *nombre. char *nombre. */ /* Sentencias.. */ } Ejemplo 8: Hacer la funci´n factorial. si queremos seguir usando la palabra byte para los enteros de rango -128 a 127. typedef struct tAlumnos TAlumno. son todas funciones. podemos hacer el siguiente typedef : typedef short int byte.2. unsigned long int dni...2. o ´ struct tAlumno { unsigned int padron. 3.

h> int factorial(int n) { int i. resultado.h> void factorial(int n) { int i.#include <stdio. &entero). } int main(int argc. } C no posee pasaje de par´metros por referencia. i++) fac *= i. resultado). i++) fac *= i. u scanf("%d". i < n+1. char *argv[]) { int entero. o Ejemplo 10: 11 . Lo que se hace cuando se quiere hacer un pasaje por referencia es usar un puntero que apunte a la posici´n de memoria asignada a la variable.\n". u scanf("%d". printf("El factorial de %d es %d. fac=1. entero. printf("El factorial de %d es %d. #include <stdio. n. factorial(entero). char *argv[]) { int entero. for(i=1. printf("Ingrese un n´mero: "). resultado. return fac. } int main(int argc. resultado = factorial(entero). printf("Ingrese un n´mero: "). } Ejemplo 9: Hacer un procedimiento que imprima el factorial. fac). &entero). fac=1. for(i=1.\n". i < n+1. por lo que todos son pasajes a por valor.

for(i=0. a = 10.1. for(i=0. } printf("Vector: ( "). valorN}. b = 5. 2. n Ejemplo 11: Ejemplo de vectores. *x = *y. 4. Matrices y Strings Vectores Los vectores pueden ser de cualquier tipo de variable y su definici´n es: o tipo_variable nombre_variable[tama~o]. #include <stdio. vector[3] = {1.. } Y la llamada al procedimiento ser´ ıa: int a. en C el ´ ındice empieza en 0. por lo que n a tendr´ ıamos que ped´ ırsela al Sistema Operativo. u scanf("%d". vector[i]). char *argv[]) { int i. i++) { printf("Ingrese un n´mero: "). *y = temp. i++) printf("%d ". Vectores. Y para acceder a una posici´n o del vector. Si no se le indica un tama˜o estaremos usando memoria din´mica. &vector[i]). printf(")\n"). no en 1. b. o Como el resto de las variables. &b). n A diferencia de Pascal. } 12 . . int* y) { int temp = *x. intercambio(&a. solo tenemos que hacer: nombre_variable[posici´n_deseada]. 3}. i<3. 4. un vector tambi´n se puede inicializar en su e declaraci´n: o tipo_variable nombre_variable[tama~o] = {valor1. i<3.h> int main(int argc..void intercambio (int* x.

pero con m´s dimensiones. Pero tambi´n podemos acceder a una fila entera. const char *cad2): Compara ambas cadenas devolviendo un valor negativo si cad1 < cad2. solo tenemos que hacer: o nombre_variable[fila][columna]. */ a char string2[] = "Hola mundo.1. 0 si cad1 == cad2. Al igual que los vectores. char *strcat(char *destino.’.’o’. 4.’n’.... Si queremos acceder a una posici´n de la matriz.. y un valor positivo si cad1 > cad2. /* Creo e inicializo una cadena.{valM1. algunas son: char string1[4].’m’. /* String de 3 caracteres.’a’. excluyenn do el car´cter nulo. 0 si cad1 == cad2. Strings Los strings no existen en C. */ char string3[] = {’H’.3. const char *cad2..’. . const char *origen. las matrices tambi´n se puede inicializar en su declaraci´n: e o tipo nombre[i][j] = {{val11. Algunas funciones para trabajar con los char* Para trabajar con los string tenemos que incluir: #include <string..’d’. char *strcpy(char *destino. size t strlen(const char *s): Retorna el tama˜o de la cadena. const char *origen): Concatena la cadena origen al final de la cadena destino.’o’..h>.2.. a Existen varias formas de declararlas. size t n): Compara los primeros n caracteres de ambas cadenas devolviendo un valor negativo si cad1 < cad2. */ char *string4 = "cadena 4". y lo har´ e ıamos as´ ı: nombre_variable[fila]. . Si usamos el operador = copiar´ ıamos los punteros. 4. val1N}. const char *origen): Copia la cadena origen a la cadena destino. pero en lugar se utilizan las cadenas de caracteres terminadas en el car´cter nulo(\0).3.".’\o’} /* Las cadenas 2 y 3 son exactamente iguales. y un valor positivo si cad1 > cad2. strcmp(const char *cad1. a char *strcpy(char *destino.’l’.’u’.’ ’. 13 . Matrices Las matrices son vectores. strcmp(const char *cad1. a tipo_variable nombre_variable[numero_fils][numero_cols]. valMN}}. m´s uno del \0.4. size t n): Copia n primeros caracteres de la cadena origen a la cadena destino.

char *strrchr(const char *cadena. recuerden que para ine cluirla hacemos: #include <stdio. int c. lista de punteros a variables): Funciona igual que scanf. pero se puede usar para ellos. a int memcmp(const void *s1. const char *origen): Retorna el n´mero de caracteres iniciales encontrados en cadena que no coinciden u con los de origen. size t n): Concatena los n primeros caracteres de la cadena origen al final de la cadena destino. a lee desde el buffer. y retorna en forma similar a strcmp. int sscanf(const char *buffer. size t n): Esta ya no es exclusivo para strings. ”. pero en lugar de escribir en la salide est´ndar. const void *origen. int c): Busca el ultimo car´cter ´ a igual a c en la cadena. 14 . void *memchr(const void *origen. lista de variables): Funciona igual que printf. int c): Busca el primer car´cter a igual a c en la cadena. const void *origen. const char *origen. size t strspn(const char *cadena.cadena de caracteres”. size t n): Para rellenar n bytes a partir de origen con el car´cter c. const char *buscada): Retorna un puntero a la primera ocurrencia de la cadena buscada en origen. void *memcpy(void *destino. const char *accept): Retorna un puntero a la primera ocurrencia de la cadena de cualquier car´cter de la cadena a accept. char *strpbrk(const char *s.h. char *strstr(const char *origen. size t n): Copia una los primeros n bytes desde origen a destino. size t n): Compara los primeros n bytes de S1 y S2. ”. void *memset(void *origen.char *strcat(char *destino.cadena de caracteres”. char *strchr(const char *cadena. a Y ahora tambi´n tenemos dos funciones en la stdio. a escribe en el buffer. pero en lugar de leer desde la entrada est´ndar. int c. const void *s2. size t strcspn(const char *cadena. Mueve los primeros n bytes desde la zona apuntada por origen a la zona apuntada por destino. int sprintf(char *buffer. size t n): Busca en los primeros n bytes de origen el car´cter c. const char *origen): Retorna el n´mero de caracteres iniciales encontrados en cadena que coinciden con u los de origen.h>. void *memmove(void *destino.

c -o nombre_programa 5. alıa gunos comentarios son sacados de internet. tiene soporte para varios lenguajes y es muy potente. es una popular interfaz de usuario gr´fica para depuradores en l´ a ınea de comandos como GDB. Estos compiladores se consideran est´ndar para los a sistemas operativos derivados de UNIX. Originalmente GCC significaba GNU C Compiler (compilador GNU para C). 5. pero como no use todas las herramientas que nombro o simplemente no se me ocurr´ que escribir. Fortran. Windows Dev-C++ [5] Bloodshed Dev-C++ es un entorno de desarrollo integrado (IDE por sus siglas en ingl´s) para programar en lenguaje C/C++.2. Posteriormente se extendi´ para o o compilar C++. Compiladores y Entornos de Desarrollo A continuaci´n les nombrar´ algunas herramientas que me parecen imporo e tantes para desarrollar.2. Fue el compilador m´s popular para desarrollar en C en entornos MS-DOS. Usa e MinGW que es una versi´n de GCC (GNU Compiler Colletion) como o su compilador. Se compila poniendo en l´ ınea de comandos: gcc nombre_archivo. de c´digo abierto o tambi´n de o e propietarios. Tratar´ de coo e mentar algo de cada herramienta en un par de renglones. Debugger GDB [8] GDB es el debugger (depurador) de GNU. traducirlos o crear listas. Dev-C++ puede adem´s ser usado en combinaci´n con a o Cygwin y cualquier compilador basado en GCC. Su primera versi´n es de 1987. en modo texto. Ada y otros. a Se le considera el primer IDE para C disponible para dicha plataforma. a la que siguieron las o versiones 1. como Mac OS X. 5. DBX. n Visual C++. Linux Compilador gcc [7] GNU Compiler Collection es un conjunto de compiladores creados por el proyecto GNU.0 como el Turbo C++ 1. o DDD. Turbo C [6] IDE y compilador para programar en lenguaje C desarrollado por Borland.1. enlazarlos. compilar y depurar c´digo en C/C++. n o quitarles s´ ımbolos innecesarios. Tanto el Turbo C 2.2.5 y 2. porque s´lo compilaba el lenguaje C.5. Es para l´ ınea de comandos.2. 5. 15 . DDD [9] Data Display Debugger. Sustituido por el Turbo C++ en 1990.0 pueden conseguirse gratuitamente en la web de Borland desde el a˜o 2000. GCC es software libre y lo distribuye la FSF bajo la licencia GPL.1.0 de1989. GCC requiere el conjunto de aplicaciones conocido como binutils para realizar tareas como identificar archivos objeto u obtener su tama˜o para copiarlos.

XDB.3. El NetBeans C/C++ Pack soporta proyectos de C/C++. o IDE. o o KDevelop [10] El Proyecto KDevelop surgi´ en 1998 con el fin de desaro rollar un IDE (Entorno de desarrollo integrado) f´cil de usar para KDE. n Incluyen un gestores de proyectos. ıa 16 . a Desde entonces. WDB. asistentes de aplicaciones. IDEs Las cuatro propuestas a continuaci´n son editores de gran potencia y vero satilidad tanto para peque˜os programas como para aplicaciones avanzadas.2. NetBeans (con plugin para C++) [13] NetBeans es una aplicaci´n de o c´digo abierto (open source) dise˜ada para el desarrollo de aplicaciones o n f´cilmente portables entre las distintas plataformas. Eclipse (con plugin para C++) [12] Eclipse es una plataforma de software de C´digo abierto independiente de una plataforma para desarrollar c´digo o o Java. pero se le pude a˜adir un plugin para que soporte programas en n C/C++. a 5.JDB. o Anjuta [11] Anjuta es un entorno de desarrollo. gratuito y con licencia GPL para lenguajes C/C++. el IDE KDevelop est´ p´blicamente disponible bajo la a u GPL y soporta muchos lenguajes de programaci´n. el depurador de Perl o el depurador de Python. haciendo uso de la a tecnolog´ Java. depuradores interactivos y un potente editor con navegaci´n de c´digo y resaltado en colores. donde las estructuras de datos son visualizadas como gr´ficos. DDD se rige bajo licencia GNU GPL y es software libre y tiene una GUI que permite visualizar el c´digo fuente y una interfaz gr´fica interactiva para o a visualizar los datos.

org/gdb/ [9] http://www.org/wiki/Dennis M.org/ [13] http://www.com/article/20841 [7] http://gcc.anjuta.wikipedia.Referencias [1] http://es.org/wiki/Lenguaje de programaci %C3 %B3n B [4] http://es.html [6] http://dn.wikipedia.org/ [8] http://sourceware.wikipedia.gnu.org/ [11] http://www.eclipse.net/dev/devcpp.org/products/cplusplus/ 17 .org/wiki/Ken Thompson [3] http://es. Ritchie [2] http://es.wikipedia.kdevelop.codegear.bloodshed.org/ [12] http://www.org/software/ddd/ [10] http://www.gnu.netbeans.org/wiki/Lenguaje de programaci %C3 %B3n Pascal [5] http://www.