Sei sulla pagina 1di 24

TRABAJO DE INVESTIGACIÓN

ARREGLOS
30.05.2013 07:23

INSTITUTO TECNOLOGICO DE SALINA CRUZ

UNIDAD 5. ARREGLOS.

5.1. INICIALIZACIÓN Y GENERACIÓN DE ARREGLOS


5.2. ARREGLOS MULTIDIMENSIONALES
5.3. ARREGLOS DE CARACTERES
5.4. UTILIZACIÓN DE ARREGLOS.

TRABAJO DE INVESTIGACION DOCUEMENTAL QUE PARA ACREDITAR LA MATERIA


DE ALGORITMOS Y PROGRAMACION PRESENTA:

Fabián Cruz Raquel

TITULAR DE LA MATERIA: M. EN C. SUSANA MONICA ROMAN NAJERA


CARRERA: ING. MECANICA GRUPO: 2 B1

Introducción……………………………………………………………………………3
Inicialización y generación de arreglos…………………………………………….4
Arreglos multidimensionales………………………………………………………...6
Arreglos de caracteres………………………………………………………………..8
Utilización de arreglos …………………………………………………………….....9
Conclusiones………………………………………………………………………...12
Fuentes de información…………………………………………………………….13
INTRODUCCION.
En esta unidad hablaremos de arreglos de una o más dimensiones, de cómo iniciarlos y
también sobre su aplicación.
Arreglos
Un arreglo o array (en ingles) es una colección de variables relacionadas a las que se hace
referencia por medio de un nombre común. Otra definición valida es que un arreglo es un
conjunto de datos que se almacenan en memoria de manera contigua con el mismo nombre y
para diferenciar los elementos de un arreglo se utiliza un índice. En el lenguaje C++ un arreglo
se le conoce como un tipo de dato compuesto. Los arreglos pueden tener una o varias
dimensiones.

Con esta información podemos declarar lo siguiente:

5.1. INICIALIZACIÓN Y GENERACIÓN DE ARREGLOS.

FIGURA 1.- Declaración de un arreglo.

Un arreglo en C también se puede inicializar de las siguientes formas:


Crear un arreglo de 3 elementos
Inicializando cada elemento:
int A[]={11,2,8}; ó
int A[3]={11,2,8};
Inicializando todos los elementos con el mismo valor:
int A[3]={0};

float arreglo[6];
Representacion grafica de un arreglo de una dimensión
1 arreglo[0]
2 arreglo[1]
3 arreglo[2]
4 arreglo[3]
5 arreglo[4]
6 arreglo[5]
int arreglo[4][4]
Representación grafica de un arreglo de dos dimensiones
int arreglo[4][4][3]
Representación grafica de

FIGURA 2.-Representacion de un arreglo de dos dimensiones.

int arreglo[4][4][3] Representación grafica de un arreglo de tres


Dimensiones

FIGURA 3.-Representacion grafica de un arreglo de tres dimensiones.

5.2. ARREGLOS MULTIDIMENSIONALES.

Es una estructura de datos estática y de un mismo tipo de datos, y de longitud fija que
almacena datos de forma matricial. De igual forma que los arreglos unidimensionales, el
almacenamiento de los datos en la memoria se realiza de forma secuencial y son accedidos
mediante índices. Los arreglos multidimensionales son también conocidos como matrices. Por
lo tanto se llama matriz de orden "m×n" a un conjunto rectangular de elementos dispuestos en
filas "m" y en columnas "n", siendo m y n números naturales. Las matrices se denotan con
letras mayúsculas: A, B, C, ... y los elementos de las
mismas con letras minúsculas y subíndices que indican el lugar ocupado: a, b, c, ... Un
elemento genérico que ocupe la fila i y la columna j se escribe i,j. Si el elemento genérico
aparece entre paréntesis también representa a toda la matriz: A (i,j). Una matriz de orden 3x4
se muestra a continuación, siendo M una matriz de 3 filas y 4 columnas, la representación
grafica de sus posiciones sería la siguiente:

Declaración de arreglos multidimensionales


La sintaxis es la siguiente:
tipo_dato identificador [dimensión1] [dimensión2] ... [dimensiónN] ; Donde N es un
número natural positivo.
Ejemplo Arreglo de dos dimensiones de orden 2x3.
char m[2][3] ;

