Fundamentos de Programación con Scilab

download Fundamentos de Programación con Scilab

of 51

description

Este documento describe el lenguaje de scilab orientada a la programación.

Transcript of Fundamentos de Programación con Scilab

FUNDAMENTOS DE PROGRAMACIN

Por: Gabriel Romero Mora Email: [email protected]

Comunidad de software Libre en ESPOL

[kokoa]

Contenido

Introduccin Variables y Constantes Entrada y salida de datos Operadores de comparacin y Lgicos Estructuras de control: Condicionales e Iterativas Arreglos: Vectores y matrices Funciones Cadena de Caracteres Estructuras Archivos

IntroduccinScilab es un programa desarrollado por INRIA y ENPC de Francia para el clculo numrico, programacin y grficos. Es similar a MATLAB y Octave, es utilizado en Windows, Linux, Unix, etc. Caractersticas principalesProgramacin con lenguaje simple y fcilmente asimilable. Permite operaciones diversas operaciones matriciales. Posee capacidades de generacin de grficos en dos y tres dimensiones. Links de descarga:http://www.scilab.org/ http://scilabsoft.inria.fr.

Entorno de Scilab

VariablesEn Scilab las variables no son nunca declaradas: su tipo y su tamao cambian de forma dinmica de acuerdo con los valores que le son asignados. As, una misma variable puede ser utilizada, por ejemplo, para almacenar un nmero complejo, luego una matriz de nmeros enteros y luego para almacenar un texto. Las variables se crean automticamente 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)

Ejemplo: La variable a va cambiando su tipo y no necesita ser declarada previamente.

Constantes

Las constantes que existen en scilab son: %i representa la parte imaginaria. %pi representa el valor 3,1416. %e representa el valor de euler 2,7182. Para valores lgicos: %t representa verdadero. %f representa falso.

ComentariosDescripciones colocadas por el programador, son omitidas por el interprete de scilab.

//Esto es un comentario

Entrada y salida de datosFuncin input()Se utiliza para que el programa pida valores de entrada a las variables mientras se ejecuta. Sintaxis : Para ingresar valores tipo numricas variable_numrica = input('texto'); Para ingresar cadenas de texto variable_cadena = input('texto','s'); Ejemplo: numero=input('Ingrese un numero: '); cadena=input('Ingrese un texto: ','s');

Funciones disp() y printf()Muestran datos de salida por pantalla. disp: Muestra el valor de los datos sin formato Sintaxis: disp(nombre_variable o 'texto');

printf: Muestra los datos de salida formateados.Sintaxis: printf('Texto:%s numero:%d\n',varCad,varNum);Formato para Variables %s Muestra contenido de variables tipo cadena de caracteres. %d Muestra contenido de variables tipo numricas. %c Muestra el contenido de variables tipo carcter \n Caracter de salto de lnea(un enter).

Ejemplos:

Las variables no van con comillas simples. Un texto cualquiera va con comillas simples. Uso de printf

Operadores de comparacinOperador x= y x ~= y x y Descripcin x es menor que y. x es menor o igual que y. x es igual que y. x es mayor que y. x es mayor o igual que y. x no es igual a y.

Operadores LgicosOperador x&y x|y Descripcin Retorna T si x y y son verdaderos caso contrario retorna F. Retorna F si x y y son falsos caso contrario retorna T. Retorna el valor F si x vale T o T si x vale F.

~x

RangosSon argumentos tipo numricos dedicados a contar. Se usan en estructuras for. Se pueden crear vectores filas. Sintaxis: valor_inicial:salto:valor_finalSi no se coloca el salto, el valor pre determinado ser 1.

Ejemplos:

Contadores y Acumuladores

Contador Se suele denominar contador cuando el incremento de la variable es de uno en uno. Sintaxis: variable = variable + 1;

Acumulador Variable cuyo valor se incrementa o decrementa en un valor fijo (en cada iteracin de un bucle). Sintaxis: variable=variable + valor variable=variable - valor variable=variable * valor variable=variable / valor

Nota: Los contadores y acumuladores son variables que se necesitan inicializar con algn valor y son muy utilizados en los lazos de repeticin.

Nmeros Aleatorios Son nmeros obtenidos al azar. La funcin rand() genera nmeros aleatorios entre 0 y menor a 1. Sintaxis: min+fix(rand()*(max-min+1));min: nmero mnimo a generar. max: nmero mximo a generar. fix(): funcin que redondea a nmero ms cercano a 0. rand(): funcin que genera un nmero aleatorio con decimales entre 0 y menor a 1 .

