Iniciar sesión

Ver la versión completa : Aprender C sabiendo programar



ZeNiTRaM
02/08/2008, 21:40
Pues eso, como el titulo dice, ya que me he pasado lo que llevo de verano pegado al ordenador sin hacer nada productivo, me he propuesto al menos hacer algo útil en lo que queda de él y aprender C.

Ya se programar en PHP, Python y Ruby, así que más o menos lo que viene siendo las estructuras, variables, y conceptos más o menos comunes de la programación (al menos de estos lenguajes) los tengo controlados. Pero eso, os escribía por si me podríais aconsejar algun tutorial, manual, ejemplo, o lo que fuera para ésta tarea...

pakoito
02/08/2008, 21:44
C te va a hacer sudar mucho y estrujarte las neuronas, yo he seguido el camino contrario y Python y Ruby te ahorran el 90% del tiempo que te toca tirarte con C, donde tienes que dar instrucción por instrucción para trabajar, en vez de las cómodas funciones ya implementadas. Yo te recomiendo alguno de los libros de C que puedas encontrar en librerías, tipo los de ra-ma. Sino, en lawebdelprogramador suelen haber buenos tutoriales.


Un ejemplo de las dificultades: tu has usado listas, diccionarios y demás. En C no existen, solamente un tipo de datos básico y a partir de él tienes que crearte tu todas las funciones que vas a utilizar, ya sea añadir, borrar, ordenar, buscar, etc...Los diccionarios son HASHMAPS, que ya son la repanhostia incluso teniendo las funciones ya copiadas de web. No hay conversión implícita de datos, cada variable tiene un tipo y es inmutable: los int no trabajan como cadenas, los real como int y más. Las cadenas son un infierno, me niego a comentar nada sobre ellas.

Karkayu
03/08/2008, 11:45
C te va a hacer sudar mucho y estrujarte las neuronas, yo he seguido el camino contrario y Python y Ruby te ahorran el 90% del tiempo que te toca tirarte con C, donde tienes que dar instrucción por instrucción para trabajar, en vez de las cómodas funciones ya implementadas. Yo te recomiendo alguno de los libros de C que puedas encontrar en librerías, tipo los de ra-ma. Sino, en lawebdelprogramador suelen haber buenos tutoriales.


Un ejemplo de las dificultades: tu has usado listas, diccionarios y demás. En C no existen, solamente un tipo de datos básico y a partir de él tienes que crearte tu todas las funciones que vas a utilizar, ya sea añadir, borrar, ordenar, buscar, etc...Los diccionarios son HASMAPS, que ya son la repanhostia incluso teniendo las funciones ya copiadas de web. No hay conversión implícita de datos, cada variable tiene un tipo y es inmutable: los int no trabajan como cadenas, los real como int y más. Las cadenas son un infierno, me niego a comentar nada sobre ellas.

Te ha faltado comentar a nuestros amigos los punteros :D

Aiken
03/08/2008, 12:03
quitando los arrays/hash asociativos y las variables de tipos estrictos tampoco hay tanta diferencia con C. y punteros depende de lo que hagas no tienes porque necesitarlos.

Aiken

PharaOnyx
03/08/2008, 12:21
Un ejemplo de las dificultades: tu has usado listas, diccionarios y demás. En C no existen, solamente un tipo de datos básico y a partir de él tienes que crearte tu todas las funciones que vas a utilizar, ya sea añadir, borrar, ordenar, buscar, etc...Los diccionarios son HASMAPS, que ya son la repanhostia incluso teniendo las funciones ya copiadas de web. No hay conversión implícita de datos, cada variable tiene un tipo y es inmutable: los int no trabajan como cadenas, los real como int y más. Las cadenas son un infierno, me niego a comentar nada sobre ellas.
Más que dificultades de C diría que son 'facilidades' de los otros lenguajes. Yo, personalmente, prefiero esas 'dificultades' a la cantidad de cosas raras que te pueden pasar programando en PHP con todas las 'facilidades' que se supone que te da (especialmente en el tema de manejo de cadenas y conversión implícita de tipos). Con tanta librería y función acaba pasando que para un 'Hello World!' necesitas una máquina con tropecientos gigas de RAM y un trillón de gigahercios entre el programa, el intérprete/máquina virtual y toda la pesca x'D

Pero como siempre se ha dicho: para gustos, colores :)

Saludos, Alex