Declaración
char m[2][3]; // forma una tabla de dos filas y tres columnas
// cada fila es un arreglo de una dimensión
// la declaración indica que hay dos arreglos de una dimensión

Nombre del grupo


m → indica la localización del grupo en la memoriaNombre de las filas
m[0] → primera fila → indica la localización de la fila dentro del grupo
m[1] → segunda fila → indica la localización de la fila dentro del grupo

Nombre de los elementos


m[0][0] → primer elemento
m[0][0] m[0][1] m[0][2]
m[1][0] m[1][1] m[1][2]
m[0][1] → segundo elemento
m[0][2] → tercer elemento
m[1][0] → cuarto elemento
m[1][1] → quinto elemento
m[1][2] → sexto elemento

Haciendo referencia a algunos elementos obtendríamos lo siguiente:


• m[0][0] = a
• m[1][1] = y
• m[1][2] = 10
• m[0][2] = w

Ejemplo.- Llenado de un arreglo de enteros de dimensión 3x2. En este ejemplo el llenado lo


realiza el usuario, en otros ejemplos se vera como realizar llenado de matrices mediante
asignación automática, cálculos de operaciones, etc.
1. #include <iostream>
2. using namespace std;
3. int main()
4. {
5. int matriz [3][2];
6. int valor;
7. for(int i=0;i<3;i++) // Recorre las filas de la matriz
8. {
9. for(int j=0; j<2;j++) // Recorre las columnas de la matriz
10. {
11. cout<<"Ingrese el valor de la matriz en la posición ["<<i<<","<<j<<"]"<<endl;
12. cin>>valor;
13. matriz[i][j] = valor;
14. }
15. }
16. // Imprimiendo el arreglo en formato matricial
17. for(int i=0;i<3;i++)
18. {
19. cout<<"|";
20. for(int j=0; j<2;j++)
21. {
22. cout<<"\t"<<matriz[i][j]<<"\t";
23. }
24. cout<<"|"<<endl;
25. }
26. return 0;
27.}
5.3. ARREGLOS DE CARACTERES.
Ejemplo de declaración:
char arreglo Cadena[] = "buenas";
Notemos que no hemos especificado índice alguno, el compilador contará la cantidad de letras
que tiene la cadena "buenas" (son 6) y agregará uno para incluír el carácter nulo ( '\0' ). El
carácter nulo índica la terminación de la cadena, es importante siempre tenerlo en cuenta.
Ejemplo de declaración:
char arregloCadena2[7] = {'b','u','e','n','a','s','\0'}; En esta declaración inicializamos cada uno de
los elementos del arreglo de manera individual. Notar que inicializamos explícitamente en el
elemento 7 del arreglo al carácter nulo '\0'.
Ejemplo de declaración:
char arregloCadena3[] = "otra cadena";
El arregloCadena3, reservará 12 lugares en memoria, ya que además de los 10 que suman
las palabras, hay un espacio y el carácter nulo.
Arreglos y "cin >>"
Podemos utilizar cin >>arregloCadena para asignar a un arreglo (desde el teclado o entrada
estandar), pero debemos tener en cuenta que cin >> leerá y asignará hasta detectar el primer
carácter en blanco (espacio).
Ejemplo de "cin >>"
char arregloCadena4[25]; cin >> arregloCadena4;Si aquí el usuario introdujera "hace
calor" por teclado, el arregloCadena4 almacenaría solamente la cadena "hace" y " calor" se
ignoraría por completo. También podría suceder que el usuario ingrese más de 24 carácteres
(el último es el nulo) lo que ocasionaría una "Violación de segmento" al tratar de asignar
valores por fuera del arreglo, así que el programador debería estar atento al uso de cin >> con
arreglos.

5.4. UTILIZACIÓN DE ARREGLOS.


Operaciones con arreglos unidimensionales
Suma y Resta
Los arreglos deben tener el mismo tamaño y la suma se realiza elemento a elemento. Por
ejemplo C =
A + B. Donde A, B y C son arreglos de enteros de tamaño 3.

/*Extracto de código fuente*/


int A[3],B[3],C[3];
for (int j=0;j<3;j++)
{
A[j] = j*3; // Asignación de valores para arreglo A
B[j] = j-2; // Asignación de valores para arreglo B
C[j]=A[j]+B[j]; // Asignación de valores para arreglo C
}

