Foros de daboweb

MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: Antonio de la Flor en 03 de Abril de 2004, 02:47:35 am

Título: ¿Qué características son recomendable para programar en C?
Publicado por: Antonio de la Flor en 03 de Abril de 2004, 02:47:35 am
Hola
Tengo algunas dudas propias de alguien que nunca programó en C
1º) ¿Es similar su presentación y uso al visual basic y vba o es más parecido al  basic, al cobol, al fortran, a los dinosaurios como el xbas?
2º) ¿Qué características o conocimientos son recomendables en un buen programador de C ?
3º) ¿Qué interfaz se usa para programar en C o hay varias?
4º) ¿Qué diferencia hay entre C, C+ y C++?
Un saludo :)
Título: ¿Qué características son recomendable para programar en C?
Publicado por: Dabo en 03 de Abril de 2004, 03:01:53 am
dejemos que se estrenen los mods  :lol:  8)
Título: ¿Qué características son recomendable para programar en C?
Publicado por: fedelf en 03 de Abril de 2004, 09:39:31 am
El C es similar al cobol, pascal, etc, se puede editar incluso si quieres en el bloc de notas, aunque hay editores especificos que son sensibles a la sintaxis(contexto?), y te pondran de un color las variables, de otro los comandos, etc.

Pero vamos, que el C no es nada visual (sin tener en cuenta el Visual C)

P.D.: Yo no soy moderador de aqui, pero es que tambien queria estrenarme. :lol:  :lol:  :lol:
Título: ¿Qué características son recomendable para programar en C?
Publicado por: Leandros en 03 de Abril de 2004, 12:05:23 pm
Pues yo te podré responder poco a las preguntas que has hecho antonio. No puedo decirte si el C es parecido al basic y demás por que los otros lenguajes no los he tocado, esperemos que mis compañeros puedan responderte a eso.

Bueno, lo único que necesitas para ser un buen programador en C son muchas ganas por aprender y tiempo para poder hacer ejercicios, como mejor se aprende es picando e inventandote tus propios programas.

Lo comentaré con mis compañeros, he pensado en ir colocando ejercicios y dejarlos unos dias, y después colocar la solución. Bueno esto ya lo veremos.

Interfaces para picar en C hay varias, intentaremos hablar sobre todas ellas, pero la que yo siempre recomiendo si no sabes programar es el
"Borland C 3.1", es facil de utilizar y tiene un buen archivo de ayuda.

Ya iremos entrando en el tema

Saludillos ;)
Título: ¿Qué características son recomendable para programar en C?
Publicado por: BuHo en 03 de Abril de 2004, 03:40:08 pm
1º La presentacion... depende del entorno que uses para programar. Es más parecido a lenguajes antiguos... más que nada porque tiene 30 añitos.

2º Clarividencia!!! C te deja hacer de todo, aunque esté mal, puedes quedarte más feliz que nadie al ver que compila un programa, pero luego ese programa hace "justo" lo que tu has dicho que haga, pero no lo que quieres que haga. Es decir, es mejor programar de forma muy clara.

3º Depende del sistema operativo. Yo en Windows uso Visual C, que colorea la sintaxis y me obligan a usarlo. En casa uso vim, un editor de código MUY BUENO y con muchos años que ahora tambien me colorea la sintaxis, y me hace las tabulaciones automaticamente.

4º C es un lenguaje de programacion estructurada y los otros son programacion orientada a objetos.
Título: ¿Qué características son recomendable para programar en C?
Publicado por: Dabo en 03 de Abril de 2004, 06:52:45 pm
Citar
Yo no soy moderador de aqui
 de momento  :wink:

pues bueno, como se que lo llevais bien, lo de C digo, entiendo que no habra ningun problema, incluso, se podria pensar que una "web amiga"  :wink:  :wink:   nos pasaria algo de info no????  :D  :D
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 07 de Abril de 2004, 01:19:38 am
...bien creo que Buho a respondido correctamente...personalmente, creo que Borland C 3.1 es muy bueno por la ayuda que trae, en windows DevCpp es muy bueno tambien...en linux...bueno kwrite...gedit..hay muchos....y el makefile...lo tocamos???....
Título: ¿Qué características son recomendable para programar en C?
Publicado por: BuHo en 07 de Abril de 2004, 02:51:12 am
yo aun no he aprendido a hacer makefiles... todo se andará, ahora estoy que no me aclaro demasiado con ficheros.
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 08 de Abril de 2004, 10:14:40 pm
...pues creo que deberiamos empezar a enseñar a programar en forma modular...3 codigos para un programa...el de especificacion, el de implementacion y el cliente...es sencillo, y aunque se usa mas con clases en C++, se esta viendo tambien ya en los cursos de C...sobre el makefile...es muy sencillo, solo como 10 lineas faciles de interpretar...bueno esto es solo para Linux...sobre archivos...ya sabes amigo...lo que sea para eso estamos... :wink: ...
Título: ¿Qué características son recomendable para programar en C?
Publicado por: FatsGordon en 15 de Abril de 2004, 06:21:18 pm
Un docente mío de programación decía (y lo debe seguir diciendo) que cualquier programa que contase con más de 10 líneas seguro que está mal...

En mi experiencia de algunos años de programador he tenido que hacer programas de muchas más de 10 líneas, y si consideramos que muchos de ellos tienen SQL "embedded" (o embebido, como mal traducen aquí), los números ascienden a veces a cuatro cifras.

El C es lo mejor (y lo peor) que le puede pasar a un programador. Es un lenguaje de muy bajo nivel, con lo que estamos manejando conceptos de memoria y otros que pueden ponerle los pelos de punta a más de uno. Todo va muy bien con el C hasta que nos topamos con los punteros (o sea, apuntadores a direcciones de memoria o a sus contenidos), y si tenemos en cuenta que las funciones en C pueden hacerse con parámetros pasados por referencia o por valor, las cosas se complican un poco más. Y si pensamos que la referenciación/desreferenciación puede alcanzar varios niveles (un puntero a un puntero a un puntero a un char), o que se puede (y muchas veces se debe) castear tipos de datos, o que todo el manejo de strings (cadenas) se hace reservando memoria y con funciones especiales... bueno, no hace del C el lenguaje de programación más amigable. Pero el C es y seguirá siendo uno de los lenguajes más potentes que existen.

Y a mi me encanta... :)
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 16 de Abril de 2004, 04:25:33 pm
...pues si amigo, la verdad es que lo de punteros es algo complicado, pero es muy sencillo si siempre recuerdas liberar la memoria "cojida"...sobre la memoria dinamica si que he tenido problemas pero con el realloc en estruct, porque con malloc no he tenido problemas aun...ademas veamos C como un primer paso...para aprender bien los conceptos y funcionalidad...mas adelante veremos como C++ trae muchas mejoras y ademas que es muy pero muy vacano para programar...a mi me encanata programar en C++, pero como dices C me encanta...primero camino y luego corro... :wink: ...vamos amigo...asi necesitamos gente... :wink: ....
Título: punteros
Publicado por: ALP en 16 de Abril de 2004, 11:00:00 pm
respecto a lo que comentáis de los punteros... no pienso que sea algo tan terrorífico. Trabajo siempre con memoria dinámica y hasta la fecha no he tenido problemas graves. Por supuesto a cualquiera se le escapa un puntero en alguna ocasión... pero con un poco de disciplina... no hay problema. El C es tremendamente flexible y te permite hacer cualquier cosa, sólo es cuestión de que tengas claro lo que estás haciendo. Si se te complica algo, piensa (como dicen los adictos a PERL), que siempre hay otras formas de hacerlo.
Título: ¿Qué características son recomendable para programar en C?
Publicado por: Dabo en 17 de Abril de 2004, 12:46:45 am
Fats, no dejas de sorprenderme  :wink:  no sabia esa faceta tuya, bienvenido al foro amigo ALP, otro mas para la causa, espero que encuentres sitio aqui, este foro , el de programacion, solo lleva una semana o asi pero creo que sera muy transitado

