Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2. Conceptos básicos
Ciencias de la Computación o Informática. Campos de conocimiento de la disciplina Informática. La
computadora como herramienta de la automatización. Componentes del hardware que intervienen en el
procesamiento de datos. Representación de información en la memoria. Concepto de bit y byte. Códigos de
representación de la información. Representación de texto. Representación de números enteros y reales.
Rango de valores. Programación. Paradigmas de programación. Lenguajes de programación. Herramientas
software para la programación (IDE). Resolución de problemas. Etapas en la resolución. Algoritmos. Concepto
y Características. Métodos de representación de algoritmos.
4. Modularización. Funciones
Descomposición de problemas y modularización. Subprogramas o módulos. Procedimientos. Funciones.
Parámetros. Métodos para el pasaje de parámetros. Pasaje por valor. Pasaje por referencia. Variables locales
y variables globales. Procedimientos y funciones con parámetros.
5. Estructuras de control
Programación Estructurada. Estructuras de Control. Secuencial. Selectiva: Simple, Doble, Múltiple.
Estructuras repetitivas: Mientras, Hacer-Mientras, Para. Recomendaciones para el diseño de los bucles.
Sentencias de salto en bucles. Estructuras repetitivas anidadas.
HERRAMIENTAS CONCEPTUALES
Estrategia de solución y división en subtareas o módulos
La estrategia de solución es una idea particular de QUÉ hacer para resolver un problema, la división en
subtareas es una forma específica de CÓMO expresar dicha estrategia a través de soluciones a problemas
más pequeños.
La herramienta del lenguaje básica para expresar subtareas y estrategias es el procedimiento.
Procedimiento
Es un conjunto de primitivas expresadas en el orden adecuado para crear una nueva tarea. Además de
primitivas, pueden utilizarse también otros procedimientos ya definidos.
Conviene definir un procedimiento cuando identificamos un “patrón”.
Un patrón es algo que ocurre con regularidad. A su vez, una regularidad es todo aquello que se presenta en
un orden periódico, es decir, tiene una sucesión regular.
La ventaja de detectar un patrón de acciones que el autómata debe realizar es que se puede “enseñar” una
sola vez al autómata a realizar esta nueva tarea, mediante un procedimiento y luego se puede volver a utilizar
esta tarea las veces que sean necesarias, sin necesidad de volver a escribir toda la secuencia de acciones.
Legibilidad
Un programa es una descripción ejecutable de la solución a un problema computacional. Los programas son
entidades “duales” dado que deben indicarle a una máquina cómo funcionar, pero, también deben comunicar
la solución propuesta a las personas.
Se dice que un programa es legible cuando puede ser leído con sencillez por una persona, y entendido con
poca o ninguna explicación adicional.
La legibilidad se ve expresada en la elección de nombres adecuados para las entidades que se escriban en el
programa: procedimientos, parámetros, variables y otras entidades.
Se suelen favorecer nombres cortos pero descriptivos. En el caso de los comandos, por ejemplo, estos
nombres usualmente requieren verbos en infinitivos. Adicionalmente, se requiere que el nombre brinde una
idea correcta respecto del propósito de la entidad nombrada.
Algorítmica básica: recorridos
Un recorrido es un esquema de repetición en el cual se realiza una tarea para cada uno de los elementos de
una serie, pues recorre la secuencia de elementos de a uno, procesando de alguna forma cada uno de ellos.
La idea de un recorrido es organizar la división en subtareas a la hora de resolver una tarea que requiere
trabajar con cada uno de los elementos de una secuencia. De esta forma, habrá subtareas para iniciar el
recorrido, determinar si se terminaron los elementos, procesar un elemento, pasar al siguiente elemento y
para finalizar el recorrido.
CONCEPTO DE PROGRAMA
Se llama “programa” al conjunto de instrucciones (órdenes) que se dan a la computadora para la ejecución de
una tarea determinada.
El proceso de programación es un proceso de resolución de problema que se realiza siguiendo una
metodología determinada. En esta asignatura se propone un método de resolución de problemas que
propone: definir el objetivo, especificar la estrategia de solución, descomponer la solución en tareas con
nombres representativos, y verificar la solución con casos de pruebas predefinidos.
Conceptualmente, un programa puede ser considerado como una “caja negra”. Esta caja negra es el algoritmo
de solución que permitirá obtener la salida en función de las entradas. El programador debe definir de donde
provienen las entradas al programa, es decir, debe indicar desde que dispositivo de entrada (teclado, disco,
...) ingresarán los datos.
El proceso de ingresar la información de entrada (datos) en la memoria de la computadora se denomina
entrada de datos, operación de lectura o acción de leer. Las salidas de los datos se deben presentar en
dispositivos periféricos de salida: pantalla, impresora, disco, etc. La operación de salida se conoce también
como escritura o acción de escribir.
MODULARIZACIÓN
En el desarrollo de algoritmos complejos, la descomposición de problemas y la modularización son
fundamentales. Siguiendo el método de resolución de problemas se logra dividir un problema en un conjunto
de tareas más sencillas de resolver. Cada tarea recibe el nombre de subprograma, módulo o rutina.
Modularizar significa descomponer un problema en partes funcionalmente independientes. Cada una de estas
partes se denomina módulo.
La descomposición busca lograr:
- Alta Cohesión: medida del grado de identificación de un módulo con una función concreta.
- Bajo Acoplamiento: medida de la interacción de los módulos que constituyen un programa.
Un módulo o subprograma puede realizar las mismas acciones que un programa (aceptar datos, realizar
cálculos y devolver resultados). La diferencia está en que el módulo se ejecuta cada vez que el programa
principal lo invoca. Además, un módulo puede invocar a otros.
Cada módulo debe tener un nombre que lo identifique y, en algunos casos, una serie de parámetros
asociados, que se explicarán más adelante. El nombre del módulo se utiliza para su invocación.
Si un programa o subprograma necesita ejecutar las acciones que corresponden a algún módulo, debe
invocarlo usando su nombre. La invocación pasa el control al módulo, una vez ejecutada la última instrucción
del módulo, el control retorna al programa que lo llamó.
La metodología que se adecua es el diseño descendente (Top Down). Es una técnica para resolver problemas
que comienza descomponiendo el problema principal en subproblemas, para luego diseñar las soluciones
específicas para cada uno de ellos.
Ventajas de la modularización
• Mayor productividad: al dividir un sistema de software en módulos funcionalmente independientes, un
equipo de desarrollo puede trabajar simultáneamente en varios módulos, incrementando la productividad (es
decir reduciendo el tiempo de desarrollo global del sistema).
• Reusabilidad: la reutilización consiste en aprovechar el trabajo realizado en desarrollos anteriores, de
manera tal que no sea necesario codificar soluciones que ya fueron probadas.
• Facilidades de mantenimiento correctivo: La división lógica de un sistema en módulos permite aislar los
errores que se producen con mayor facilidad. Esto significa poder corregir los errores en menor tiempo y
disminuir los costos de mantenimiento de los sistemas.
• Facilidades de evolución del sistema: Los sistemas de software reales crecen (es decir aparecen con el
tiempo nuevos requerimientos del usuario). La modularización permite disminuir los riesgos y costos de
incorporar nuevas funcionalidades en un sistema en funcionamiento.
• Mayor Legibilidad: Un efecto de la modularización es una mayor claridad para leer y comprender el código
fuente. El ser humano maneja y comprende con mayor facilidad un número limitado de instrucciones
directamente relacionadas.
LAS FUNCIONES EN C
Una función realiza una tarea específica agrupando un conjunto de instrucciones con un nombre. Para que se
ejecuten las instrucciones contenidas en la función ésta se debe invocar o llamar mediante su nombre desde
otra función.
Cada función puede ser diseñada, verificada y depurada de manera independiente; esto permite que cada
función se pueda probar sin tener que esperar a que estén programadas todas las demás funciones que
también se usarán en el programa. Sin embargo, las funciones no pueden actuar de manera autónoma, es
decir, no pueden ejecutarse por sí mismas: su ejecución depende de que sea invocada por otra función y esto
a su vez debe estar relacionado siempre con la ejecución de una función main.
En el lenguaje C se pueden distinguir dos tipos de funciones: las predefinidas y las definidas por el
programador. Las funciones predefinidas se encuentran en las bibliotecas estándar de C, y es necesario hacer
uso de la directiva #include para invocarlas. Con respecto a las definidas por el programador, las diseña el
programador según sus necesidades.
Función main(): Es la función principal. Su papel es coordinar a las otras funciones mediante llamadas o
invocaciones.
Estructura de una función
Una función se compone de una cabecera y un cuerpo. En la cabecera se especifican los parámetros con los
que la función va a trabajar y el tipo de datos del valor de retorno. El cuerpo es la codificación del algoritmo de
la función.
• Tipo_de_retorno: es el tipo de dato del valor que devuelve la función. Si se omite el tipo de dato, asume
entero.
• nombreFuncion: es el nombre asignado a la función.
• lista de parámetros: lista de variables con sus respectivos tipos de datos: tipo1 parámetro1, tipo2
parámetro2, .... Cuando existen, éstos son los datos que debe recibir la función cuando se le invoque.
• cuerpo de la función: son las sentencias o instrucciones que ejecutará la función cada vez que sea
invocada.
• expresión: valor que devuelve la función (cuando devuelve valor).
Instancias de definición de una función
a) Prototipo de una función
La declaración de una función se denomina “prototipo”. El prototipo describe la lista de parámetros que la
función espera recibir y el tipo de datos de su valor de retorno. Contiene la cabecera de la función, siendo
opcional incluir los nombres de variables, y termina con punto y coma para indicar al compilador que es una
instrucción.
Los prototipos se sitúan normalmente al principio del programa, antes de la función main. El compilador utiliza
los prototipos para validar que el número y los tipos de datos de los parámetros reales son los mismos que el
número y los tipos de datos de los parámetros formales de la función llamada. En caso de inconsistencia se
visualiza un error.
b) Invocación de una función
Una invocación o llamada a una función implica pasarle el control de la ejecución del programa, así como los
argumentos o parámetros reales que requiere para realizar su tarea, se realiza colocando el nombre de la
función y los argumentos reales en el mismo orden que los parámetros formales correspondientes. La función,
previamente debe estar prototipada, ese decir, declarada, antes del programa principal main().
c) Desarrollo de una función
Para desarrollar una función, se define su cabecera y su cuerpo. La cabecera es idéntica al prototipo, pero les
pone nombre a los parámetros de la función.
Formas de implementación
Según el propósito específico, las funciones pueden ser diseñadas o definidas, de las siguientes maneras:
a) Funciones sin paso de parámetros. Son subprogramas que no requieren información adicional de su
entorno, pues simplemente ejecutan una acción cada vez que son invocadas.
b) Funciones con paso de parámetros. Para la ejecución de estos subprogramas se requiere además de su
invocación, que se le pase información adicional de su entorno.
c) Funciones que no regresan valor. Subprogramas que luego de su ejecución no devuelven al entorno
algún valor como resultado de su ejecución.
d) Funciones que regresan valor. Funciones que luego de su ejecución generan un valor como resultado y
“entregan” ese valor a su entorno.
El entorno de cualquier función es la función por la que es invocada.
Funciones con paso de parámetros
Una función con paso de parámetros es aquella que además de ser invocada requiere información por parte
del subprograma que la llama. Esta información se refiere a los datos de entrada que se necesitan para que la
función trabaje.
La forma general de este tipo de función es la siguiente:
PROGRAMACIÓN ESTRUCTURADA
La programación estructurada es una forma de escribir programas de forma clara, utilizando únicamente tres
estructuras: secuencia, selección e iteración o repetitivas; siendo innecesario y no permitiéndose el uso de
instrucciones de transferencia incondicional (Por ejemplo, GoTo).
ESTRUCTURAS DE CONTROL
La expresión flujo de control hace referencia al orden en el que se ejecutarán las instrucciones de un
programa, desde el inicio hasta que finaliza. El flujo normal de ejecución es el secuencial. Las sentencias de
control selectivas y las iterativas o repetitivas permiten que el flujo secuencial del programa sea modificado.
También cumplen con este objetivo las sentencias denominadas de invocación o salto.
Las sentencias selectivas o alternativas se denominan así porque permiten seleccionar uno de entre varios
caminos por donde seguirá la ejecución del programa. En algunos casos esta selección viene determinada por
la evaluación de una expresión lógica. Este tipo de sentencias se clasifican en:
• simples: SI (IF)
• dobles: SI-SINO (IF-ELSE)
• múltiples: SEGÚN-SEA (SWITCH, CASE)
Las sentencias de salto o invocación permiten realizar saltos en el flujo de control de un programa, es decir,
permiten transferir el control del programa, alterando bruscamente el flujo de control del mismo. En
programación estructurada se considera una mala práctica el uso de las condiciones de salto, ya que, entre
otras cosas, restan legibilidad al código. Sin embargo, si bien se debe evitar su uso, la mayoría de los
lenguajes las incluyen. Algunas sentencias de salto o invocación son:
• ROMPER (BREAK)
• CONTINUAR (CONTINUE)
• IR-A (GO TO) (Su utilización no es considerada una buena práctica en programación).
• VOLVER (RETURN)
Estructura secuencial
La estructura secuencial es aquella en que las acciones (instrucciones) se ejecutan sucesivamente, una a
continuación de otra, sin posibilidad de omitir ninguna y sin bifurcaciones.
Estructuras selectivas
Las estructuras selectivas posibilitan, como resultado de la evaluación de una condición, seleccionar la o las
siguientes instrucciones a ejecutar, de entre varias posibilidades o alternativas. Reciben también el nombre de
estructuras alternativas o de decisión. Las estructuras selectivas o alternativas pueden ser:
• simples: SI (IF)
• dobles: SI-SINO (IF-ELSE)
• múltiples: SEGÚN-SEA (SWITCH, CASE)
La base de este tipo de estructuras es la condición. Para expresar una condición se utilizan las expresiones
condicionales, lógicas o booleanas, que devuelven como resultado uno de estos valores: VERDADERO
(TRUE) o FALSO (FALSE).
Alternativa Simple
La estructura alternativa simple de la forma SI-ENTONCES (IF-THEN) ejecuta una acción o conjunto de
acciones cuando se cumple una determinada condición. Como resultado de evaluar la condición, pueden
ocurrir dos cosas:
• que la condición sea verdadera: en cuyo caso se ejecuta la acción preestablecida
• que la condición sea falsa: en esta situación, el programa continúa con la siguiente instrucción.
Alternativa Doble
La estructura condicional doble permite elegir entre dos opciones o alternativas posibles en función del
cumplimiento o no de una determinada condición.
Alternativa Múltiple
La estructura alternativa múltiple es una toma de decisión especializada que permite evaluar una expresión
con n posibles resultados, y en base al resultado seleccionar el siguiente bloque de instrucciones a ejecutar,
de entre varios posibles.
Estructuras de decisión anidadas
Según lo expresado, las estructuras de decisión simple y doble permiten seleccionar entre dos alternativas
posibles. Sin embargo, la instrucción SI-ENTONCES puede ser utilizada también en casos de selección de
más de dos alternativas. Esto es posible anidando estas instrucciones. Es decir, una estructura SI-
ENTONCES puede contener a otra, y esta a su vez a otra. El anidamiento de instrucciones alternativas
permite ir descartando valores hasta llegar al bloque de instrucciones que se debe ejecutar.
Estructuras de control repetitivas
En muchas ocasiones la forma más apropiada de expresar un algoritmo consiste en la repetición de una
misma instrucción de manera controlada, una cantidad finita de veces determinada de antemano (al diseñar el
programa) o en tiempo de ejecución (cada vez que se corre el programa).
Las estructuras algorítmicas que permiten realizar operaciones de este tipo se conocen con el nombre de
estructuras repetitivas o iterativas.
El concepto de bucle
En programación se denomina bucle a la ejecución repetidas veces de un mismo conjunto de sentencias.
Normalmente, en cada nueva ejecución varía algún elemento. Siempre que utilicemos las instrucciones
repetitivas, tenemos que indicar al programa donde empieza el bucle, donde termina y cuántas iteraciones
tiene que hacer entre el comienzo y el final.
Tipos de bucles
En general se utilizan en programación, dos tipos de bucles, aquellos en los que conocemos previamente la
cantidad de iteraciones, denominados, bucles controlados por contador y aquellos en los que no se conoce, a
priori, el número exacto de iteraciones, denominados bucles controlados por condición.
La estructura PARA (FOR)
Se utiliza para resolver problemas en los cuales se conoce de antemano la cantidad de veces que es
necesario repetir las instrucciones que componen el bucle.
Cuando se ejecuta la instrucción FOR, a la variable de control se le asigna el valor inicial, al llegar al final del
bucle se verifica si el valor de la variable de control es igual que el valor final; en caso negativo se incrementa
el valor de la variable de control en uno (o lo que indique el incremento), y se vuelven a ejecutar todas las
instrucciones del bucle, hasta que la variable de control sea igual que el valor final.
SEUDOCÓDIGO FORMATO C
PARA variable DESDE valor-inicial HASTA
valor-final [INCREMENTO incremento]
for (inicialización, condiciónIteración,
INSTRUCCIÓN incremento) {
[...] sentencias del bucle;
INSTRUCCIÓN }
FIN-PARA
TIPOS DE DATOS
Los datos se clasifican en simples y compuestos.
Los tipos de datos simples o primitivos son aquellos que no están definidos en términos de otros tipos de
datos. Tienen como característica común que cada variable (o identificador) representa un valor de dato único.
Los tipos de datos simples estándar son: entero, real, carácter, lógico.
Los tipos de datos compuestos o estructurados están construidos en base a los tipos de datos primitivos.
Tienen como característica común que un identificador (nombre) puede representar múltiples datos
individuales, pudiendo cada uno de éstos ser referenciado independientemente. Dentro de estos se
encuentran los tipos de datos cadenas, registros, arreglos, pilas y colas.
El tipo de dato determina los valores que pueden asignarse a un dato, el formato de representación
correspondiente y las operaciones que pueden realizarse con dicho dato.
Clasificación de los tipos de datos
Entero
Real
Estándar
Carácter
Datos Simples o Primitivos
Lógico
ARREGLOS
Un arreglo es un conjunto finito y ordenado de elementos homogéneos. Agrupa elementos similares
identificando al conjunto con un solo nombre o identificador. Se utilizan índices para acceder al valor de una
determinada posición dentro del arreglo.
Arreglos Unidimensionales – Vectores
Los vectores son arreglos unidimensionales. Los elementos del vector se referencian por su índice (1, 2, ..., i,
..., n), es decir, por su posición relativa en el vector. Los índices de un vector pueden ser números enteros,
variables o expresiones enteras.
Ventajas:
- Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una posición de
memoria.
- Cada elemento es accesible directamente.
Declaración de vectores
Los arreglos necesitan ser dimensionados previamente a su uso dentro del programa. Dimensionar significa
reservar el espacio necesario en la memoria principal.
La declaración de un vector en C tiene el siguiente formato:
tipo nombreDelArray [numeroElementos];
Operaciones con vectores
Las operaciones que se pueden realizar con vectores durante el proceso de resolución de un problema son:
- Asignación directa: la asignación de valores a un elemento del vector se realizará con la instrucción de
asignación:
A[3] = 5;
- Asignación desde dispositivos de E/S: la asignación de valores a los elementos de un arreglo puede hacerse
también mediante dispositivos de E/S como el teclado. En este caso, la instrucción de lectura se representará
como:
int A[5];
scanf(“%d”, $A[2]);
printf(“Elemento de A[2]: %d \n”, A[2]);
- Acceso secuencial (recorrido): A la operación de efectuar una acción general sobre todos los elementos de
un vector se denomina recorrido del vector. Se realizan utilizando estructuras repetitivas, cuyas variables de
control (por ejemplo “i”) se utilizan como índice del vector. El incremento del contador del bucle producirá el
tratamiento sucesivo de los elementos del vector.
- Actualización (añadir, borrar, insertar).
- Búsqueda.
- Ordenación.
Arreglos Bidimensionales – Matrices
Los arreglos de tipo bidimensional se denominan matrices. Una matriz es un conjunto de elementos, todos del
mismo tipo, en el cual el orden de los componentes es significativo y en el que se necesita especificar dos
índices para poder identificar cada elemento. Una matriz puede considerarse como un vector de vectores.
Declaración de matrices
La declaración de una matriz en C tiene el siguiente formato:
tipoDato nombreDelArray [elementosFila], [elementosColumna];
Recorrido y manipulación de matrices
Existen diferentes ordenamientos para el recorrido de una matriz. Los más usuales son: recorrido por filas y
recorrido por columnas.
- Recorrido por filas: los elementos de la primera fila se procesan primero, luego los de la segunda, y así
sucesivamente. Se hace variar el índice de fila, y dentro de éste al índice de columna. Al iniciar cada nueva
fila se recorre desde la primera columna nuevamente.
PILAS
Una pila (stack) es una estructura de datos relativamente simple. Pertenece al grupo de estructuras de datos
lineales. Es un tipo especial de lista lineal, es decir, es un conjunto ordenado de elementos de un tipo dado,
donde cada elemento tiene un único predecesor y un único sucesor.
Las inserciones y eliminaciones se hacen por un extremo: cima, cabeza o tope (top) de la pila.
Las pilas también se conocen como LIFO (last-in, first-out), es decir, último en entrar, primero en salir.
Implementaciones
Puede implementarse de dos maneras:
a) Con punteros: la ventaja es que es la forma dinámica.
b) Con vectores (arrays): con la desventaja de que limita el máximo número de elementos que la pila puede
contener y origina la necesidad de una función más: preguntar si está llena. Condiciones:
- Declarar el array de dimensión suficientemente grande que permita contener todos los posibles elementos
de la pila.
- Declarar una variable entera que almacene el índice del último elemento de la lista.
Operaciones básicas sobre pilas
- Crear o inicializar: inicializar una pila vacía. Sólo hay que inicializar el valor de la cima o tope en un valor
inicial (-1 en el caso de C).
- Pila vacía (empty): determinar si una pila está vacía. Devuelve verdadero si la pila está vacía (si el tope = -
1).
- Pila llena: determinar si una pila está llena. Devuelve verdadero si una pila está llena (si el tope = máximo –
1).
- Apilar (push): inserta un elemento en la cima de la pila. Se debe verificar que la pila no esté llena, caso
contrario habrá desbordamiento.
- Desapilar (pop): recupera y elimina el último elemento en la cima de la pila. Se debe verificar que la pila no
esté vacía.
- Obtener la cima de la pila: permite consultar el contenido del elemento que se encuentra en la parte
superior de la pila.
- Recorrer la pila.
COLAS
Es una lista en la que las inserciones se realizan por un extremo (final) y las eliminaciones se realizan por el
otro extremo (principio o frente). También se llaman listas FIFO (first-in, first-out), es decir, el primero en entrar
es el primero en salir.
Implementación con Arrays
Condiciones:
- Declarar el array de dimensión suficientemente grande que permita contener todos los posibles elementos
de la cola.
- Definir dos variables, frente y final, que representan la posición del primer elemento y del último elemento de
la cola respectivamente.
Operaciones básicas sobre colas
- Crear o inicializar: solo debemos asignar -1 a las variables frente y final.
- Cola vacía: devuelve verdadero si la cola está vacía (frente = -1 y final = -1).
- Cola llena: devuelve verdadero si la cola está llena (final = máximo – 1).
- Añadir un elemento al final: en primer lugar se deberá verificar que la cola no esté llena, para evitar el
desbordamiento. Luego hay que incrementar el final e insertar el elemento en la posición final. Tener en
cuenta que si el final = 0 (por ser C) significa que es el primer elemento, por lo tanto el frente debe ser igual a
0.
- Suprimir el primer elemento:
a) Frente móvil: en primer lugar se deberá verificar si la cola está vacía. Luego se pone en cero o vacío
(depende del tipo de dato de los elementos) el elemento que está en el frente de la cola, para sacar el primer
elemento. Finalmente, incrementar en 1 el frente para que deje de referenciar al elemento que ahora está
vacío. Pero antes tener en cuenta que si frente = final significa que la cola está vacía porque se ha eliminado
el último elemento, entonces hay que poner en -1 el frente y final, es decir inicializar la cola.
b) Frente fijo: en primer lugar se deberá verificar si la cola está vacía. Luego se pone en cero o vacío
(depende del tipo de dato de los elementos) el elemento que está en el frente de la cola, para sacar el primer
elemento. Reacomodar el vector, es decir mover todos los elementos una posición hacia adelante (a través de
un bucle for). Limpiar el lugar restante luego de la reestructuración, es decir, poner en cero o vacío. Y
finalmente actualizar el final (final = final – 1). Pero antes tener en cuenta que si frente = final significa que la
cola está vacía porque se ha eliminado el último elemento, entonces hay que poner en -1 el frente y final, es
decir inicializar la cola.
Diferencia entre la implementación de frente fijo y la de frente móvil: en la implementación de frente móvil,
cuando se llena, tenemos que esperar eliminar todos los elementos para poder ingresar uno nuevo. En la
implementación de frente fijo, podemos ir ingresando elementos a medida que se vaya liberando espacio.
- Consulta del primer elemento: esta operación es idéntica a obtener la cima de una pila, ya que nos
interesa el contenido del primer elemento de la cola, es decir del elemento en la posición del frente.
- Recorrer la cola.