Documente Academic
Documente Profesional
Documente Cultură
Es una tcnica de diseo de software que se enfoca en separar la funcionalidad de un programa en modulos independientes e intercambiables de tal manera que cada uno obtenga todo lo necesario para ejecutar su funcin deseada. Gracias a este tipo de programacin, los problemas se separan en los mdulos de tal manera que ninguno interacte con algn otro mdulo del sistema. En algunos casos los mdulos deben interactuar entre s para lograr su propsito, aunque es recomendable que logren su meta sin necesidad de interaccin alguna con otros mdulos. Estos mdulos en la mayora de lenguajes de programacin son llamados funciones. Algunos lenguajes pueden distinguir entre funciones que retornan valores y funciones que no retornan valores. En C/C++, por ejemplo, el lenguaje asume que toda funcin devolver un valor (ya sea nulo o cualquier tipo de dato diferente). Cuando hablamos de funciones en C/C++ debemos saber que podemos llamarlas de 3 formas diferentes: Llamado por asignacin: La funcin es asignada a una variable. Llamado por condicin: La funcin se llama dentro del argumento de un condicional o un ciclo. Llamado directo: Se llama directamente en el programa, no necesita ser asignada a una variable y tampoco es necesario pasarla como parmetro a un ciclo o condicional. Todos los identicadores en C/C++ deben ser declarados antes de ser usados. Esto se cumple tanto para funciones como para variables. Para las funciones esta declaracin debe ser hecha antes de la primera llamada a la funcin. El prototipo correcto de la declaracin de funciones es hacerlo antes de la funcin principal. El tener la declaracin antes del primer uso de la funcin permite al compilador revisar el nmero y tipo correcto de argumentos usados en la llamada. La declaracin da mucha informacin sobre la funcin. Al principio de esta, da a conocer el tipo de dato a retornar. Y entre los parntesis, da a conocer el tipo de datos que reciben los parmetros y el nmero de parmetros que recibir la funcin. Los nombres de las variables de los parmetros pueden ser omitidos en la
declaracin. Generalmente, al dejarlos en blanco, te da la exibilidad de renombrar las variables a tu antojo en cualquier momento.
Arreglos
Un arreglo es una serie de elementos del mismo tipo colocados en lugares de memoria contiguos que pueden ser referenciados individualmente agregando un ndice a un identicador nico. Esto signica que, por ejemplo, podremos almacenar 5 (o ms) valores de tipo entero en un arreglo sin necesidad de declarar 5 diferentes variables, cada una con un identicador diferente. En vez de eso, usando un arreglo podremos almacenar estos 5 valores diferentes del mismo tipo, con un mismo identicar nico. Como una variable comn, un arreglo debe ser declarado antes de ser usado. Los arreglos son un tipo de bloques no dinmicos de memoria y su tamao debe ser determinado antes de su ejecucin, por lo tanto el valor al crear el arreglo debe ser una constante. Se comete un error al hacerlo por medio de una variable o crearlo en medio de la ejecucin y esto puede llevar a que existan errores en tiempo de ejecucin.
Inicializar arreglos
Cuando declaramos un arreglo de mbito local, si no especicamos sus elementos, estos no sern inicializados a un valor por defecto, por lo que su contenido ser indeterminado hasta que almacenemos algunos valores en ellos. La inicializacin de un arreglo se puede hacer inmediatamente despus de ser declarado, con los valores deseados entre llaves. Cuando todos los valores se especican en la inicializacin, C/C++ permite dejar el tamao de este en blanco (el compilador reconocer automticamente el tamao del arreglo).
Arreglos multidimensionales
Este tipo de arreglos podran ser descritos como arreglos de arreglos. Podramos imaginar este tipo de arreglos como una tabla hecha de elementos, existen arreglos de muchas dimensiones, aunque los ms utilizados son los bidimensionales (constan de columnas y las, algo as como una hoja de clculo).
Los arreglos multidimensionales slo son una abstraccin para los programadores, ya que podemos obtener los mismos resultados con un arreglo unidimensional multiplicando los dos ndices y el resultado sera el tamao del arreglo unidimensional.
Ficheros
Para la entrada/salida de cheros en C (este caso utilizaremos C, por lo de la programacin modular, en C++ sera orientada a objetos que explicar ms adelante) necesitamos utilizar un puntero FILE, este puntero permite al programa hacer un seguimiento del chero al cual est accediendo.
fopen
Para abrir un chero necesitamos usar la funcin fopen, la cual retorna un puntero FILE. Cuando hayas abierto un chero, puedes utilizar el puntero FILE para permitirle al compilador el realizar acciones de entrada y salida en el chero.
La funcin fopen recibe siempre dos parmetros, el primero es la direccin donde est alojado el chero (si no existe, colocamos el nombre de cmo queremos llamar el nuevo chero) y el segundo parmetro recibe el modo en que abriremos nuestro chero, que es lo que explicar a continuacin. Modos de apertura de cheros
Constante
r w a r+ w+ a+ Abrir para slo lectura Abrir para escritura Abrir para anexar
Accin realizada
Abrir para lectura y escritura Abrir para lectura y escritura ( sobreescribiendo el archivo) Abrir para lectura y escritura (anexa si existe el archivo)
Si el archivo no existe o est protegido para slo lectura, el puntero retornar NULL. Por lo que es preferible que el usuario sea aquel que ingrese la direccin del chero que desea abrir.
fclose
Cuando hayas dejado de trabajar con el chero, debes cerrarlo usando la funcin fclose, slo recibe un parmetro: el puntero que contiene nuestro chero. Esto se hace con el n de borrar cualquier dato que haya quedado en nuestro buffer y no hubiera sido utilizado para ser escrito en el chero. La funcin retornar 0 si el puntero hacia el chero ha sido cerrado de forma exitosa, de otro modo retornar EOF, e intentar volver a cerrar el archivo.
Como es posible leer un carcter a la vez del chero, tambin es posible escribir carcter por carcter gracias a la funcin fputc. Esta funcin lee dos parmetros, el primero es el entero a copiar y el segundo parmetro es el puntero FILE.
Recursividad
Una funcin es recursiva cuando expresa la solucin de un problema con llamadas a s mismo. La primera llamada se plantea bajo un tamao N, las siguientes llamadas seguirn plantendose bajo problemas de igual naturaleza que el original pero el valor de N ir disminuyendo. Llegar un caso en que la resolucin del problema sea sucientemente manejable para poder resolverlo de forma no recursiva y es all donde estaremos frente un caso base. Las claves para implementar un algoritmo recursivo son las siguientes: Cada llamada se debera denir sobre un problema de mayor complejidad. Ha de existir al menos un caso base para evitar que la recurrencia sea innita. Los algoritmos recursivos pueden ser menos ecientes en cuestin de tiempo que los algoritmos iterativos, pero suelen ser mucho ms ecientes en espacio. Aunque la recursin sea un recurso muy poderoso con el cual podemos expresar soluciones simples a cierto tipo de problemas, tenemos que considerar que no todos los problemas pueden ser resueltos de forma recursiva. Existen 2 tipos de recursiones: Directa: Donde la funcin se llama directamente a si misma. Indirecta: Donde la funcin llama otra funcin, y sta, en algn momento, llama nuevamente a la primer funcin.
Expresiones
Las expresiones se pueden representar por medio de: Notacin de injo Notacin de postjo Notacin de prejo
Notacin de injo
Los operadores se escriben entre los operandos. Esta es la forma en la que usualmente copiamos expresiones matemticas. La notacin de injo necesita
informacin extra para hacer que el orden de evaluacin de operadores sea claro: reglas incorporadas en el lenguaje sobre la procedencia y asociatividad de operador, y parntesis que permiten omitir este orden.
Notacin de postjo
Este tipo de notacin es conocido tambin como RPN (Reverse Polish Notation). Los operadores se escriben despus de los operandos. El orden de evaluacin de los operadores siempre es de izquierda a derecha, y los parntesis no pueden ser usados en este tipo de notacin. Los operadores actan en los valores que estn a su izquierda.
Notacin de injo
a+b a+b*c x*y+v*w (a + b) * (c - d) * e * f a+b*c/d*f
Notacin de postjo
ab+ abc*+ xy*vw*+ ab+cd-*e*f* abc*d/f*+
Existen varios algoritmos para convertir una expresin desde notacin de injo a notacin de postjo. El algoritmo ms popular fue el algoritmo shunting-yard creado por el famoso matemtico Edsger W. Djikistra. Algoritmo Shunting-Yard: 1. Los operandos del arreglo injo pasan directamente al arreglo postjo. 2. En el tope de la pila, debe quedar siempre un operador que tenga mayor prioridad que todos los dems almacenados en la pila. 3. Cuando se encuentre un operador en el tope de la pila de mayor prioridad que el que se est analizando en el arreglo injo, debe pasar al arreglo postjo todos los operadores de la pilas mientras se siga cumpliendo esta condicin o la pila quede vaca. 4. Cuando se deje de cumplir el ciclo anterior, el operador que se est analizando en ese momento en el arreglo injo debe pasar a la pila. 5. Una vez localizado el carcter NULO en el arreglo injo, todos los operadores de la pila deben pasar directamente al arreglo postjo.
Notacin de prejo
Este tipo de notacin es conocido como Polish Notation. Los operadores son escritos antes de los operandos. Si bien en esta notacin los operadores son evaluados de izquierda a derecha, usan sus valores a su derecha, y si estos valores involucran clculos entonces cambian el orden en que los operadores tienen que ser evaluados.
Notacin de injo
a+b a+b*c x*y+v*w (a + b) * (c - d) * e * f a+b*c/d*f
Notacin de prejo
+ab +a*bc +*xy*vw ***+ab-cdef +a*/*bcdf
Listas
Las listas, las pilas y las colas son estructuras de datos dinmicas debido a que no se reserva una zona esttica o ja de memoria para su almacenamiento, sino que el espacio ocupado crece o decrece a medida que evoluciona o se ejecuta.
Pilas (Stacks)
Una pila es una estructura de datos lineal en la que los elementos se pueden aadir o eliminar por el nal, es decir por la cima o el tope de la pila. Es una coleccin ordenada de elementos por donde slo se puede acceder por un solo lugar, el tope de la pila. Se conocen como estructuras LIFO (Last Input, First Input).
Colas (Queques)
Es una estructura de datos lineal en la que los elementos se almacenan por el extremo inferior de la cola y son eliminados o atendidos por el principio o por la cabeza de la cola. Se conocen como estructuras FIFO (First Input, First Output).
Abstraccin: El concepto de abstraccin se reere a identicar las funcionalidades ms importantes de un objeto y aquello que le hace diferente a los dems. Se puede denir un objeto como un agente abstracto que le permite comunicarse con otros sin revelarse el detalle de su funcionamiento interno a sus caractersticas internas.
Ficheros
Podemos utilizar 3 clases para manipular cheros en C++. ofstream: Se utiliza para crear objetos que puedan manipular cheros y es de slo escritura. ifstream: Se utiliza para crear objetos que puedan manipular cheros y es de slo lectura. fstream: Se utiliza para crear objetos que puedan manipular cheros y es de lectura y escritura.
open()
Para abrir un chero necesitamos utilizar el mtodo open(). Este mtodo recibe dos parmetros el primero que es el nombre de nuestro chero a abrir y el segundo, que es opcional, es el modo de apertura. Las clases mencionadas anteriormente crean el objeto con el modo de apertura necesario, pero hay otros mtodos opcionales y que en algn momento nos pueden servir.
Instruccin
ios::in ios::out ios::binary ios::ate ios::app ios::trunc
Descripcin
Operaciones de lectura (por defecto en ifstream) Operaciones de escritura (por defecto en ofstream) Abrir el chero en modo binario (recomendado para cheros .bin) La posicin inicial sera al nal del chero. Toda escritura en el chero es hecha al nal del mismo. Si el archivo exista anteriormente y tena informacin. Borra esa informacin existente e ingresa la nueva.
Se pueden ingresar varios de estos modos de apertura como argumento utilizando un operador OR a nivel de bits para separar cada uno.
close()
Cuando se haya dejado de trabajar con el archivo, se debe enviar un mensaje al mtodo close() con el n de borrar cualquier dato que haya quedado en nuestro buffer. Esta funcin no recibe ningn parmetro.
Manipulacin de cheros
is_open() Este mtodo nos verica que nuestro archivo haya abierto de forma exitosa. Devuelve un valor booleano, True si la operacin fue exitosa o False si hubo algn error al momento de abrir el archivo. bad() Este mtodo retorna True si la operacin de lectura o escritura falla. fail() Retorna True en los mismos casos en que bad(), pero tambin toma en cuenta si ocurre un error en el formato. eof() Retorna True cuando el chero abierto para lectura alcanza el nal. good() Retorna False en los mismo casos que cualquiera de los mtodos anteriores retornara True.