Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola, quisiera que me recomendarais algun programa, gratuito si es posible, para compilar y programar en c, y saber si se puede hacer programas en c, que ademas de escribir texto en pantalla pueda manejar graficos, crear entorno grafico propio y similares (como los entornos graficos de un videojuego) y como se puede programar que se muestren imagenes en pantalla con c. Igualmente agradeceria cualquier referencia a manuales lo mas completos posibles sobre programacion en c, preferiblemente en castellano.
Gracias por cualquier ayuda que me podais ofrecer.
De nada
A mi me pasó algo parecido cuando acabé el instituto: sabía sumar, restar, multiplicar.... analizar funciones, operaciones de matrices, integrar... Pensaba que sabía todo de matemáticas. Pero después llegué a la uni jejeje
De todas formas, cuando controles C deberías echarle un vistazo a C++. Si le dedicas un par de horas a C todos los días, en un par de semanas sabrás lo suficiente como para pasar a C++. Todo lo que se hace con C++ se puede hacer con C, pero C++ tiene muchas de las ventajas de los últimos lenguajes conservando un alto rendimiento. Sabiendo C/C++ en un futuro podrás aprender cualquier lenguaje imperativo en un plis plas.
Ale, a leer 🙂
Y cuando hayas leido eso puedes intentar implementando esto:
http://www.josemariabea.com/ListasEnlazadas.php
Ya lei todos los capitulos del primer enlace, incluidos los otros dos; algunas cosas de la algoritmia ya las tenia algo vistas como lo de descomponer un problema grande en otros mas pequeños y eso.
Me pase por el ultimo enlace para implementarlo y toando de ejemplo la lista de la agenda he echo otra lista agenda de tres campos (me meti con un campo mas) y hice la funcion de borrar un elemento desde cero:
#include <stdio>
#include <stdlib>
#include <conio>
#include <string>
struct agenda{
char nombre[15], correoe[40], telefono[10] ;
agenda *siguiente ;
};
typedef struct agenda agenda ;
agenda *primero, *ultimo ;
void nuevo();
void menu();
void mostrar();
void borrar();
main() {
char opcion;
primero = (agenda *) NULL;
ultimo = (agenda *) NULL;
do {
menu();
opcion = getch();
switch ( opcion ) {
case '1': nuevo();
break;
case '2': borrar();
break;
case '3': mostrar();
break;
case '4': exit( 1 );
default: printf( "Opcion no válidan" );
break;
}
}while(opcion!='4');
}
void menu() {
printf("nnMenu:nn");
printf("1 A244adir elementosn");
printf("2 Borrar elementosn");
printf("3 Mostrar listan");
printf("4 Salirnn");
printf("Escoge una opcion: ");
}
void nuevo() {
agenda *nuevo ;
nuevo = (agenda *) malloc(sizeof(agenda)) ;
if (nuevo==NULL) printf( "No hay memoria disponible.n") ;
else {
printf("nNuevo elemento:n");
printf("Nombre: ");
gets(nuevo->nombre) ;
printf("Telefono: ");
gets(nuevo->telefono) ;
printf("Correo electronico: ");
gets(nuevo->correoe) ;
nuevo->siguiente = NULL ;
if (primero==NULL){
printf("Primer elemento.n");
primero = nuevo ;
ultimo = nuevo ;
}
else {
ultimo->siguiente = nuevo ;
ultimo = nuevo ;
printf("Nuevo elemento a244adido.n");
}
}
}
void borrar(){
agenda *actual, *anterior ;
actual = primero ;
char nombre[15] ;
printf("nnNombre de elemento a borrar: ");
gets(nombre) ;
int i=0, c ;
while(actual!=NULL){
c = strcmp(actual->nombre, nombre);
if(c == 0){
if(i == 0){
primero = actual->siguiente ;
}
else{
anterior->siguiente = actual->siguiente ;
}
free(actual);
printf("nElemento de la lista que coincide en nombre eliminado de la lista.n");
}
anterior = actual ;
actual = actual->siguiente ;
i++ ;
}
}
void mostrar() {
agenda *actual ;
actual = primero ;
printf("nMostrando la lista completa:n");
int i=0 ;
while(actual!=NULL){
printf( "Nombre: %sn Telefono: %sn Correo electronico: %sn", actual->nombre, actual->telefono, actual->correoe);
actual = actual->siguiente;
i++;
}
if (i==0) printf( "nLa lista esta vacian" );
}
Ahora ya veo las posibles utilidades de una lista dinamica, aunque creo si la lista llegase a ser bastante larga se ralentizaria la tarea de buscar un elemento de la lista (como para borrar un elemento) sobretodo si el elemento en cuestion esta entre la mitad y el final, aun haciendo la lista doblemente enlazada habria que recorerla secuencialmente y eso puede restar velocidad en la ejecucion ¿hay algun modo de acceder a un miembro de la lista mas rapido que ir de uno en uno provando suerte hasta ver cual es el que uno busca?.
Despues de la algoritmia y las listas dinamicas, ¿que es lo proximo en la programacion en C?
Muy bien. Lo primero es que probando se escribe con 'b'. jeje
Hay otros métodos para acceder, otros tipos de estructuras. Los árboles hacen que la búsqueda de elementos sea log(n). Los índices hash, que reducen drásticamente el tiempo de acceso a vectores... Hay muchísimas estructuras, sobre todo árboles, los hay de todos los colores, paginados, AVL... De todas formas con que aprendas cómo implementar árboles dinámicos ya vas que te matas por ahora.
lacabra25, la verdad es que tengo que felicitarte, has avanzado mucho en C (a mi me costó mucho al principio)...
Lo primero que tienes que tener claro es que tienes que entender bien los conceptos de puntero. Una vez los tengas claros programar en C puede ser muy sencillo.
Otra cosa que tienes que tener claro es que un mismo problema se puede resolver de muchas formas, por lo tanto antes de plantearte un código, planteate qué quieres resolver con él y las distintas opciones que puedes usar, y luego escoge la que más te convenga en ese momento (no siempre tiene que ser la más eficiente).
S2
Ranganok Schahzaman
PD: pasar de C a C++ implica un cambio de paradigma importante (para hacerlo bien y no en plan chapucero), es pasar de programación estructurada a programación orientada a objetos. Una vez que sepas programar en estos dos lenguajes te será muy fácil aprender el 80% del resto.
Gracias por las felicitaciones.
Segun he podido leer hasta ahora de c++, es bastante similar a c cambiando unicamente la forma de programar, y la programacion orientada a objetos de c++ no creo que me suponga un reto para aprender c++ y c, ya tengo esperiencia de lenguajes orientados a objetos por javascript.
Segun he visto en lo de aprende como en primero, de c a c++ aparte de que uno sea imperativo y el otro orientado a objetos solo cambia algunas sintaxis en las que o uno es mas restrictivo u el otro deja ademas escribirlo de otro modo, pero antes de empezar con c++ prefiero proseguir con c, y si c y c++ pueden, ya sea de un modo u otro, hacer lo mismo pues me gusta un poco mas el c por lo de como es imperativo.
c++ que se me parece mas a javascript por lo de ser orientado a objetos y prefiero tratar los datos mas de forma imperaiva que haciendo funciones para tratarlos como objetos, con las estructuras de c no creo que necesite los objetos de c++.
Si c++ tiene algo que con c no se puede, seria lo unico por lo que centrarme mas en c++ sabiendo c, ¿cual veis mejor?¿hay algo que se pueda hacer con uno y no con otro por lo que se deba programar en uno por no poder hacer el programa en el otro?
Los punteros ya los tenia algo comprendidos y el ultimo enlace y hacer la lista dinamica ha echo que los tenga ya asimilados, los punteros son sencillos una vez visto su uso y sobretodo una vez usada la gestion dinamica, ¿despues de la algoritmia y la lista dinamica, que es lo siguiente que se necesita aprender para manejar C?¿con que continuo adentrandome en C?
Las librerias, DLL, si son codigo maquina ¿que la diferencia de un exe para no poder ser ejecutada de forma directa, aparte de la funcion main tiene alguna otra diferencia sin ser que este programada en ensamblador?, ¿se puede hacer funciones en c como parte de un programa para tener el programa dividido en varios archivos, no solo varios archivos fuente sino varios archivos ejecutablles o compilados diferentes?. Esto ultimo no se si me direis como en momentos anteriores con cosas como los graficos que aprenda primero a programar, pero lo pregunto solo como curiosidad.