Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


PROGRAMACION CON PASCAL (principis bàsics), Apuntes de Fundamentos de la Informática

Asignatura: Fonaments d'Informàtica, Profesor: , Carrera: Enginyeria Electrònica Industrial i Automàtica, Universidad: UPC

Tipo: Apuntes

2013/2014

Subido el 15/10/2014

rosercamps
rosercamps 🇪🇸

1 documento

1 / 23

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
PROGRAMACIÓN CON PASCAL
TEMA 1: Algoritmos e introducción a Pascal
Capitulo 1 Problemas, algoritmos y programas
1. Fases para resolver un problema
1. Analisis del problema.
Identificar:
- Datos de partida.
- Rsultados que se desean obtener.
2. Solución conceptual del problema.
*Pueden usarse diversos métodos: hacer esquemas, comprobaciones, ejemplos
imaginarios…
Ejemplo 1:
Ejemplo 2: (El algoritmo descrito tiene por objetivo sumar dos cantidades enteras.
Si se anotan esas cantidades inicialmente en sendas casillas (a las que llamaremos
a y b para abreviar), este método consiste en ir pasando de a a b una unidad
cada vez, de forma que, cuando a = 0, el resultado será el valor de b.)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Vista previa parcial del texto

¡Descarga PROGRAMACION CON PASCAL (principis bàsics) y más Apuntes en PDF de Fundamentos de la Informática solo en Docsity!

PROGRAMACIÓN CON PASCAL

TEMA 1: Algoritmos e introducción a Pascal

Capitulo 1 Problemas, algoritmos y programas

1. Fases para resolver un problema

  1. Analisis del problema. Identificar:
  • Datos de partida.
  • Rsultados que se desean obtener.
  1. Solución conceptual del problema. *Pueden usarse diversos métodos: hacer esquemas, comprobaciones, ejemplos imaginarios… Ejemplo 1:

Ejemplo 2: (El algoritmo descrito tiene por objetivo sumar dos cantidades enteras. Si se anotan esas cantidades inicialmente en sendas casillas (a las que llamaremos a y b para abreviar), este método consiste en ir pasando de a a b una unidad cada vez, de forma que, cuando a = 0, el resultado será el valor de b.)

Antes de pasar a la escritura del algoritmo, y una vez solucionado conceptualmente el problema, se deciden que tipo de órdenes se usaran para cada cosa.

  1. Escritura del algoritmo en lenguaje de programación. Finalmente, para que un computador resuelva problemas hay que escribir el algoritmo en un lenguaje de programación.

2. Concepto de algoritmo

Definición de algoritmo: Un algoritmo es la descripción precisa de los pasos (acciones u operaciones) que nos llevan a la solución de un problema planteado. Tres pasos que sigue un algoritmo: entrada (datos), proceso (instrucciones) y salida (resultados).

Características de los algoritmos:

  • Precisión: Un algoritmo debe expresarse de forma no ambigua. La precision afecta por igual al “orden” (de los pasos que han de llevar-se a cabo) y al “contenido” (todos los pasos deben poderse realizar).
  • Determinismo: Todo algoritmo debe responder del mismo modo ante las mismas condiciones.
  • Finitud: La descripción de un algoritmo debe ser finita.

Cualidades deseables de un algoritmo:

  • Generalidad: Que un algoritmo sirva para una clase de problemas lo más amplia posible.
  • Eficiencia: Se considera que un algoritmo es tanto más eficiente cuantos menos pasos emplea en llevar a cabo su cometido.

5. Desarrollo sistemático de programas

El desarrollo del software de organiza en fases, que en conjunto se conocen como “ciclo de vida”. Son las siguientes:

  • Planificación: En esta fase inicial hay que constatar la verdadera necesidad del producto y valorar los recursos humanos y técnicos (coste economico y tiempo de elaboración) que precisa su desarrollo. Si se aprueba el proyecto, se pasa a la fase siguiente.
  • Analisis: Establecer cuales deben ser las finciones que debe cumplir la aplicación y como debe realizarse el trabajo conjunto de los diferentes modulos en que se va a dividir. Dentro de esta fase se determina un sistema de pruebas que permitirá detectar los posibles errores y asegurar el funcionamiento correcto de la aplicación y condiciones para unir los modulos de forma fiable.
  • Diseño: En esta fase se diseña el conjunto de bloques, se dividen en partes y se asignan los equipos de programadores.
  • Codificacion: Consiste en escribir los algoritmos en un lenguaje de programación.
  • Validación: Consiste en aplicar el sistema de pruebas. El resultado es una aplicación con todos los errores detectados en las pruebas corregidos.

3. El tipo char

Son caracteres.

4. El tipo boolean

Solo puede tener dos valores: False y True

Operaciones y funciones internas not negación lógica and conjunción lógica or disyunción lógica

= equivalencia lógica < > explosivo <= implicación

Capitulo 4 Partes de un programa

  1. Encabezamiento: Identificación del programa (título).
  2. Declaraciones y definiciones: Definición de constantes y declaración de variables.
  3. Cuerpo del programa: Es donde se relacionan las sucesivas sentencias o instrucciones ejecutables que componen un programa. Va precedido por la palabra ”begin” y termina con la palabra “end.”.

Tema 2: Programación estructurada

1. Instrucciones secuénciales

En Pascal la composición de instrucciones se realiza concatenando las instrucciones y separándolas con el carácter punto y coma (;). Una composición de instrucciones indica que las instrucciones citadas son ejecutadas secuencialmente siguiendo el mismo orden en el que son escritas.

2. Instrucciones de selección

2.1. La instrucción if-then-else

La interpretación de la sentencia de selección genérica

if expresión booleana then instrucción-1 else instrucción-

se puede deducir directamente de la traducción del inglés de sus términos:1 si la expresión booleana es evaluada a True entonces se ejecuta la instrucción-1 y en caso contrario (se evalúa a False) se ejecuta la instrucción-2.

2.2 La instrucción case

La instrucción case permite la selección entre una cantidad variable de posibilidades, es decir, es una sentencia de selección múltiple.

Esta instrucción consta de una expresión (llamada “selector”) y una lista de sntencias etiquetadas por una o varias constantes del mismo tipo que el selector; al ejecutarse esta instrucción evalúa el valor actual del selector y se ejecuta la instrucción que tenga esta etiqueta, si no existe ninguna instrucción con esa etiqueta se produce un error.

Ejemplo:

var nota: real;

begin write('Escriu la nota '); ReadLn(nota); case Round(nota) of 0,1,2,3,4: WriteLn('SUSPENSO'); 5,6: WriteLn('APROBADO'); 7,8: WriteLn('NOTABLE'); 9: WriteLn('SOBRESALIENTE'); 10: WriteLn('MATRICULA de HONOR'); end;

end.

El funcionamiento del bucle for es el siguiente: primero se comprueba si el índice rebasa el limite final, con lo que es posible que el cuerpo del bucle no llegue a ejecutarse ninguna vez, en caso positivo se le asigna el valor inicial a la variable de control, se ejecuta la instrucción interior una vez y se incrementa una unidad el valor de la variable de control, si este nuevo valor esta comprendido entre el valor inicial y el valor final, entonces se vuelve a ejecutar la instrucción interior, y así sucesivamente hasta que la variable de control alcanza el valor de la variable final. “(STEP X)” es opcional, sirve para cambiar el incremento, que por defecto es de +1, a cualquier otro valor.

Ejemplo: var n, i, suma: integer;

begin

Write('Introduce el numero '); ReadLn(n); suma:= 0;

for i:= 1 to n do suma:=suma + i; WriteLn(suma)

end.

Características de la instrucción for:

  • Las expresiones que definen los limites inicial y final se evalúan una sola vez antes de la primera iteración.
  • El bucle se repite un número predeterminado de veces.
  • El valor de la variable de control se comprueba antes de ejecutar el bucle.
  • El incremento del indice del bucle es automático, por lo que no se debe incluir una instrucción para efectuarlo.
  • El bucle termina cuando el valor de la variable de control sale fuera del intervalo de valores establecido.

TEMA 3: Subprogramas (Programación Modular)

Capitulo 8 Procedimientos y funciones

1. Introducción

La programación modular consiste en dividir los programas en módulos independientes, es decir, dividir un problema en subproblemas. Un módulo de un programa es una secuencia de líneas de código que hacen una función determinada que podemos referenciar y que tiene como característica: el valor de las variables de salida es función (depende) de las variables de entrada.

Ventajas:

  • Favorece la resolución de problemas complejos (menos probabilidades de encontrar errores colaterales en el programa).
  • Favorece el trabajo en equipo.
  • La programación final es más eficiente (el desarrollo se hace más rapido).
  • Permite la reutilización de módulos de programa (un módulo de un programa puede ser reutilizado en otros programas).

Inconvenientes:

  • No siempre es correcto utilizar programación modular.
  • Al hacer un programa con módulos se están introduciendo ineficiencias, pasos que no hacen nada en el programa pero que son necesarios para convertir datos.
  • En problemas sencillos la programación modular es una perdida de tiempo.
  • El programa puede estar mal diseñado (Ejemplo: Poner un módulo en un bucle [NO!]). Es mejor diseñar el programa de forma que el módulo se ejecute solo cuando sea llamado.

En Pascal, una acción se introduce mediante un procedimiento. Por ejemplo, la lectura de un ángulo se puede hacer así:

procedure LeerGrados(var angulo: real); begin Write('¿angulo en grados? '); ReadLn(angulo); end ;

En Pascal, una expresión abstracta se introduce mediante una función. En nuestro ejemplo, vamos a crear una función IR  IR, a la que llamaremos Tangrados, que recibe un argumento real, lo pasa a radianes y devuelve el valor de la tangente, calculado a partir de las funciones predefinidas Sin y Cos:

De aquí podemos observar que:

  • Cada procedimiento o función es, en sí mismo, un pequeño programa, tanto por su estructura sintáctica (encabezamiento, declaraciones y cuerpo) como por su cometido (resolver un problema concreto con los datos recibidos y ofrecer los resultados obtenidos).
  • Existen dos puntos de consideración de estos subprogramas: su definición , donde se introducen, y su llamada , donde se utilizan.
  • Un procedimiento es un subprograma que desempeña el papel de una instrucción, mientras que una función es un subprograma que desempeña el de una expresión, puesto que calcula un valor, que se reemplaza por la llamada a la función. Este distinto cometido se refleja en su llamada: los procedimientos se usan como las demás instrucciones, mientras que las funciones representan un valor, por lo que tienen sentido como expresiones.

2. Subprogramas con parámetros

Los parámetros permiten que exprograma y los procedimientos y funciones puedan comunicarse entre sí intercambiando información, ofreciendo una flexibilidad superior a los subprogramas sin parámetros.

2.1. Descripción de un subprograma con parámetros

Veamos en primer lugar un ejemplo sencillo de procedimiento sin parámetros:

procedure TrazarLinea; (Efecto: traza una linea de 10 guiones) var i: integer; begin for i:= 1 to 10 do Write ('-'); WriteLn end ; (TrazarLinea)

La llamada del procedimiento sería:

TrazarLinea

El procedimiento anterior realiza siempre una acción fija y totalmente determinada. Si se quisiera trazar una línea de 15 guiones habría que escribir un nuevo procedimiento; en cambio, si añadimos un parámetro para determinar la longitud:

procedure TrazarLineaLong(longitud: integer); (Efecto: traza una linea de guiones, con la longitud indicada) var i: integer; begin for i:=1 to longitud do Write('-'); WriteLn end ; (TrazarLineaLong)

Al ejecutar la llamada hay que indicar la longitud de la línea, por ejemplo:

TrazarLineaLong(15)

En Pascal, es obligatorio indicar el tipo de los parámetros que pasan como argumentos a los subprogramas. En el caso de una función, se debe indicar además el tipo de resultado que se devuelve al programa principal o subprograma que efectuó la llamada.

Veamos un ejemplo de una función para calcular el factorial de un número entero positivo:

function Fac(n: integer): integer; (Dev. n!) var i, prodAcum: integer; begin prodAcum:= 1; for i:= 2 to n do prodAcum:= prodAcum * i; Fac:= prodAcum end ; (Fac)

Como podemos ver la función tiene un argumento entero y devuelve un resultado también entero. Los sucesivos productos 23…*n se van almacenando en la variable prodAcum tantas veces como indica el bucle for. Una vez terminado, el valor del factorial presente en prodAcum se asigna al nombre de la función reemplazando su llamada. Por ejemplo, la instrucción:

WriteLn(Fac(4)) (escribe el valor 24)