Citar
como dicen los adictos a PERL


digo publicamente que es lo proximo con lo que me voy a poner, lo empiezo y lo intento y lo dejo por falta de tiempo pero...

lo acabare pillando  :lol:

seguir  :!:
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 18 de Abril de 2004, 12:28:13 am
...ALP...hola amigo...has probado el realloc con estructuras y no te da problema...me gustaria ver eso amigo...te confieso que el realloc si es un problema para mi cuando trabajo con estructuras...pense que era error y eso se habia mejorado con el new en C++...

...PERL...PERL...PERL...eso me suena cada vez mas... :twisted:  :twisted:  :twisted:  :twisted:  :twisted: ...
Título: realloc
Publicado por: ALP en 18 de Abril de 2004, 05:20:55 am
jirho... ante todo un saludo.
¿A qué te refieres con el realloc con estructuras? ¿un array de estructuras... o quizás estructuras que contienen punteros a memoria dinámica?
Que yo sepa... new no sirve para modificar el tamaño de la memoria reservada, ni puedes combinar la utilización de malloc/realloc/free con new/delete.
¿Pudiera ser que no actualizas tus punteros con el valor que devuelve realloc? Ten en cuenta que puede mover tus datos a otra zona de la memoria en caso de que no tenga espacio suficiente para alojar el nuevo tamaño, con lo cual, el valor original del puntero que pasas a realloc no serviría, ya que apunta a una zona de memoria "libre" (aunque siga conteniendo los datos, ya que cuando se libera la memoria no se limpia)

Podrías poner un ejemplo?

Un saludo y ánimo con el foro!
Título: ¿Qué características son recomendable para programar en C?
Publicado por: ALP en 19 de Abril de 2004, 12:04:21 am
jirho...hola

creo que anoche se me fue un poco la olla (...demasiados gin-tonics...)  :lol:

de todos modos... no te entiendo del todo.. podrías poner un ejemplo?

(creo que deberías abrir un nuevo hilo, ya que nos estamos desviando del tema un pelín)
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 19 de Abril de 2004, 06:33:33 pm
...claro amigo...supon una estructura de X campos...

int main()
{
struct X *x;

while (Res!=s)
 {
x=(X *)realloc((X *)x,(N+1)*sizeof(X));
}
}

...poco despues de esto, asi se libere la memoria dentro del ciclo...se nukea...
Título: ¿Qué características son recomendable para programar en C?
Publicado por: ALP en 19 de Abril de 2004, 10:28:16 pm
a ver... prueba esto

Código: [Seleccionar]

#include <stdlib.h>
#include <stdio.h>

struct X {
int uno;
float dos;
char tres[10];
};

int main()
{
   struct X *x = NULL;
   int n = 0;

   for (n = 0; n < 100000; n++) {
      x = (X*)realloc(x, (n+1)*sizeof(X));

      if (n%1000 == 0)
         printf("%5i\t", n);
      if (x == NULL) {
         printf("\nError:  n = %li\n", n);
         perror("Error asignando memoria");
         exit(1);
      }
   }

   if (x)
      free(x);

   return (0);
}


en borland 5.02 funciona correctamente.
¿Es posible que no inicialices el puntero a NULL antes de la primera llamada a realloc()? La documentación dice que el puntero que le pasas debe ser un puntero válido proveniente de malloc() o con valor NULL, y así realloc() se comporta como malloc().

Otra cosa: la sentencia...
Código: [Seleccionar]
x = (X*)realloc(x, (n+1)*sizeof(X));
...no es segura, puesto que si realloc() devuelve NULL,  por que no haya memoria disponible, el puntero que le pasas sigue siendo válido (no se libera ni se mueve)

