1 La línea de comandos

Documentos relacionados
$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

ESTRUCTURAS DE CONTROL

Manual de turbo pascal

INTRODUCCIÓN A LA MATEMÁTICA DISCRETA PRÁCTICA 1

Estructuras de Control

El lenguaje C. 1. Identificadores, constantes y variables

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

PHP: Lenguaje de programación

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Estructuras de control

TI 89. Cómo sobrevivir en Precálculo

LAMBDA. Es posible descargarlo de Internet accediendo a la dirección:

=A1+A2+A3+A4+A5+A6+A7+A8+B1+B2+B3+B4+B5+B6+B7+B8+C1+C2+C 3+C4+C5+C6+C7+C8

Manipulando celdas. Te recomendamos iniciar Excel 2007 ahora para ir probando todo lo que te explicamos.

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

Elementos de un programa en C

1

Como usar Excel para resolver una regresión lineal usando la función predefinida estimacion.lineal.

Principios de Computadoras II

TEMA 4: Programación estructurada

CAPITULO 4: ENTRADA Y SALIDA DE DATOS.

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Sistemas Operativos sesión 13: shell-scripting

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

índice MÓDULO 1: Introducción a Visual Basic 6.0 MÓDULO 2: Fundamentos de programación TEMA 1. Introducción a Visual Basic 6.0

Seleccionamos el programa Excel. Nos aparece la pantalla del programa

Tema 3. Introducción al programa Excel

Tema 3. Introducción al programa Excel

Introducción rápida a la programación (estructurada ) con C++

Retículos y Álgebras de Boole

REFERENCIA DEL LENGUAJE

DIAGRAMAS DE FLUJOS. Qué son Los Diagramas de Flujo y Para qué se Usan?

INTRODUCCIÓN DE DATOS EN LA HOJA DE CÁLCULO

Conjuntos de Vectores y Matrices Ortogonales

EJERCICIO 1. CREACIÓN DE UNA FUNCIÓN

Funciones Básicas de la Hoja de Cálculo

TEMA 5: Subprogramas, programación modular

FUNDAMENTOS DE INFORMÁTICA

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Tema 3. Aplicaciones de Tipo Consola

Ejercicios Tema 6. Funciones

Cuando no está abierto ningún menú, las teclas activas para poder desplazarse a través de la hoja son:

Nos muestra el contenido de la celda activa, es decir, la casilla donde estamos situados.

Introducción al uso del equipamento informático

Programación I. Ingeniería Técnica Informática. Ejercicios de los Temas 4, 5, 6 y 7

Informática Ingeniería en Electrónica y Automática Industrial

APRENDIENDO EXCEL Tema 1

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Las operaciones aritméticas básicas en MATLAB son las más sencillas que se pueden

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

PROGRAMAS PARA LA CLASSPAD MANAGER.

M. en E. Noemí López García

Introducción. Elementos de Excel

5. Subprogramas Fundamentos de Informática

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

2.3 DEFINICIÓN DE LENGUAJES ALGORÍTMICOS

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Parte 4: Estructuras de Control

Programación en Lenguaje C

FUNDAMENTOS DE INFORMÁTICA

I. Operaciones con matrices usando Mathematica

004. Archivos y directorios

Lección 2 Introducción al lenguaje C

TIPOS DE CAMPOS Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes.

LENGUAJE PHP Y CAKEPHP FRAMEWORK

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

UNIDAD 4. MODIFICAR TABLAS DE DATOS

INICIACIÓN A LA PROGRAMACIÓN II

Tema 2 Introducción a la Programación en C.

Introducción a MATLAB

UNIDAD 5. ESTRUCTURAS DINÁMICAS Y ESTÁTICAS DE ALMACENAMIENTO DE DATOS.

Herramientas computacionales para la matemática MATLAB:Introducción

Generación de variables aleatorias continuas Método de la transformada inversa

CUADERNO DE EJERCICIOS Y PRACTICAS EXCEL AVANZANDO

Unidad II: Análisis semántico

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Este es un arreglo de números enteros, o sea que guarda una serie de variables de tipo INTEGER, todas agrupadas en una sola estructura.

Desarrollo de aplicaciones con JAVA, JCreator, JDeveloper NetBeans

6. Vectores. 1. Introducción. 2. Declaración (I) Fundamentos de Informática Dpto. Lenguajes y Sistemas Informáticos.

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Herramientas computacionales para la matemática MATLAB: Funciones definidas por el usuario (parte I)

UNIDAD DE APRENDIZAJE I

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Introducción. Word Autor: Viviana M. Lloret Prof. de Matemática e Informática Blog: aulamatic.blogspot.com

Objetivo: Construir un programa integrando sentencias de decisión MARCO TEÓRICO

Introducción a Matlab. Ing. Laura López López


Comencemos a programar con. Entrega 10. Estructuras de Control II

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Transcripción:

