Un vehículo autónomo debe recorrer un pasillo con curvas y regresar al punto de partida ,
para lograr su objetivo posee tres sensores que le indican si existe una pared a su izquierda,
adelante o a la derecha. Cuando dobla lo hace a 90º en el lugar y cuando avanza pasa a la
siguiente posición del pasillo.
SubProceso pasos <- menupasos ()
Mostrar "Ingrese la cantidad de pasos que tendrá el pasillo, la cantidad debe ser entre 1 y 50"
leer pasos
Fin SubProceso
SubProceso dirsel <- menucamino()
// Menu uno
Mostrar "Ingrese un valor numérico comprendido entre 1 y 2"
Mostrar "1 de Norte a Sur \/"
Mostrar "2 de Este a Oeste <"
Mostrar "3 de Sur a Norte ^"
Mostrar "4 de Oeste a Este >"
leer dirsel
Fin SubProceso
SubProceso dirsel <- menucamino2()
// Menu ir en horizontal
Mostrar "Ingrese un valor numérico comprendido entre 1 y 2"
Mostrar "1 de Este a Oeste <"
Mostrar "2 de Oeste a Este >"
leer dirsel
Fin SubProceso
SubProceso dirsel <- menucamino3()
// Menu ir en vertical
Mostrar "Ingrese un valor numérico comprendido entre 1 y 4"
Mostrar "1 de Norte a Sur \/"
Mostrar "2 de Sur a Norte ^"
leer dirsel
Fin SubProceso
Proceso Principal_pasillos
// Primera parte. El usuario diseña los pasillos
// ********************************************************************
Mostrar "Bienvenido!!!"
Mostrar "Comenzaremos diseñando los tres pasillos, se le solicitará que ingrese datos para cada uno"
Mostrar "****************************************************************************************"
Mostrar "Presione ENTER para continuar..."
Leer teclacualquiera
Limpiar Pantalla
dimension vector_creacion[6]
// Vector que acumula los datos para la creación de los pasillos
// referencias de contenido:
// Celdas impares
// 1 de Norte a Sur \/
// 2 de Este a Oeste <
// 3 de Sur a Norte ^
// 4 de Oeste a Este >
//
// Celdas pares
// Cantidad de pasos de 1 a 50
Mostrar "Vamos a diseñar el primer pasillo"
//Pedimos orientación del pasillo, llamamos a la función
dirsel <- menucamino()
// Control del ingreso
Mientras (dirsel >= 1 y dirsel <= 4 ) = Falso
Limpiar Pantalla
Mostrar "Ingreso incorrecto"
dirsel <- menucamino()
FinMientras
// asignamos el dato al vector
vector_creacion[1] <- dirsel
Mostrar "Excelente!!! ahora la cantidad de pasos que tendrá"
pasos <- menupasos ()
// Control del ingreso
Mientras (pasos >= 1 y pasos <= 50 ) = Falso
Limpiar Pantalla
Mostrar "Ingreso incorrecto"
pasos <- menupasos ()
FinMientras
// asignamos el dato al vector
vector_creacion[2] <- pasos
Limpiar Pantalla
Mostrar "Genial!!! ya tenemos los datos del primer pasillo"
Mostrar "vamos a ingresar los del segundo"
qmenu <- 0
// Si el primer camino es un desplazamiento vertical
Si (vector_creacion[1] = 1 o vector_creacion[1] = 3) = verdadero entonces
// Seleccionar uno horizontal
dirsel <- menucamino2()
qmenu <- 2 // guarda elección
Sino // Seleccionar uno vertical
dirsel <- menucamino3()
qmenu <- 3 // guarda elección
FinSi
// Control de ingreso
Mientras (dirsel = 1 o dirsel = 2) = Falso
Segun qmenu
2: dirsel <- menucamino2() // llama al Menu desplazamiento horizontal
3: dirsel <- menucamino3() // llama al Menu desplazamiento vertical
FinSegun
FinMientras
// Guardar datos en el vector
Segun qmenu
2: // en el camino horizontal
Si dirsel = 1 entonces // si se eligió de este a oeste
vector_creacion[3] <- 2 // guardar segun el menú original de 4 opciones
Sino
vector_creacion[3] <- 4
FinSi
3:
Si dirsel = 1 entonces // si se eligió de Norte a sur
vector_creacion[3] <- 1 // guardar segun el menú original de 4 opciones
Sino
vector_creacion[3] <- 3
FinSi
FinSegun
Mostrar "Excelente!!! ahora la cantidad de pasos que tendrá"
pasos <- menupasos ()
// Control del ingreso
Mientras (pasos >= 1 y pasos <= 50 ) = Falso
Limpiar Pantalla
Mostrar "Ingreso incorrecto"
pasos <- menupasos ()
FinMientras
// asignamos el dato al vector
vector_creacion[4] <- pasos
Limpiar Pantalla
Mostrar "Buenísimo!!! ya tenemos los datos del segundo pasillo"
Mostrar "vamos a ingresar los datos del último"
qmenu <- 0
// Si el segunda vez camino es un desplazamiento vertical
Si (vector_creacion[3] = 1 o vector_creacion[3] = 3) = verdadero entonces
// Seleccionar uno horizontal
dirsel <- menucamino2()
qmenu <- 2 // guarda elección
Sino // Seleccionar uno vertical
dirsel <- menucamino3()
qmenu <- 3 // guarda elección
FinSi
// Control de ingreso
Mientras (dirsel = 1 o dirsel = 2) = Falso
Segun qmenu
2: dirsel <- menucamino2() // llama al Menu desplazamiento horizontal
3: dirsel <- menucamino3() // llama al Menu desplazamiento vertical
FinSegun
FinMientras
// Guardar datos en el vector
Segun qmenu
2: // en el camino horizontal
Si dirsel = 1 entonces // si se eligió de este a oeste
vector_creacion[5] <- 2 // guardar segun el menú original de 4 opciones
Sino
vector_creacion[5] <- 4
FinSi
3:
Si dirsel = 1 entonces // si se eligió de Norte a sur
vector_creacion[5] <- 1 // guardar segun el menú original de 4 opciones
Sino
vector_creacion[5] <- 3
FinSi
FinSegun
Mostrar "Excelente!!! ahora la cantidad de pasos que tendrá"
pasos <- menupasos ()
// Control del ingreso
Mientras (pasos >= 1 y pasos <= 50 ) = Falso
Limpiar Pantalla
Mostrar "Ingreso incorrecto"
pasos <- menupasos ()
FinMientras
// asignamos el dato al vector
vector_creacion[6] <- pasos
Limpiar Pantalla
Mostrar "Mejor imposible!!! ya están todos los datos necesarios"
Mostrar Sin Saltar "El primer pasillo ira de "
Segun vector_creacion[1]
1: Mostrar sin saltar "Norte a Sur "
2: Mostrar sin saltar "Este a Oeste "
3: Mostrar sin saltar "Sur a Norte "
4: Mostrar sin saltar "Oeste a Este "
FinSegun
Mostrar Sin Saltar "con " , vector_creacion[2], " pasos, seguido, el pasillo 2 irá de "
Segun vector_creacion[3]
1: Mostrar sin saltar "Norte a Sur "
2: Mostrar sin saltar "Este a Oeste "
3: Mostrar sin saltar "Sur a Norte "
4: Mostrar sin saltar "Oeste a Este "
FinSegun
Mostrar Sin Saltar "con " vector_creacion[4], " pasos, y finalmente el pasillo 3 irá de "
Segun vector_creacion[5]
1: Mostrar sin saltar "Norte a Sur "
2: Mostrar sin saltar "Este a Oeste "
3: Mostrar sin saltar "Sur a Norte "
4: Mostrar sin saltar "Oeste a Este "
FinSegun
Mostrar Sin Saltar "con " , vector_creacion[6], " pasos"
Mostrar " "
Mostrar "Presione ENTER para continuar..."
Leer teclacualquiera
Limpiar Pantalla
// Segunda Parte. Creando pasillos
// ********************************************************************
// 3 vectores correspondientes a cada pasillo
Dimension pasillo1[51]
Dimension pasillo2[51]
Dimension pasillo3[51]
// Creando pista del pasillo 1
Para i <- 1 hasta vector_creacion[2] con paso 1
pasillo1[i] <- "101"
FinPara
// Creando curva del pasillo 1
//var aux
voy_de_a <- vector_creacion[1] // en el vector 1
giro_de_a <- vector_creacion[3] // en el vector 2
pos_curva <- vector_creacion[2] + 1 // Indicando posición de la curva
Si voy_de_a = 1 entonces // Norte a Sur
si giro_de_a = 2 Entonces // a la derecha
pasillo1[pos_curva] <- "110"
sino // a la izquierda
pasillo1[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 2 entonces // Este a Oeste
si giro_de_a = 3 Entonces // a la derecha
pasillo1[pos_curva] <- "110"
sino // a la izquierda
pasillo1[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 3 entonces // Sur a Norte
si giro_de_a = 4 Entonces // a la derecha
pasillo1[pos_curva] <- "110"
sino // a la izquierda
pasillo1[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 4 entonces // Norte a Sur
si giro_de_a = 1 Entonces // a la derecha
pasillo1[pos_curva] <- "110"
sino // a la izquierda
pasillo1[pos_curva] <- "011"
FinSi
FinSi
Mostrar "Primer pasillo creado..."
// Creando pista del pasillo 2
Para i <- 1 hasta vector_creacion[4] con paso 1
pasillo2[i] <- "101"
FinPara
// Creando curva del pasillo 2
//var aux
voy_de_a <- vector_creacion[3] // en el vector 2
giro_de_a <- vector_creacion[5] // en el vector 3
pos_curva <- vector_creacion[4] + 1 // Indicando posición de la curva
Si voy_de_a = 1 entonces // Norte a Sur
si giro_de_a = 2 Entonces // a la derecha
pasillo2[pos_curva] <- "110"
sino // a la izquierda
pasillo2[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 2 entonces // Este a Oeste
si giro_de_a = 3 Entonces // a la derecha
pasillo2[pos_curva] <- "110"
sino // a la izquierda
pasillo2[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 3 entonces // Sur a Norte
si giro_de_a = 4 Entonces // a la derecha
pasillo2[pos_curva] <- "110"
sino // a la izquierda
pasillo2[pos_curva] <- "011"
FinSi
FinSi
Si voy_de_a = 4 entonces // Norte a Sur
si giro_de_a = 1 Entonces // a la derecha
pasillo2[pos_curva] <- "110"
sino // a la izquierda
pasillo2[pos_curva] <- "011"
FinSi
FinSi
Mostrar "Segundo pasillo creado..."
// Creando pista del pasillo 3
Para i <- 1 hasta vector_creacion[6] con paso 1
pasillo3[i] <- "101"
FinPara
// Creando fin del pasillo 3
finrec <- vector_creacion[6] + 1
pasillo3[finrec] <- "111"
Mostrar "Tercer pasillo creado..."
Mostrar "---"
Mostrar "Todo los pasillos se han creado correctamente"
Mostrar "Presione ENTER para continuar..."
Leer teclacualquiera
Limpiar Pantalla
// Tercera parte. El programa recorre los pasillos de ida y de vuelta
// ********************************************************************
Mostrar "Iniciando el recorrido por los pasillos"
// Vector que tomará los datos para el recorrido de ida y de vuelta por los pasillos
Dimension reg_recorrido[6]
Segun vector_creacion[1]
1:
direccion <- "Sur"
2:
direccion <- "Oeste"
3:
direccion <- "Norte"
4:
direccion <- "Este"
FinSegun
// Recorriendo el pasillo 1
i <- 0
p1 <- 0
Mientras p1 = 0
i <- i +1
Si pasillo1[i] = "101"
Mostrar "Estamos recorriendo el Pasillo N° 1, el camino es recto, vamos por el paso ", i , " en dirección ", direccion
Sino
Mostrar Sin Saltar "Los sensores han detectado una curva hacia la "
Segun pasillo1[i]
"110": Mostrar "DERECHA" ;
reg_recorrido[2] <- 1 // grabando regreso a la izquierda
"011": Mostrar "IZQUIERDA"
reg_recorrido[2] <- 2 // grabando regreso a la Derecha
FinSegun
Mostrar "Presione ENTER para continuar en este nuevo pasillo"
Leer teclacualquiera
p1 = 1 // yendo al pasillo 2
Mostrar "Hemos tomado una curva..."
reg_recorrido[1] <- i-1
FinSi
FinMientras
// Recorriendo el pasillo 2
// detectando la dirección
Segun vector_creacion[3]
1:
direccion <- "Sur"
2:
direccion <- "Oeste"
3:
direccion <- "Norte"
4:
direccion <- "Este"
FinSegun
i <- 0
p2 <- 0
Mientras p2 = 0
i <- i +1
Si pasillo2[i] = "101"
Mostrar "Estamos recorriendo el Pasillo N° 2, el camino es recto, vamos por el paso ", i , " en dirección ", direccion , " son ", reg_recorrido[1] + i " pasos en total"
Sino
Mostrar Sin Saltar "Los sensores han detectado una curva hacia la "
Segun pasillo2[i]
"110": Mostrar "DERECHA" ;
reg_recorrido[4] <- 1 // grabando regreso a la izquierda
"011": Mostrar "IZQUIERDA"
reg_recorrido[4] <- 2 // grabando regreso a la Derecha
FinSegun
Mostrar "Presione ENTER para continuar en este nuevo pasillo"
Leer teclacualquiera
p2 = 1 // yendo al pasillo 3
Mostrar "Hemos tomado una curva..."
reg_recorrido[3] <- i-1
FinSi
FinMientras
// Recorriendo el pasillo 3
// detectando la dirección
Segun vector_creacion[5]
1:
direccion <- "Sur"
2:
direccion <- "Oeste"
3:
direccion <- "Norte"
4:
direccion <- "Este"
FinSegun
i <- 0
p3 <- 0
Mientras p3 = 0
i <- i +1
Si pasillo3[i] = "101"
Mostrar "Estamos recorriendo el Pasillo N° 3, el camino es recto, vamos por el paso ", i , " en dirección ", direccion , " son ", reg_recorrido[1] + reg_recorrido[3] + i " pasos en total"
Sino
si pasillo3[i] = "111"
Mostrar "Los sensores han detectado el fin del recorrido a los ", i-1 , " pasos del pasillo 3 y a los " , reg_recorrido[1] + reg_recorrido[3] + i-1, " pasos totales"
Mostrar "Presione ENTER para continuar"
Leer teclacualquiera
p3 = 1 // Fin del recorrido
reg_recorrido[5] <- i-1
FinSi
FinSi
FinMientras
// Iniciando el recorrido de regreso
segun reg_recorrido[4]
1: curva1 <- "Izquierda"
2: curva1 <- "Derecha"
FinSegun
segun reg_recorrido[2]
1: curva2 <- "Izquierda"
2: curva2 <- "Derecha"
FinSegun
Mostrar "El sistema ha tomado un registro del recorrido, los datos para el regreso son:"
Mostrar "ahora giramos 180°, luego avanzamos ", reg_recorrido[5], " pasos. Curva a la " , curva1, " luego ", reg_recorrido[3], " pasos, luego curva a la ", curva2, " y finalmente ", reg_recorrido[1], " pasos"
Mostrar "Presione ENTER para continuar"
Leer teclacualquiera
Mostrar "Iniciando el recorrido de regreso"
// Regresando por el camino 3
Para i <- reg_recorrido[5] Hasta 1 con paso -1
Si pasillo3[i] = "101" entonces
Mostrar "Estamos de regreso por el pasillo n° 3 son ", reg_recorrido[5], " pasos en total del mismo, ahora recorriendo el paso n° " , i
FinSi
FinPara
Mostrar "ahora giramos a la ", curva1
// Regresando por el camino 2
Para i <- reg_recorrido[3] Hasta 1 con paso -1
Si pasillo2[i] = "101" entonces
Mostrar "Estamos de regreso por el pasillo n° 2 son ", reg_recorrido[3], " pasos en total del mismo ahora recorriendo el paso n° " , i
FinSi
FinPara
Mostrar "ahora giramos a la ", curva2
// Regresando por el camino 1
Para i <- reg_recorrido[1] Hasta 1 con paso -1
Si pasillo1[i] = "101" entonces
Mostrar "Estamos de regreso por el pasillo n° 1 son ", reg_recorrido[1], " pasos en total del mismo, ahora recorriendo el paso n° " , i
FinSi
FinPara
Mostrar "Hemos vuelto al inicio del camino!!!"
Mostrar "Fin del Programa"
FinProceso
En caso de que aparezca un mensaje que dice ERROR 302: Subindice (6) fuera de rango (0...5)
Configurar el programa para que funcione correctamente:
1_Clic en Configurar
2_Clic en Opciones del Lenguaje...
3_Clic en Personalizar
4_Clic en Utilizar indices en arreglos y cadenas en base 0
5_Clic en Aceptar
6_Clic en Aceptar