Operaciones con arreglos multidimensionales.


En matemáticas, una matriz es una tabla de números consistente en cantidades abstractas
que pueden sumarse y multiplicarse. Las matrices se utilizan para describir sistemas de
ecuaciones lineales, realizar un seguimiento de los coeficientes de una aplicación lineal y
registrar los datos que dependen de varios parámetros. Pueden sumarse, multiplicarse y
descomponerse de varias formas, lo que también las hace un concepto clave en el campo del
algebra lineal. Las matrices son utilizadas ampliamente en la computación, por su facilidad
para manipular información. En este contexto, son la mejor forma para representar grafos, y
son muy utilizadas en el cálculo numérico.

Propiedades
* Asociativa
Dadas las matrices m×n A, B y C
A + (B + C) = (A + B) + C
* Conmutativa
Dadas las matrices m×n A y B
A+B=B+A
* Existencia de matriz cero o matriz nula
A+0=0+A=A
* Existencia de matriz opuesta con -A = [-aij]
A + (-A) = 0
Suma y resta

Los arreglos deben tener el mismo orden y la suma se realiza elemento a elemento. Por
ejemplo sean
A,B y C arreglos de numeros punto flotante de orden 2x3. Entonces la operacion C = A+B
seria:

/*Extracto de código fuente*/


float A[3][3],B[3][3],C[3][3];
for (int i=0;i<2;++)
{
for (int j=0;j<3;j++)
{
A[i][j] = (2*i+1)/3; // Asignación de valores para el arreglo A
B[i][j] = 2*j; // Asignación de valores para el arreglo B
C[i][j]=A[i][j]+B[i][j]; // Asignación de valores para el arreglo C
}
}

Producto por un escalar


Dada una matriz A y un escalar c, su producto cA se calcula multiplicando el escalar por cada
elemento
de A (i.e. (cA)[i, j] = cA[i, j] ).
Ejemplo

Propiedades
Sean A y B matrices y c y d escalares.
* Clausura: Si A es matriz y c es escalar, entonces cA es matriz.
* Asociatividad: (cd)A = c(dA)
* Elemento Neutro: 1・A = A
* Distributividad:
o De escalar: c(A+B) = cA+cB
o De matriz: (c+d)A = cA+dA

Ejemplo de producto de un escalar por una matriz


Realizar la operación M=2*S donde M y S son arreglos de dimensión dos de orden 2x2.

/*Extracto de codigo fuente*/


float M[2][2], S[2][2];
for (int i=0;i<2;++)
{
for (int j=0;j<2;j++)
{
S[i][j] = i+j; // Asignación de valores para el arreglo S
M[i][j]=2*S[i][j]; // Asignación de valores para el arreglo M
}
}

Producto de matrices.

El producto de dos matrices se puede definir solo si el numero de columnas de la matriz


izquierda es el mismo que el numero de filas de la matriz derecha. Si A es una matriz m×n y B
es una matriz n×p, entonces su producto matricial AB es la matriz m×p (m filas, p columnas)
dada por:

(AB)[i,j] = A[i,1] B[1,j] + A[i,2] B[2,j] + ... + A[i,n] B[n,j] para cada par i y j.

FIGURA 5.- Producto de matrices.

Por ejemplo:

CONCLUSIONES.

Bueno en esta unidad 5. Arreglos; estudiamos que Un es una colección de variables


relacionadas a las que se hace referencia por medio de un nombre común.

También vimos que existen arreglos unidimensionales, de dos dimensiones y


multidimensionales, así como la forma en que se declara cada uno de ellos.

Los arreglos multidimensionales se observan claramente en forma de matrices, de las cuales


podemos hacer operaciones fundamentales como: suma, resta y multiplicación.
FUENTES DE INFORMACION.

https://aldeafraypedrodeagreda.files.wordpress.com/2009/12/11-arreglos-
multidimensionales.pdf consultado en línea 15 de mayo de 2013

https://www.slideshare.net/javi2401/arreglos-en-c-presentation consultado en línea 15 de


mayo de 2013

https://codigomaldito.blogspot.mx/2005/11/arreglo-de-caracteres.html consultado en línea 20


de mayo de 2013.

Leer más: https://raquelfabiancruz-com.webnode.mx/news/trabajo-de-investigacion-arreglos/


