Título: en el CLR, por que? Publicado por: PETTETE en 31 Marzo 2017, 08:03 am Hola buenas,
Alguna vez ya he comentado que soy nuevo en esto del visual basic y de más; que me iba a poner a aprender y todo eso.. Empece mirando visual pero me cansé rapido. Y si, ahora he vuelto, y vengo para quedarme jajajaja he empezado a mirar otra vez y esta vez me estoy enganchando poco a poco. Pero.....como soy nuevo tengo dudas y preguntas que apra los forofos del visual serán una tonteria.(que le vamos a hacer.. nadie nace sabiendo) La pregunta de hoy us muy simple... Primero os pongo el codigo y luego os comento. Código
Bien, tenemos el mismo codigo cambiado por una palabra... el de arriba : a.length -1 el de abajo : a.length step 1 los dos hacen lo mismo pero el de abajo da error en el CLR, por que? se debe usar siempre el metodo de arriba? Un saludo de vuestro vecino y amigo, PETETE;) · Los códigos deben ir en etiquetas GeSHi · No se debe escribir en mayúsculas · Lo títulos deben ser descriptivos >aquí las reglas del foro (http://foro.elhacker.net/reglas.htm) -Engel Lex Título: Re: PREGUNTA TONTA.. Publicado por: pkj en 31 Marzo 2017, 11:44 am Step indica cuanto aumenta la variable i a cada vuelta.
For i = 0 To a.Length - 1 Hace un bucle desde 0 hasta el valor (a.length-1) de 1 en 1 porque por defecto se asume que step es 1 i vale 0, luego vale 1, luego 2, etc... hasta i=(a.length-1) For i = 0 To a.Length step 1 Esto hace un bucle desde 0 hasta el valor (a.length) de 1 en 1 porque tu usas el comando step para asignarle valor 1 i vale 0, luego vale 1, luego 2, etc... hasta i=(a.length) For i = 0 To a.Length step 2 Esto saltaria de 2 en 2 i valdria 0, luego 2, luego 4, etc... hasta el valor mas cercano a a.length sin superarlo. Si quieres hacer un bucle al reves, donde el valor de i vaya desde a.length hasta 0, pondrias: For i = a.Length to 0 step -1 For i = 0 To a.Length - 1 For i = 0 To a.Length - 1 step 1 Estas dos lineas hacen lo mismo. En la primera se asume que step es 1. En la segunda se obliga a que step sea 1 (algo que no es necesario). Saludos Título: Re: PREGUNTA TONTA.. Publicado por: PETTETE en 31 Marzo 2017, 12:23 pm okeeey gracias!
pero el a.length-1 que valor sería? eso no lo entiendo.. de 0 hasta que valor contaría? Título: Re: en el CLR, por que? Publicado por: pkj en 31 Marzo 2017, 13:07 pm En primer lugar esto parece ser .NET
Lenght equivale a la longitud. La variable a puede ser una cadena de texto, una matriz (seguramente esto ultimo), o quien sabe. Si es una cadena de texto con el bucle for next recorres sus caracteres. Si es una matriz, recorres sus elementos. a(i) irá asumiendo el valor adecuado a cada vuelta. b es otra de lo mismo con la misma cantidad de elementos que a. Título: Re: en el CLR, por que? Publicado por: PETTETE en 31 Marzo 2017, 13:13 pm eso si entiendo, lo que no entiendo es porque se pone el -1.. no se podria poner 1? para que valla contando de 1 en 1?
Título: Re: en el CLR, por que? Publicado por: engel lex en 31 Marzo 2017, 13:24 pm los array se dan por empezados en 0 y tienen tantas posiciones como indiques entonces un array de length 5 sería internamente
Código: |_|_|_|_|_| <- 5 elementos 0 1 2 3 4 cuando mueves tu apuntador hasta el 5 pasa que Código: |x|_|_|_|_| <- apuntador en 0 |_|x|_|_|_| <- apuntador en 1 |_|_|x|_|_| <- apuntador en 2 |_|_|_|x|_| <- apuntador en 3 |_|_|_|_|x| <- apuntador en 4 |_|_|_|_|_|? <- apuntador en 5 si que en Código
cuando i es igual a a.Length, es decir para este caso 5, estarías como dicen en mi pueblo, "orinando fuera del perol" Título: Re: en el CLR, por que? Publicado por: PETTETE en 31 Marzo 2017, 13:35 pm entonces se pone -1 para que no se salga del limite ese?
o para que empiece a contar desde el 0? a.length -1 = 0 1 2 3 4 a.length 1 = 1 2 3 4 5 ----ERROR ¿¿¿es eso?? por eso se pone el -1? un saludo de vuestro amigo (el pesado) y vecino, PETETE;) Título: Re: en el CLR, por que? Publicado por: engel lex en 31 Marzo 2017, 13:39 pm Citar entonces se pone -1 para que no se salga del limite ese? cuenta con los dedos empezando desde 0 hasta tu cantidad de dedos de la mano (5), empieza por el pulgar (0) y ve diciendolos en voz alta... mira que pasa cuando llegas a dedos.length-1 y a dedos.length Título: Re: en el CLR, por que? Publicado por: PETTETE en 31 Marzo 2017, 13:52 pm Eso es que si no?
no me has respondido. si, se que si se pasa del limite da error! pero por eso se pone el -1? para que no salga del limite? o sea para que empiece a contar desde el 0 no? y que no llegue al 5 sino que se quede en el 4???? Título: Re: en el CLR, por que? Publicado por: engel lex en 31 Marzo 2017, 13:58 pm Citar pero por eso se pone el -1? para que no salga del limite? o sea para que empiece a contar desde el 0 no? y que no llegue al 5 sino que se quede en el 4???? te estoy dando las herramientas para que lo razones tu mismo tienes Código
for tiene 2 argumentos Código
Citar pero por eso se pone el -1? para que no salga del limite? que efecto causa el -1 en "ultimo_elemento!? cambia las variables por numeros enteros y miraloCitar o sea para que empiece a contar desde el 0 no? que efecto causa el -1 en "primer_elemento!? cambia las variables por numeros enteros y miraloy por qué te lo dejo para razonar? porque claramente si estás preguntando eso, no lo estás entendiendo, y conocimiento sin comprensión no tiene mucho sentido Título: Re: en el CLR, por que? Publicado por: Eleкtro en 31 Marzo 2017, 15:37 pm da error en el CLR, por que? El tipo de error que recibirías en este caso, System.IndexOutOfRangeException y el mensaje de error que lo acompaña, "Índice fuera de los límites de la matriz" son lo suficientemente auto-descriptivos para hacerte una idea de lo que ocurre. El índice de un Array en la programación .NET empieza por el número Cero, y la propiedad Count / Length devuelve el número de elementos en un Array. Lo explicaré de otra forma: Si tu añades cinco elementos a un array, el margen numérico que podrás utilizar en el indexer de ese array será desde el 0 hasta el 4: Ejemplo: Código Es decir que puedes usar desde arr(0) hasta arr(4). Cuando llamas a la propiedad arr.Count / arr.Length, ésta devolverá la cantidad de elementos del array, es decir un valor de 5, puesto que el array contiene 5 elementos; Entonces, al intentar iterar los elementos de la siguiente manera, estarías intentando acceder al índice arr(5), el cual no existe, y por lo tanto lanzaría un error: Código
Por eso se le debe descontar 1 al valor que devuelve la propiedad Count / Length: Código
Lo mismo se aplicaría al ejemplo que pusiste de un búcle con la incrementación de la instrucción Step: Código
pero por eso se pone el -1? para que no salga del limite? y que no llegue al 5 sino que se quede en el 4???? Exacto. Puesto que el índice de un array empieza por 0, la propiedad Count / Length siempre devolverá un valor mayor (un 1 más) puesto que lo que hace es contrar la cantidad de elementos del array, así que si un array contiene 1 elementos, Count / Length devolverá el valor "1", no "0"... evidéntemente. ¡Saludos! |