Ejemplo:Generar 10 nmeros aleatorios entre 5 y 23

for i=1:10 aleatorio=5+fix(rand()*(23-5+1)); disp(aleatorio); end

Genera un nmero aleatorio entre 5 y 23. Muestra cada nmero aleatorio generado.

Estructura for que se repite 10 veces y va generando en cada repeticin un nmero aleatorio entre 5 y 23 y lo va mostrando con la funcin disp.

Funciones ElementalesFuncin sqrt(x) abs(x) modulo(x,y) sin(x) cos(x) tan(x) DescripcinDevuelve la raz cuadrada. Devuelve el valor absoluto. Devuelve el resto de dividir x por y. Devuelve el seno, x en radianes. Devuelve el coseno, x en radianes.

Devuelve la tan, x en radianes.

Estructuras de Control CondicionalesPermiten la ejecucin de un conjunto de instrucciones si se cumple una condicin Sentencia ifif condicin [then] Instrucciones; end

if condicin [then] Instrucciones; else Instrucciones; end

if condicin1 [then] Instrucciones; elseif condicin2 Instrucciones; else Instrucciones; end

Nota: then es opcional, puede ser reemplazada por un salto de lnea .

Sentencia selectselect variable case valor1 [then] Instruciones1; case valor2 [then] Instruciones2; case valor3 [then] .. .. else Instruciones; end Instruciones3;

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. Los valores de case pueden ser enteros o strings.

Ejemplos: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 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

Estructuras de Control IterativasSon estructuras que repiten instrucciones de cdigo segn una condicin lgica o un rango de valores.

Estructura forEstructura que repite instrucciones hasta llegar al fin del rango.

Estructura whileEstructura que repite instrucciones mientras la condicin sea verdadera. while condicin Instrucciones; end

for ndice=rango Instrucciones; end

Ejemplos:Realice un programa que muestre los cinco primeros nmeros naturales y la suma. usando while.Solucin :

veces=0; numero=1; suma=0;

Contadores Acumulador de la suma

while veces 764Solucin : 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:%d\n',invertido);modulo(m,n), funcin que extrae el ltimo dgito del nmero. invertido almacena el nuevo nmero invertido y fix(n) es una funcin que redondea al entero ms cercano a cero

Realice un programa que dado un nmero de n trminos genere la suma de la siguiente serie: 12+22+32+... +n2Solucin :

suma=0;

Acumulador de la suma for que se repite n veces desde 1a n.

for termino=1:n suma=suma+termino^2; end

printf('La suma de la serie es: %d\n',suma);

Arreglos de una dimensin o Vectores

Son un conjunto de varios elementos del mismo tipo.A 7 1 2 3 ..... n Tamao del vector(length). Contenido del bloque n del vector.

Indices del vector

El ndice de un vector es un nmero nico que se asigna a cada bloque del vector, el cual permite acceder a la informacin de dicho bloque(Ejemplo: A(2)=7). El tamao de un vector es el nmero de bloques que lo conforman. La funcin length(A) permite conocer ese tamao.

Existen dos tipos de vectores:Vector Fila

Se agrupan los elementos de forma horizontal. Se lo define como:Ejemplo:

[a1, a2, a3, , an] o [a1 a2 a3 an]1 2 3 4 Ejemplo:1 2 3 4

Vector Columna

Se agrupan los elementos de forma vertical. Se lo define como: [a1; a2; a3; ;an]

Ejemplos:Crear un vector de n elementos aleatorios entre 1 y n y mostrarlo. 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 vaco 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

Ejemplos:Se tiene el siguiente vector A=[1,0,1,0,0,1,0]. Determine cuantos 1's hay en el vector. Solucin A=[1,0,1,0,0,1,0]; 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:%d\n',unos); // Muestra # de 1's

Arreglo de dos dimensiones o MatricesEs un conjunto de elementos del mismo tipo cuyo acceso a sus elementos se realiza por ndices.A 1 1 2 3 4 5 6 5 2 3 4 5 6

Fila

Para acceder al contenido de una celda: A(fila,columna) Para cambiar al contenido de una celda: A(fila,columna)=valor

A(3,3)=5

Columna

Se define una matriz con valores de la siguiente forma: M=[7, 1, 0; 3, 2, 9] Ejemplo:

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.

