Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





No entiendo codigo.

Iniciado por G+10, 27 de Julio de 2008, 08:18:24 AM

« anterior - próximo »

G+10

Bueno yo nosé C solo Pascal y estóy pensando en migrar a C pero me parece que es muy complicado, queria preguntar que hace este codigo?

#include <stdio.h>
main ()
{
int i,c;
char s[50];
int a,z;       /* partes de los comentarios */

a=z=0;
for (i=0;i<50 && (c=getchar())!='\n';++i)
 s[i]=c;


  i=0;
 while (s[i]!='/' && s[i+1]!='*')
     ++a;

 while (s[a]!='*' && s[a+1]!='/')
     ++z;

for (i=0;s[i]!=s[a] && s[i]!=s[z];++i)

  printf ("%c",s[i]);


}

ual es el colmo de un puntero?? que sea de argentina jaja

davirro

parece ser que pretende extraer los caracteres entre /* y */ , osea , los comentarios de un codigo

tamat

y solo quieres saberlo por curiosidad, no porque nadie te haya pedido que lo hagas para luego ponerte una nota y tal...
Por un stratos menos tenso

AK47

Dentro del maravilloso y altamente beneficioso campo del "HAZLO TU MISMO", dispones de la herramienta conocida como "debugger" o "depurador", que permite ir línea a línea viendo que hace el código. Lo puedes obtener de forma gratuita por ejemplo descargando el Visual C++ 9.0 express edition, en otro ejercicio de HTM (donde google por ejemplo ayuda muchísimo).

Mars Attacks

Hace poco he tenido la ocasión de repasar algo de código antiguo (de principios de carrera) y me he odiado por usar nombres de variables nada descriptivas y no poner comentarios en las líneas con operaciones no obvias (amén de no separar las operaciones complejas en otras más simples que sean más fáciles de depurar y mantener).

Por cierto, que ese código tiene pinta de funcionar tremendamente mal. El primer bucle "for" va metiendo en la variable "s" lo que se encuentra por la entrada. El primer bucle "while" busca la primera ocurrencia de un carácter '/' que vaya seguido del carácter '*'... pero nunca se incrementa su contador, así que a menos que comience por "/*" se va a quedar encajado en un bucle infinito. Y el segundo while, a la postre, también se quedará encajado en un bucle infinito a menos que la cadena fuera "/*/", momento en el que saldría de ahí con la variable "i" valiendo 0, y la "a" y "z" valiendo 1.

Luego (en el hipotético caso de que no se hubiera quedado en ninguno de los dos bucles infinitos anteriores), trataría de imprimir lo que está entre esos carácteres, que es... el primer y últimos '/' de la cadena "/*/".

[EX3]

Cita de: "G+10"Bueno yo nosé C solo Pascal y estóy pensando en migrar a C pero me parece que es muy complicado, queria preguntar que hace este codigo?
Y digo yo, si lo que quieres es saltar de Pascal a C por que no empiezas desde lo mas basico? Las prisas nunca fueron buenas para aprender :P

Echa un vistazo a esta web: C++ con clase

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

G+10

Cita de: "Mars Attacks"pero nunca se incrementa su contador, así que a menos que comience por "/*" se va a quedar encajado en un bucle infinito.
¿Puedes explicar mejor esa parte?
ual es el colmo de un puntero?? que sea de argentina jaja

fjfnaranjo

Haz el favor, G+10, que esto no es una guardería.

Trabaja un poquito más, verás que satisfactorio resulta.

Y si en 30 minutos no descubres la respuesta por tu cuenta, directamente no estudies esto, dedícate a otra cosa. Pero no esperes que los demás te resuelvan cosas de este nivel, porque cuando te des con algo más complicado, o tengas que justificar un sueldo, o quieras trabajar con un equipo te van a dar de lado.

En serio, te lo decimos por tu bien. Trabaja para comprenderlo por tu cuenta y nunca llegaras a nada programando.
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

G+10

Vuelvo a repetir , no sé C solamente Pascal.
ual es el colmo de un puntero?? que sea de argentina jaja

[EX3]

Cita de: "G+10"Vuelvo a repetir , no sé C solamente Pascal.
Pues repito igualmente que si no sabes C empieces por lo basico como todo cristo hace.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

G+10

ual es el colmo de un puntero?? que sea de argentina jaja

Mars Attacks

Cita de: "G+10"
Cita de: "Mars Attacks"pero nunca se incrementa su contador, así que a menos que comience por "/*" se va a quedar encajado en un bucle infinito.
¿Puedes explicar mejor esa parte?

Faltaría más. Echa un vistazo al bucle y veamos qué pasa si la línea de entrada fuera "lerele".

El bucle "for" del comienzo dejaría en el vector "s" la cadena "lerele". Sigamos, pues.
Entramos en el primer bucle "while" con los siguientes valores de variables:
i=0, a=0, z=0.
En la primera pasada comprobamos lo siguiente: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 1, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 2, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 3, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 4, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 5, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 6, y volvemos a hacer la comprobación: si s[0] es distinto de '/' y s[1] sea distinto de '*', incrementamos la variable "a" y volvemos al principio del bucle para la siguiente comprobación. Como s[0] es el carácter 'l' y s[1] es el carácter "e", la variable "a" pasa a valer 7, y volvemos a hacer la comprobación:

Bueno, ¿hace falta que siga o lo vas pillando?

Mars Attacks

Como deberes, haz tú mismo la traza que resultaría para "/*lalala" y para "/*/".

chan

Me hace gracia los aires de superioridad que tienen algunos, y los comentarios de "si no eres capaz de entenderlo en 30 minutos, dedícate a otra cosa". Supongo que todos ellos habrán nacido programando, y claro no han tenido que aprender nunca.

Me crea tela de mal rollo leer éste tipo de post, hay veces que es mejor callarse que contestar alguna bordería, pero bueno, eso ya es cuestión de educación.

G+10 ten paciencia, sigue los pasos de aprendizaje que te han bienaconsejado y ya verás que cuando menos lo pienses habrás progresado muchísimo.

Salu2

josepzin

#14
¡¡Heee, no hay que ser tan duro con los recién llegados!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.