duda programacion arrays

cracking

buenas, pues estoy empezando en esto de la programación, y ahora estamos con pseudo código, vamos, q no estamos con ningun lenguaje en especifico, y bueno, ahora estamos con los arrays y tal y nos han propuesto varios ejercicios para ir practicando...

la cosa es que en un array unidimensional de 200 celdas por ejemplo, id llenandolo con valores leidos de teclado se me ocurre muy facilmente con un para(for)..

VARIABLES
..VECTOR[200]: CARÁCTER
..char1, char2: CARACTER
..posi: NATURAL
INICIO
..Para (posi <- 1) hasta (posi = 201) incremento <- 1 hacer
....escribir(“Introduzca un carácter”)
....leer(VECTOR[posi])
..Fin para

FIN

con esto voy pidiendo valores y guardandolos en la celda del array VECTOR al cual corresponde el contador q voy aumentando con el para...

El problema es a la hora de llenar un array bidimensional de 20 filas y 20 columnas por ejemplo, con este método, tendría q utilizar 20 estructuras "para".. uno por cada fila o columna... pero estoy seguro de q no es asi.. tiene q haber otro metodo... ayuda :_( ?

kas

Vamos a ver:

Tu primer for tiene los limites mal, un array de 200 posiciones va del 0 a la 199. Ademas deves guardar en algun lado la entrada para poder asignarla al vector.

para (contador =0 hasta contador < 200, aumenta contador)
....char1 = leer("escribe una letra")
....vector[contador] = char1
siguiente

Ahora con un vector[x][y] de 20 x 20:

para(contadro = 0 hastas contador < 20, aumenta contador)
----para (contador2 = 0 hasta contador 2< 20, aumenta contador2)
........char1 = leer("escribe una letra")
........vector[contador][contador2] = char1
....siguiente
siguiente

Para darte una idea de lo que hace el segundo algoritmo, imaginemos una matrixz de 3x3

X Y
0 0
0 1
0 2
1 0
1 1
1 2

Espero que te ayude

cracking

muchas gracias
sobre lo de los limites, nose como sera en C etc.. pero en pseudo codigo a mi me han dicho q el incremento se realiza al final del para.. es decir, creo q tus limites estan mal, pongamos un numero mas chico para verlo mas claro, tu dices del 0 al 199 para un total de 200,
pongamos del 0 al 4 para un total de 5:
se ejecuta 1ª vez, acaba, contador a 1, contador=4? NO, seguimos.
se ejecuta 2ª vez, acaba, contador a 2, contador=4? NO, seguimos.
se ejecuta 3ª vez, acaba, contador a 3, contador=4? NO, seguimos.
se ejecuta 4ª vez, acaba, contador a 4, contador=4? SI, salimos.

Resultado, ejecutado 4 veces y no cinco. por lo que yo he puesto del 1 al 201, ya que, desde contador = 0 no puedo empezar, porq la celda 0 no existe.

sobre lo de guardarlo primero en una variable para luego asignarselo al array lo pense, pero me dijeron q poniendo: leer(VECTOR[x]) guardaba el valor introducido en la celda 'x' del array.

de todas formas muchas gracias, sabia q iban por ahi los tiros la solucion, aunq io estaba pensando mas en un repetir, por si alguien le interesa aqui se lo pongo, ya que con un repetir, io por lo menos, veo la traza mas clara:

VARIABLES
...MATRIZ[20][20]: NATURAL
...fila <-- 0:NATURAL
...columna <-- 0: NATURAL
INICIO
...Repetir
......fila <-- fila + 1
......columna <-- 0
......Repetir
.........columna <-- columna + 1
.........escribir(“Introduzca un valor”)
.........leer(MATRIZ[fila,columna]
......Hasta (columna = 20)
...Hasta (fila = 20)
FIN

SsNnIiFf

Si te fijas ha puesto de 0 a 199 y lo expresa como de 0 a < 200.

En tu ejemplo seria... de 0 a <5. Comenzando con cont = 0.


0 < 5 ? Si
Primera ejecucion

cont = 1

1 < 5? Si
Segunda ejecucion

cont = 2

2 < 5? Si
Tercera ejecucion

cont = 3

3 < 5? Si
Cuarta ejecucion

cont = 4

4 < 5? Si
Quinta ejecucion

cont = 5

5 < 5? No
Paramos.

Como ves... ahi tienes las 5 ejecuciones que querias. Y si, se suele usar como el te ha explicado. No se si es por convenio o cualquier chorrada, pero es lo habitual. Si queremos 200, se define un bucle mientras X sea inferior a ese valor e iniciado en 0.

Poisonous

Para trabajar con matrices se usa un doble for el 99% de las veces.

..Para (posi <- 0) hasta (posi < 200)
....Para (posi2 <- 0) hasta (posi2 < 200)
......escribir(“Introduzca un carácter”)
......leer(vec[posi][posi2])

cracking

ok thx a todos, y sí, teneis razon, no me fije en que ponia para contador MENOR que 200, creia q ponia IGUAL a 200 ;P

saludos.

kas

#3 En tu ejemplo del 0 al 4 para 5 posiciones, has hecho mal las cuentas:

se ejecuta 1ª vez, contador a --->0<---, acaba, contador=4? NO, seguimos.
se ejecuta 2ª vez, contador a 1, acaba, contador=4? NO, seguimos.
se ejecuta 3ª vez, contador a 2, acaba, contador=4? NO, seguimos.
se ejecuta 4ª vez, contador a 3, acaba, contador=4? NO, seguimos.
se ejecuta 5ª vez, contador a 4, acaba, contador=4? SI, salimos.

Como ves se ejecuta 5 veces.

La idea del doble for es:

m[2][2]

1ª vuelta bucle externo i = 0
....1ª vuelta bucle intenro j =0 -> m[0][0]
....2ª vuelta bucle interno j = 1 -> m[0][1]
2ª vuelta bucle externo i = 1
....1ª vuelta bucle intenro j =0 -> m[1][0]
....2ª vuelta bucle interno j = 1 -> m[1][1]
FIN

Como ves, se ejecuta cada vuelta interna 2 veces, asi como las vueltas externas 2 veces, ambas de 0 a 1.

Usuarios habituales

  • kas
  • cracking
  • Poisonous
  • SsNnIiFf