Una forma más segura de hacer esto sería:
Código: [Seleccionar]

x2 = (X*)realloc(x, (n+1)*sizeof(X));
if (x2 != NULL)
   x = x2;


Por otro lado puede surgir un error si x se  libera con free() y no se le asigna el valor NULL, con lo que apuntaría a una zona de memoria libre, y por lo tanto no accesible, con lo que la siguiente llamada a realloc() fallaría.

Si incrementas el tamaño de la estructura, se vuelve más lento, pero sigue funcionando. Prueba a cambiar char tres[10]; por char tres[100];  o por char tres[1000];

Espero que esto te ayude.
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 20 de Abril de 2004, 04:40:38 pm
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


struct Persona{
    char Nombre[10];
    int Edad;
    };
   
int main()
     {
     Persona *Pers=NULL;
     char Res='s'
     ;
     int Tam=0;
     int i=0;
     
     while(Res=='s')
          {
          Pers=(Persona *)realloc((Persona *)Pers,(Tam+1)*sizeof(Persona));
          if(Pers==NULL)
            {
            cout<<"ERROR...";
            return 0;
            }
          cout<<"INGRESE NOMBRE: ";
          cin>>Pers.Nombre;
          cout<<"INGRESE EDAD: ";
          cin>>Pers.Edad;
          i++;
          cout<<"DESE SEGUIR INGRESANDO REGISTROS?...";
          Res=getche();
          }
     getch();
     }
/************************************************************/

 :oops: solo era inicializar en NULL :oops: ...confiezo publicamente que me deshice del realloc en un progrma solo por eso...bien gracias amigo...la verdad es que si un punto muy importante al igual que las variables locales, es INICIALIZAR...bien, tal parece que tengo que volver un poco mas al C, es que desde que estoy con C++, siempre lo manejo y me vuelvo al C solo para el tuto...gracias amigo...aveces hay cosas tan pequeñas que te joden y no te das cuenta que la solucion esta ahi...

...ALP..espero que te pases mucho por aqui...veo que sabes bien sobre C...
Título: ¿Qué características son recomendable para programar en C?
Publicado por: ALP en 20 de Abril de 2004, 07:26:59 pm
Una última cosilla....

No olvides nunca LIBERAR la memoria reservada dinámicamente. Aunque en teoría el sistema libera la memoria que has reservado cuando el programa termina, es una buena costumbre liberar siempre la memoria reservada cuando ya no te sirva (aunque sea un programa de prueba).

Imagina que el ejemplo que has puesto es una función que pide los datos, y al terminar los guarda en un fichero. Si no liberas la memoria cuando ya no la necesitas, tu función se convertirá en un "gusano" que irá comiendo memoria sin parar. Al final, el programa podría fallar en otro lado por falta de memoria. Estas fugas de memoria son muy difíciles de encontrar, y son más habituales de lo que puedas creer.

De hecho, en linux hay multitud de herramientas para detectar estas fugas de memoria, como dmalloc, electric-fence, memprof,  memwatch, etc.

Esto no quiere decir que no la utilices, si no que mantengas cierta disciplina cuando trabajes con punteros dinámicos.

Yo la utilizo para casi todo, de forma que no tienes que implantar límites artificiales, ni desperdiciarás memoria que no utilices (por ejemplo declarando arrays muy grandes).

Si tomas las debidas precauciones cuando trabajes con la memoria dinámica,  no tendrás que pasar horas depurando un programa que aparentemente es correcto. Te lo digo por experiencia...
Título: ¿Qué características son recomendable para programar en C?
Publicado por: jirho en 20 de Abril de 2004, 09:37:39 pm
...no te preocupes amigo, lo se de sobra...en C++ solo se trabaja con memoria dinamica y eso ya es rutina...gartcias amigo...