{"id":171,"date":"2014-03-12T12:07:02","date_gmt":"2014-03-12T12:31:00","guid":{"rendered":"https:\/\/e6fceFundamentos-de-programacion-en-C.gif"},"modified":"2015-07-16T21:02:26","modified_gmt":"2015-07-17T03:02:26","slug":"fundamentos-de-programacion-en-c","status":"publish","type":"post","link":"https:\/\/emanuelpaxtian.com\/blog\/fundamentos-de-programacion-en-c\/","title":{"rendered":"Fundamentos de programaci\u00f3n en C"},"content":{"rendered":"<p>Este manual es un curso de introducci\u00f3n a la programaci\u00f3n utilizando para ello un lenguaje a bajo nivel como lo es C. Se revisar\u00e1n aqu\u00ed sus tipos de datos, estructuras de control, sus m\u00e9todos I\/O, el manejo de matrices, el manejo de ficheros, funciones, punteros, bibliotecas b\u00e1sicas o la creaci\u00f3n de juegos multiplataforma mediante SDL.<\/p>\n<p>C es un lenguaje de programaci\u00f3n creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evoluci\u00f3n del anterior lenguaje B, a su vez basado en BCPL.<\/p>\n<p>Dentro de los lenguajes de programaci\u00f3n, C es un lenguaje que tiene un cierto \u201cprestigio\u201d. Esto se debe fundamentalmente a dos razones:<\/p>\n<p>Es bastante \u201cportable\u201d: un programa bien hecho en C se podr\u00e1 llevar a un ordenador distinto o incluso a un sistema operativo distinto (de MsDos a Windows o a Linux, por ejemplo) con muy pocos cambios o quiz\u00e1s incluso sin ning\u00fan cambio. El motivo es que existe un est\u00e1ndar: el ANSI C, que soportan casi todos los compiladores. Por eso, si nos ce\u00f1imos al est\u00e1ndar, es seguro que nuestros programas funcionar\u00e1n en distintos sistemas; cuanto m\u00e1s nos separemos del est\u00e1ndar (en ocasiones podremos hacerlo), m\u00e1s dif\u00edcil ser\u00e1 que funcionen en otro sistema distinto.<\/p>\n<p>Permite hacer \u201ccasi de todo\u201d: podemos usar \u00f3rdenes de alto nivel (muy cercanas al lenguaje humano), pero tambi\u00e9n de bajo nivel (m\u00e1s cercanas a lo que realmente entiende el ordenador). De hecho, podremos incluso incorporar \u00f3rdenes en lenguaje ensamblador en medio de un programa escrito en C, aunque eso supone que ganemos en control de la m\u00e1quina que estamos manejando, a costa de perder en portabilidad (el programa ya no se podr\u00e1 llevar a otros ordenadores que no usen el mismo lenguaje ensamblador).<\/p>\n<p>En su contra, el lenguaje C tiene que es m\u00e1s dif\u00edcil de aprender que otros y que puede resultar dif\u00edcil de leer (por lo que ciertos errores pueden tardar m\u00e1s en encontrarse).<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>CONCEPTOS B\u00c1SICOS SOBRE PROGRAMACI\u00d3N<\/li>\n<li>Lenguajes de alto nivel y de bajo nivel.<\/li>\n<li>Ensambladores, compiladores e int\u00e9rpretes<\/li>\n<li>Pseudoc\u00f3digo<\/li>\n<li>TOMA DE CONTACTO CON C<\/li>\n<li>Escribir un texto en C<\/li>\n<li>C\u00f3mo probar este programa en Linux<\/li>\n<li>C\u00f3mo probar este programa en Windows<\/li>\n<li>Mostrar n\u00fameros enteros en pantalla<\/li>\n<li>Operaciones aritm\u00e9ticas b\u00e1sicas<\/li>\n<li>Orden de prioridad de los operadores<\/li>\n<li>Introducci\u00f3n a los problemas de desbordamiento<\/li>\n<li>Introducci\u00f3n a las variables: int<\/li>\n<li>Definici\u00f3n de variables: n\u00fameros enteros<\/li>\n<li>Asignaci\u00f3n de valores<\/li>\n<li>Mostrar el valor de una variable en pantalla<\/li>\n<li>Identificadores<\/li>\n<li>Comentarios<\/li>\n<li>Datos por el usuario: scanf<\/li>\n<li>TIPOS DE DATOS B\u00c1SICOS<\/li>\n<li>Tipo de datos entero<\/li>\n<li>Tipos de enteros: signed\/unsigned, short\/long<\/li>\n<li>Problem\u00e1tica: asignaciones y tama\u00f1o de los n\u00fameros; distintos espacios ocupados seg\u00fan el sistema<\/li>\n<li>Unidades de medida empleadas en inform\u00e1tica (1): bytes, kilobytes, megabytes&#8230;<\/li>\n<li>Unidades de medida empleadas en inform\u00e1tica (2): los bits<\/li>\n<li>Sistemas de numeraci\u00f3n: 1- Sistema binario<\/li>\n<li>Sistemas de numeraci\u00f3n: 2- Sistema octal<\/li>\n<li>Sistemas de numeraci\u00f3n: 3- Sistema hexadecimal<\/li>\n<li>Formato de constantes enteras: oct, hex<\/li>\n<li>Representaci\u00f3n interna de los enteros<\/li>\n<li>Incremento y decremento<\/li>\n<li>Operaciones abreviadas: +=<\/li>\n<li>Modificadores de acceso: const, volatile<\/li>\n<li>Tipo de datos real<\/li>\n<li>Simple y doble precisi\u00f3n<\/li>\n<li>Mostrar en pantalla n\u00fameros reales<\/li>\n<li>Operador de tama\u00f1o: sizeof<\/li>\n<li>Operador de molde: (tipo) operando<\/li>\n<li>Tipo de datos car\u00e1cter<\/li>\n<li>Secuencias de escape: \\n y otras.<\/li>\n<li>Introducci\u00f3n a las dificultades de las cadenas de texto<\/li>\n<li>ESTRUCTURAS DE CONTROL<\/li>\n<li>Estructuras alternativas<\/li>\n<li>if<\/li>\n<li>if y sentencias compuestas<\/li>\n<li>Operadores relacionales: &lt;, &lt;=, &gt;, &gt;=, ==, !=<\/li>\n<li>if-else<\/li>\n<li>Fundamentos de programacion en C, por Nacho Cabanes<\/li>\n<li>Revision 0.90\u2013 Pagina 3<\/li>\n<li>Operadores l\u00f3gicos: &amp;&amp;, ||, !<\/li>\n<li>C\u00f3mo funciona realmente la condici\u00f3n en un \u201cif\u201d<\/li>\n<li>El peligro de la asignaci\u00f3n en un \u201cif\u201d<\/li>\n<li>Introducci\u00f3n a los diagramas de flujo<\/li>\n<li>Operador condicional: ?<\/li>\n<li>switch<\/li>\n<li>Estructuras repetitivas<\/li>\n<li>while<\/li>\n<li>do &#8230; while<\/li>\n<li>for<\/li>\n<li>Sentencia break: termina el bucle<\/li>\n<li>Sentencia continue: fuerza la siguiente iteraci\u00f3n<\/li>\n<li>Sentencia goto<\/li>\n<li>M\u00e1s sobre diagramas de flujo. Diagramas de Chapin.<\/li>\n<li>Recomendaci\u00f3n de uso de los distintos tipos de bucle<\/li>\n<li>ENTRADA\/SALIDA B\u00c1SICA<\/li>\n<li>printf<\/li>\n<li>scanf<\/li>\n<li>putchar<\/li>\n<li>getchar<\/li>\n<li>ARRAYS Y ESTRUCTURAS<\/li>\n<li>Conceptos b\u00e1sicos sobre tablas<\/li>\n<li>Definici\u00f3n de una tabla y acceso a los datos<\/li>\n<li>Valor inicial de una tabla<\/li>\n<li>Recorriendo los elementos de una tabla<\/li>\n<li>Cadenas de caracteres<\/li>\n<li>Definici\u00f3n. Lectura desde teclado<\/li>\n<li>C\u00f3mo acceder a las letras que forman una cadena<\/li>\n<li>Longitud de la cadena.<\/li>\n<li>Entrada\/salida para cadenas: gets, puts<\/li>\n<li>Asignando a una cadena el valor de otra: strcpy, strncpy; strcat<\/li>\n<li>Comparando cadenas: strcmp<\/li>\n<li>Otras funciones de cadenas: sprintf, sscanf, strstr,<\/li>\n<li>Valor inicial de una cadena de texto<\/li>\n<li>Tablas bidimensionales<\/li>\n<li>Arrays indeterminados.<\/li>\n<li>Estructuras<\/li>\n<li>Definici\u00f3n y acceso a los datos<\/li>\n<li>Arrays de estructuras<\/li>\n<li>Estructuras anidadas<\/li>\n<li>Ejemplo completo<\/li>\n<li>Ordenaciones simples<\/li>\n<li>MANEJO DE FICHEROS<\/li>\n<li>Escritura en un fichero de texto<\/li>\n<li>Lectura de un fichero de texto<\/li>\n<li>Lectura hasta el final del fichero<\/li>\n<li>Ficheros con tipo<\/li>\n<li>Fundamentos de programacion en C, por Nacho Cabanes<\/li>\n<li>Leer y escribir letra a letra<\/li>\n<li>Modos de apertura<\/li>\n<li>Ficheros binarios<\/li>\n<li>Ejemplo: copiador de ficheros<\/li>\n<li>Acceder a cualquier posici\u00f3n de un fichero<\/li>\n<li>Ejemplo: leer informaci\u00f3n de un fichero BMP<\/li>\n<li>Ficheros especiales 1: la impresora<\/li>\n<li>Ficheros especiales 2: salida de errores<\/li>\n<li>Un ejemplo de lectura y escritura: TAG de un MP3<\/li>\n<li>INTRODUCCI\u00d3N A LAS FUNCIONES<\/li>\n<li>Dise\u00f1o modular de programas: Descomposici\u00f3n modular<\/li>\n<li>Conceptos b\u00e1sicos sobre funciones<\/li>\n<li>Par\u00e1metros de una funci\u00f3n<\/li>\n<li>Valor devuelto por una funci\u00f3n<\/li>\n<li>El valor de retorno \u201cvoid\u201d. El valor de retorno de \u201cmain\u201d<\/li>\n<li>Variables locales y variables globales<\/li>\n<li>Los conflictos de nombres en las variables<\/li>\n<li>El orden importa<\/li>\n<li>Algunas funciones \u00fatiles<\/li>\n<li>N\u00fameros aleatorios<\/li>\n<li>Funciones matem\u00e1ticas<\/li>\n<li>Pero casi todo son funciones\u2026<\/li>\n<li>Recursividad<\/li>\n<li>C\u00f3mo interrumpir el programa.<\/li>\n<li>C\u00d3MO DEPURAR LOS PROGRAMAS<\/li>\n<li>Conceptos b\u00e1sicos sobre depuraci\u00f3n<\/li>\n<li>Ejemplos de algunos entornos<\/li>\n<li>Punteros y gesti\u00f3n din\u00e1mica de memoria<\/li>\n<li>\u00bfPor qu\u00e9 usar estructuras din\u00e1micas?<\/li>\n<li>\u00bfQu\u00e9 son los punteros?<\/li>\n<li>Repasemos con un ejemplo sencillo<\/li>\n<li>Aritm\u00e9tica de punteros<\/li>\n<li>Punteros y funciones: par\u00e1metros por referencia<\/li>\n<li>Punteros y arrays<\/li>\n<li>Arrays de punteros<\/li>\n<li>Punteros y estructuras<\/li>\n<li>Opciones de la l\u00ednea de comandos: par\u00e1metros de \u201cmain\u201d<\/li>\n<li>Estructuras din\u00e1micas habituales 1: las listas enlazadas<\/li>\n<li>\u00a0Estructuras din\u00e1micas habituales 2: los \u00e1rboles binarios<\/li>\n<li>Indirecci\u00f3n m\u00faltiple<\/li>\n<li>Un ejemplo: copiador de ficheros en una pasada<\/li>\n<li>BIBLIOTECAS DE USO FRECUENTE<\/li>\n<li>Llamadas al sistema: system<\/li>\n<li>Temporizaci\u00f3n<\/li>\n<li>Pantalla y teclado con Turbo C<\/li>\n<li>Acceso a pantalla en Linux: curses.h<\/li>\n<li>Juegos multiplataforma: SDL<\/li>\n<li>Dibujando una imagen de fondo y un personaje<\/li>\n<li>Un personaje m\u00f3vil<\/li>\n<li>Im\u00e1genes transparentes, escribir texto y otras mejoras<\/li>\n<li>El doble buffer<\/li>\n<li>El bucle de juego (game loop)<\/li>\n<li>OTRAS CARACTER\u00cdSTICAS AVANZADAS DE C<\/li>\n<li>Operaciones con bits<\/li>\n<li>Directivas del preprocesador<\/li>\n<li>Constantes simb\u00f3licas: #define<\/li>\n<li>Inclusi\u00f3n de ficheros: #include<\/li>\n<li>Compilaci\u00f3n condicional: #ifdef, #endif<\/li>\n<li>Otras directivas<\/li>\n<li>Programas a partir de varios fuentes<\/li>\n<li>Creaci\u00f3n desde la l\u00ednea de comandos<\/li>\n<li>Introducci\u00f3n al uso de la herramienta Make<\/li>\n<li>Introducci\u00f3n a los \u201cproyectos\u201d<\/li>\n<li>Uniones y campos de bits<\/li>\n<li>El operador coma<\/li>\n<li>Enumeraciones<\/li>\n<li>Definici\u00f3n de tipos<\/li>\n<li>Ap\u00e9ndice 1. Revisiones de este texto<\/li>\n<li>Ap\u00e9ndice 2. Soluciones a algunos de los ejercicios propuestos<\/li>\n<\/ul>\n<p><a class=\"sc-button sc-button-default sc-button-medium\" href=\"..\/recursos\/Fundamentos-de-programacion-en-C.pdf\">Descargar Libro<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este manual es un curso de introducci\u00f3n a la programaci\u00f3n utilizando para ello un lenguaje a bajo nivel como lo es C. Se revisar\u00e1n aqu\u00ed sus tipos de datos, estructuras&hellip;<\/p>\n","protected":false},"author":1,"featured_media":681,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/comments?post=171"}],"version-history":[{"count":0,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media\/681"}],"wp:attachment":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media?parent=171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/categories?post=171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/tags?post=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}