No es obligatorio que el(los) argumento(s) de una función sea(n) del mismo tipo que su resultado.

2.2. Parámetros formales y reales

Existen dos tipos distintos de parámetros. Cuando se define un subprograma es necesario dar nombres a los parámetros para poder mencionarlos. A los parámetros utilizados en la definición de procedimientos y funciones se les denomina parámetros formales. En nuestro ejemplo de referencia angSexa y valor son parámetros formales de la función TanGrados y del procedimiento EscrDosDec respectivamente. En cambio, a los argumentos concretos utilizados en la llamada de un subprograma se les lama parámetros reales. Por ejemplo a y t son los parámetros reales de la función TanGrados y del procedimiento EscrDosDec, respectivamente.

2.3. Mecanismos de paso de parámetros

En Pascal existen dos formas de pasar parámetros que se diferencian en la forma en que se sustituyen los parámetros formales por los reales al efectuarse la llamada. Estos mecanismos se conocen como:

3. Estructura sintáctica de un subprograma

Como es norma en Pascal, es necesario definir cualquier componente del programa, en particular los diferentes subprogramas, antes de poder utilizarlos. La estructura de un subprograma es semejante a la del programa principal, constan de un encabezamiento, una parte de declaraciones y definiciones y una parte de instrucciones.

En el encabezamiento del programa y los subprogramas, se da su identificador y la lista de sus parámetros. En el caso de los subprogramas, debe especificarse el tipo de los parámetros y su mecanismo de paso, y para las funciones se debe incluir además el tipo de resultado. Véase los diagramas de encabezamiento de un procedure y una function :

La parte de declaraciones y definiciones de un subprograma es idéntica a la de un programa. En ella se pueden declarar y definir constantes, variables e incluso procedimientos y funciones propios de cada y a los que sólo desde él se tiene acceso.

4. Funcionamiento de una llamada

Veamos cómo se realiza la llamada a un subprograma y cómo se produce el paso de parámetros utilizando un ejemplo con un procedure para la lectura de números enteros y con un function que

Program DemoParametros; var numero: integer;

procedure LeerNumPos(var n: integer); (Efecto: solicita un entero hasta obtener uno positivo) begin repeat Write('Escriba un entero positivo: '); ReadLn(n) until n >= 0 end ; (LeerNumPos)

function Fac(num: integer): integer; (Dev. num!) var i, prodAcum: integer; begin prodAcum:= 1; for i:= 2 to num do prodAcum:= prodAcum * i; Fac:= prodAcum end ; (Fac)

begin LeerNumPos(numero); (num >= 0) WriteLn('El factorial de ', numero, ' es ', Fac(numero)) end. (DemoParametros)

Primero se llama al programa y se definen sus variables, funciones y procedimientos. El programa empieza llamando al procedimiento con la variable del programa entre paréntesis. El procedimiento LeerNumPos(numero); que pide la entrada de un numero positivo pasa la variable el valor de la variable numero a su propia variable n, sobre la que aplica las instrucciones correspondientes, y devuelve un valor de salida. Después el programa pide escribir el resultado de la función Fac(numero) con la variable numero (que puede haber sido modificada por el procedimiento anterior). Esta función da el valor de la variable numero a su propia variable num a la que se le aplican las respectivas instrucciones dando un valor de salida a la función Fac.

6. Otras recomendaciones sobre el uso de parámetros

6.1. Parámetros por valor y por referencia

Se recomienda emplear parámetros por valor siempre que sea posible (asegurando que los argumentos no se alteren) y reservar los parámetros por referencia para aquellos casos en que sea necesario por utilizarse como parámetros de salida.

6.2. Parámetros por referencia y funciones

En Pascal, tanto los procedimientos como las funciones pueden utilizar parámetros por valor y por referencia. Sin embargo la utilización de parámetros por referencia no es apropiada en las funciones, porque su cometido natural consiste sólo en hallar el valor que representan.

6.3. Funciones con resultados múltiples

Si queremos que un subprograma devuelva valores múltiples, se recomienda utilizar procedimientos.

7. Desarrollo correcto de subprogramas

En lo que respecta a la definición, para asegurar la corrección de un subprograma lo consideramos como lo que es: un “pequeño” programa. Por otra parte, es necesario verificar también la corrección de las llamadas a subprogramas. Para ello nos basamos en que estas llamadas son sólo instrucciones (en el caso de los procedimientos) o expresiones (en el caso de las funciones).