Primeros pasos en GAP 1 GAP es un entorno de cálculo algebraico discreto. Tiene un núcleo implementado en c y dispone aparte de librerías escritas en su propio lenguaje de programación. Este lenguaje es de tipo procedural, por lo que aquellas personas que han programado en pascal, c, maple,... no tienen problemas en adaptarse. En la página oficial de GAP (www.gap-system.org) se puede encontrar abundante información concerniente a instalación en distintas plataformas, tutoriales, manuales, paquetes. Los paquetes pasan por un proceso de arbitraje similar al de las revistas científicas. Primero son depositados (y accesibles al público en la página oficial) y si se aceptan pasan a ser parte de la distribución. Aún así muchos instaladores incluyen los paquetes depositados. GAP ha sido mantenido a lo largo de su historia por varias universidades, y se nutre de las contribuciones que hacen los usuarios en forma de paquetes para fines más específicos. 1 La línea de comandos GAP es un lenguaje interpretado. Se pueden hacer operaciones directamente en la línea de comandos o bien se pueden leer ficheros con guiones escritos con un editor de textos. Normalmente se invoca usando el comando gap, aunque dependiendo del sistema operativo pueden haber distintas alternativas. Una vez iniciado el intérprete aparece una línea de comandos con el siguiente aspecto. gap> Para la edición de las entradas que queramos evaluar se pueden utilizar las flechas junto con las teclas de inicio y fin. Además existe la posibilidad de usar combinaciones de teclas similares a las de empleadas en un shell de unix (ctr-[b,f,p,n,a,e]). El tabulador sirve para completar comandos a partir del texto que hayamos introducido en ese momento. Así teclear Gcd+TAB da como resultado: gap> Gcd Gcd GcdCoeffs GcdInt GcdOp GcdRepresentation GcdRepresentationOp Gcdex Para salir de la línea de comandos podemos usar el comando quit, o bien pulsar ctr-d. El final de línea no se indica con el retorno de carro, para ello se utiliza ;. Esto permite escribir sentencias de varias líneas. gap> 1+ > 2; 3

Primeros pasos en GAP 2 La sesión de trabajo se puede almacenar en un fichero para su posterior edición usando el comando LogTo. gap> LogTo("k:/gap4r4/pruebas/prueba"); gap> 1+1; Podemos leer una secuencia de comandos (guión) con la orden Read. gap> Read("k:/gap4r4/pruebas/uno.g"); Nótese que las barras son de la forma /, incluso en windows. A la ayuda se accede usando el signo de cierre de interrogación. gap>?logto Las operaciones de suma y producto dependen de los argumentos que les acompañen. Así pueden representar suma de enteros, o de matrices, o de subespacios vectoriales... El producto puede significar incluso la composición de dos permutaciones, y el elevado ( ˆ ) la imagen de un punto por una permutación. gap> [1,2,3]+[1,2]; [ 2, 4, 3 ] gap> (1,2)*(2,5); (1,5,2) gap> 1^(1,2,3); 2 Los símbolos =, <, >, <=, > = y <> sirven para denotar igualdad, ser mayor, menor, menor o igual, mayor o igual y distinto, respectivamente. gap> 2=1+1; true gap> [1,2]<[3]; true gap> [1,2]>[1,3]; false gap> 1<>1; false

Primeros pasos en GAP 3 2 Identificadores Si vamos a utilizar un objeto varias veces, podemos por comodidad asignarle un nombre. Esto se hace con : =. gap> a:=2^10; 1024 Si queremos inhibir la salida, escribimos un punto y coma extra al final de la asignación. gap> b:=a;; gap> Podemos visualizar las variables definidas hasta el momento de la siguiente forma. gap> NamesUserGVars(); [ "a", "b" ] Las variables en GAP no tienen tipo, las características del objeto al que se refieren se guardan en el propio objeto. De hecho, podemos reutilizar una misma variable para denotar distintos tipos de datos. gap> a:=1; 1 gap> a:=(1,2); (1,2) gap> a:=[1,2]; [ 1, 2 ] El identificador last se usa para hacer referencia a la última salida (también existen last2 y last3). gap> 1+3; 4 gap> last^3; 64 En GAP se ha establecido el convenio de escribir las variables globales y las utilizadas en las librerías empezando con mayúsculas. Las funciones también son objetos, y se pueden definir de varias formas. Podemos utilizar un procedimiento clásico.

Primeros pasos en GAP 4 gap> f:=function(x) > return x^2; > end; function( x )... end gap> f(3); 9 Y también podemos usar notación estilo λ-cálculo. gap> g:=x->x^2; function( x )... end gap> g(3); 9 3 Listas Las listas en GAP se escriben, como ya hemos visto en algunos ejemplos arriba como una secuencia de elementos delimitada por corchetes. Dichas secuencias no tienen por qué ser homogéneas. Al trabajar con listas tenemos que prestar atención a algunas funciones que son destructivas, a saber, modifican alguno de los argumentos que se les pasa. Esto se debe en parte a que cuando uno asigna un identificador a una lista, no lo hace al objeto como tal, si no a su posición en la memoria. gap> a:=[1,"a"]; gap> b:=a; gap> b[2]:=3; 3 [ 1, 3 ] Podemos usar el comando ShallowCopy para hacer una copia de una lista, creando un objeto nuevo. gap> a:=[1,"a"]; gap> b:=shallowcopy(a);

