Autor Tema: Consulta sobre esta condicion en el FOR  (Leído 5148 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado eskor_fdr

  • PIC10
  • *
  • Mensajes: 18
Consulta sobre esta condicion en el FOR
« en: 30 de Noviembre de 2010, 11:00:01 »
Hola, bueno les queria preguntar como opera esta condicion que se encuentra en el bucle For.
El codigo fue extraido del Keyboard Monitor de PicMania.
Código: [Seleccionar]
for(cont_dec = 0; unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]; cont_dec++);
{
      //bucle
}
         

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Consulta sobre esta condicion en el FOR
« Respuesta #1 en: 30 de Noviembre de 2010, 11:06:36 »
La condicion trabaja asi;

Primero pone "cont_dec" a 0.

Segundo... Si el valor del array de dos dimensaion "unshifted" NO es sc Y, por el contrario, es 1... Se ejecuta el bucle.

Posteriormente, se le suma 1 a "cont_dec".

Finalmente, regresamos a la segunda parte (si el valor del array de dos dimensiones...) hasta que una de estas condiciones falle.


Salu2.

Desconectado eskor_fdr

  • PIC10
  • *
  • Mensajes: 18
Re: Consulta sobre esta condicion en el FOR
« Respuesta #2 en: 30 de Noviembre de 2010, 11:16:04 »
Pero hay algo que no termino de entender, porque el operador && yo lo conocia para utilizar dos condiciones distintas, por ejemplo: if(condicion1 && condicion2) ... Pero en este caso en el for hay una condicion sola, unshifted[cont_dec][0] != sc && unshifted [cont_dec][0] , como que le falta algo.

Disculpen la ignorancia jaja.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Consulta sobre esta condicion en el FOR
« Respuesta #3 en: 30 de Noviembre de 2010, 12:45:51 »
Qué tal!

Pero hay algo que no termino de entender, porque el operador && yo lo conocia para utilizar dos condiciones distintas, por ejemplo: if(condicion1 && condicion2) ... Pero en este caso en el for hay una condicion sola, unshifted[cont_dec][0] != sc && unshifted [cont_dec][0] , como que le falta algo.

Eskor_fdr, justo eso es lo que se está haciendo:

for(cont_dec = 0; unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]; cont_dec++);
{
      //bucle
}
(Te subrayé las dos condiciones unidas por el operador &&).

Para que te quede claro, fíjate, la lógica de una condición for es por lo general algo así:

Código: [Seleccionar]
for (<inicialización de variable contadora>; <cuándo termina la cuenta>; <incremento de la variable contadora>)

El "cuándo termina la cuenta" puede ser una condición que una a su vez varias condiciones con operadores lógicos.
Tal como:
Código: [Seleccionar]
for (<inicialización de variable contadora>; <condicion1 && condicion2>; <incremento de la variable contadora>)

Y justo eso es lo que se está haciendo en este caso.

Como te explicó jeremy:
Si el valor del array de dos dimensaion "unshifted" NO es sc Y es 1... Se ejecuta el bucle.

Es decir que el ciclo FOR terminará cuando se cumplan AMBAS condiciones.

Espero haberte aclarado, cualquier cosa vuelve a preguntar!  :)

Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado eskor_fdr

  • PIC10
  • *
  • Mensajes: 18
Re: Consulta sobre esta condicion en el FOR
« Respuesta #4 en: 30 de Noviembre de 2010, 13:22:16 »
Ok, de a poco voy entendiendo, entonces a ver si lo que digo esta bien, primero se fija que unshifted[cont_dec][0] != sc , despues se compara con si mismo ?

Citar
Si el valor del array de dos dimensaion "unshifted" NO es sc Y es 1... Se ejecuta el bucle.

No entiendo de donde sale ese 1 ? si el valor en el array no siempre es 1, al contrario son numero totalmente distintos.
Me lo podrian explicar con algun ejemplo mas simple, sin array bidimensionales, con variables simples. Capaz que ahi es en donde me trabo.

Desde ya muchas gracias por las respuestas !

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Consulta sobre esta condicion en el FOR
« Respuesta #5 en: 30 de Noviembre de 2010, 13:45:09 »
primero se fija que unshifted[cont_dec][0] != sc , despues se compara con si mismo ?
No.

Repito el código en cuestión:
Código: C
  1. for(cont_dec = 0; unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]; cont_dec++);
  2. {
  3.       //bucle
  4. }

En el for, lo que hace cada cosa:
Código: [Seleccionar]
cont_dec=0  //Esto inicializa la variable contadora "cont_dec" en 0.
unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0] //Esto es la condición para que termine el ciclo for.
cont_dec++ //Esto incrementa la variable contadora.


No entiendo de donde sale ese 1 ? si el valor en el array no siempre es 1, al contrario son numero totalmente distintos.

A ver si esto te ayuda.
Cuando en una condición se coloca sólo una variable, se entiende que la condición se cumple cuando esa variable sea TRUE o 1.
Por ejemplo:
Código: C
  1. if(variable)
Es lo mismo que decir:
Código: C
  1. if(variable==1)

Si quieres que la condición se cumpla cuando sea 0, lo que haces es que le colocas delante a la variable el operador ! (not).
Así:
Código: C
  1. if(!otra_variable)
Es lo mismo que colocar:
Código: C
  1. if(otra_variable==0)

Ok un ejemplo más sencillo con for.
Supongamos un ciclo for clásico, con un contador "i"... tú quieres que el ciclo for se ejecute hasta que i=20 y a su vez una variable llamada "x" sea 1.

El código sería:
Código: C
  1. for(i = 0; i==20 && x; i++);

