UNIVERSIDAD NACIONAL DEL COMAHUE FACULTAD DE INGENIERÍA Asignatura: Métodos Computacionales en Ingenier
Views 71 Downloads 7 File size 109KB
UNIVERSIDAD NACIONAL DEL COMAHUE
FACULTAD DE INGENIERÍA Asignatura: Métodos Computacionales en Ingeniería I Modulo 2 Primer Cuatrimestre 2014
Laboratorio: Programación en Scilab
Grupo 92
Alumno/a
Legajo Nº
Carrera
Sandro Christian González Gutiérrez María de las Mercedes Capurro
114625 107989
Ingeniería Química Ingeniería Química
Fecha de entrega: 9/05/2014 Fecha de devolución:…………….. Calificación: ……………..
1
Enunciado del ejercicio Nº 92 Se requiere de un programa que lea 30 números (reales en general) de un archivo secuencial. Esos números serán asignados a las componentes de un arreglo bidimensional de 5x5 y a uno unidimensional de 5, donde: 1) Los 5 mayores valores leídos serán asignados al vector previo multiplicarlos por ((-1)^(índice)) , la diagonal principal de la matriz contendrá los menores números leídos, siendo la ubicación del menor de todos ellos el que lleve los índices (1, 1) y en orden creciente en modulo los restantes hasta el (5, 5). 2) Los restantes elementos de cada una de las filas de la matriz, serán los números leídos excluyendo los mayores y los menores que han sido ubicados en el vector o en la diagonal, en el orden en que se leyeron completando primero la primer fila, luego la segunda, hasta completar el arreglo. 3) Debe mostrar por pantalla al usuario los arreglos resultantes con el formato usual de una matriz tal como se trabaja en algebra, y los datos en el orden en el que fueron leídos.
Análisis del problema. Datos de entrada: Archivo secuencial con treinta números reales en general Datos de salida: Vector de 5 elementos, los cuales serán los 5 mayores números leídos previamente multiplicados por ((1)^(índice)) Matriz de 5 filas por 5 columnas, donde sus elementos de la diagonal son los menores números leídos ordenados en forma creciente desde la posición (1,1) hasta la (5,5) y el resto de los componentes
Algoritmo.
Abrir el archivo datos.txt Leer los datos y asignarlo a un vector Cerrar el archivo datos.txt Buscar los 5 elementos menores Ordenar en forma creciente en modulo Ubicarlos al principio del vector El resto de los elementos se corren de lugar Buscar los 5 elementos mayores Ubicarlos al principio del vector El resto de los elementos se corren de lugar Los 5 primeros elementos se multiplican por (-1)^(índice) Asignar a un vector b estos elementos Asignar a los siguientes 5 elementos a los elementos de la diagonal de una matriz m de 5x5 Asignar a los elementos fuera de la diagonal el resto de los números leídos, en el orden en que se leyeron completando primero la primer fila, luego la segunda, hasta completar el arreglo. Mostrar por pantalla el vector de datos, el vector b y la matriz m
2
Diagrama de fujo
Inicio
Leo v de un archivo secuencial
n=dimensión (v) k=5 i=1 i>k i=i+1
menor=abs(v(i)
s=i s>n s=s+1
Abs(v(s)) n i=i+1
v(i)>Max Max=v(i) m=i
i=m ik i=i+1
b(i)=v(i)*(‐1)^(i)
i=1 i>k i=i+1
m(i,j)=v(k+1)
i=1 I>k i=i+1
j=1 j>k
j=j+1
ij
ij a=(i+1)*k+j‐i
a=(i+k)*k+j‐(i‐1)
M(i,j)=v(a)
Mostrar datos de salida
fin
5
Pseudocódigo. Comienzo del programa Abro el archivo “datos.txt” Leo los datos y los asigno en un vector V=[v1,v2,……..vn] n = dimensión ( v ) Cierro el archivo “datos.txt” K=5 Repetir desde i=1 hasta k con un paso de 1 Menor = valor absoluto de v ( i) Repetir desde s=i hasta n con un paso de 1 Si valor absoluto de v ( s ) < Menor entonces Menor = valor absoluto de v ( s ) j=s Fin si Fin repetir Guardo Los Menores Encontrados auxi = v ( j ) Corro los Componentes restantes Repetir desde f =j hasta i-1con un paso de -1 V ( f ) = V ( f-1 ) Fin repetir V ( i ) = auxi Fin repetir Busco los 5 Mayores y los Ubico al Principio del vector Repetir desde j=1 hasta k con un paso de 1 Max = v ( j ) m=j Búsqueda del mayor Elemento del vector Repetir desde i=j hasta n con un paso de 1 si ( v ( i ) > Max ) Max = v ( i ) m=i fin si fin repetir Desplazo los demás Componentes del vector Repetir desde i=m hasta j+1 con un paso de -1 V (i) = v (i-1) Fin repetir El mayor valor va al Principio v ( j) = Max fin repetir Armo el vector de 5 componentes Repetir desde i=1 hasta k con un paso de 1 B ( i ) = v ( i) * (-1) ^ i Fin repetir Armo La Matriz 6
Primero Asigno los valores a Los Elementos de la diagonal Repetir desde i=1 hasta k con un paso de 1 m (i, i) = v (k+i) fin repetir Asigno valores un los componentes Que no están en la diagonal Repetir desde i=1 hasta k con un paso de 1 Repetir desde j=1 hasta k con un paso de 1 si i < > j entonces si i < j entonces a = (i+1) * k + j-i si no a = (i+1) * k+j-(i-1) fin si m (i, j) = V (a) fin si fin repetir fin repetir mostrar ( m, " Matriz de 5x5 " , b, "vector 5x1 ", " Datos de Salida" ) fin del programa
Código Scilab clc //abro mi archivo datos.txt y leo los datos en un vector datos=mopen("datos.txt","r") v=mfscanf(-1,datos,"%f") v=v' disp(v,"Datos de entrada") mclose(datos) n=length(v) //busco los 5 menores y los ubico al principio del vector k=5 for i=1:k n menor=abs(v(i)) for s=i:n if abs(v(s))Max) Max=v(i) m=i end end //desplazo los demás componentes del vector for i=m:-1:j+1 v(i)=v(i-1) end //el mayor valor va al principio v(j)=Max end //armo el vector de 5 componentes for i=1:k b(i)=v(i)*(-1)^i end //armo la matriz //primero asigno los valores a los elementos de la diagonal for i=1:k m(i,i)=v(k+i) end //asigno los valores a los componentes que no están en la diagonal for i=1:k for j=1:k if ij then //pregunto si j es distinto a i if i