TEMA 4 Tipos de datos definidos por el programador

Capitulo 11 Tipos de datos simples y compuestos

Los tipos de datos simples son aquéllos cuyos valores representan un dato atómico. Por ejemplo: integer , real , boolean , char , etc.

Los tipos de datos compuestos (estructurados) son aquéllos cuyos valores pueden englobar varios datos simultáneamente. Los tipos de datos compuestos son: el tipo conjunto , el tipo array , el tipo registro y el tipo archivo.

Capitulo 12 Arrays

12.1. Descripción del tipo de los datos array

Los array son tipos de datos estructurados ampliamente utilizados, porque permiten manejar colecciones de objetos de un mismo tipo con acceso en tiempo constante, y también porque han demostrado constituir una herramienta de enorme utilidad.

El tipo estructurado array captura la idea de los vectores y matrices del álgebra, aunque sus componentes no tienen que ser números: pueden ser de cualquier tipo.

TIPOS DE DATOS

INTERNOS

EXTERNOS

ESTATICOS

DINAMICOS

ESTRUCTURADOS

SIMPLES

SET

ESTANDARD

NO ESTANDARD

HOMOGENEOS (ARRAY)

HETEROGENEOS (RECORD)

ENUMERADOS INTERVALO

12.2. Vectores

Un vector es una secuencia, de longitud fija, formada por elementos del mismo tipo. Los vectores son unidimensionales. Ejemplo:

type t_indice = 1..10; t_Vector = array [t_indice] of real; var v : t_Vector;

12.3. Matrices

Las matrices son arrays multidireccionales. Llamamos tablas a las matrices bidimensionales. Ejemplo:

type t_indice = 1..4; t_DiaSemana = (L, M, X, J, V, S, D); t_DiaLab = L..V; t_Tabla = array [t_indice, t_DiaLab] of real; var ventas : t_Tabla;

Capitulo 13 Registros (RECORD)

Los registros son un tipo de estructuras que sirven para almacenar y procesar información de distintos tipos. Por ejemplo un DNI, que agrupa: un entero (el número) y cadenas de caracteres (nombre, apellidos, etc.).

13.1. Descripción del tipo de datos registro

Un registro está formado por varios datos (simples o estructurados) a los que llamaremos campos del registro y que tendrán asociado un identificador al que llamaremos nombre de campo.

Su diagrama sintáctico es:

Y su definición en pascal:

type tNombReg = record idCampo1: idTipo1; idCampo2: idTipo2; ... idCampoN: idTipoN end ; (tNombReg)

Por ejemplo, supongamos que un encargado de obra quiere tener registrados varios datos de sus trabajadores, tales como: nombre, dirección, edad y número de DNI. Para ello se utiliza el tipo de datos estructurados registro de la siguiente forma:

type tEdades = 16..65; tDigitos = '0'..'9'; tFicha = record nombre: array[1..30] of char; direccion: array[1..50] of char; edad: tEdades; dni: array[1..8] of tDigitos end ; (tFicha)

Para acceder a los campos de los registros se utilizan construcciones de la forma nomVarRegistro.nomCampo, es decir, el nombre de una variable de tipo registro seguido de un punto y el nombre del campo al que se quiere acceder. Para el ejemplo anterior, f es la variable de tipo tFicha, para acceder a sus campos, se escriben:

f.nombre f.direccion f.edad f.dni

A diferencia de los arrays, en los cuales el acceso se realiza por medio de índices, en los registros se accede por medio de los identificadores de sus campos, que deben darse explícitamente.

La asignación de valores a los campos se hará dependiendo del tipo de cada uno de ellos. Así, en el ejemplo anterior:

f.nombre := ‘Mario Aguilera ‘; f.direccion := ‘Calle Falsa ‘; f.edad := 47; f.dni := 48020800;

Las operaciones de lectura y escritura de los registros han de hacerse campo por campo, empleando procedimientos o funciones especiales si el tipo de campo así lo requiere.

En los casos en que haya que entrar muchos mas datos es incomodo estar usando constantemente la variable f, en este caso. Para evitar esta repetición Pascal dispone de la instrucción with que se emplea siguiendo la estructura escrita en este diagrama sintáctico: