Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mis primeros pasos en C. ¿Papa?

Iniciado por J_F_NASH, 20 de Marzo de 2003, 03:25:49 PM

« anterior - próximo »

Vicente

                                Anda, en la UAM también son 9 créditos. Pero el lex y el yac se ven en Procesadores del Lenguaje (Compiladores vamos), que son otros 9 créditos... Un saludo,

Vicente                                

Mars Attacks

                                El nene tiene 10 de TALF y no me suena que veamos eso. Igual todavía está por llegar, no sé, hasta ahora no lo hemos visto. Pero a mí sí que me gusta.                                

synchrnzr

                                La única diferencia que yo veo es que están pensados para cosas distintas, pero pueden hacer exactamente lo mismo.

Ni for ni while ni leches, piensa que al final todo se va a traducir en saltos condicionales al pasar a ensamblador. Lo que sí es posible es que, para funcionar como contador, el compilador te optimice mejor un for() que un while() (por ejemplo, asignando la variable contador del for a un registro directamente) Lo recomendable supongo que es usarlas para lo que estan pensadas.

sync                                

Mars Attacks

                                Y yo te digo que la estructura while es más potente que la for, que el "while(condición)" es más potente que el "for i=x to n do" :) Ya he expuesto las razones antes. Matemáticamente hay algoritmos que no se pueden hacer sólo con bucles for, mientras que donde hay un for siempre puedes poner un while. Al contrario no ocurre.                                

synchrnzr

                                Mars: es verdad, en todos los lenguajes no, pero sí en C, C++, Java, etc... y como el thread va de C, por eso lo ponía.

while(condición)
{
}

es exactamente equivalente a

for(;condición;)
{
}

pruébalo con el código que quieras, con un buscar y reemplazar :-P

sync                                

Mars Attacks

                                ¿No has leído lo que he escrito cinco posts más arriba? Es que eso NO es una estructura de control for estándar, eso es un for modificado. También podrías hacer un for(i=0;iHablemos en pseudocódigo y nos entenderemos mejor.
Es más potente un
mientras(condición) haz
...instrucciones...
finmientras

que un

para i=x hasta n paso y haz
...instrucciones...
finpara

Lo que comentas forma parte de la flexibilidad que se le ha dado a algunos lenguajes para decir lo mismo de otras formas, pero a costa de perder la declaración estándar del bucle de control for, en este caso.
Y no es que lo diga para llevarte la contraria, estoy completamente de acuerdo que un for(;condición;) es idéntico a un while(condición), pero es que entonces este for(;condición;) no es realmente una estructura de control for, sino otra manera de escribir el while. Lo que has puesto se traduciría como "para mientras condición, haz" que es una forma algo más enrevesada de decir "mientras condición, haz". Pero, ¿y si no tienes la manera de decir "mientras"? Entonces no puedes usar esa estructura. Por eso surgió la estructura de control while, más potente que el for, y por eso después de ella no han surgido estructuras de control más potentes (¿nunca te has preguntado por qué no ha salido "nada nuevo bajo el sol" desde hace cuarenta años en el tema de las estructuras de control? Precisamente porque después del while de momento no hace falta ninguna más, que se sepa).                                

synchrnzr

                                Jejeje, de ser estándar, es estándar (ANSI C de toda la vida) Ya sé que tú le estás dando un enfoque algorítmico pero lo hago pa picarte putilla XDDD

La pregunta que él hace es referente a programación en C y no a algorítmica en general, por eso lo he puesto ;)

sync                                

Mars Attacks

                                Vale, pero es conveniente aclarar la idea de base, para que no piense que para qué hace falta usar whiles, si con fors hace lo mismo (o viceversa). Lalala.                                

synchrnzr

                                Así me gusta, que propugnes el buen hacer ^_^

sync                                

MaSteR

                                A ver para aclarar a este chavla pq la cosa se esta extendiendo algo para un tema... tan ligero.

La eleccion de FOR y WHILE es mas un tema de concepto q no de cual es mejor o peor ya q cm se ha hablado aki los 2 pueden "hacer lo mismo".

El for ya lo pillas supongo.