Bueno dime si te estoy aclarando, o si te estoy enredando más...  :D
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Consulta sobre esta condicion en el FOR
« Respuesta #6 en: 30 de Noviembre de 2010, 14:48:22 »
Hola chicos, firepic , una explicacion muy detallada, pero en realidad creo que

esto
Citar
   
      if(variable)
 
       

es igual a estos tres casos
Citar

if(variable>0)

if(variable !=0)

if(variable <0)
 
     
siempre que variable no sea de tipo bool(0;1);

Hay que tenerlo en cuenta, pues la función anterior seria cierta incluso con números negativos ya que (-1 != 0);
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Consulta sobre esta condicion en el FOR
« Respuesta #7 en: 30 de Noviembre de 2010, 15:30:02 »
Qué tal!!

Hola chicos, firepic , una explicacion muy detallada, pero en realidad creo que

esto
Citar
   
      if(variable)
 
       

es igual a estos tres casos
Citar

if(variable>0)

if(variable !=0)

if(variable <0)
 
     
siempre que variable no sea de tipo bool(0;1);

Hay que tenerlo en cuenta, pues la función anterior seria cierta incluso con números negativos ya que (-1 != 0);

Gracias por mencionarlo bmfranky, tienes razón!  :P
Me faltó aclarar ese detalle... la variable dentro del if tiene que ser tipo bool para que se cumpla lo que mencioné... o una función que devuelva un valor booleano TRUE o FALSE.

Lo que quería era explicar la pregunta de eskor: "¿de dónde sale ese 1?".
Espero haberlo logrado aunque sea en parte.

Saludos a todos, nos leemos!  :mrgreen:

"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Consulta sobre esta condicion en el FOR
« Respuesta #8 en: 30 de Noviembre de 2010, 15:40:09 »
Hola chicos, firepic , una explicacion muy detallada, pero en realidad creo que

esto
Citar
 
      if(variable)
 
      

es igual a estos tres casos
Citar

if(variable>0)

if(variable !=0)

if(variable <0)
 
      
siempre que variable no sea de tipo bool(0;1);

Hay que tenerlo en cuenta, pues la función anterior seria cierta incluso con números negativos ya que (-1 != 0);

Me parece que no es tampoco igual a esos tres casos, ya que en los casos de menor y mayor sólo están abarcando las mitades del dominio(asumiendo que "variable" puede adoptar valores negativos). Es sólo igual a estos dos casos:

Citar
if(variable !=0)

if(variable <0 || variable>0)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Consulta sobre esta condicion en el FOR
« Respuesta #9 en: 30 de Noviembre de 2010, 15:58:23 »
Gracias, maestro Bruno, por la explicación!  ;-)

Eskor entonces olvida lo del 1 y todo lo que te mencioné antes, fue un error por no fijarme en esto que dijiste:
el valor en el array no siempre es 1, al contrario son numero totalmente distintos.

Ahora ya revisé el código del que estás hablando: http://picmania.garcia-cuervo.net/proyectos_teclado_ps2.php

Corrigiendo y tratando de aclarar tu duda, en el código en cuestión:
Código: C
  1. for(cont_dec = 0; unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]; cont_dec++);
  2. {
  3.       //bucle
  4. }

El ciclo for terminará cuando se deje de cumplir la condición:
Código: [Seleccionar]
unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]

Es decir, que en el arreglo "unshifted" el valor unshifted[cont_dec][0] sea diferente a lo que está guardado en la variable sc y al mismo tiempo ese mismo valor sea diferente de cero.

Creo que ahora sí está correcto... cualquier cosa corrijan los expertos por favor...  ;-)

Nos leemos!  :mrgreen:

P.D.: edito por la corrección que hizo bruno más abajo... gracias bruno! :)

« Última modificación: 30 de Noviembre de 2010, 19:52:55 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado eskor_fdr

  • PIC10
  • *
  • Mensajes: 18
Re: Consulta sobre esta condicion en el FOR
« Respuesta #10 en: 30 de Noviembre de 2010, 18:15:15 »
Bueno gente, la verdad que sin palabras, me quedo claro del todo !
Gracias Firepic por tomarte la molestia de leer el codigo :).


Gracias a todos !! Hasta otro momento.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Consulta sobre esta condicion en el FOR
« Respuesta #11 en: 30 de Noviembre de 2010, 19:41:24 »
El ciclo for terminará cuando se cumpla la condición:
Código: [Seleccionar]
unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]

El ciclo for terminará cuando NO se cumpla la condición:
Código: [Seleccionar]
unshifted[cont_dec][0]!=sc && unshifted[cont_dec][0]


Qué lío se armó, eh? :D
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Consulta sobre esta condicion en el FOR
« Respuesta #12 en: 01 de Diciembre de 2010, 10:03:06 »
Pobre eskor_fdr , sin querer como la hemos liado , gracias por la corrección, yo tampoco había caído en lo del ámbito ><. :5], :D ;-).
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Consulta sobre esta condicion en el FOR
« Respuesta #13 en: 01 de Diciembre de 2010, 10:49:22 »
Qué lío se armó, eh? :D

Jeje si, y sólo es un pequeño for...  :D  :D  :D
Gracias por las aclaraciones Bruno, eres un master!  :-/

Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado eskor_fdr

  • PIC10
  • *
  • Mensajes: 18
Re: Consulta sobre esta condicion en el FOR
« Respuesta #14 en: 01 de Diciembre de 2010, 15:33:09 »
Pobre eskor_fdr , sin querer como la hemos liado , gracias por la corrección, yo tampoco había caído en lo del ámbito ><. :5], :D ;-).

Jajaj, no lo habia notado por suerte, sino ya estaria abriendo otro tema.
Gracias gente!