Introducción a vectores
Google ClassroomFacebookTwitter
Correo electrónico

Este curso trata de mirar el mundo que nos rodea e inventar maneras
inteligentes para simular ese mundo con código. Empezaremos por mirar
física básica: cómo una manzana cae de un árbol, cómo un péndulo
oscila en el aire, cómo la tierra gira alrededor del sol, etc. Todo lo que
discutiremos aquí requiere el uso del bloque de construcción más básico
para la programación de movimiento: el vector. Así que aquí es donde
comenzamos nuestra historia.

Ahora, la palabra vector puede significar muchas cosas diferentes. Vector


es el nombre de una banda de rock new wave formada en Sacramento,
California a principios de los 80s. Es el nombre de un cereal de desayuno
fabricado por Kellogg’s Canadá. En el campo de la epidemiología, un
vector se utiliza para describir a un organismo que transmite la infección
de un huésped a otro. En el lenguaje de programación C++, un vector
(std::vector) es una implementación de una estructura de datos de
arreglos que puede cambiar dinámicamente su tamaño. Aunque todas
estas definiciones son interesantes, no son lo que estamos buscando. Lo
que queremos es llamado un vector euclidiano (llamado así por el
matemático griego Euclides y también conocido como un vector
geométrico). Cuando veas el término “vector” en este curso, puedes
suponer que se refiere a un vector euclidiano, definido como una entidad
que tiene tanto magnitud como dirección.

Un vector típicamente se dibuja como una flecha; la dirección está


indicada por hacia dónde apunta la flecha y la magnitud por la longitud
de la propia flecha.
Un diagrama de un vector con magnitud y dirección
Figura 1,1: un vector (dibujado como una flecha) tiene magnitud (longitud de la flecha) y dirección
(hacia dónde está apuntando).

En la ilustración anterior, el vector está dibujado como una flecha del


punto A al punto B y sirve como una instrucción de cómo viajar desde A
hasta B.

¿Por qué utilizar vectores?


Antes de sumergirnos en más detalles acerca de los vectores, echemos un
vistazo a un programa básico que demuestra por qué deberíamos
preocuparnos acerca de los vectores en primer lugar. Si pasaste por el
curso introductorio de JS aquí en Khan Academy, probablemente, en un
momento u otro, aprendiste a escribir un programa sencillo de una pelota
que rebota.

En el ejemplo anterior, tenemos un mundo muy sencillo: un lienzo en


blanco con una figura circular (una “pelota”) que se mueve. Esta pelota
tiene algunas propiedades, que están representadas en el código como
variables.

Posición Velocidad
xyy xSpeed y ySpeed
En un programa más avanzado, podríamos imaginar tener muchas más
variables:

Posición del
Aceleración objetivo Viento Fricción
xacceleration y xtarget y xwind y xfriction y
yacceleration ytarget ywind yfriction
Se está volviendo más claro que para cada concepto en este mundo
(viento, posición, aceleración, etc.), necesitaremos dos variables. Y esto
es solo un mundo bidimensional. En un mundo 3D
necesitaremos x, y, z, xSpeed, ySpeed, zSpeed, y así sucesivamente.

¿No estaría bien si pudiéramos simplificar nuestro código y utilizar


menos variables?

En lugar de:
var x = 5;

var y = 10;

var xSpeed;

var ySpeed;

Simplemente podríamos tener dos variables, donde cada variable sea un


objeto como un vector con dos dimensiones de información:

var position;

var speed;

Tomar este primer paso en el uso de vectores no nos permitirá hacer nada
nuevo. El solo usar objetos como vectores para tus variables no hará que
tu programa mágicamente simule física. Sin embargo, simplificarán el
código y proporcionarán un conjunto de funciones para operaciones
matemáticas comunes que ocurren una y otra vez mientras programamos
movimiento.

Como una introducción a los vectores, vamos a vivir en dos dimensiones.


Todos estos ejemplos pueden extenderse fácilmente a tres dimensiones
(y el objeto que vamos a utilizar, PVector, permite tres dimensiones). Sin
embargo, es más fácil comenzar con solo dos.

Programación con PVector


Una manera de pensar a un vector es la diferencia entre dos puntos.
Considera cómo le harías para dar instrucciones para caminar de un
punto a otro.

Aquí hay algunos vectores y sus posibles traducciones:


Diagramas de vectores
Figura 1,2

| (-15, 3) | Camina quince pasos hacia el oeste; gira y camina tres pasos
hacia el norte. | | (3, 4) | Camina tres pasos hacia el este; gira y camina
cuatro pasos hacia el norte. | | (2, -1) | Camina dos pasos hacia el este;
gira y camina un paso hacia el sur. |

Probablemente hayas hecho esto antes cuando programaste movimiento.


Para cada cuadro de la animación (es decir, un solo ciclo a través del
bucle draw() de ProcessingJS), le diste la instrucción a cada objeto en la
pantalla de moverse un número determinado de pixeles horizontalmente
y un cierto número de pixeles verticalmente.

Diagrama de la utilización de un vector para predecir una nueva


ubicación
Figura 1,3

Para cada cuadro:


nueva posición = velocidad aplicada a la posición actual

Si la velocidad es un vector (la diferencia entre dos puntos), ¿qué es la


posición? ¿También es un vector? Técnicamente, uno podría argumentar
que la posición no es un vector, puesto que no está describiendo cómo
moverse de un punto a otro; simplemente está describiendo un único
punto en el espacio.

Sin embargo, otra manera de describir una posición es el camino tomado


desde el origen para alcanzar esa posición. Eso significa que una
posición puede ser el vector que representa la diferencia entre la posición
y el origen.
Diagrama de la ubicación como un vector
Figura 1,4

Examinemos los datos subyacentes para la posición y la velocidad. En el


ejemplo de la pelota que rebota, teníamos los siguientes:

Posición Velocidad
xyy xSpeed y ySpeed
Observa cómo estamos almacenando los mismos datos para ambos: dos
números de punto flotante, una x y una y. Si fuéramos a escribir una clase
de vector nosotros mismos, empezaríamos con algo muy básico:

var Vector = function(x, y) {

this.x = x;

this.y = y;

};

En esencia, un PVector es solo una manera conveniente de almacenar dos


valores (o tres, como veremos en los ejemplos de 3D).

Así que esto …

var x = 100;

var y = 100;

var xSpeed = 1;

var ySpeed = 3{,}3;

se convierte en …

var position = new PVector(100,100);

var velocity = new PVector(1,3{,}3);

Ya que tenemos dos objetos vectoriales (posición y velocidad), estamos


listos para implementar el algoritmo para el movimiento: posición =
posición + velocidad. En el ejemplo 1,1, sin vectores, teníamos:

x = x + xSpeed;

y = y + ySpeed;

En un mundo ideal, seríamos capaces de escribir lo anterior como:

posición = posición + velocidad;

Sin embargo, en JavaScript, el operador de suma + está reservado


solamente para los valores primitivos (números, cadenas). En algunos
lenguajes de programación, los operadores pueden ser "sobrecargados",
pero no en JavaScript. Afortunadamente para nosotros, el
objeto PVector incluye métodos para operaciones matemáticas comunes,
como add() (suma).

Suma vectorial
Antes de continuar con el objeto PVector y su método add(), examinemos
la suma vectorial utilizando la notación encontrada en los libros de texto
de matemáticas y física.

Los vectores normalmente se escriben en negritas o con una flecha en la


parte superior. Para los propósitos de estas lecciones, para distinguir
un vector de un escalar (escalar se refiere a un valor único, como un
número entero o un número de punto flotante), utilizaremos la notación
de flecha:

 Vector: \vec{u}uu, with, vector, on top

 Scalar: xxx

Digamos que tengo los siguientes dos vectores:


Diagrama de 2 vectores
Figura 1,5

Cada vector tiene dos componentes, una x y una y. Para sumar dos
vectores, simplemente sumamos las xs y las ys.
Figura 1,6

En otras palabras:
\vec{w} = \vec{u} + \vec{v}w=u+vw, with, vector, on top,
equals, u, with, vector, on top, plus, v, with, vector, on top

se puede escribir como:


\text{w}_x = \text{u}_x + \text{v}_x\\ \text{w}_y =
\text{u}_y + \text{v}_ywx=ux+vxwy=uy+vy
Luego, reemplazando u y v con sus valores de la Figura 1,6, obtenemos:
\text{w}_x = 5 + 3\\ \text{w}_y = 2 + 4wx=5+3wy=2+4
lo que significa que:
\text{w}_x = 8\\ \text{w}_y = 6wx=8wy=6
Por último, escribimos eso como un vector:
\vec{w} = (8, 6)w=(8,6)w, with, vector, on top, equals, left
parenthesis, 8, comma, 6, right parenthesis

Ahora que entendemos cómo sumar dos vectores, podemos mirar cómo
se implementa la suma en el propio objeto PVector. Vamos a escribir un
método llamado add() que toma otro objeto PVector como su argumento y
simplemente suma las componentes x y y.

var Vector = function(x, y) {

this.x = x;

this.y = y;

};

Vector.prototype.add = function(v) {

this.y = this.y + v.y;

this.x = this.x + v.x;

};

Ya que vimos cómo se escribe add() dentro de PVector, podemos volver a


nuestro ejemplo de la pelota que rebota con su algoritmo de posición =
posición + velocidad e implementar la suma vectorial:

position.add(velocity);

¡Y ahora estamos listos para reescribir el ejemplo de la pelota que rebota


al usar el objeto PVector! Echa un vistazo a través del código y observa
las diferencias de antes.
Debemos observar un aspecto importante de la transición anterior a la
programación con vectores. Aunque estamos utilizando
objetos PVector para describir dos valores (x y y de la posición y x y y de
la velocidad), a menudo aún necesitamos referirnos a las componentes x
y y de cada PVector de manera individual. Cuando vayamos a dibujar un
objeto en ProcessingJS, no hay modo de que podamos codificarlo así:

ellipse(position, 16, 16);

La función ellipse() no permite un PVector como argumento. Una elipse


solo se puede dibujar con dos valores escalares, una coordenada x y una
coordenada y. Así que debemos adentrarnos en el objeto PVector y sacar
las componentes x y y mediante notación de puntos orientada a objetos
en su lugar:

ellipse(position.x, position.y, 16, 16);

El mismo problema se presenta cuando se prueba si el círculo ha


alcanzado el borde de la ventana, y necesitamos acceder a los
componentes individuales de ambos vectores: position y velocity.

if ((position.x > width) || (position.x < 0)) {

velocity.x = velocity.x * -1;

Ahora, puedes sentirte algo desilusionado. Después de todo, este cambio


a usar vectores inicialmente puede parecer que hizo el código más
complicado que el de la versión original. Mientras que esto es una crítica
perfectamente razonable y válida, es importante entender que todavía no
nos hemos dado cuenta del potencial completo de programar con
vectores. Ver una pelota rebotar e implementar la suma vectorial solo es
el primer paso.
A medida que avancemos en un mundo más complicado de múltiples
objetos y fuerzas (las cuales introduciremos pronto), los beneficios
de PVector se harán más evidentes. ¡Sigue adelante!

Este curso de "Simulaciones Naturales" es un derivado de "La Naturaleza


del Código" por Daniel Shiffman, usado bajo una Licencia Creative
Commons Reconocimiento-NoComercial 3,0 Unported.
Ordenar por:
Más votados

Preguntas
Sugerencias y agradecimientos
¿Quieres unirte a la conversación?
Iniciar sesión

Juan Jesus Garcia Silva

hace 3 años
Publicado hace hace 3 años. Enlace directo a la publicación “Me gusto mucho :D....” de Juan
Jesus Garcia Silva

Me gusto mucho :D.

Responder
Responder a la publicación “Me gusto mucho :D.” de Juan Jesus Garcia Silva
El botón abre una ventana para registro

Comentar
Comentar en la publicación “Me gusto mucho :D.” de Juan Jesus Garcia Silva
El botón abre una ventana para registro
(3 votos)
Votar a favor
El botón abre una ventana para registro
Dar voto negativo
El botón abre una ventana para registro
Marca
El botón abre una ventana para registro
more

Ezequiel Studios🏆

hace 2 años
Publicado hace hace 2 años. Enlace directo a la publicación “si ami también XD jijijij...” de
Ezequiel Studios🏆

si ami también XD jijijij


Comentar
Comentar en la publicación “si ami también XD jijijij” de Ezequiel Studios🏆
El botón abre una ventana para registro

(2 votos)
Votar a favor
El botón abre una ventana para registro
Dar voto negativo
El botón abre una ventana para registro
Marca
El botón abre una ventana para registro

more
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.
Desafío: caminante vectorial

Potrebbero piacerti anche