[2006-1] Guía de Ejercicios 1 - Curso Programación Básica con NQC

Anuncio
Programación Básica con “NQC” – Solución Guía de Ejercicios 1
Ruteos:
1.1
i
6
6
6
7
7
7
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
j
2
2
5
5
5
8
8
8
8
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
k
9
9
9
3
3
3
1
1
3
3
5
5
7
7
9
9
11
11
13
13
15
15
17
17
i
1
2
4
8
16
16
1
8
8
2
9
9
0
7
j
1024
256
64
16
4
8
8
8
16
16
16
32
32
32
i
16
16
16
16
17
17
17
18
j
4
4
4
2
2
2
0
0
1.2
1.3
k
8
10
10
10
12
12
12
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
18 0
18 -2
18 28
19 28
19 28
187
14
14
14
14
140
28 140
k
2
8
8
8
7
7
7
6
i
12
12
12
7
7
7
2
2
j
3
3
18
18
18
13
13
13
k
0
0
0
0
0
0
1
i
6
6
6
6
6
1
1
j
7
13
2
0
0
0
0
i
1
1
1
1
5
0
0
0
1
1
1
1
7
0
0
0
1
1
1
1
9
0
0
0
1
1
1
1
11
b
3
3
3
2
2
2
3
3
4
4
4
3
3
3
4
4
5
5
5
4
4
4
5
5
6
6
6
5
5
m
9
9
3
3
3
3
3
-3
-2
-2
4
4
4
4
4
-4
-3
-3
5
5
5
5
5
-5
-4
-4
6
6
6
1.4
1.5
1.6
h
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
-1
-1
-1
-1
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
-1
-1
-1
-1
-2
3
0
0
0
1
1
1
5
6
6
7
7
7
6
6
-6
-5
-5
-5
1.7
p
1
8
7
10
10
10
10
2
2
9
8
11
11
11
11
3
3
3
3
3
q
1
1
1
1
14
10
11
11
2
2
2
2
15
11
12
0
13
9
10
3
1.8
a
1
0
0
0
0
0
0
1
1
1
2
2
2
3
b
2
2
1
1
1
8
8
8
8
8
8
8
8
8
c
3
3
3
1
1
1
1
1
1
1
1
1
1
1
y
0
0
3
3
3
9
9
9
9
12
z
0
0
0
6
6
6
18
18
18
18
1.9
x
0
1
1
1
2
2
2
3
2
2
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
2
1
1
1
10
10
0
0
12
12
12
12
7
7
7
28
9
9
9
23
23
2
2
14
Programas:
Lo que aquí se presenta es solo una manera de posible solución, un problema se puede
resolver con diferentes algoritmos obteniendo el mismo resultado deseado, por lo que si una
solución propuesta no es como la que aparece en este documento, esto no significa que esa
solución esté incorrecta.
1.10
Inicio
Declaración de
Sensores
Sensor1<21
Motor A Off
B con poder 6
Sensor1<41
Motor A Off
B con poder 4
Sensor1<51
Motor A Off
B con poder 2
Sensor1<61
A con poder 1
B con poder 1
Sensor1<81
A con poder 3
B con poder 1
A con poder 5
B con poder 1
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
while(1){
if(SENSOR_1<21){
Off(OUT_A);
OnFwd(OUT_B);
SetPower(OUT_B,6);
}
else{
if(SENSOR_1<41){
Off(OUT_A);
OnFwd (OUT_B);
SetPower(OUT_B,4);
}
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
else{
if(SENSOR_1<51){
Off(OUT_A);
OnFwd(OUT_B);
SetPower(OUT_B,2);
}
else{
if(SENSOR_1<61){
OnFwd(OUT_A+OUT_B);
SetPower(OUT_A+OUT_B,1);
}
else{
if(SENSOR_1<81){
OnFwd(OUT_A+OUT_B);
SetPower(OUT_A,3);
SetPower(OUT_B,1);
}
else{
OnFwd(OUT_A+OUT_B);
SetPower(OUT_A,5);
SetPower(OUT_B,1);
}
}
}
}
}
}
}
1.11
Inicio
Declaración de
Sensores
Espera z
Sensor1==1
Sensor2==1
Sensor3==1
Enciende A,
Apaga B y set 6
Enciende A,
Apaga B y set 4
Sensor3==1
Enciende A,
Apaga B y set 2
Enciende A,
Apaga B y set 0
Sensor2==1
Sensor3==1
Enciende B,
Apaga A y set 6
Enciende B,
Apaga A y set 4
Sensor3==1
Enciende B,
Apaga A y set 2
Enciende B,
Apaga A y set 0
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
#define z 10
task main(){
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_1,SENSOR_TOUCH);
while(1){
if(SENSOR_1==1){
if(SENSOR_2==1){
if(SENSOR_3==1){
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,6);
}
else{
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,4);
}
}
else{
if(SENSOR_3==1){
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,2);
}
else{
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,0);
}
}
}
else{
if(SENSOR_2==1){
if(SENSOR_3==1){
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,6);
}
else{
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,4);
}
}
else{
if(SENSOR_3==1){
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,2);
}
else{
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,0);
}
}
}
Wait(z);
}
}
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
1.12
Inicio
Declaración de
Sensores
Wait(SENSOR_3)
PlayTone(440,5)
Wait(5)
task main(){
SetSensor(SENSOR_3,SENSOR_DISTANCE);
while(1){
Wait(SENSOR_3);
PlayTone(440,5);
Wait(5);
}
}
1.13
Derecha
Izquierda
Recto
Dirección A->Fwd
C->Rev
Dirección A->Rev
C->Fwd
Dirección C->Fwd
A->Fwd
Encender A y C
Encender A y C
Encender A y C
Inicio
Esperar td
Esperar ti
Esperar tl
Apagar A y C
Apagar A y C
Apagar A y C
Fin
Fin
Fin
Secuencia de
subrutinas
Fin
#define td 50
#define ti 50
#define tl 100
sub derecha(){
Fwd(OUT_A);
Rev(OUT_C);
OnFor(OUT_A+OUT_C,td);
}
sub izquierda(){
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
Rev(OUT_A);
Fwd(OUT_C);
OnFor(OUT_A+OUT_C,ti);
}
sub recto(){
Fwd(OUT_A);
Fwd(OUT_C);
OnFor(OUT_A+OUT_C,tl);
}
task main(){
recto();
recto();
recto();
recto();
recto();
izquierda();
recto();
izquierda();
derecha();
recto();
recto();
izquierda();
derecha();
recto();
izquierda();
recto();
recto();
recto();
}
izquierda();
derecha();
recto();
recto();
recto();
izquierda();
derecha();
derecha();
recto();
derecha();
recto();
derecha();
derecha();
recto();
recto();
recto();
izquierda();
recto();
izquierda();
recto();
recto();
recto();
izquierda();
derecha();
1.14
Inicio
Inicio de Sensores
y Motores
Sensor1<umb
Avanza Derecha
Avanza Izquierda
#define umb 50
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
Fwd(OUT_A+OUT_C);
while(1){
if(SENSOR_1<umb){
Off(OUT_C);
On(OUT_A);
}
else{
Off(OUT_C);
On(OUT_A);
}
}
}
#define umb 50
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);
Fwd(OUT_A+OUT_C);
while(1){
if(SENSOR_1<umb){
derecha();
}
else{
izquierda();
}
}
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
}
sub derecha(){
Off(OUT_C);
On(OUT_A);
}
sub izquierda(){
Off(OUT_A);
On(OUT_C);
}
1.15
Inicio
Sonidos
Dec. de Sensores,
m y n =0
Espera z
m=n
m=n
Sensor1==1
Sensor2==1
Sensor3==1
Enciende A, n=1,
Apaga B y set 6,
Enciende A, n=2,
Apaga B y set 4
Sensor3==1
Enciende A, n=3,
Apaga B y set 2
Enciende A, n=4,
Apaga B y set 0
Sensor2==1
Sensor3==1
Enciende B, n=5,
Apaga A y set 6
Enciende B, n=6,
Apaga A y set 4
Sensor3==1
Enciende B, n=7,
Apaga A y set 2
Enciende B, n=8,
Apaga A y set 0
#define z 10
int m=0;
int n=0;
task main(){
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_1,SENSOR_TOUCH);
while(1){
m=n;
if(SENSOR_1==1){
if(SENSOR_2==1){
if(SENSOR_3==1){
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,6);
n=1;
}
else{
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,4);
n=2;
}
}
else{
if(SENSOR_3==1){
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,2);
n=3;
}
else{
Off(OUT_B);
On(OUT_A);
SetPower(OUT_A,0);
n=4;
}
}
}
else{
if(SENSOR_2==1){
if(SENSOR_3==1){
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,6);
n=5;
}
else{
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,4);
n=6;
}
}
else{
if(SENSOR_3==1){
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,2);
n=7;
}
else{
Off(OUT_A);
On(OUT_B);
SetPower(OUT_B,0);
n=8;
}
}
}
if(n==m){
PlayTone(440,10);
Wait(15);
PlayTone(880,10);
Wait(15);
PlayTone(1760,10);
Wait(10);
}
Wait(z);
}
}
1.16
#define x1 36 //se definen las ubicaciones de las piezas
#define x2 64
task main(){
SetSensor(SENSOR_1,SENSOR_TOUCH); //los sensores son de tipo booleano
SetSensor(SENSOR_2,SENSOR_TOUCH);
int posicion = 11; //se indica la posicion inicial
int h,v;
h=x1%10-posicion%10;
//se encuentra la diferencia de unidades, que
corresponde a la distancia en columnas
while(h!=0){
OnRev(OUT_A); //se mueve hacia la derecha
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
if(SENSOR_1){
h-=h; //se descuentan las columnas que ha recorrido
posicion+=1; //se actualiza la posicion
Wait(10);
//se esperan 0.1 segundos para evitar repetir los
datos de entrada
}
}
Off(OUT_A);
//se deja de mover horizontalmente cuando completa su
recorrido
v=x1/10-posicion/10;
//se encuentra la diferencia de decenas, que
corresponde a la distancia en filas
while(v!=0){
OnFwd(OUT_B); //se mueve hacia abajo
if(SENSOR_2){
v-=v; //se descuentan las filas que ha recorrido
posicion+=10; //se actualiza la posicion
Wait(10);
//se esperan 0.1 segundos para evitar repetir los
datos de entrada
}
}
Off(OUT_B);
//se deja de mover verticalmente cuando completa su
recorrido
if(posicion==x1){ //se verifica que la posición sea la indicada
OnRev(OUT_C); //se recoje la pieza
Wait(200);
}else{
return;
//si la navegacion ha fallado, el programa se deja de
ejecutar
}
h=x2%10-posicion%10;
//se encuentra la diferencia en unidades, que
corresponde a la distancia en columnas
while(h!=0){
if(h>0){
OnRev(OUT_A); //si la diferencia es positiva avanza a la derecha
}else{
OnFwd(OUT_A);
//si la diferencia es negativa retrocede a la
izquiera
}
if(SENSOR_1){
if(h>0){
h-=h; //se descuentan las columnas que ha recorrido
posicion+=1; //se actualiza la posicion
}else{
h+=h; //se descuentan las columnas que ha recorrido
posicion-=1; //se actualiza la posicion
}
Wait(10);
//se esperan 0.1 segundos para evitar repetir los
datos de entrada
}
}
Off(OUT_A);
//se deja de mover horizontalmente cuando completa su
recorrido
v=x2/10-posicion/10;//se
encuentra
la
diferencia
en
decenas,
que
corresponde a la distancia en filas
while(v!=0){
if(v>0){
OnFwd(OUT_B);//si la diferencia es positiva se mueve hacia abajo
}else{
OnRev(OUT_B);//si la diferencia es negativa se mueve hacia arriba
}
if(SENSOR_2){
if(v>0){
v-=v; //se descuentan las filas que ha recorrido
posicion+=10; //se actualiza la posicion
}else{
v+=v; //se descuentan las filas que ha recorrido
posicion-=10; //se actualiza la posicion
}
Wait(10);
//se esperan 0.1 segundos para evitar repetir los
datos de entrada
}
}
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
Off(OUT_B);
recorrido
//se
deja
de
mover
verticalmente
cuando
completa
su
if(posicion==x2){ //se verifica que la posición sea la indicada
OnFwd(OUT_C); //se coloca la pieza
Wait(200);
}else{
return;
//si la navegacion ha fallado, el programa se deja de
ejecutar
}
h=posicion%10-1; //se encuentra la diferencia de unidades para regresar
al origen
while(h!=0){
OnFwd(OUT_A); //se mueve hacia la izquierda
if(SENSOR_1){
h-=h; //se descuentan las columnas recorridas
posicion-=1; //se actualiza la posicion
Wait(10); //0.1 segundos de espera mientras pasa por la línea
}
}
Off(OUT_A); //se detiene el motor al llegar a la primera columna
v=posicion/10-1; // se encuentra la diferencia de decenas para regresar
al origen
while(v!=0){
OnRev(OUT_B); //se mueve hacia arriba
if(SENSOR_2){
v-=v; //se descuentan las filas recorridas
posicion-=10; //se actualiza la posicion
Wait(10); //0.1 segundos de espera mientras pasa sobre la línea
}
}
Off(OUT_B); //se detiene el motor al llegar al origen
}
Programación Básica con “NQC” – Solución Guía de Ejercicios
Pedro F. Toledo – Patricio A. Castillo – pedrotoledocorrea@gmail.com – 31/05/2006
Descargar