Primeros pasos en GAP 5 gap> b[2]:=3; 3 Hay multitud de formas para definir y modificar listas, ponemos unos ejemplos a continuación. gap> a:=[1,"a"]; gap> Append(a,[3,4]); [ 1, "a", 3, 4 ] gap> Add(a,5); [ 1, "a", 3, 4, 5 ] gap> Concatenation(a,[8,9]); [ 1, "a", 3, 4, 5, 8, 9 ] [ 1, "a", 3, 4, 5 ] gap> Concatenation(a,[8,9]); [ 1, "a", 3, 4, 5, 8, 9 ] [ 1, "a", 3, 4, 5 ] gap> Filtered([1..100],IsPrime); [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 ] gap> List(last,x->x^2); [ 4, 9, 25, 49, 121, 169, 289, 361, 529, 841, 961, 1369, 1681, 1849, 2209, 2809, 3481, 3721, 4489, 5041, 5329, 6241, 6889, 7921, 9409 ] A veces es conveniente usar conjuntos en vez de listas, pues sus elementos se ordenan (si son comparables entre sí) y la pertenencia de un elemento es más rápida de resolver. gap> a:=[1,2,1,2];; gap> Set(a); [ 1, 2 ]

Primeros pasos en GAP 6 [ 1, 2, 1, 2 ] gap> 3 in a; false Hay ciertos comandos que dan como salida un conjunto. gap> a:=[1,2];; gap> b:=[2,3];; gap> Union(a,b); [ 1, 2, 3 ] gap> IsSet(last); true gap> Intersection(a,b); [ 2 ] 4 Algunos ejemplos de programación until para hacer bucles. Veamos cómo definir el factorial de distin- En GAP se pueden utilizar comandos como for, while, repeat.. tas formas, utilizando distintos estilos de implementación. f:=function(x) local p, i; #variable local para el producto parcial y contador p:=1; for i in [1..x] do p:=p*i; od; #final de bucle return p; #salida end; gap> f(3); 6 De forma recursiva...

Primeros pasos en GAP 7 f:=function(x) if x=0 then return 1; fi; return x*f(x-1); end; Usando funciones específicas de listas... f:=x->product([1..x]); Calculamos ahora el primer entero perfecto y los enteros perfectos entre 1 y 100000. gap> perfecto:=x->(sum(divisorsint(x))=2*x); function( x )... end gap> First([1..200], perfecto); 6 gap> Filtered([1..100000],perfecto); [ 6, 28, 496, 8128 ] Veamos si todos los números entre 100 y 500 son perfectos, o si hay alguno. gap> ForAll([100..500],perfecto); false gap> ForAny([100..500],perfecto); true Hacemos algo parecido con los amigos. amigos:=function(x,y) local dx, dy; #divisores de x e y if x=y or IsPrime(x) then return false; fi; #queremos buscar parejas distintas y que no sean primos

Primeros pasos en GAP 8 dx:=list(divisorsint(x)); Remove(dx);; #le quitamos x dy:=list(divisorsint(y)); Remove(dy);; #le quitamos y return Sum(dx)=Sum(dy); end; Para ver qué números entre 1 y 50 tienen amigos, escribimos lo siguiente. gap> Filtered([1..50],x->ForAny([1..50],y->amigos(x,y))); [ 6, 10, 12, 16, 20, 25, 26, 27, 33, 35, 38, 49 ] Y si queremos saber quiénes son sus amigos, tecleamos. gap> List(last,x->[x,First([1..50],y->amigos(x,y))]); [ [ 6, 25 ], [ 10, 49 ], [ 12, 26 ], [ 16, 33 ], [ 20, 38 ], [ 25, 6 ], [ 26, 12 ], [ 27, 35 ], [ 33, 16 ], [ 35, 27 ], [ 38, 20 ], [ 49, 10 ] ] Nótese que nos ahorramos tiempo si usamos el producto cartesiano de dos listas. gap> Filtered(Cartesian([1..150],[1..150]),l->l[1]<l[2] and amigos(l[1],l[2])); [ [ 6, 25 ], [ 10, 49 ], [ 12, 26 ], [ 16, 33 ], [ 18, 51 ], [ 18, 91 ], [ 20, 38 ], [ 27, 35 ], [ 32, 125 ], [ 39, 55 ], [ 40, 94 ], [ 44, 74 ], [ 44, 81 ], [ 45, 87 ], [ 48, 92 ], [ 48, 146 ], [ 51, 91 ], [ 52, 86 ], [ 56, 76 ], [ 56, 122 ], [ 57, 85 ], [ 63, 111 ], [ 65, 77 ], [ 69, 133 ], [ 70, 142 ], [ 74, 81 ], [ 76, 122 ], [ 80, 104 ], [ 80, 110 ], [ 92, 146 ], [ 93, 145 ], [ 95, 119 ], [ 95, 143 ], [ 104, 110 ], [ 119, 143 ] ]