// Se genera la matriz 7X7 llena con ceros y unos

unos=0; for i=1:7 for j=1:7 matriz(i,j)=fix(rand()*2); end end

0 1 0 1 0 1

0 1 1 0 1 0

1 0 1 0 0 1

1 0 1 1 1 0

0 1 0 1 0 1

1 1 1 0 1 0

1 0 1 0 1 1

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

Funciones que generan vectores y matricesFUNCIN eye(m,n) ones(m,n) zeros(m,n) rand(m,n) DESCRIPCIN Crea una matriz identidad cuadrada de tamao n. Crea una matriz de 1's. Crea una matriz de 0's. Crea una matriz de aleatorios entre 0 y menor a 1.

Funcin de importante bsqueda intersect(vector, valor): Funcin que retorna el mismo valor que se esta buscando en el vector.

Funciones bsicas con vectores y matricesFUNCIN det(A) sum(A) prod(A) max(A) min(A) trace(A) conj(A) inv(A) size(A) length(A) DESCRIPCIN Retorna el determinante. Retorna la suma de los elementos de A Retorna el producto de los elementos de A Retorna el elemento mximo de A. Retorna el elemento mnimo de A. Retorna suma de los elementos de la diagonal p. Retorna la conjugada de una matriz A. Retorna la inversa de una matriz cuadrada A. Retorna el # de filas y # de columnas de una matriz A. Retorna la dimensin mxima de un vector A.

Cadena de caracteres(strings)

Una cadena de caracteres es un vector que contiene letras o smbolos Se las define entre comillas simples o dobles. Ejemplos: 'Software Libre' Fundamentos de programacin

Para acceder a cada letra de la cadena se usa la funcin part(vector,posicin), donde part(), retorna la letra correspondiente a la posicin

Posicin en la cadena Cadena s (vector)Retorna o

Ejemplo: Dada una cadena de texto mustrela invertida.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

Funciones que manejan caracteres y cadena de caracteres(strings)FUNCIN strcmp(str1,srt2) strcat([str1,str2]) strindex(str,c) DESCRIPCIN Retorna 0 si las cadenas son iguales. Retorna la concatenacin de strings, ej: strcat([hola,mundo]) Retorna un vector de posiciones del carcter c en str. Retorna el elemento n de str.minscula o viceversa, segn el modo: u convierte a mayscula, ej: convstr ('hola','u') l convierte a minscula, ej : convstr

part(str,n) convstr (str,'modo') Convierte los caracteres de str de mayscula a

('HOLA','l')length(str) Retorna la longitud de str.

FUNCIONES

Es posible definir funciones por el usuario. Los archivos de funciones tienen extensin .sciSintaxis de funcin con valor de retorno:function variable_retornada = nombre_funcion (lista_argumentos) cuerpo_de_funcin endfunction Se pueden retornar ms de una variable e inclusive un vector o matriz: function [var1,var2,vector,matriz] = nombre_funcion(lista_argumentos) cuerpo_de_funcin endfunction

Sintaxis de funcin sin valor de retornofunction nombre_funcion (lista_argumentos o vacio) cuerpo_de_funcin endfunction

Ejemplo1: Funcin que retorna la suma de dos nmerosfunction s=suma(a,b)s=a+b;

endfunction Ejemplo2: Funcin que muestra un men, no recibe argumentos y no retorna valores. function menu()disp('Opcion1'); disp('Opcion2'); disp('Opcion3');

endfunction

function r=enlista(numero,vector) r=0; for i=1:lenght(vector) if(intersect(vector,numero)==numero) Retorna 1 si se encuentra r=1; en la lista. end end endfunction

Cargar funciones de un archivo.sci.

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.Mismo directorio carga exec('funciones.sci') instrucciones1 Instrucciones2 Instrucciones3 . . . . Instruccionesn ProgramaPrincipal.sce function r=fun1(a,b) Argumentos1; endfunction function fun2(x,y) Argumentos2; endfunction function fun3( ) Argumentos3; endfunction funciones.sci

Funciones RecursivasLas funciones recursivas son aquellas que se invocan a si mismas para realizar una tarea.

Ejemplo:Escriba la funcin recursiva NumeroDigitos(n) cual recibe un nmero n y retorne el nmero de dgitos que lo conforman. Ejemplos: 3054, la funcin NumeroDigitos retorna 4. 34790, la funcin NumeroDigitos retorna 5.

function r=NumeroDigitos(n)Caso Base if n