Tonces WHILE cm te decia es mas de concepto, mira:

DO{
i++;
}WHILE(i!=50);

HAZME "el incremento de i" MIENTRAS "no sea igual a 50" (o lo q es lo mismo hasta 50)

yo recomiendo DO----WHILE es para mi mas poderoZo :P pero while = con tu condicion mientras("condicion se cumpla"){"hazme lo q sea"}

Lo q yo te diga cuestion de conceptos                                

Mars Attacks

                                Emmm... tampoco es lo mismo un while que un do while. En el primero la condición la evalúas antes de ejecutar las instrucciones. En el segundo la evalúas después de haberlas ejecutado. Se pueden hacer equivalentes con un pequeño cambio en el diseño del algoritmo, no obstante.
Si has dicho lo mismo que estoy poniendo yo, lo siento, pero escribes tan raro que no te he entendido bien.
(Edito) Por cierto, no sé si has querido decir que do while es más poderoso que while (tampoco lo he entendido bien), pero por si acaso, ambos tienen el mismo poder computacional. Como he dicho antes, pueden hacerse equivalentes en su forma estándar. No ocurre lo mismo, repito, con el for y con el while. Siento repetirme tanto, pero es algo que debería quedar muy claro. Quizás si hubieras empezado con Pascal lo hubieras visto mucho más claro.                                

MaSteR

                                Ya hombre pero por eso digo q prefiero un DO--WHILE pq usar de la misma manera indistintamente un for q un while........ yo usaria FOR casi en todas ocasiones, y el while para cosillas muyyyy concretas.Me referia a q no debe decantarse por usar FORs o WHILEs pq uno es mejor q otro y tal, ya q cm yo lo veo... es cuestion de cada uno, de cm programe,Si no ta enteraou MarZ pos a ver.

USA FORs y PARA COSAS MAS "complejas" DO--WHILE ya q para mi el WHILE a pelo no me mola mucho y lo uso mu poco.(Mi recomendacion)

*Mars ere un puñetero                                

Mars Attacks

                                Pues no sé, tampoco creo que sea adecuado hablar en términos como "mejor" y "peor", o de usar for "todo lo que puedas" y cuando menos uses while mejor... Me parece que le tienes un poco de miedo a los whiles ;)
Todas las estructuras de control son importantes, cada cual tiene asociadas unas funciones para las que son más lógicas, y si quieres supeditar su uso a las preferencias personales, pues... en fin, cada cual haga lo que le parezca. Yo uso fors cuando veo que es más lógico usar fors y uso whiles cuando veo más lógico usar whiles, no tengo ninguna preferencia :)

Sí, soy un puñetero XD                                

Mars Attacks

                                Bueno, le he echado otro vistazo a los apuntes y le he preguntado a la profa vía mail si podría darme algún ejemplo concreto que mostrara mejor las cosas.
En uno de los articulillos de los apuntes se menciona la función de Ackermann (buscadlo en el google si queréis saber más, es un poco chunga y recursiva de describir) y un programa que resuelva con aritmética entera el cero de |x^2 - elcuadradoque quieras| = 0 (aritmética entera => no vale usar sqrt)

Copipasteo un trozo del mail:
<acotación, que es el que se basa en que si a un número entero le sumas el que obtienes al invertir sus dígitos, y vas repitiendo el proceso, al final te sale un número capicúa. Si son capaces de hacerlo con un for (sin break, of course ;-) me lo digas....  Otro por el estilo, si haces el algoritmo del número maravilloso*... tampoco sé de ninguna acotación a priori, hay que parar cuando se alcanza el 1.>>

*consultad también al google si queréis saber más sobre esto. Resulta que hay números para todos los gustos; números maravillosos, números perfectos, números apocalípticos, números satánicos... seguro que jelorol sabe algo de ellos, y si no, le encomiendo encarecidamente que ponga un artículo sobre ellos en su estupenda web :)

Venga, un saludo.                                

J_F_NASH

                                ¡Vaya!. Muy interesante todo lo que se ha dicho. Ahora voy a intentar aclararme  :oops:


S2.                                






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.