pd: ah, hasHmaps. Y en C, que yo sepa, no hay. En todo caso C++

hardyx
03/08/2008, 12:54
Te animo a que aprendas C y C++, ten en cuenta que va a ser un poco más difícil que otros lenguajes de más alto nivel. Pero vas a comprender cómo funciona un ordenador mejor tratando con punteros y gestionando tú mismo la memoria. Aquí no hay recolector de basura y vas a saber la memoria que estás usando en todo momento.

Y si estás acostumbrado a estructuras tipo lista, vectores, colecciones, mapas también los tienes en C++ con la STL, pero eso más adelante. Poco a poco y suerte.

Jurk
03/08/2008, 13:26
Para mi C nunca ha sido un lenguaje de alto nivel, sino de medio ya que te permite una gestion de la memoria cercana a la de ensamblador. Y si es un **** grano en el culo que sea la asi, tan primitivo, donde no hay funciones predefinidas y demas, pero por otro lado, es su gran ventaja , porque la versatilidad que tiene es enorme! Y la potencia increible, ya que, en mi opinion, es casi tan rapido como el ensamblador.

Y por ultimo, lo que mas mola de C es la intercambiabilidad enter matrices y vectores!!!

pakoito
03/08/2008, 16:44
pd: ah, hasHmaps. Y en C, que yo sepa, no hay. En todo caso C++Me dejé la H, perdón. Hashmaps hay, están las funciones de Hash por ahí (http://www.w3.org/2001/06/blindfold/api/hashmap_8c-source.html) y no deja de ser una array (o lista) ordenada según dicha función.

josepzin
03/08/2008, 17:30
C es mi gran deuda como programador... siempre quise aprender pero nunca di el paso. Ya llegará el momento :)

El tema de los tipos de datos estrictos no me asusta.

pakoito
03/08/2008, 17:36
C es mi gran deuda como programador... siempre quise aprender pero nunca di el paso. Ya llegará el momento ¿Pero tu no programas el GLEST? ¿sabes c++ pero no c?

PharaOnyx
03/08/2008, 18:12
Me dejé la H, perdón. Hashmaps hay, están las funciones de Hash por ahí (http://www.w3.org/2001/06/blindfold/api/hashmap_8c-source.html) y no deja de ser una array (o lista) ordenada según dicha función.
Una cosa es que exista una implementación de un hashmap en C y otra cosa es que sea parte del lenguaje. Lo del enlace entra en la primera categoría :)

Por esa regla de tres también te diría que hay listas/pilas/colas genéricas en C, porque yo tengo hecha una librería para ello. Pero no vienen en el C de fábrica

Saludos, Alex

edito: vamos, me puedo equivocar, pero no creo que haya cambiado tanto C desde que lo usaba intensivamente x'D

pakoito
03/08/2008, 18:17
Una cosa es que exista una implementación de un hashmap en C y otra cosa es que sea parte del lenguaje. Lo del enlace entra en la primera categoría :)

Por esa regla de tres también te diría que hay listas/pilas/colas genéricas en C, porque yo tengo hecha una librería para ello. Pero no vienen en el C de fábrica

Saludos, Alex

edito: vamos, me puedo equivocar, pero no creo que haya cambiado tanto C desde que lo usaba intensivamente x'D

Un ejemplo de las dificultades: tu has usado listas, diccionarios y demás. En C no existen, solamente un tipo de datos básico y a partir de él tienes que crearte tu todas las funciones que vas a utilizar, ya sea añadir, borrar, ordenar, buscar, etc...Los diccionarios son HASHMAPS, que ya son la repanhostia incluso teniendo las funciones ya copiadas de web. No hay conversión implícita de datos, cada variable tiene un tipo y es inmutable: los int no trabajan como cadenas, los real como int y más. Las cadenas son un infierno, me niego a comentar nada sobre ellas.Tu mismo me lo quoteaste antes.

josepzin
03/08/2008, 20:06
¿Pero tu no programas el GLEST? ¿sabes c++ pero no c?
¡Me halagas, qué más quisiera yo haber programado el Glest! :), pero el que programó el juego se llama Martiño Figueroa (créditos del Glest (http://glest.org/es/creditos.php)), yo me encargué del tema logotipo, web e iconos del juego.

Para los programadores interesados en leer y responder: Meme de desarrollo de software (http://www.josezanni.com/blog/?p=107)