Fundamentos de Computacion Alex Luque Letechi Ing.
INTRODUCCION Los tipos de datos que conocemos son  atomicos , unicos Ciertos tipos de datos, resultan de agrupar otros tipos de datos atomicos:  ESTRUCTURAS DE DATOS Uno de estos:  MATRICES Una matriz es una colección o grupo de datos individuales, donde: Cada dato tiene una posicion(primero, segundo, tercero) Todos los datos son del mismo tipo Si una matriz es de 1xn o de nx1 se conoce como  Vector Imagine un conjunto de cajas, una tras otra,  Cada caja representa un dato de la matriz, o  elemento Las matrices son la base de MatLab, y para usarlo, un arreglo debe tener: Nombre:  asi como las variables, un arreglo debe tener un nombre que lo identifique
TRABAJO CON VECTORES Cada elemento esta identificado por un valor numerico llamado  indice . En MatLab, el primer elemento del arreglo tiene el indice 0 Se siguen las mismas reglas para trabajar variables. Un vector tienen un nombre. Ejemplo:  A Se lo puede inicializar .Ejemplo  A = [1, 4, 5, 6, 11, 3, 2, 9, 8, 1] En ese caso, se esta definiendo un vector(1x10) cuyos 10 elementos todos seran enteros. 1 2 3 4 5 6 7 8 9 10 A
SELECCIÓN DE UN MIEMBRO Especificar un elemento de un arreglo Se indica el nombre del arreglo y el indice correspondiente Nombre_arreglo(indice) Si se desea asignar el valor de 2 al primer elemento del arreglo: A(1) = 2; 2 9 1 A [2]=9; A [5] = 1; En MatLab podemos crear un arreglo lleno de datos iniciales usando estas funciones A = ones(1, 4);  Crea un vector de 1 x 4 lleno de unos A = ones(5);  Crea una matriz de 5x5 llenos de unos A = zeros(1, 4);  Crea un vector de 1 x 4 lleno de ceros A = zeros(5);  Crea una matriz de 5x5 llenos de ceros A = eye(6); Crea una matriz de identidad de 6x6 1 2 3 4 5 6 7 8 9 10 A
LONGITUD Y DIMENSION DE UNA MATRIZ Dado una matriz de 1x 4 A A = [1, 4, -2, 5] La longitud es 4, se puede calcular con length L = length(A) Devuelve un solo valor, el mayor entre filas y columnas La dimension es 1x4 (2 valores), se puede calcular con size S = size(A) Devuelve una matriz de 1x2 S(0) es el numero de filas S(1) es el numero de columnas
CALCULE Dada la matriz A = [2, 4, 5, 6; 1, 3, 12, 6; 4, 5, 1, 3] 2  4  5  6 1  3  12  6 4  5  1  3 A =  L = length(A) L valdrá 4 S = length(A) S(0)  valdrá 3 S(1) valdrá 4
LLENAR UNA MATRIZ Para pedir que se ingrese una matriz, se sigue usando input No hay diferencia con lo visto anteriormente El usuario antes ingresaba un solo valor Ahora sabemos que podría ingresar varios Ejemplo: A = input(‘Ingrese varios valores:’); El usuario ingresaría por ejemplo [3, 4, 5;  1, 2, 3;  5, 6, 7;  3, 2, 4]
LLENAR UNA MATRIZ DE TAMAÑO DADO Para esto hay que pedirle al usuario de que dimension sera la matriz Crear una matriz de ceros de ese tamaño Pedir que se ingresen uno por uno los elementos %Para un vector de 1xn n = input(‘Cantidad de elementos:’); A = zeros(1,n); for i = 1:n A(i) = input(‘Elemento:’); end %Para una matriz de nxn nf = input(‘Cantidad de filas:’); nc = input(‘Cantidad de columnas:’); A = zeros(nf, nc); for i = 1:nf for j = 1:nc A(i,j) = input(‘Elemento:’); end end
IMPRIMIR UNA MATRIZ Si es un vector de 1xn Se muestra cada elemento por pantalla Si es una matriz Primero se muestra cada fila(o columna) Cambia de fila y se muestra for i = 1: n fprintf(‘Notas no. %d: %d’, i,A(i)); end for i = 1: n for j = 1:n fprintf(‘Notas no. %d, %d:’%d, i,j,A(i, j)); end end
EJERCICIO Escribir un programa que permita el ingreso de las notas de un curso de 20 alumnos. Una vez ingresados, debe mostrarse el promedio de las mismas Notas = zeros(1,10); for i = 1:10 Notas(i)= input(‘Ingrese una nota:’); end total = 0; for i = 1:10 total = total + Notas(i); end  promedio = total / 10; fprintf(‘El promedio es %d\n’, promedio); ENTRADA CALCULO SALIDA O  total = sum(Notas); Promedio = total/10;
DESVIACION ESTANDAR Para calcular la desviacion estandar de un conjunto de elementos x1, x2, …xn, ud. necesita: Calcular el promedio Calcular el cuadrado de la resta de cada elemento con el promedio Sumar estos valores El total de esta suma dividirlo para n Calcular la raiz cuadrada del ultimo resultado, y esa es la desviacion estandar
REVERSAR UN ARREGLO Escribir un programa que permita invertir el orden de los elementos de un arreglo. Ejemplo Intercambiar el elemento del extremo izq(0),  con el elemento del extremo derecho(N-1) Luego el ext. Izq( I ) avanza, mientras que extr. Der( J ) disminuye Esto se repite hasta que ambos llegan a la mitad 1 2 3 4 5 6 7 8 9 10 A 2 9 5 1 8 3 15 4 20 11 1 2 3 4 5 6 7 8 9 10 A 2 9 5 1 8 3 15 4 20 11 1 2 3 4 5 6 7 8 9 10 A 11 9 5 1 8 3 15 4 20 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 1 8 3 15 4 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 4 8 3 15 1 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 4 15 3 8 1 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 3 4 15 5 8 1 9 2
SOLUCION Recuerde siempre: No es lo mismo  el elemento i , que  i El  elemento i  de un arreglo A:  A(i) i  es un indice que puede variar n = input(‘Ingrese cuantos elementos:’); A = zeros(1, n); for i = 1: n A(i) = input(‘Elemento:’); end j = n; for i = 1:double(int32(n/2)) tmp = A(i); A(ì) = A(j); A(j) = tmp; j = j –1; end fprintf(‘El arreglo reversado es:\n’); for i = 1: n fprintf(‘%d\n’, A(i)); end Intercambio de dos variables a y b: tmp = a; a = b; b = tmp; Las variables que intervienen son: A[i] y A[j], en lugar de a y b. El intercambio debe repetirse MAX/2 veces. Intercambio de dos variables a y b: tmp = a; a = b; b = tmp; ENTRADA CALCULO SALIDA J COMIENZA EN MAX -1, EL ULTIMO INDICE J RETROCEDE AL FINAL DE CADA CICLO
BUSQUEDA EN UN ARREGLO Proceso para encontrar un elemento particular en un arreglo La estrategias mas comun y simple es  Revisar uno por uno los elementos del arreglo,  En cada revision, se pregunta si  El elemento revisado es el dato buscado Busqueda lineal El resultado de la busqueda en un arreglo siempre es: El indice del elemento donde se encuentra el valor buscado
BUSQUEDA EN UN ARREGLO Band = 0; n = input(‘Ingrese cuantos elementos:’); A = zeros(1, n); for i = 1: n A(i) = input(‘Elemento:’); end valor = input(‘Que valor desea buscar’); for i = 1: n if(valor == A[i])  Band = 1; break; end end if(Band == 0){ fprintf(‘No existe ese valor\n’); else fprintf(“El valor fue encontrado  en la posicion %d\n”, i); end Dato a buscar: 58 O R = find(A==valor); if(isempty(R)) fprintf(“No existe\n); else fprintf(‘Se encontro  en %d’, R(1)); end 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
BUSQUEDA DEL MAYOR Y/O EL MENOR EN UN ARREGLO Es comun querer encontrar el menor elemento de un arreglo Como hacemos? Basicamente, es una busqueda El valor que buscamos  Es resultado de una comparacion constante Que retorna la busqueda? El valor menor de todo el arreglo Y nunca esta de mas, el indice de dicho elemento El menor es el valor 100 y su indice es 6 en el arreglo 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
UNA TECNICA Que tal, si escogemos un elemento arbitrariamente Y lo elegimos temporalmente como el menor Digamos, el elemento A(1), es el que tiene el menor valor en todo el arreglo Menor = A(1); if(A(i) < menor) menor = A(i); end Esto para saber el menor valor del arreglo y el indice de este elemento? ind_menor = 1; menor = A(ind_menor); for i = 2: n if(A(i) < menor) menor = A(i); ind_menor = i; end end Ahora, tenemos que probarlo, como? Comparando este valor “menor” elegido con el resto, uno por uno Si durante la revision, encontramos un elemento menor al “menor” Ese es el nuevo “menor” Desde el primero hasta el ultimo for i = 1:n %... end O menor  = min(A); ind_menor  = find(A==menor); 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
ORDENAR LOS DATOS DE UNA ARREGLO Arreglar los elementos, para que queden ordenados Hay varios metodos, mas o menos eficientes(rapidos) El metodo mas conocido es el metodo de la seleccion.  Comience con el ind en 0 Busque el elemento menor entre ind  y MAX-1 (menor e ind_menor) Intercambie A[ind] con A[ind_menor] Ahora ind avanza en uno, y vuelva al paso no. 2, mientras que ind sea menor que MAX-1 Siempre selecciona el mas pequeño del grupo for i = 1: n end /*Buscar el menor*/ menor = A(ind); ind_menor = ind; for j = ind:n-1{ if(A(j) < menor){ menor = A(j); ind_menor = j; } } /*Intercambiar */ tmp = A(ind); A(ind) = A(ind_menor); A(ind_menor) = tmp; 9 0 3 1 10 2 -7 3 2 4 A 9 menor 0 ind 0 ind_menor -7 menor 0 ind 3 ind_menor -7 0 3 1 10 2 9 3 2 4 A -7 0 3 1 10 2 9 3 2 4 A 3 menor 1 ind 1 ind_menor 2 menor 1 ind 4 ind_menor -7 0 2 1 10 2 9 3 3 4 A -7 0 2 1 10 2 9 3 3 4 A 10 menor 2 ind 2 ind_menor 3 menor 2 ind 4 ind_menor -7 0 2 1 3 2 9 3 10 4 A -7 0 2 1 3 2 9 3 10 4 A 9 menor 3 ind 3 ind_menor 9 menor 3 ind 3 ind_menor -7 0 2 1 3 2 9 3 10 4 A 10 menor 4 ind 4 ind_menor -7 0 2 1 3 2 9 3 10 4 A
MATRICES La matriz es otro tipo de arreglo, de dimensiones nxm Ejemplo: un tablero de tres en raya Es un arreglo de 3 elementos, una matriz de 3x3,  Cada elemento(fila) se compone de otro arreglo de tres elementos tambien A A[1] A[2] A[3] A[1][1] A[2][1] A[3][1] A[1]2] A[2][2] A[3][2] A[1][3] A[2][3] A[3][3]
EJERCICIO COMPLETO En una facultad existen 6 paralelos de Fundamentos de Computacion,  En cada paralelo hay 15 alumnos.  Luego de rendir examen, los profesores desean saber: La mejor nota de cada paralelo Que numero de paralelo  tiene el mejor promedio El total de notas que cayeron en el rango de 1-29, 30-49, 50-79, 80-100 Una matriz de 6 filas(c/paralelo). Cada fila tendra 15 elementos: c/paralelo tiene 15 notas Estas son 6 respuestas,una por cada paralelo Una sola respuesta: 1. Calcular promedios de c/paralelo(seran 6 promedios) Buscar  el mayor  de los 6 promedios resultantes Son 4 respuestas, 4 totales Para esto hay que buscar en todos los paralelos e ir acumulando, de acuerdo a la condicion
ENTRADAS Para hacer todo este calculo solo se necesitan  las notas 15 por c/paralelo, son 6 paralelos Las notas son enteras Usemos una matriz de 6 por 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6
SALIDAS La mejor nota de c/paralelo Estas son 6 respuestas, una por cada paralelo Podran ir en un vector de 1x6:  Mejores El paralelo que tiene  mejor  promedio Es una sola respuesta Sin embargo, para calcularla, es ideal: Calcular el promedio de los 6 paralelos ( Promedios )y De esos, buscar el menor y el mayor OJO:  Se busca EL PARALELO con mejor promedio:  MejorPar El  total de notas , en ciertos rangos(4) Pueden ser cuatro variables: total1, total2, total3, total4;  o Un arreglo de 4 elementos enteros Totales ; 1 2 3 4 5 Mejores 6 7 1 2 3 4 5 Promedios 6 7 1 2 3 4 Totales
LOS PASOS A SEGUIR Un problema grande se puede dividir en partes: Primero, hay que pedir el ingreso de datos por teclado Recuerde, son 15 datos que hay que pedir 6 veces! Ya con los datos, procedemos a Calcular mejores notas por c/paralelo Calcular Promedios de c/paralelo Calcular total de notas de c/paralelo Dividir total/15 y ese el el promedio de un paralelo Buscar paralelo con menor promedio Calcular total de notas por rango dado Imprimir los resultados
INGRESO Y VALIDACION Pedir las notas por cada paralelo  Recuerde, pedir 15 notas, 6 veces Para validar que una nota ingresada este en el rango: while(1) n = input(‘Ingrese valor:’); if(n>= 0 && n<= 100)  break; end end Si las notas estan en un arreglo Notas(6,15), se reemplaza  n  por  Notas(i,j) Notas = zeros(6,15); for i = 1:6 for j = 1:15   Notas(i,j) = input(‘Nota:’); end end Ese ingreso esta OK, pero no estamos VALIDANDO Con cada ingreso hay que validar que la nota este en el rango apropiado for i = 1:6 for j = 1:15 while(1){ Notas(i,j) = input(‘Nota:’); if(Notas(i,j)>= 0 &&    Notas(i,j)<= 100)  break; end end end end
MEJORES NOTAS POR PARALELO Por cada paralelo, buscar la mejor NOTA Cada fila del arreglo Notas se refiere a las 15 notas de un paralelo Notas(1,1) ….. Notas(1,15) son las 15 notas del  primer paralelo Notas(2,1) ….. Notas(2,15 )son las 15 notas del segundo paralelo Notas(3,1) ….. Notas(3,15) son las 15 notas del tercer paralelo … . Notas(5,1) ….. Notas(5,15) son las 15 notas del  sexto paralelo Cada uno de estos puede ser tratado como un arreglo, y en cada arreglo BUSCAR LA MEJOR NOTA(ALGORITMO CONOCIDO) Al encontrar la mejor nota de un paralelo,  D ebemos guardarla en algun  lugar! Puede ser en una variable, o …. Como van a ser 6 notas, podemos guardarlas en UN ARREGLO:  Mejores
ALGORITMO PARA MEJOR NOTA Mejores(1) = Notas(1,1); for j = 1:15 if(Notas(0,j)>Mejores(0)) Mejores(0) = Notas(0,j); end end Para buscar la mejor nota del primer paralelo: El arreglo donde buscaremos es Notas(1,1) hasta Notas(1,14) La variable donde ira la mejor nota es Mejores(1) Busqueda del mejor Esta busqeda hay que hacerla 6 veces en Notas(1,j), Notas(2,j), Notas(3,j) …. Notas(6,j) El primer mejor es Mejores(1), el segundo Mejores(1)… Mejores(6) HAY QUE REPETIR TODO 6 VECES for i = 1:6 Mejores(i) = Notas(i,1); for j = 1:15 if(Notas(i,j)>Mejores(i)) Mejores(i) = Notas(i,j); end end end La busqueda se hace para todo i que va desde 1 hasta 6, cada paralelo El primer elemento del arreglo es el mejor…. Por ahora O Mejores = max(Notas’);
PARALELO CON MEJOR  PROMEDIO Podemos sacar el promedio de c/paralelo  Estos promedios pueden ir en un arreglo: Promedios Luego, solo buscamos el ELEMENTO con mejor promedio EL PROMEDIO DE NOTAS PARA 1ER PARALELO: total = 0; for i = 1:15 total = total + Notas(1,j); end Promedios(1)= total / 15; ESTO REPETIR PARA 6 PARALELOS for i = 1:6 total = 0; for j = 1:15 total = total + Notas(i,j); end Promedios(i)= total / 15; end O Promedios = sum(Notas’) /15;
PARALELO CON MEJOR PROMEDIO Ahora que en Promedios estan los promedios de c/Paralelo: Buscar el paralelo con mejor promedio Esta busqueda se hace en arreglo Promedios MejorPar = 1; MejorProm = Promedios(1); for i = 1:6 if(Promedios(i) > MejorProm) MejorProm = Promedios(i); MejorPar = i; end end fprintf(‘El mejor paralelo es %d’, MejorPar; MejorProm = max(Promedios); MejorPar = find(Promedios==MejorProm);
TOTALES POR RANGOS Son 4 rangos posibles, y me piden CUANTOS USO CONTADORES, 4 EN ESTE CASO Hay que revisar c/nota de c/paralelo Cuando encontramos una nota que caiga bajo un rango dado: Aumentamos el respectivo contador Para hacer la busqueda en el primer paralelo: for j = 1:15 if(Notas(1,j) >=1 && Notas (1,j)  <=29 ) total1 = total1+1; end if(Notas (1,j)  >=30 && Notas (1,j)  <= 49) total2 = total2+1; end if(Notas (1,j)  >=50 && Notas (1,j)  <=79 ) total3 = total3+1; end if(Notas (1,j)  >= 80 && Notas (1,j)  <= 100) total4 = total4+1; end end
TOTALES POR RANGOS AHORA REPETIR ESTO 6 VECES PARA C/PARALELO for i = 1:6 for j = 1:15 if(Notas(i,j) >=1 && Notas( i ,j) <=29 ) total1 = total1+1; end if(Notas( i ,j) >=30 && Notas(i,j) <= 49) total2 = total2+1; end if(Notas(i,j) >=50 && Notas(i,j) <=79 ) total3 = total3+1; end if(Notas(i,j) >= 80 && Notas(i,j) <= 100) total4 = total4+1; end end end
SALIDA DE DATOS cout << &quot;Las Mejores notas de c/Paralelo:&quot; for(i = 0; i < 6; i++){ cout << &quot;Paralelo No:&quot; << i << Mejores[i] << &quot;\n&quot;; } cout << &quot;El paralelo con mejor promedio:&quot; << MejorPar << &quot; con &quot; << MejorPromedio << &quot;\n&quot;; cout << “Notas entre 1 y 29” << total1 << “\n”; cout << “Notas entre 30 y 49” << total2 << “\n”; cout << “Notas entre 50 y 79” << total3 << “\n”; cout << “Notas entre 80 y 10” << total4 << “\n”;
SOLUCION COMPLETA La solucion completa se logra al unir cada una de las pequeñas soluciones Dividir un problema en pequeños problemas: Modularidad Cada pequeño problema: modulo Se resuelve Juntos: solucion completa

jaisan

  • 1.
    Fundamentos de ComputacionAlex Luque Letechi Ing.
  • 2.
    INTRODUCCION Los tiposde datos que conocemos son atomicos , unicos Ciertos tipos de datos, resultan de agrupar otros tipos de datos atomicos: ESTRUCTURAS DE DATOS Uno de estos: MATRICES Una matriz es una colección o grupo de datos individuales, donde: Cada dato tiene una posicion(primero, segundo, tercero) Todos los datos son del mismo tipo Si una matriz es de 1xn o de nx1 se conoce como Vector Imagine un conjunto de cajas, una tras otra, Cada caja representa un dato de la matriz, o elemento Las matrices son la base de MatLab, y para usarlo, un arreglo debe tener: Nombre: asi como las variables, un arreglo debe tener un nombre que lo identifique
  • 3.
    TRABAJO CON VECTORESCada elemento esta identificado por un valor numerico llamado indice . En MatLab, el primer elemento del arreglo tiene el indice 0 Se siguen las mismas reglas para trabajar variables. Un vector tienen un nombre. Ejemplo: A Se lo puede inicializar .Ejemplo A = [1, 4, 5, 6, 11, 3, 2, 9, 8, 1] En ese caso, se esta definiendo un vector(1x10) cuyos 10 elementos todos seran enteros. 1 2 3 4 5 6 7 8 9 10 A
  • 4.
    SELECCIÓN DE UNMIEMBRO Especificar un elemento de un arreglo Se indica el nombre del arreglo y el indice correspondiente Nombre_arreglo(indice) Si se desea asignar el valor de 2 al primer elemento del arreglo: A(1) = 2; 2 9 1 A [2]=9; A [5] = 1; En MatLab podemos crear un arreglo lleno de datos iniciales usando estas funciones A = ones(1, 4); Crea un vector de 1 x 4 lleno de unos A = ones(5); Crea una matriz de 5x5 llenos de unos A = zeros(1, 4); Crea un vector de 1 x 4 lleno de ceros A = zeros(5); Crea una matriz de 5x5 llenos de ceros A = eye(6); Crea una matriz de identidad de 6x6 1 2 3 4 5 6 7 8 9 10 A
  • 5.
    LONGITUD Y DIMENSIONDE UNA MATRIZ Dado una matriz de 1x 4 A A = [1, 4, -2, 5] La longitud es 4, se puede calcular con length L = length(A) Devuelve un solo valor, el mayor entre filas y columnas La dimension es 1x4 (2 valores), se puede calcular con size S = size(A) Devuelve una matriz de 1x2 S(0) es el numero de filas S(1) es el numero de columnas
  • 6.
    CALCULE Dada lamatriz A = [2, 4, 5, 6; 1, 3, 12, 6; 4, 5, 1, 3] 2 4 5 6 1 3 12 6 4 5 1 3 A = L = length(A) L valdrá 4 S = length(A) S(0) valdrá 3 S(1) valdrá 4
  • 7.
    LLENAR UNA MATRIZPara pedir que se ingrese una matriz, se sigue usando input No hay diferencia con lo visto anteriormente El usuario antes ingresaba un solo valor Ahora sabemos que podría ingresar varios Ejemplo: A = input(‘Ingrese varios valores:’); El usuario ingresaría por ejemplo [3, 4, 5; 1, 2, 3; 5, 6, 7; 3, 2, 4]
  • 8.
    LLENAR UNA MATRIZDE TAMAÑO DADO Para esto hay que pedirle al usuario de que dimension sera la matriz Crear una matriz de ceros de ese tamaño Pedir que se ingresen uno por uno los elementos %Para un vector de 1xn n = input(‘Cantidad de elementos:’); A = zeros(1,n); for i = 1:n A(i) = input(‘Elemento:’); end %Para una matriz de nxn nf = input(‘Cantidad de filas:’); nc = input(‘Cantidad de columnas:’); A = zeros(nf, nc); for i = 1:nf for j = 1:nc A(i,j) = input(‘Elemento:’); end end
  • 9.
    IMPRIMIR UNA MATRIZSi es un vector de 1xn Se muestra cada elemento por pantalla Si es una matriz Primero se muestra cada fila(o columna) Cambia de fila y se muestra for i = 1: n fprintf(‘Notas no. %d: %d’, i,A(i)); end for i = 1: n for j = 1:n fprintf(‘Notas no. %d, %d:’%d, i,j,A(i, j)); end end
  • 10.
    EJERCICIO Escribir unprograma que permita el ingreso de las notas de un curso de 20 alumnos. Una vez ingresados, debe mostrarse el promedio de las mismas Notas = zeros(1,10); for i = 1:10 Notas(i)= input(‘Ingrese una nota:’); end total = 0; for i = 1:10 total = total + Notas(i); end promedio = total / 10; fprintf(‘El promedio es %d\n’, promedio); ENTRADA CALCULO SALIDA O total = sum(Notas); Promedio = total/10;
  • 11.
    DESVIACION ESTANDAR Paracalcular la desviacion estandar de un conjunto de elementos x1, x2, …xn, ud. necesita: Calcular el promedio Calcular el cuadrado de la resta de cada elemento con el promedio Sumar estos valores El total de esta suma dividirlo para n Calcular la raiz cuadrada del ultimo resultado, y esa es la desviacion estandar
  • 12.
    REVERSAR UN ARREGLOEscribir un programa que permita invertir el orden de los elementos de un arreglo. Ejemplo Intercambiar el elemento del extremo izq(0), con el elemento del extremo derecho(N-1) Luego el ext. Izq( I ) avanza, mientras que extr. Der( J ) disminuye Esto se repite hasta que ambos llegan a la mitad 1 2 3 4 5 6 7 8 9 10 A 2 9 5 1 8 3 15 4 20 11 1 2 3 4 5 6 7 8 9 10 A 2 9 5 1 8 3 15 4 20 11 1 2 3 4 5 6 7 8 9 10 A 11 9 5 1 8 3 15 4 20 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 1 8 3 15 4 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 4 8 3 15 1 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 5 4 15 3 8 1 9 2 1 2 3 4 5 6 7 8 9 10 A 11 20 3 4 15 5 8 1 9 2
  • 13.
    SOLUCION Recuerde siempre:No es lo mismo el elemento i , que i El elemento i de un arreglo A: A(i) i es un indice que puede variar n = input(‘Ingrese cuantos elementos:’); A = zeros(1, n); for i = 1: n A(i) = input(‘Elemento:’); end j = n; for i = 1:double(int32(n/2)) tmp = A(i); A(ì) = A(j); A(j) = tmp; j = j –1; end fprintf(‘El arreglo reversado es:\n’); for i = 1: n fprintf(‘%d\n’, A(i)); end Intercambio de dos variables a y b: tmp = a; a = b; b = tmp; Las variables que intervienen son: A[i] y A[j], en lugar de a y b. El intercambio debe repetirse MAX/2 veces. Intercambio de dos variables a y b: tmp = a; a = b; b = tmp; ENTRADA CALCULO SALIDA J COMIENZA EN MAX -1, EL ULTIMO INDICE J RETROCEDE AL FINAL DE CADA CICLO
  • 14.
    BUSQUEDA EN UNARREGLO Proceso para encontrar un elemento particular en un arreglo La estrategias mas comun y simple es Revisar uno por uno los elementos del arreglo, En cada revision, se pregunta si El elemento revisado es el dato buscado Busqueda lineal El resultado de la busqueda en un arreglo siempre es: El indice del elemento donde se encuentra el valor buscado
  • 15.
    BUSQUEDA EN UNARREGLO Band = 0; n = input(‘Ingrese cuantos elementos:’); A = zeros(1, n); for i = 1: n A(i) = input(‘Elemento:’); end valor = input(‘Que valor desea buscar’); for i = 1: n if(valor == A[i]) Band = 1; break; end end if(Band == 0){ fprintf(‘No existe ese valor\n’); else fprintf(“El valor fue encontrado en la posicion %d\n”, i); end Dato a buscar: 58 O R = find(A==valor); if(isempty(R)) fprintf(“No existe\n); else fprintf(‘Se encontro en %d’, R(1)); end 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
  • 16.
    BUSQUEDA DEL MAYORY/O EL MENOR EN UN ARREGLO Es comun querer encontrar el menor elemento de un arreglo Como hacemos? Basicamente, es una busqueda El valor que buscamos Es resultado de una comparacion constante Que retorna la busqueda? El valor menor de todo el arreglo Y nunca esta de mas, el indice de dicho elemento El menor es el valor 100 y su indice es 6 en el arreglo 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
  • 17.
    UNA TECNICA Quetal, si escogemos un elemento arbitrariamente Y lo elegimos temporalmente como el menor Digamos, el elemento A(1), es el que tiene el menor valor en todo el arreglo Menor = A(1); if(A(i) < menor) menor = A(i); end Esto para saber el menor valor del arreglo y el indice de este elemento? ind_menor = 1; menor = A(ind_menor); for i = 2: n if(A(i) < menor) menor = A(i); ind_menor = i; end end Ahora, tenemos que probarlo, como? Comparando este valor “menor” elegido con el resto, uno por uno Si durante la revision, encontramos un elemento menor al “menor” Ese es el nuevo “menor” Desde el primero hasta el ultimo for i = 1:n %... end O menor = min(A); ind_menor = find(A==menor); 19 12 1 2 58 100 3 4 45 25 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]
  • 18.
    ORDENAR LOS DATOSDE UNA ARREGLO Arreglar los elementos, para que queden ordenados Hay varios metodos, mas o menos eficientes(rapidos) El metodo mas conocido es el metodo de la seleccion. Comience con el ind en 0 Busque el elemento menor entre ind y MAX-1 (menor e ind_menor) Intercambie A[ind] con A[ind_menor] Ahora ind avanza en uno, y vuelva al paso no. 2, mientras que ind sea menor que MAX-1 Siempre selecciona el mas pequeño del grupo for i = 1: n end /*Buscar el menor*/ menor = A(ind); ind_menor = ind; for j = ind:n-1{ if(A(j) < menor){ menor = A(j); ind_menor = j; } } /*Intercambiar */ tmp = A(ind); A(ind) = A(ind_menor); A(ind_menor) = tmp; 9 0 3 1 10 2 -7 3 2 4 A 9 menor 0 ind 0 ind_menor -7 menor 0 ind 3 ind_menor -7 0 3 1 10 2 9 3 2 4 A -7 0 3 1 10 2 9 3 2 4 A 3 menor 1 ind 1 ind_menor 2 menor 1 ind 4 ind_menor -7 0 2 1 10 2 9 3 3 4 A -7 0 2 1 10 2 9 3 3 4 A 10 menor 2 ind 2 ind_menor 3 menor 2 ind 4 ind_menor -7 0 2 1 3 2 9 3 10 4 A -7 0 2 1 3 2 9 3 10 4 A 9 menor 3 ind 3 ind_menor 9 menor 3 ind 3 ind_menor -7 0 2 1 3 2 9 3 10 4 A 10 menor 4 ind 4 ind_menor -7 0 2 1 3 2 9 3 10 4 A
  • 19.
    MATRICES La matrizes otro tipo de arreglo, de dimensiones nxm Ejemplo: un tablero de tres en raya Es un arreglo de 3 elementos, una matriz de 3x3, Cada elemento(fila) se compone de otro arreglo de tres elementos tambien A A[1] A[2] A[3] A[1][1] A[2][1] A[3][1] A[1]2] A[2][2] A[3][2] A[1][3] A[2][3] A[3][3]
  • 20.
    EJERCICIO COMPLETO Enuna facultad existen 6 paralelos de Fundamentos de Computacion, En cada paralelo hay 15 alumnos. Luego de rendir examen, los profesores desean saber: La mejor nota de cada paralelo Que numero de paralelo tiene el mejor promedio El total de notas que cayeron en el rango de 1-29, 30-49, 50-79, 80-100 Una matriz de 6 filas(c/paralelo). Cada fila tendra 15 elementos: c/paralelo tiene 15 notas Estas son 6 respuestas,una por cada paralelo Una sola respuesta: 1. Calcular promedios de c/paralelo(seran 6 promedios) Buscar el mayor de los 6 promedios resultantes Son 4 respuestas, 4 totales Para esto hay que buscar en todos los paralelos e ir acumulando, de acuerdo a la condicion
  • 21.
    ENTRADAS Para hacertodo este calculo solo se necesitan las notas 15 por c/paralelo, son 6 paralelos Las notas son enteras Usemos una matriz de 6 por 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6
  • 22.
    SALIDAS La mejornota de c/paralelo Estas son 6 respuestas, una por cada paralelo Podran ir en un vector de 1x6: Mejores El paralelo que tiene mejor promedio Es una sola respuesta Sin embargo, para calcularla, es ideal: Calcular el promedio de los 6 paralelos ( Promedios )y De esos, buscar el menor y el mayor OJO: Se busca EL PARALELO con mejor promedio: MejorPar El total de notas , en ciertos rangos(4) Pueden ser cuatro variables: total1, total2, total3, total4; o Un arreglo de 4 elementos enteros Totales ; 1 2 3 4 5 Mejores 6 7 1 2 3 4 5 Promedios 6 7 1 2 3 4 Totales
  • 23.
    LOS PASOS ASEGUIR Un problema grande se puede dividir en partes: Primero, hay que pedir el ingreso de datos por teclado Recuerde, son 15 datos que hay que pedir 6 veces! Ya con los datos, procedemos a Calcular mejores notas por c/paralelo Calcular Promedios de c/paralelo Calcular total de notas de c/paralelo Dividir total/15 y ese el el promedio de un paralelo Buscar paralelo con menor promedio Calcular total de notas por rango dado Imprimir los resultados
  • 24.
    INGRESO Y VALIDACIONPedir las notas por cada paralelo Recuerde, pedir 15 notas, 6 veces Para validar que una nota ingresada este en el rango: while(1) n = input(‘Ingrese valor:’); if(n>= 0 && n<= 100) break; end end Si las notas estan en un arreglo Notas(6,15), se reemplaza n por Notas(i,j) Notas = zeros(6,15); for i = 1:6 for j = 1:15 Notas(i,j) = input(‘Nota:’); end end Ese ingreso esta OK, pero no estamos VALIDANDO Con cada ingreso hay que validar que la nota este en el rango apropiado for i = 1:6 for j = 1:15 while(1){ Notas(i,j) = input(‘Nota:’); if(Notas(i,j)>= 0 && Notas(i,j)<= 100) break; end end end end
  • 25.
    MEJORES NOTAS PORPARALELO Por cada paralelo, buscar la mejor NOTA Cada fila del arreglo Notas se refiere a las 15 notas de un paralelo Notas(1,1) ….. Notas(1,15) son las 15 notas del primer paralelo Notas(2,1) ….. Notas(2,15 )son las 15 notas del segundo paralelo Notas(3,1) ….. Notas(3,15) son las 15 notas del tercer paralelo … . Notas(5,1) ….. Notas(5,15) son las 15 notas del sexto paralelo Cada uno de estos puede ser tratado como un arreglo, y en cada arreglo BUSCAR LA MEJOR NOTA(ALGORITMO CONOCIDO) Al encontrar la mejor nota de un paralelo, D ebemos guardarla en algun lugar! Puede ser en una variable, o …. Como van a ser 6 notas, podemos guardarlas en UN ARREGLO: Mejores
  • 26.
    ALGORITMO PARA MEJORNOTA Mejores(1) = Notas(1,1); for j = 1:15 if(Notas(0,j)>Mejores(0)) Mejores(0) = Notas(0,j); end end Para buscar la mejor nota del primer paralelo: El arreglo donde buscaremos es Notas(1,1) hasta Notas(1,14) La variable donde ira la mejor nota es Mejores(1) Busqueda del mejor Esta busqeda hay que hacerla 6 veces en Notas(1,j), Notas(2,j), Notas(3,j) …. Notas(6,j) El primer mejor es Mejores(1), el segundo Mejores(1)… Mejores(6) HAY QUE REPETIR TODO 6 VECES for i = 1:6 Mejores(i) = Notas(i,1); for j = 1:15 if(Notas(i,j)>Mejores(i)) Mejores(i) = Notas(i,j); end end end La busqueda se hace para todo i que va desde 1 hasta 6, cada paralelo El primer elemento del arreglo es el mejor…. Por ahora O Mejores = max(Notas’);
  • 27.
    PARALELO CON MEJOR PROMEDIO Podemos sacar el promedio de c/paralelo Estos promedios pueden ir en un arreglo: Promedios Luego, solo buscamos el ELEMENTO con mejor promedio EL PROMEDIO DE NOTAS PARA 1ER PARALELO: total = 0; for i = 1:15 total = total + Notas(1,j); end Promedios(1)= total / 15; ESTO REPETIR PARA 6 PARALELOS for i = 1:6 total = 0; for j = 1:15 total = total + Notas(i,j); end Promedios(i)= total / 15; end O Promedios = sum(Notas’) /15;
  • 28.
    PARALELO CON MEJORPROMEDIO Ahora que en Promedios estan los promedios de c/Paralelo: Buscar el paralelo con mejor promedio Esta busqueda se hace en arreglo Promedios MejorPar = 1; MejorProm = Promedios(1); for i = 1:6 if(Promedios(i) > MejorProm) MejorProm = Promedios(i); MejorPar = i; end end fprintf(‘El mejor paralelo es %d’, MejorPar; MejorProm = max(Promedios); MejorPar = find(Promedios==MejorProm);
  • 29.
    TOTALES POR RANGOSSon 4 rangos posibles, y me piden CUANTOS USO CONTADORES, 4 EN ESTE CASO Hay que revisar c/nota de c/paralelo Cuando encontramos una nota que caiga bajo un rango dado: Aumentamos el respectivo contador Para hacer la busqueda en el primer paralelo: for j = 1:15 if(Notas(1,j) >=1 && Notas (1,j) <=29 ) total1 = total1+1; end if(Notas (1,j) >=30 && Notas (1,j) <= 49) total2 = total2+1; end if(Notas (1,j) >=50 && Notas (1,j) <=79 ) total3 = total3+1; end if(Notas (1,j) >= 80 && Notas (1,j) <= 100) total4 = total4+1; end end
  • 30.
    TOTALES POR RANGOSAHORA REPETIR ESTO 6 VECES PARA C/PARALELO for i = 1:6 for j = 1:15 if(Notas(i,j) >=1 && Notas( i ,j) <=29 ) total1 = total1+1; end if(Notas( i ,j) >=30 && Notas(i,j) <= 49) total2 = total2+1; end if(Notas(i,j) >=50 && Notas(i,j) <=79 ) total3 = total3+1; end if(Notas(i,j) >= 80 && Notas(i,j) <= 100) total4 = total4+1; end end end
  • 31.
    SALIDA DE DATOScout << &quot;Las Mejores notas de c/Paralelo:&quot; for(i = 0; i < 6; i++){ cout << &quot;Paralelo No:&quot; << i << Mejores[i] << &quot;\n&quot;; } cout << &quot;El paralelo con mejor promedio:&quot; << MejorPar << &quot; con &quot; << MejorPromedio << &quot;\n&quot;; cout << “Notas entre 1 y 29” << total1 << “\n”; cout << “Notas entre 30 y 49” << total2 << “\n”; cout << “Notas entre 50 y 79” << total3 << “\n”; cout << “Notas entre 80 y 10” << total4 << “\n”;
  • 32.
    SOLUCION COMPLETA Lasolucion completa se logra al unir cada una de las pequeñas soluciones Dividir un problema en pequeños problemas: Modularidad Cada pequeño problema: modulo Se resuelve Juntos: solucion completa