Fundamentos de programación en scilab

63,973 views

Published on

Manual de scilab orientada a la programación

Published in: Education

Fundamentos de programación en scilab

  1. 1. FUNDAMENTOS DE PROGRAMACIÓN Por: Gabriel Romero Mora Email: [email_address] [koko a ] Comunidad de software Libre en ESPOL
  2. 2. Contenido <ul><li>Introducción
  3. 3. Variables y Constantes
  4. 4. Entrada y salida de datos
  5. 5. Operadores de comparación y L ó gicos
  6. 6. Estructuras de control: Condicionales e Iterativas
  7. 7. Arreglos: Vectores y matrices
  8. 8. Funciones
  9. 9. Cadena de Caracteres
  10. 10. Estructuras
  11. 11. Archivos </li></ul>
  12. 12. Introducción Scilab es un programa desarrollado por INRIA y ENPC de Francia para el cálculo numérico, programación y gráficos. Es similar a MATLAB y Octave , es utilizado en Windows , Linux, Unix, etc. Características principales <ul><li>Programación con lenguaje simple y fácilmente asimilable.
  13. 13. Permite operaciones diversas operaciones matriciales.
  14. 14. Posee capacidades de generación de gráficos en dos y tres dimensiones. </li></ul>Links de descarga : http://www.scilab.org/ http://scilabsoft.inria.fr .
  15. 15. <ul>Entorno de Scilab </ul>
  16. 16. Variables En Scilab las variables no son nunca declaradas: su tipo y su tamaño cambian de forma dinámica de acuerdo con los valores que le son asignados. Así, una misma variable puede ser utilizada, por ejemplo, para almacenar un número complejo, luego una matriz de números enteros y luego para almacenar un texto. Las variables se crean automáticamente al asignarles un contenido. Asimismo, es posible eliminar una variable de la memoria si ya no se utiliza. Var=5 Var=9.2 Var=[1 3 6 7] var=”Mensaje de texto” Tipo entero Tipo real (float) Tipo vector Tipo cadena(string)
  17. 17. <ul>Ejemplo: La variable a va cambiando su tipo y no necesita ser declarada previamente. </ul>
  18. 18. Constantes <ul><li>Las constantes que existen en scilab son:
  19. 19. %i representa la parte imaginaria.
  20. 20. %pi representa el valor 3,1416.
  21. 21. %e representa el valor de euler 2,7182.
  22. 22. Para valores lógicos:
  23. 23. %t representa verdadero.
  24. 24. %f representa falso.
  25. 25. Comentarios
  26. 26. Descripciones colocadas por el programador, son omitidas por el interprete de scilab.
  27. 27. //Esto es un comentario </li></ul>
  28. 28. Entrada y salida de datos <ul>Función input() Se utiliza para que el programa pida valores de entrada a las variables mientras se ejecuta. Sintaxis : <ul>Para ingresar valores tipo numéricas variable_numérica = input ( 'texto' ); Para ingresar cadenas de texto variable_cadena = input ( 'texto','s' ); </ul>Ejemplo: <ul>numero = input ( 'Ingrese un numero: ' ); cadena = input ( 'Ingrese un texto: ', 's' ); </ul></ul>
  29. 29. <ul>Funciones disp() y printf() Muestran datos de salida por pantalla. disp: Muestra el valor de los datos sin formato <li>Sintaxis :
  30. 30. disp ( nombre_variable o 'texto' );
  31. 31. printf: Muestra los datos de salida formateados.
  32. 32. Sintaxis:
  33. 33. printf ( 'T exto:%s numero:%dn' ,varCad,varNum); </li></ul>Formato para Variables %s Muestra contenido de variables tipo cadena de caracteres. %d Muestra contenido de variables tipo numéricas. %c Muestra el contenido de variables tipo carácter n Caracter de salto de línea(un enter) .
  34. 34. <ul>Ejemplos: <li>Las variables no van con comillas simples.
  35. 35. Un texto cualquiera va con comillas simples.
  36. 36. Uso de printf </li></ul>
  37. 37. Operador Descripción x < y x es menor que y. x <= y x es menor o igual que y. x == y x es igual que y. x > y x es mayor que y. x >= y x es mayor o igual que y. x ~= y x <> y x no es igual a y. Operadores de comparación
  38. 38. Operadores Lógicos Operador Descripción x & y Retorna T si “x” y “y” son verdaderos caso contrario retorna F. x | y Retorna F si “x” y “y” son falsos caso contrario retorna T. ~ x Retorna el valor F si x vale T o T si x vale F.
  39. 39. <ul>Rangos </ul><ul><li>Son argumentos tipo numéricos dedicados a contar.
  40. 40. Se usan en estructuras for.
  41. 41. Se pueden crear vectores filas. </li></ul><ul>Sintaxis: valor_inicial : salto : valor_final Si no se coloca el salto, el valor pre determinado será “1”. </ul>Ejemplos:
  42. 42. <ul>Contadores y Acumuladores </ul><ul><li>Contador
  43. 43. Se suele denominar contador cuando el incremento de la variable es de uno en uno.
  44. 44. Sintaxis:
  45. 45. variable = variable + 1; </li></ul><ul><li>Acumulador
  46. 46. Variable cuyo valor se incrementa o decrementa en un valor fijo (en cada iteración de un bucle).
  47. 47. Sintaxis:
  48. 48. variable=variable + valor
  49. 49. variable=variable - valor
  50. 50. variable=variable * valor
  51. 51. variable=variable / valor </li></ul>Nota: Los contadores y acumuladores son variables que se necesitan inicializar con algún valor y son muy utilizados en los lazos de repetición.
  52. 52. <ul>Números Aleatorios </ul><ul>Son números obtenidos al azar. La función rand() genera números aleatorios entre 0 y menor a 1. Sintaxis: min + fix( rand ()*( max - min +1) ) ; </ul>
  53. 53. <ul>Ejemplo: Generar 10 números aleatorios entre 5 y 23 </ul>for i=1:10 aleatorio= 5 +fix(rand()*( 23 - 5 +1)); disp(aleatorio); end Genera un número aleatorio entre 5 y 23. Estructura for que se repite 10 veces y va generando en cada repetición un número aleatorio entre 5 y 23 y lo va mostrando con la función disp. Muestra cada número aleatorio generado.
  54. 54. Función Descripción sqrt(x) Devuelve la raíz cuadrada. abs(x) Devuelve el valor absoluto. modulo(x,y) Devuelve el resto de dividir x por y. sin(x) Devuelve el seno, x en radianes. cos(x) Devuelve el coseno, x en radianes. tan(x) Devuelve la tan, x en radianes. <ul>Funciones Elementales </ul>
  55. 55. Estructuras de Control Condicionales <ul>Permiten la ejecución de un conjunto de instrucciones si se cumple una condición </ul><ul><ul><li>Sentencia if </li></ul></ul>if condición [then] Instrucciones; else Instrucciones; end if condición [then] Instrucciones; end if condición1 [then] Instrucciones; elseif condición2 Instrucciones; else Instrucciones; end Nota: t hen es opcional, puede ser reemplazada por un salto de línea .
  56. 56. <ul><li>Sentencia select </li></ul>select variable case valor1 [ then] Instruciones1; case valor2 [ then] Instruciones2; case valor3 [ then] Instruciones3; .. .. else Instruciones; end <ul><li>Esta sentencia compara el valor de variable con cada valor de los cases y si coincide con uno, ejecuta las instrucciones de dicho case, caso contrario ejecuta las instrucciones de else.
  57. 57. Los valores de case pueden ser enteros o strings. </li></ul>
  58. 58. <ul>Ejemplos : </ul>disp('Control de Estudiantes'); disp('1. Registrar estudiante'); disp('2. Consultar estudiante'); disp('3. Salir'); opc=input('Ingrese una opcion: '); select opc case 1 disp('Ha ingresado en Opcion 1'); case 2 disp('Ha ingresado en Opcion 2'); case 3 disp('Fin del Programa'); else disp('Otra opcion'); end disp('Control de Estudiantes'); disp('1. Registrar estudiante'); disp('2. Consultar estudiante'); disp('3. Salir'); opc=input('Ingrese una opcion: '); if opc==1 disp('Ha ingresado en Opcion 1'); elseif opc==2 disp('Ha ingresado en Opcion 2'); elseif opc==3 disp('Fin del Programa'); else disp('Otra opcion'); end
  59. 59. Estructuras de Control Iterativas <ul>Son estructuras que repiten instrucciones de código según una condición lógica o un rango de valores. </ul>for índice=rango Instrucciones; end while condición Instrucciones ; end Estructura for Estructura while Estructura que repite instrucciones hasta llegar al fin del rango . Estructura que repite instrucciones mientras la condición sea verdadera .
  60. 60. <ul>Ejemplos: </ul>Realice un programa que muestre los cinco primeros números naturales y la suma. usando while. Solución : veces=0; numero=1; suma=0; while veces<5 printf('%dn',numero); suma=suma+numero; numero=numero+1; veces=veces+1; end printf('La suma es: %dn',suma); Contadores Acumulador de la suma
  61. 61. Realice un programa que invierta un numero dado. Ejemplo: 467 ---> 764 disp('Numero Invertido'); numero=input('Ingrese un numero:'); invertido=0; while numero~=0 digito= modulo (numero,10); invertido=(invertido*10)+digito; numero=fix(numero/10); end printf('El numero invertido es:%dn',invertido); Solución : modulo(m,n) , función que extrae el último dígito del número. invertido almacena el nuevo número invertido y fix(n) es una función que redondea al entero más cercano a cero
  62. 62. suma=0; for termino=1:n suma=suma+termino^2; end printf('La suma de la serie es: %dn',suma); Acumulador de la suma Realice un programa que dado un número de n términos genere la suma de la siguiente serie: 1 2 +2 2 +3 2 +... +n 2 Solución : for que se repite n veces desde 1a n.
  63. 63. Arreglos de una dimensión o Vectores <ul><li>Son un conjunto de varios elementos del mismo tipo. </li></ul>Contenido del bloque n del vector. Tamaño del vector(length). El índice de un vector es un número único que se asigna a cada bloque del vector, el cual permite acceder a la información de dicho bloque(Ejemplo: A(2)=7). El tamaño de un vector es el número de bloques que lo conforman. La función length(A) permite conocer ese tamaño. A 7 1 n . . . . . 2 3 Indices del vector
  64. 64. <ul>Existen dos tipos de vectores: Vector Fila Vector Columna </ul>Se agrupan los elementos de forma vertical. Se lo define como: [a1 ; a2 ; a3 ; … ; an] Se agrupan los elementos de forma horizontal. Se lo define como: [a1 , a2 , a3 , …, an] o [a1 a2 a3 … an] Ejemplo : Ejemplo : 1 2 3 4 1 2 3 4
  65. 65. <ul>Ejemplos: Crear un vector de n elementos aleatorios entre 1 y n y mostrarlo. </ul>Primera forma de crear y llenar un vector n=input('Ingrese n terminos: '); for i=1:n aleatorio= 1+fix(rand()*n); // Genera un aleatorio v(i)=aleatorio; // Llena el vector de aleatorios end disp(v); // Muestra el vector Segunda forma de crear y llenar un vector v=[]; // Se define un vector vacío n=input('Ingrese n terminos: '); for i=1:n aleatorio= 1+fix(rand()*n); v=[v;aleatorio]; //Llena el vector de aleatorios end disp(v); // Muestra el vector
  66. 66. <ul>Ejemplos: Se tiene el siguiente vector A=[1,0,1,0,0,1,0]. Determine cuantos 1's hay en el vector. </ul>Solución <ul>A=[1,0,1,0,0,1,0]; </ul>Unos=0; // se inicializa el contador de 1's // for que recorre todo el arreglo A for i=1:length(A) // verifica si existe 1's y los cuenta if A(i)==1 unos=unos+1; end end printf('La cantidad de unos es:%dn',unos); // Muestra # de 1's
  67. 67. Arreglo de dos dimensiones o Matrices <ul>Es un conjunto de elementos del mismo tipo cuyo acceso a sus elementos se realiza por índices . </ul>1 2 3 4 5 6 1 2 3 4 5 6 Fila A A(3,3)=5 Columna 5
  68. 68. <ul>Se define una matriz con valores de la siguiente forma: M=[7, 1, 0 ; 3, 2, 9] Ejemplo: </ul>
  69. 69. Ejemplo: Se necesita transmitir una matriz de 7 filas y 7 columnas conteniendo bits (ceros o unos). Antes de transmitirla se debe agregar una columna conteniendo ceros o unos de tal manera que las 7 filas tengan paridad par, es decir que la cantidad de unos en cada fila sea par. Este cero o uno adicional se denomina bit de paridad.   Genere aleatoriamente la matriz de 7x7 llena con ceros y unos, agregue el bit de paridad en cada fila y muestre la matriz resultante.
  70. 70. <ul>// Se genera la matriz 7X7 llena con ceros y unos unos=0; for i=1:7 <ul>for j=1:7 <ul>matriz (i,j)=fix(rand()*2); </ul></ul></ul>end end 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 1
  71. 71. for i=1:7 for j=1:7 if matriz (i,j)==1 unos=unos+1; //cuenta el numero de 1's por fila end end if modulo(unos,2)==0 //verifica si unos(contador) es par vparidad(i)=0; else vparidad(i)=1; //Agrega bit de paridad end end matrizBits=[matriz,vparidad]; // Se agrega el vector vparidad a matriz disp( matrizBits ); //Se muestra la matrizBits
  72. 72. FUNCIÓN DESCRIPCIÓN eye(m,n) Crea una matriz identidad cuadrada de tamaño n. ones(m,n) Crea una matriz de 1's. zeros(m,n) Crea una matriz de 0's. rand(m,n) Crea una matriz de aleatorios entre 0 y menor a 1. <ul>Funciones que generan vectores y matrices </ul>Función de importante búsqueda intersect(vector, valor): Función que retorna el “ mismo valor” que se esta buscando en el vector.
  73. 73. FUNCIÓN DESCRIPCIÓN det(A) Retorna el determinante. sum(A) Retorna la suma de los elementos de A prod(A) Retorna el producto de los elementos de A max(A) Retorna el elemento máximo de A. min(A) Retorna el elemento mínimo de A. trace(A) Retorna suma de los elementos de la diagonal p. conj(A) Retorna la conjugada de una matriz A. inv(A) Retorna la inversa de una matriz cuadrada A. size(A) Retorna el # de filas y # de columnas de una matriz A. length(A) Retorna la dimensión máxima de un vector A. <ul>Funciones básicas con vectores y matrices </ul>
  74. 74. Cadena de caracteres(strings) <ul><li>Una cadena de caracteres es un vector que contiene letras o símbolos
  75. 75. Se las define entre comillas simples o dobles .
  76. 76. Ejemplos: </li></ul>'Software Libre' “ Fundamentos de programación”
  77. 77. <ul><li>Para acceder a cada letra de la cadena se usa la función part (vector,posición), donde part(), retorna la letra correspondiente a la posición </li></ul>Posición en la cadena Cadena s (vector) Retorna o
  78. 78. <ul><li>Ejemplo:
  79. 79. Dada una cadena de texto muéstrela invertida. </li></ul>str=input('Ingresa una cadena: ','s'); invertida=[]; for i=length(str):-1:1 //recorre del final al inicio de la cadena letra= part (str,i); //extrae una letra de la cadena invertida=invertida + letra; // + operador que une las letras end disp(invertida); // Muestra el texto invertido
  80. 80. <ul>Funciones que manejan caracteres y cadena de caracteres(strings) </ul>FUNCIÓN DESCRIPCIÓN strcmp(str1,srt2) Retorna 0 si las cadenas son iguales. strcat([str1,str2]) Retorna la concatenación de strings, ej: strcat([“hola”,”mundo”]) strindex(str,c) Retorna un vector de posiciones del carácter c en str. part(str,n) Retorna el elemento n de str. convstr (str,'modo') Convierte los caracteres de str de mayúscula a minúscula o viceversa, según el modo: <ul><li>u convierte a mayúscula, ej: convstr ('hola','u')
  81. 81. l convierte a minúscula, ej : convstr ('HOLA','l') </li></ul>length(str) Retorna la longitud de str.
  82. 82. FUNCIONES <ul><li>Es posible definir funciones por el usuario. Los archivos de funciones tienen extensión .sci
  83. 83. Sintaxis de función con valor de retorno : </li></ul>function variable_retornada = nombre_funcion (lista_argumentos) cuerpo_de_función endfunction Se pueden retornar más de una variable e inclusive un vector o matriz: function [var1,var2,vector,matriz] = nombre_funcion (lista_argumentos) cuerpo_de_función endfunction <ul>Sintaxis de función sin valor de retorno </ul>function nombre_funcion (lista_argumentos o vacio ) cuerpo_de_función endfunction
  84. 84. <ul><li>Ejemplo1: Función que retorna la suma de dos números
  85. 85. function s=suma(a,b) </li><ul><li>s=a+b; </li></ul><li>endfunction
  86. 86. Ejemplo2: Función que muestra un menú, no recibe argumentos y no retorna valores.
  87. 87. function menu() </li><ul><li>disp('Opcion1');
  88. 88. disp('Opcion2');
  89. 89. disp('Opcion3'); </li></ul><li>endfunction </li></ul>
  90. 90. <ul>function r= enlista (numero,vector) <ul>r=0; for i=1:lenght(vector) <ul>if( intersect (vector,numero)==numero) <ul>r=1; </ul>end </ul>end </ul>endfunction </ul>Retorna 1 si se encuentra en la lista.
  91. 91. Cargar funciones de un archivo.sci. <ul><li>Las funciones son cargadas a un programa principal con el comando exec ('funciones.sci'), el cual se coloca al inicio,y carga todas las funciones que se encuentran en el archivo que las contiene. </li></ul>ProgramaPrincipal.sce funciones.sci carga Mismo directorio exec('funciones.sci') instrucciones1 Instrucciones2 Instrucciones3 . . . . Instruccionesn
  92. 92. Funciones Recursivas <ul>Las funciones recursivas son aquellas que se invocan a si mismas para realizar una tarea. </ul>
  93. 93. Ejemplo: Escriba la función recursiva NumeroDigitos (n) cual recibe un número n y retorne el número de dígitos que lo conforman. Ejemplos: 3054, la función NumeroDigitos retorna 4. 34790, la función NumeroDigitos retorna 5. function r=NumeroDigitos(n) if n<=9 r=1; else r=1+ NumeroDigitos (n/10); end endfunction Se llama a si misma y extrae otro dígito, r va acumulando el # de dígitos. Caso Base
  94. 94. Estructuras(struct) Una estructura ( struct ) es una agrupación de datos de tipo diferente bajo un mismo nombre. <ul>Estos datos se llaman miembros o campos. Una estructura es un nuevo tipo de dato, del que luego se pueden crear muchas variables. </ul>Estructura Tipos de datos (numéricos, strings, etc)
  95. 95. <ul>Creación de una estructura </ul><ul>nombre = struct (' campo1 ', valor1 ,' campo2 ', valor2 ,...,' campoN ', valorN ); Ejemplo: alumno= struct ('nombre','jose maria','dni',77335559) </ul>Nota : Los nombres de los campos van con comillas simples. alumno nombre Jose maria dni 77335559 Diseño del a estructura
  96. 96. <ul><li>Ejemplo: Realice un programa que registre n estudiantes(nombre, apellido, edad, matricula) y luego los muestre .
  97. 97. disp('REGISTRO DE ESTUDIANTES');
  98. 98. estudiante=struct('nombre',' ','apellido',' ','edad',0,'matricula',' ');
  99. 99. n=input('Ingrese numero de estudiantes: ');
  100. 100. for i=1:n </li><ul><li>printf('Estudiante #%dn',i); </li></ul><li>estudiante ( i ). nombre =input('Ingrese nombre: ','s');
  101. 101. estudiante ( i ). apellido =input('Ingrese apellido: ','s');
  102. 102. estudiante ( i ). edad =input('Ingrese edad :');
  103. 103. estudiante ( i ). matricula =input('Ingrese matricula :','s');
  104. 104. end </li></ul>
  105. 105. disp('LISTADO DE ESTUDIANTES REGISTRADOS'); printf('NombretApellidotEdadtMatricula'); for i=1:n nombre= estudiante ( i ). nombre ; apellido= estudiante ( i ). apellido ; edad= estudiante ( i ). edad ; matricula= estudiante ( i ). matricula ; printf('%st%st%dt%sn',nombre,apellido,edad,matricula); end
  106. 106. Archivos <ul><li>Los archivos o ficheros permiten guardar datos de variables y a su vez cargarlos:
  107. 107. Se usan dos comandos básicos save y load .
  108. 108. Save: crea un archivo y guarda valores de variables en el mismo.
  109. 109. save 'nombre_archivo' variables
  110. 110. Load: carga datos de un archivo.
  111. 111. load 'nombre_archivo' variables </li></ul>
  112. 112. Referencias <ul><li>http://aozora-inv.livejournal.com/1315.html
  113. 113. http://personal.us.es/echevarria/documentos/ApuntesScilab.pdf
  114. 114. http://docencia-eupt.unizar.es/ctmedra/manual_scilab.pdf </li></ul>

×