Operaciones con las matrices
Con las matrices podemos realizar diferentes operaciones en este caso
veremos la de carga de datos a una matriz y la de Lectura de datos de
una matriz
Carga de Datos
Por lo general para cargar un dato se utilizará dos bucle for anidados
los cuales recorreran cada uno un indice.
Siguiendo con el sistema de alumnos, veremos ahora un ejemplo
utilizando las matrices. Hagamos de cuenta que al sistema que hicimos
en el ejemplo6 queremos ahora poder agregarle las notas de una
determinada cantidad de alumnos.
Haremos un esquema para entender un poco mejor lo que desarrollaremos.
Fig. 12. Esquema de actualización del Sistema Alumnos
Entonces nuestro pequeño sistema constará de 2 vectores (Materias y
Alumnos) y una matriz (notas).
El primer cuadrado vacio contendrá la nota de María en Matematicas el
segundo cuadro (si leemos la matriz horizontalmente) contendrá la nota
de Maria pero en la materia Fisica. Asi sucesivamente con los
diferentes alumnos y materias
Suponiendo que las materias y los alumnos estan cargados (esto lo
deberian saber ya, ante cualquier duda recuerden consultar en el foro)
ahora escribiremos el codigo para cargar las notas de los alumnos:
For i0 To 5
For j0 To 1
notas(i,j)Input("Ingrese nota del alumno " + alumnos$(i) + " en la
materia " + materia$(j))
Next
Next
El primer for es para recorrer el vector Alumnos, el segundo For es
para recorrer el vector Materias, en la primera pasada i0 y j0,
según el ejemplo el alumno Maria se encuentra en la posición 0 y la
materia matematica se encuentra en la posición 0 de su vector, esto
quiere decir que cuando pide que ingrese la nota del alumno$(i) el
sistema se refiere a Maria, y cuando dice en la materia “materia$(j)”
se refiere a matematica.
Ahora, el dato que el usuario ingrese se guardara en notas(i,j) en
este caso seria la posición (0,0) de la matriz, es decir el primer
cuadrado.
En la segunda pasada i0 y j1
Maria habiamos dicho que era la alumna que se encontraba en la primera
posición del vecto, ahora la j se incremento en 1 (segunda posición
del vector materias) en este caso la materia que se encuentra en esta
posición es Fisica. El dato que el usuario ingrese se ubicara en la
posición (0,1) del vector. Es decir en el 2 cuadrado del ejemplo visto
en la figura 12
Luego veremos que J llego hasta el final de su recorrido, entonces i
se incrementa en uno y pasa a valer 1(Es decir pasaria a Pedro) y
vuelve a entrar en el bucle de las materias con j0 (matematica)
cuando usuario ingrese la nota verá q la nota se guardara en la
posición (1,0).
cuando i5 significará que el bucle llego a su fin, con lo cual se
deberian haber cargado las notas de todos los alumnos.
Leer Datos
La lectura de datos es muy parecida a la escritura.
For i0 To 5
For j0 To 1
Print "El alumno " + alumno$(i) + " se saco un " + notas(i,j) + " en
la meteria " + materia$(j)
Next
Next
Vemos que es la misma estructura que el anterior solo que usamos un
print para mostrar el dato obtenido.
Ahora veremos el código completo de la aplicación de Sistema de
Alumnos
E
jemplo 7: El codigo actualizado del sistema de alumnos
Muy bien a continuación explicaremos alguna partes del codigo. (ten en
cuenta que la mayoria del codigo es igual al del ejemplo 6)
Codigo14:
Lo que hacemos el bloque de texto correspondiente al código 14 es
pedir al usuario la cantidad de materias que necesitamos ingresar,
para luego recorrer el bucle hasta n(cantidad de materias) – 1. ¿Pero
por que hacemos n1? Hacemos eso porque el bucle comienza en
0(podriamos comenzar en 1 pero desaprovechariamos una posición del
Vector). Veamos esto con un ejemplo:
si el usuario quiere ingresar 2 materias, el valor de n seria 2 si el
bucle fuera
For i0 To n
materia$(i)Input("Ingrese nombre de la materia: " + i + " ")
Next
Le pediria que ingrese la materia 0, la materia 1 y la materia 2 con
lo que ingresaria 3 materias en lugar de dos. Es po eso que para
evitar este error restamos 1 a n.
El modulo para ingresar las notas, no lo explicaremos aca por que ya
fue explicado en la página 25 Cuando vimos como podiamos cargar datos
en una matriz.
En el ultimo modulo, Lectura de Alumnos, escribimos el siguiente
código
En la primera linea pedimos que se ingrese el alumno del cual
necesitamos saber la nota lo guaramos en una variable nueva llamada
usuario$
Luego pedimos la materia del alumno en el cual deseamos saber la nota,
y se guarda en una variable llamada materialu$.
Estos dos valores los necesitaremos para poder comparar con los datos
obtenidos del array si son iguales nos mostrará la nota.
Luego que el usuario ingreso el nombre y la materia ingresamos en los
for para recorrer la matriz.
En la parte de código
If usuario$ alumno$(i)
If materialu$ materia$(j)
Print "El Alumno " + alumno$(i) + " se saco un " + notas(i,j) + " En
la materia " + materia$(j)
EndIf
EndIf
lo que hacemos preguntar:
El contenido de la variable usuario$ es igual al contenido de la
posición i del vector Alumno$?
El contenido de la variable materialu$ es igual al contenido de la
posición j del vector materia$?
Si es asi muestra el nombre del alumno el nombre de la materia y la
nota que se saco en esa materia.
Con esto concluimos nuestro primer sistemita, ahora bien esto se puede
mejorar mucho y ademas no es la forma mas correcta hacerlo con array
porque cada vez que inicamos el programa tenemos que cargar todos los
datos de nuevo ( es decir que los datos de los array se mantienen
durante el tiempo de ejecución cuando se termina de ejecutar se setean
las variables.
Como lo pudimos haber hecho? Con archivos, pero esto es parte de otra
historia, de la historia sin ...ups perdon esto lo veremos en otra
unidad ) .
Tarea para el Hogar
*
El programa muy lindo pero que ocurre si la persona ingresa como
nota un 23? existe esa nota? Como podriamos validar el ingreso de
una determinada nota para que solo permita valores de 1 a 10?
*
Actualizar el modulo de carga de alumnos para que el usuario
decida cuantos alumnos ingresar.
*
En el Modulo correspondiente a la lectura de alumnos. ¿Que pasa si
el alumno que ingreso el usuario no existe? Corregir para que
avise al usuario si ingreso un nombre de usuario o materia de
forma incorrecta, y que le vuelva a permitir ingresar los datos.
Bueno y a aquellos voluntarios que quieran corregir alguna otra parte
bienvenido sea!! si han realizado este manual hasta aca podemos decir
que ya tenemos bastante noción de lo que es programación, al menos de
la lógica, es interesamte que puedan observar como se va combinando
todos los comandos que estamos aprendiendo, lo importante es entender
todos estos conceptos básicos para más adelante ir aumentando la
complejidad.
Ahora bien pasemos a algo que a la mayoria les encanta. LAS
MATEMATICAS!!!
Matematica en Blitz 3d
Las funciones matematicas mas de una vez nos facilitaran la
programación de juegos, por ejemplo ya lo veran cuando veamos como
hacer rebotar una pelotita ;) por eso es necesario que aprendamos
matematicas y muchas veces deberemos leer libros especializados para
poder solucionar algun problema.
Funcioes en Blitz 3d Matematicas
*
Pi
*
Int
*
Float
*
Floor
*
Ceil
*
Sgn
*
Abs
*
Mod
*
Sqr
*
Sin
*
Cos
*
Tan
*
ASin
*
ACos
*
ATan
*
ATan2
*
Exp
*
Log
*
Log10
*
Xor
*
Shl
*
Shr
*
Sar
*
Rnd
*
Rand
*
SeedRnd
*
RndSeed
Tabla 3: Funciones matematicas
PI:
Esta función devuelve el valor PI, muy usado en las rutinas
geometricas.
Print "el valor Pi es a" + Pi
While Not KeyHit(1)
Wend
ejemplo8: Este codigo muestra el valor de Pi
INT:
Descripción: Esta funcion redondea un valor númerico o una variable
valida al número más cercano
Sintaxis: INT(valor)
Parametros: Valor – algun valor o variable valida
N#2.7
n1#2.2
Print "El valor redondeado de " + n + " es igual a " + Int(n)
Print "El valor redondeado de " + n1 + " es igual a " + Int(n1)
While Not KeyHit(1)
Wend
Ejemplo9: Ejemplo de la funcion INT
FLOAT
Descripción: Convierte un valor entero en uno de coma flotante
Sintaxis: FLOAT valor
Parametro: valor – puede ser un valor entero o variable
a100
b#2.5
c# Float a
Print b# + c#
While Not KeyHit(1)
Wend
Ejemplo 10: Ejemplo de la funcion FLOAT
FLOOR#
Descripción: Redondea un valor de coma flotante hacia abajo.
Sintaxis: FLOOR# (valor)
Parametro: valor – debe ser un valor o variable de tipo coma flotante.
n#2.7
n1#2.2
Print "El valor redondeado de " + n + " es igual a " + Floor#(n)
Print "El valor redondeado de " + n1 + " es igual a " + Floor#(n1)
While Not KeyHit(1)
Wend
Ejemplo 11: Función FLOOR#
CEIL#
Descripción: Redondea un valor de coma flotante hacia arriba.
Sintaxis: CEIL# (valor)
Parametro: valor – debe ser un valor o variable de tipo coma flotante.
n#2.7
n1#2.2
Print "El valor redondeado de " + n + " es igual a " + Ceil#(n)
Print "El valor redondeado de " + n1 + " es igual a " + Ceil#(n1)
While Not KeyHit(1)
Wend
Ejemplo 12: Función CEIL#
SGN
Descripción: Devuelve el signo del número especificado, se utiliza
para saber si un número es mayor a 0, menor a 0 o igual.
Sintaxis: SGN (valor)
Parametro: valor – debe ser un valor o variable de tipo coma flotante
o entero.
Print Sgn(10)
Print Sgn(5.5)
Print Sgn(0)
Print Sgn(0.0)
Print Sgn(5.5)
Print Sgn(10)
While Not KeyHit(1)
Wend
Ejemplo 13: Función Sgn (valor)
ABS
Descripción: Devuelve el valor absoluto (positivo de un número)
Sintaxis: ABS (número)
Parametro: valor – debe ser un valor o variable numerico
n2
n1#2.2
n22
n32.2
Print "El valor absoluto de " + n + " es igual a " + Abs(n)
Print "El valor absoluto de " + n1 + " es igual a " + Abs(n1)
Print "El valor absoluto de " + n2 + " es igual a " + Abs(n)
Print "El valor absoluto de " + n3 + " es igual a " + Abs(n1)
While Not KeyHit(1)
Wend
Ejemplo 14: Función Valor absoluto
MOD
Descripción: Devuelve el resto de una división.
Print 10 Mod 3
While Not KeyHit(1)
Wend
Ejemplo 15: Función MOD
SQR (Float)
Descripción: Devuelve la caiz cuadrada del valor especificado como
parametro
Sintaxis: SQR(Float)
Parametro: Float número de coma flotante (los enteros los convierte
automaticamente)
n9
n1#30.2
Print "La raiz cuadrada de " + n + " es igual a " + Sqr#(n)
Print "La raiz cuadrada de " + n1 + " es igual a " + Sqr#(n1)
While Not KeyHit(1)
Wend
Ejemplo 16: Función SQR
SIN (Número)
Descripción: El comando SIN (Seno),es una función de trigonometria que
devuelve un número entre 1 y 1. Este valor representa la coordenada
“Y” de un punto. Este comando se usa para trasladar valores de ángulos
a coordenadas, pero hay algunas cosas a tener en cuenta a la hora de
usarlo. Lo primero de todo, el comando Sin() asume el punto que
quieres es de radio 1 (pixel), después usa un circulo donde 0 grados
es el punto más al ESTE e incrementa en el sentido contrario de las
agujas del reloj, entonces debes tener en cuenta que el eje Y en una
pantalla de ordenador es arribaa abajo comparado con un sistema de
coordenadas matemático normal.
Sintaxis: SIN (Número)
Parametro: Número número entero o flotante que representa un valor en
grados.
Muy bien veamos esto con un ejemplo:
Fig 13. La formula del Seno
fig: 14 Ejemplo de uso de la formula Seno
Matematicamente el seno de un angulo se calcula dividiendo el cateto
opuesto sobre la hipotenusa
S eño (30) Cateto opuesto a 1 0,5
Hipotenusa c 2
;inicializo la variable con el valor en grado para averiguar el seno
n30
Print "El seno de " + n + "º es:" + Sin(n)
While Not KeyHit(1)
Wend
Ejemplo 17. Ejemplo de Seno.
COS (Número)
Descripción: El comando COS (Coseno), es una función de trigonometria
que devuelve un número entre 1 y 1. Este valor representa la
coordenada “Y” de un punto (x,y). Este comando se usa para trasladar
valores de ángulos a coordenadas, pero hay algunas cosas a tener en
cuenta a la hora de usarlo. Lo primero de todo, el comando Cos() asume
el punto que quieres es de radio 1 (pixel), después usa un circulo
donde 0 grados representa la derecha y se incrementa en el sentido
contrario de las agujas del reloj, entonces debes tener en cuenta que
el eje Y en una pantalla de ordenador es arribaa abajo comparado con
un sistema de coordenadas matemático normal.
Sintaxis: COS (Número)
Parametro: Número número entero o flotante que representa un valor en
grados.
Matematicamente La función Coseno se obtiene de dividir el cateto
adyacente por la hipotenusa de un angulo.
Fig 13. La formula del Coseno
E
jemplo del uso de la Formula Coseno
;inicializo la variable con el valor en grado para averiguar el coseno
n60
Print "El coseno de " + n + "º es:" + cos(n)
While Not KeyHit(1)
Wend
Ejemplo 18. Ejemplo de coseno.
TAN (número)
Descripción: Esta función devuelve la tangente de un ángulo. La
funcion tangente obtiene un angulo y devuelve la relación de dos lados
de un triangulo rectángulo. La relación es el resultado de la longitud
del lado opuesto al ángulo dividido por el lado adyacente.
Esto es útil por ejemplo para juegos que usan armas donde las balas
serán disparadas hacia un barril en un cierto ángulo. Puedes usar el
valor Tan en tu formula de potencia/ángulo para ayudar a determinar la
trayectoria del disparo.
Sintaxis: TAN (Número)
Parametro: Número número entero o flotante que representa un valor en
grados.
Fig. 14: Gráfico y función tangente
Ejemplo del Uso de la Formula Tangente
Angulo30
Print "La tangente del ángulo 1 es: " + Tan(angulo)
WaitKey
Ejemplo 19. Ejemplo de Tangente. El comando Waitkey se utiliza para
que al presionar cualquier tecla el programa finaliza.
ASIN (número)
Descripción: Esta función devuelve el arcoseno del parametro
especificado. Se utiliza para trasladar los valores de las coordenadas
X/Y a ángulos. Recuerda que la pantalla del ordenador usa un eje Y
invertido (los valores son mayores cuanto mas abajo estén).
Sintaxis: ASIN (Número)
Parametro: Número número entero o flotante que representa un radio de
la coordenada “Y” al desplazamiento tagencial.
ACOS (número)
Descripción: Esta función devuelve el arcocoseno del parametro
especificado. Se utiliza para trasladar los valores de las coordenadas
X/Y a ángulos. Recuerda que la pantalla del ordenador usa un eje Y
invertido (los valores son mayores cuanto mas abajo estén).
Sintaxis: ACOS(Número)
Parametro: Número número entero o flotante que representa un radio de
la coordenada “x” al desplazamiento tagencial.
ATAN (flotante)
Descripción: Devuelve el ángulo desde el eje x hasta un punto (y,x).
Se usa en la trigonometria básica, este comando te permitira derivar
un angulo basado en la velocidad X e Y de un objeto en movimiento.
Sintaxis: ATAN(flotante)
Parametro: flotante punto en valor flotante (grados).
ATAN2 (valorx,valory)
Descripción: Devuelve el ángulo desde el eje x hasta un punto (x,y).
Se usa en la trigonometria básica, este comando te permitira derivar
un angulo basado en la velocidad X e Y de un objeto en movimiento.
Sintaxis: ATAN2(Flotante)
Parametro: (valorx,valory)
fin segunda parte
bueno hasta aca dejamos esta segunda parte, ya deberiamos haber
afianzado bastante el tema de los bucles, de las sentencias
condicionales y de las diferentes estructuras de datos. Vimos una
introducción a las funciones matematicas con algunos ejemplos, la idea
es poder hacer un pequeño programa que resuelva funciones matematicas
cuando terminemos de ver todas las funciones. Vamos a ver que sale...
el tema que mas me costo es el de trigonometria, pero esto tambien lo
veremos mejor cuando veamos moviemientos de sprite hay veremos la
utilidad... nos estamos viendo..saludos!
Alexis!