















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Fonaments d'Informàtica, Profesor: , Carrera: Enginyeria Electrònica Industrial i Automàtica, Universidad: UPC
Tipo: Apuntes
1 / 23
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
















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.
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:
Cualidades deseables de un algoritmo:
El desarrollo del software de organiza en fases, que en conjunto se conocen como “ciclo de vida”. Son las siguientes:
Son caracteres.
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
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.
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.
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:
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:
Inconvenientes:
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:
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.
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.
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.
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:
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.
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.
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.
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.
Si queremos que un subprograma devuelva valores múltiples, se recomienda utilizar procedimientos.
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).
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.
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
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;
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;
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.).
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: