No puedo ejecutar mis programas compilados

Bueno, lo primero, no se si esto deberia ir aqui o en general, pero como utilizo herramiemtas libres pues eso, lo pongo aqui :p

Bien, el caso es q en la uni estamos estamos empezando con Pascal y me han mandado un par de problemas para mañana.

Todo iba bien, me escribo el programita, me instalo en GPC y compilo mi programa con el comando "-C". Hasta ahi bien, no me da ningun error de compilacion ni nada, me genera un archivo con extension ".o".

Ahora bien, voy yo a iniciar el binario generado (./nombrearchivo) y oh! sorpresa me dice q no tengo permisos, no problem, chmod a+x y arreando (se hace asi, no?¿ no valla a ser q haya metido la gamba XD). Todo esto lo hice en kubuntu y el Mac OSX, es comun para los dos.

Vuelvo a probar y me dice q "no se puede ejecutar el archivo binario", esto en Kubuntu, en Mac OSX me dice "Bad executable (or shared library)".

¿Alguien me podria decir q hago mal o si me falta algo?

Salu2
Has generado un archivo objeto, te hace falta pasarle el linkeador para generar tu binario. No se como se hace en pascal en linux, mi pascal se remonta a turbo pascal en windows 3.1 [qmparto]
Thanks, lo acabo de solucionar.

Luego de generarme el archivo ".o" he puesto "gpc nombrearchivo.o" y me ha generado un archivo "a.out". Este ultimo es el binario "de verdad" :-P , ya he iniciado el primer programa q he escrito y parece q rula XD

Salu2
Bienvenido al maravilloso mundo de la programación
Hola Mundo!! [+risas]

PD: lo siento, no he podido evitarlo, maldita ingeniería del soft [enfado1]
Mira, dile a tu profesor que si os va a hacer aprender programación con Pascal ... que es para matarlo. Ya puestos que os enseñen ADA, o ¿por qué no el vetusto antecesor de C, B?

En serio, es dificil, y más si dices que es Ingeniería del Software, que creo que herramientas Case que generen código y diagramas UML para Pascal ... no lo veo :D
Iba a decir que en la Universidad de La Coruña empiezan/empezaban con Pascal pero creo que el autor del hilo también es coruñés.
A mi pascal me parece un buen lenguaje para empezar. Con C se cogen muchos vicios y con VB directamente no se aprende. ¿Java? La POO es mejor verla más tarde, cuando ya se tienen claros los conceptos básicos.
Ya, pero para estdiar Ingeniería del Software ya debes saber programar y no solo programar "holas mundo" en 1000 lenguajes, como hacen en mi facultad.

En la mía (Ciudad Real), y que conste que no estoy de acuerdo, empezamos en 1º aprendiendo programación con Java (lo odio) y algo de ensamblador en estructura de computadores.

En segundo, en SSOO aprendemos C, en tercero, en Administración de SSOO, scripts en shell para administrar y ya empezamos a tener que investigar con lenguajes por nuestra cuenta, como C++, C#, Python .... y claro, nos meten ADA (un lenguaje ara programar concurrencia) para prrogramación concurrente.

¿E Ineniería del Software? Aparte de que yo la tengo en 4º, se supone que es independiente del lenguaje. por ejemplo, a mi mis compas me "obligaron" a "programar" (pintar ventanas ;) ) en C#. Y ya suelen ser las prácticas libres, osea, elegimos nosotros el lenguaje.

Vamos, que lo que creo yo es que para aprender al principio es mejor otro lenguaje que no sea Pascal, porque creo que es allgo viejuno, aunque la verdad, yo nunca he programado en Pascal. Prefiero C..

Por cierto, ¿qué clase de "viciosos" (los vicios que cogemos) los que aprendemos en C? :D
Es que el autor del post no dice nada de ingenieria de software...

Con vicios me refería a que el C traga con muchas cosas. Puedes Asignar un char a un int. Puedes recorrer una cadena como si fuera un array. Luego en otros lenguajes no puedes hacer esas cosas y es un lío.
Vale, perdón xD Mezcle unos cuanytos hilos de arriba, era muy tarde cuando lo leí y me qudé con la idea delo de arriba mal.

Y si dices que con C se cogen esos vicios (notrmalmente en la uni si haces algunas de esas cosas te petan la práctica la mayoría de los profesores), con Python no te quiero ni decir ... Ni declaraciones de tipos de las varialbes, ni nada que se parezca a eso.

Y encima OaO xD
Lk2 escribió:Mira, dile a tu profesor que si os va a hacer aprender programación con Pascal ... que es para matarlo. Ya puestos que os enseñen ADA, o ¿por qué no el vetusto antecesor de C, B?

En serio, es dificil, y más si dices que es Ingeniería del Software, que creo que herramientas Case que generen código y diagramas UML para Pascal ... no lo veo :D


Yo voy a aprender ADA este año en la EHU, aunque de momento y parece que va para largo solo vamos a aprender 'pseudocodigo' :S

Agur
Con vicios me refería a que el C traga con muchas cosas. Puedes Asignar un char a un int. Puedes recorrer una cadena como si fuera un array. Luego en otros lenguajes no puedes hacer esas cosas y es un lío.


Ehm... ¿cuál es el problema de que puedas asignar un char a un int? ¿Y el problema de recorrer una cadena si fuera un array?

Lo siento mucho pero ese argumento es equivalente a: "Es muy dificil programar en C si no se sabe C". Que, como puedes comprobar, es verdadero para cualquier lenguaje que se te ocurra.

- ferdy
Que es poco didáctico. Pienso que es mejor comenzar con un lenguaje fuertemente tipado, y luego continuar con C. Siempre es mejor que el alumno se habitue a usar las instrucciones de conversión de tipos y de tratamiento de cadenas para luego aprovechar las facilidades que brinda C, que no aprender las cosas "al estico C" y luego ver que no funcionan en los demás lenguajes. El proceso de adaptación al nuevo lenguaje es más costoso así que al contrario.
Que es poco didáctico. Pienso que es mejor comenzar con un lenguaje fuertemente tipado, y luego continuar con C. Siempre es mejor que el alumno se habitue a usar las instrucciones de conversión de tipos y de tratamiento de cadenas para luego aprovechar las facilidades que brinda C, que no aprender las cosas "al estico C" y luego ver que no funcionan en los demás lenguajes. El proceso de adaptación al nuevo lenguaje es más costoso así que al contrario.


Eso es completamente falso. Ejemplo de la vida real:

Mi primer lenguaje fue C y ahora entender cualquier lenguaje es cuestión de una introducción + referencia + el código fuente de alguna implementación si necesito saber hasta el más mínimo detalle. Es así de simple.

Ahora busca una persona que solo sepa un lenguaje fuertemente tipado (no C) y enséñale el código del kernel o de cualquier software REAL (no, el hola mundo no es REAL). Y no sabe ni por dónde empezar a leer.

Es así de simple, programar no es hacer puzzles, si sabes qué es lo que está ocurriendo en cada momento, C es muy fácil. Es el lenguaje más fácil que conozco. (Incluso más simple que haskell98).

- ferdy
yanosoyyo escribió:Iba a decir que en la Universidad de La Coruña empiezan/empezaban con Pascal pero creo que el autor del hilo también es coruñés.

Hum, ¿aún no cambiaron eso?

Bueno, al menos por lo que tengo entendido las prácticas de MP ya no son en COBOL. Algo es algo.

Ah, y sobre la discusión cíclica de qué lenguaje aprender al empezar a programar: yo empecé con C por mi cuenta en el instituto con un libro de mi hermana mayor (las chorradillas que hacía en basic con mi spectrum 16k ni las considero programas) y desde luego no tuve ningún problema más tarde con ninguno de los chorrocientos lenguajes de la carrera. Pero sí vi a gente romperse bastante la cabeza al pasar del Pascal de 1º a C en 2º ó 3º.

(edit) Por no hablar de la utilidad de C vs de cualquier otro lenguaje
Ferdy escribió:Eso es completamente falso. Ejemplo de la vida real:

Mi primer lenguaje fue C y ahora entender cualquier lenguaje es cuestión de una introducción + referencia + el código fuente de alguna implementación si necesito saber hasta el más mínimo detalle. Es así de simple.

Ahora busca una persona que solo sepa un lenguaje fuertemente tipado (no C) y enséñale el código del kernel o de cualquier software REAL (no, el hola mundo no es REAL). Y no sabe ni por dónde empezar a leer.

Es así de simple, programar no es hacer puzzles, si sabes qué es lo que está ocurriendo en cada momento, C es muy fácil. Es el lenguaje más fácil que conozco. (Incluso más simple que haskell98).


No se como será tu caso, pero yo he visto alumnos hacerse un lío comenzando con C. Para aprender lo básico, un lenguaje menos "críptico" es mucho mejor.

Ejemplo: En cualquier lenguaje, el "input" se hace con una instrucción pasándole la variable donde cargar la entrada. En C se pasa la dirección de memoria de la variable. O le profesor dice "os lo creeis de momento" o explica a alumnos que no tienen ni idea de progamación todo el asunto de los punteros, antes de tiempo. El alumno se frustra y se hace un lío.

Ningún informático conoce solo un lenguaje de programación, y tarde o temprano pasará por C. Para entonces su cabeza estará bien estructurada y no tendrá dificultades para entender qué es lo que está pasando en cada momento. Debes tener en cuanta que no todo el mundo está igual de dotado para la programación.

Por cierto, cuando pasé de C a Java me resultó muy chocante no poder tratar una cadena como si fuera un array de caracteres. Ya se que C es muy cómodo y muy fácil. Precisamente ese es el problema.

Ah, no todo el software real es una implementación de kernel, ni todo el software real esta escrito en C. A mi me ha tocado trabajar en VB6, Dephi y Java, y de momento no en C.
Yo aprendi el año pasado en la uni C y java a la vez, me ha resultado mas facil C, pero no he tenido ningun problema con java tampoco. El tema de las cadenas de caracteres ... donde esta el problema ? en C una cadena es un array de caracteres terminado con el caracter correspondiente, en java es un objeto ( String ). no hay qe ser ninguna fiera para entender qe son maneras MUY distintas de representar datos ...

Y bueno, la mayoria de los alumnos de las universidades son innutiles.

He dicho.
Para aprender lo básico, un lenguaje menos "críptico" es mucho mejor.


Lo bueno de C es que no es críptico... está todo muy claro. De hecho lo bueno es que puedes ir traduciendolo mentalmente a ensamblador.

Ejemplo: En cualquier lenguaje, el "input" se hace con una instrucción pasándole la variable donde cargar la entrada. En C se pasa la dirección de memoria de la variable. O le profesor dice "os lo creeis de momento" o explica a alumnos que no tienen ni idea de progamación todo el asunto de los punteros, antes de tiempo. El alumno se frustra y se hace un lío.


Lo que significa que el profesor es una porquería de profesor. Es más fácil empezar con los tipos básicos y el lenguaje en si y luego enseñar la biblioteca estándar.

Ningún informático conoce solo un lenguaje de programación, y tarde o temprano pasará por C. Para entonces su cabeza estará bien estructurada y no tendrá dificultades para entender qué es lo que está pasando en cada momento.


Para entonces no sabes cómo funcionan REALMENTE los lenguajes que has usado. Sabes que si haces a b y c, sale d.

Debes tener en cuanta que no todo el mundo está igual de dotado para la programación.


Ya... de ahí que yo no me metiera a astrofísica. Pero esa no es una razón válida.

Ah, no todo el software real es una implementación de kernel, ni todo el software real esta escrito en C. A mi me ha tocado trabajar en VB6, Dephi y Java, y de momento no en C.


De ahí que me refiera a un software REAL en C [quizá no se entendía correctamente]. El kernel simplemente es un ejemplo de un software REAL en C.

- ferdy
En Granada las clases se dan en C++. A mí me parece estupendo porque de entrada sólo enseñan programación modular en Metodologías de Programación 1, luego se comienza a ver la programación orientada a objetos en MP 2 y se potencia en Estructuras de Datos. El resto de asignaturas de programación también utiliza este lenguaje, salvo las asignaturas de SO en donde se realizan las prácticas en scripts y en C.

También hay asignaturas para los que les interese Java y otros lenguajes/tecnologías como son Javascript y XML.

Creo que un plan en el que se utilice un único lenguaje para las distintas asignaturas tiene mucho más sentido que utilizar 4 lenguajes para 3 asignaturas...
Vaya, la q se ha liado por una simple pregunta [flipa] !!!!!!

Yo no os voy a decir cual es mejor para empezar, no tengo ni idea. Pero lo q nos han dicho es q lo mejor para empezar es con algun lenguaje lo mas estructurado posible para no coger malos vicios (como ha apuntado Alberich). ¿Que vicios? Pues yo no lo se XD

Tambien nos han dicho q vayamos a todos los talleres, charlas, simposios, etc. q den en la facultad sobre programacion ya q muchos seran gratis y al acabar te daran un certificado con cierto peso para nuestro curriculum.

A parte q en 2º empezamos con programacion orientada a objetos.

Salu2
Ferdy escribió:Lo bueno de C es que no es críptico... está todo muy claro. De hecho lo bueno es que puedes ir traduciendolo mentalmente a ensamblador.


Con críptico me refería a que hay mas caracteres "raros" y menos "texto" que en otros lenguajes, como Pascal, que para un principiante es mucho más fácil de leer. Y no me digas que un alumno medio de la carrera informática es capaz de traducir a ensamblador un programa en C, y mucho menos de primero, porque el ensamblador que se enseña es mínimo.

Y de lo que se trata es de que el alumno comprenda cómo se programa. Tipos, variables, condicionales, bucles, arrays, registros y ficheros. A lo sumo punteros, pero sin implementar pilas, colas, listas y árboles, que se deja para otros cursos. Eso es lo que se enseña en un primer cuatrimestre de programación.

Y hay prácticas. Por eso no se puede enseñar el lenguaje en si y luego las librerías, sino que el alumno tiene que ver resultados, que lo que está aprendiendo sirve para algo. Porque si no, se pierde, se aburre y no solamente no aprobará, sino que no aprenderá a programar en su vida.

Sertinell escribió:El tema de las cadenas de caracteres ... donde esta el problema ?


En ninguna parte. Que acostumbrado a hacer cCadena[i] me resultaba un coñazo hacer cCadena.substring(i,i+1)

Y bueno, la mayoria de los alumnos de las universidades son innutiles.


Y otra buena parte, unos prepotenntes.
Eso es lo que se enseña en un primer cuatrimestre de programación.


¿Y? Eso es lo que se enseña en mi facultad tambien, luego en tercero tienen que implementar un protocolillo y hacer cuatro mierdas en C y de ~20 alumnos, solo 2 o cuatro (una o dos parejas) entregan la práctica. Y los que la entregan, no saben por qué les funciona, no hay más que leer el código.

Es decir, no puedes enseñar a programar pensando que tus alumnos son una panda de imbéciles o solo conseguirás alumnos imbéciles: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Y realmente siento si el alumno medio de allí donde enseñes / estudies no es capaz de traducir mentalmente C a ensamblador a medida que lo escribe. Pero básicamente aquel que les enseñe C no hizo un buen trabajo. No hace falta decir que donde yo estudio tambien es así... por desgracia. Sin embargo en el departamento que trabajo la filosofía es 'búsquense las castañas y aprendan lo que están haciendo, o suspenderán las prácticas'. [una pena que ahora se pueda aprobar sin necesidad de tener más de un 7 en las prácticas... ]

En ninguna parte. Que acostumbrado a hacer cCadena[i] me resultaba un coñazo hacer cCadena.substring(i,i+1)


Sobre todo porque substring es horrorosamente lento si lo usas para algo serio, para eso se usa charAt.

Tambien es culpa de usar un lenguaje como Java cuya filosofía es "la gente es demasiado tonta para usar C++ y la gente es demasiado tonta para escribir compiladores de C++". (que nadie lea 'todo el que usa Java es tonto' porque yo no he dicho eso, ni lo pienso).

Un lenguaje de verdad simplemente te daría un Iterator para String. Y String sería Iterable. Pero Java tiene que tratar un contenedor y una cadena como cosas distintas, 'porque trabajar con cadenas en C es díficil y los programadores se confunden fácilmente'.

Y otra buena parte, unos prepotentes.


yupyup, pero nunca he visto a ningún alumno prepotente saltarle a un buen profesor, o al menos a uno que sepa de lo que habla. (hint hint)

- ferdy
Ferdy escribió:¿Y? Eso es lo que se enseña en mi facultad tambien, luego en tercero tienen que implementar un protocolillo y hacer cuatro mierdas en C y de ~20 alumnos, solo 2 o cuatro (una o dos parejas) entregan la práctica. Y los que la entregan, no saben por qué les funciona, no hay más que leer el código.


Si, yo también se que la mayoría de los alumnos programan como si siguieran una receta de cocina.

Y realmente siento si el alumno medio de allí donde enseñes / estudies no es capaz de traducir mentalmente C a ensamblador a medida que lo escribe. Pero básicamente aquel que les enseñe C no hizo un buen trabajo.


Si ensamblador se ve en el primer cuatrimestre de primero (arquitectura I) y C se ve como primer lenguaje, simultáneamente a esto, lo que propones es imposible.

Sobre todo porque substring es horrorosamente lento si lo usas para algo serio, para eso se usa charAt.


Ok, pongamos String.valueOf(cCadena.charAt(i)) Yo quiero una cadena de salida.

yupyup, pero nunca he visto a ningún alumno prepotente saltarle a un buen profesor, o al menos a uno que sepa de lo que habla. (hint hint)


Yo si. Prepotencia no implica inteligencia. Y me ha fastidiado Sertinell con su "yo se mucho y los demas son gilipollas"
Eh ! yo no he dicho los demas. He dicho la mayoria, qe son cosas muy distintas. Tampoco he dicho qe yo sepa mucho, por qe no se mucho :-p . Y por eso, como no se mucho, puedo afirmar qe la gente qe las pasa putas en mi universidad con la programacion y qe huyen de ella(la gran mayoria), son unos inutiles programando.

Tengo compañeros qe se han asustado cuando les he dicho qe algo esta en el man de la funcion y es que la gran mayoria de ellos no saben/quieren buscar nada por su cuenta. En una asignatura cuatrimestral, en la qe tenemos qe acabar programando un "servidor" concurrente para un servicio sencillo, la gente aprueba sin saber qe puñetas ha hecho en el examen (los examenes de todos los años son casi iguales), en un cuatrimestre, o buscas y aprendes tu solo o no entiendes nada de lo qe has hecho para tener un "servidor" corriendo.

Y si no son unos inutiles qe huyen de la programacion como si fuera la peste? como explicas qe "Ampliacion de calculo numerico" tenga el triple de matriculados qe "Complementos de Informatica" (asignatura donde se presentan patrones de diseño de programacion OO sin entrar en ningun lenguaje concreto y con java como herramienta) ?

Quizas debí decir no dotados para la programacion en vez de inutiles. ZzzZZ

Edito: Respecto a lo de los profesores... yo una he discutido con un profesor qe supiera de verdad lo qe estaba haciendo, y tampoco he discutido nunca con ninguno de esos qe se qedan pillados cuando le preguntas "donde guarda Fget el punto donde tiene qe seguir leyendo en la siguiente ejecucion?", por no qerer explicar el concepto de stream. Con esos no se discute, por qe jamas conseguiras nada.

P.D: Yo no hago informatica, hago telematica.
Alberich escribió:Por eso no se puede enseñar el lenguaje en si y luego las librerías, sino que el alumno tiene que ver resultados, que lo que está aprendiendo sirve para algo. Porque si no, se pierde, se aburre y no solamente no aprobará, sino que no aprenderá a programar en su vida.


El alumno lo que tiene que hacer es dedicar tiempo a hacer ejercicios y a practicar. Es lógico que al principio cueste mucho, pero dedicandole tiempo y siendo paciente vas asimilando conceptos sin darte cuenta. Si desde un principio te aburres porque algo no lo entiendes o no te sale malo, sea el lenguaje de programación que sea. Hay mucha gente que se mete a informática y no le gusta programar, con lo que empieces con el lenguaje que empieces te va a dar igual.

Yo no veo más que ventajas a comenzar con C. Con C a parte de aprender 'programación' (léase variables, tipos, bucles, funciones,etc) , al mismo tiempo se aprende cómo funciona al nivel más básico el ordenador, de forma que puedes tener una visión más amplia y completa. Cuesta más, claro, pero el beneficio creo yo que merece la pena, y cualquier cosa que venga después es mucho más sencilla.

Salu2!
Yo empece con BASIC en el spectrum y la verdad no creo que me haya ido mal. El siguiente que aprendi creo que fue Pascal pero no lo use nunca, no me gustaba, C vino despues y ahi aprendi a programar de verdad.
Bueno yo comento los lenguajes de programación que hemos visto en mi carrera en los 3 primeros años para que os hagais una idea tambien.

I.informática en sevilla

1º Curso, Lenguajes teoricos (para aprender estructuras y tal) : Lenguaje de especificación de algoritmos (LEA) , CS2 (ensamblador de un computador simple)
Lenguajes reales: C, C++, Java, ensamblador del 6800 (el chip de la megadrive)
2ºCurso, y ahora que sabemos un poco mas. ADA, EDA, GOTO, y alguna extension de java para el manejo de expresiones regulares y gramaticas incontextuales, ademas de lo tipico de bases de datos.
3ºCurso, de momento me estan enseñando perl, aunque lo básico porque tambien lo usaremos para el manejo de expresiones regulares, y tambien lo tipico de las bases de datos.

Ingeniería del software no lo vemos hasta 4º curso, pero vamos que una vez que aprendes a manejarte con C o Java (Y sobretodo cuando sabes manejar LEA) programar en cualquier lenguaje es sólo cuestión de ganas (o al menos esa es mi experiencia)
27 respuestas