Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Resumen C++ (5-9)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 27

Unidad 5

Introducción
Un lenguaje de programación es un conjunto de reglas que definen cómo se debe
describir la solución a un problema (en nuestro caso el algoritmo), para que esta pueda ser
ejecutada por una máquina.
“La programación es el arte de expresar soluciones a problemas de forma tal que una
computadora pueda ejecutar esas soluciones” Bjarne Stroustrup.

Resolución de Problemas

Estrategia
consiste en dividir o descomponer el problema original en una sucesión de problemas
más simples.
“La estrategia nos define QUÉ hacer”

Algoritmo
En esta etapa se plantea en base a la estrategia, el conjunto de acciones que
permitirán resolver el problema, mediante pseudocódigo, diagrama de flujo, etc.
“El algoritmo define CÓMO hacerlo”

Programa
Un algoritmo codificado empleando un lenguaje de programación interpretable por
una computadora constituye un programa.

Ejecución y prueba del programa


Para probar un programa escrito en un lenguaje de programación es necesario
generar un código ejecutable. Traducir el algoritmo escrito en un lenguaje de alto nivel a
“lenguaje de máquina”. Este proceso puede efectuarse mediante dos mecanismos
COMPILACIÓN y la INTERPRETACIÓN.

Compilación e Interpretación de Programas


El proceso de Compilación: Proceso de compilación, proceso en el cual se realiza una
traducción del código fuente a un código ejecutable. “compilador” conjunto de herramientas
encargadas de realizar dicha traducción.

El archivo ejecutable ya no requiere del compilador ni del entorno que permitió su


creación y puede ser utilizado en cualquier computadora.

El proceso de compilación es generalmente irreversible cada instrucción de un


lenguaje de alto nivel puede generar miles de instrucciones en lenguaje de máquina y
existen en general muchas formas de traducir una misma instrucción, y es tarea del
compilador utilizar la más adecuada en cada contexto.
Aunque para ejecutar un programa ya compilado no se requiera del código fuente
ni de las herramientas de desarrollo, para modificarlo sí. Pero debe conservar el código
fuente para poder modificarlo y recompilarlo.

El Proceso de Interpretación
Analiza cada instrucción del código fuente y realiza las acciones que la misma
representa.

Depuración de Programas
depuración o “debugging“:proceso por el cual se identifican y eliminan los errores
de un programa.

Tipos de errores de un Programa


i) Errores en Tiempo de Compilación: infringen las reglas del lenguaje,
denominados también errores de sintaxis. errores tipográficos, falta del
punto y coma final y utilización de variables que no han sido declaradas
previamente
ii) Errores en Tiempo de Ejecución: se producen errores al ejecutar estas
sentencias. Como utilizar un archivo que no existe o dividir por 0.
iii) Errores de Lógica: Ocurre cuando sin caer en los otros dos errores el
programa realiza otra acción a la esperada, debido a que hace acciones que
no debería de hacer, como sumar en vez de multiplicar.

Lenguajes de Programación
Los algoritmos se convierten en programas al ser codificados empleando lenguajes.
Pero las computadoras procesan los programas de acuerdo al tipo de lenguaje. Se los puede
clasificar en 3 tipos: Lenguajes de Máquina, Lenguajes de Bajo Nivel y Lenguajes de alto Nivel.
Lenguajes de Máquina
Pueden ser resueltas directamente por el procesador de la computadora sin
traducciones.
Una computadora solo puede procesar dos estados de señales eléctricas: encendido
y apagado (código binario, usando ceros y unos).
0110 1001 1010 1011
pueden ser ejecutados directamente sin un proceso de traducción previo lo que da
velocidad del proceso óptima. Pero como desventaja el código es complejo de crear, carece
de legibilidad, es muy complejo de depurar ante la presencia de errores, tiene total
dependencia del tipo de procesador.
Lenguajes de Bajo Nivel
pueden ser interpretados con más facilidad por una persona, pero la codificación
continúa siendo una tarea compleja. El lenguaje típico de bajo nivel es el conocido como
“ensamblador” (Assembler Language) formado por sentencias nemotécnicas para
representar instrucciones propias de un lenguaje de máquina.
ADD X, Y, SUMA
(Lee el valor de “X” e “Y”, y lo suma en “SUMA”)
Elaboración de soluciones grandes es muy engorroso. Además, están muy ligados al
juego de instrucciones de la marca y modelo de cada microprocesador. Se limita al control
de dispositivos electrónicos con programas pequeños y sencillos, o partes de otros
programas de computadoras.
Lenguajes de Alto Nivel
su gran ventaja es la portabilidad: los programas son independientes del hardware.
denominación de alto nivel debido a que su sintaxis es similar a la forma en que las personas
se comunican y dan órdenes, conformados por un conjunto de palabras y símbolos que
tienen una relación directa con su significado: while, if, write, else, class, file, float, string,
etc.
Existen numerosos lenguajes de alto nivel que proporcionan diferentes mecanismos
de abstracción (Basic, Pascal, C, C++, C#, Java, Python, Go, etc.).
Unidad 6
Estructura de un Programa C++

Elementos (Tokens) de un Programa C++


 Identificadores
 palabras reservadas
 literales
 operadores
 separadores.
Identificadores: nombres que empleamos para representar una constante, una
variable, una función, un tipo de dato, o un programa. Algunos identificadores
corresponden a elementos predefinidos de C++ y se denominan identificadores estándar.
Para declarar identificadores recordar las siguientes reglas:

 Utilizar como primer caracter una letra.


 Continuar con letras, dígitos o guión bajo ( _ ).
 No utilizar palabras reservadas de C++.
 C++ considera diferentes las mayúsculas de las minúsculas.

Palabras Reservadas (Identificadores standard): constituyen palabras reservadas


del lenguaje y no pueden emplearse con otro fin.
Literales (constantes): Constituyen valores con significado propio y único.
3.14 1e9 ‘a’ 102 “programa” 0xF2B true.
Operadores: Elementos del léxico de C++ conectar operandos provocando un
cálculo (computación) determinado + - * / = ¡ < > == [ ] : ; % { }
Separadores: Espacios en blanco, avances de línea, retornos de carro y tabulaciones.

Tipos de Datos Estándar de C++


Objetos string: cadenas de caratcteres

Notación y Definición de Constantes en C++


4 tipos de constantes: literales, definidas, declaradas y enumeradas.
Constantes literales: Notación y sintaxis determinada dependiendo el tipo de dato.
Notación científica (ej: 1e9), signos “+” y “–“, punto como separador de decimals y a comilla
simple (‘) como separador de miles opcional (1’234’567.89), si hay parte entera igual a 0 se
puede omitir (.54), introducir constantes en otras bases utilizando prefijos especiales como
hexadecimal (0xF2B) y binario (0b11001), datos de tipo cadena se utilizan las comillas
dobles (“programa”) y los caracteres individuales las comillas simples (‘x’).

Constantes declaradas “const”: A través del calificador “const” el valor asignado al


identificador simbólico no puede alterarse.

Constantes enumeradas: valores definidos y agrupados bajo un nombre.

Definición e Inicialización de variables


variable: posición de memoria donde se almacena un valor, representada por un
nombre o identificador. Toda variable debe tener asociado un tipo al declararse o
inicializarse (int, char, double, etc.).
Definición: en C++ se declara y define un variable indicando un tipo y luego el
nombre o identificador de la variable.
int x; //declaración de la variable x de tipo entera
Inicialización: inicializar una variable en C++ implica asignar un primer valor,
almacenándolo en el espacio de memoria correspondiente a la variable.
x = 27; // inicialización de la variable x con el valor 27
Es posible declarar y definir (inicializar) una variable en una misma acción.
float y = -2.35; // declaración y definición de y como float e inicialización con el
dato –2.35
char letra = ‘A’; // declaración de letra e inicialización con el valor ‘A’
Ambito de validez de una variable: El alcance o ámbito de validez de una variable
se limita al bloque del programa en donde fue declarada. Esto significa que, si una variable
está declarada de manera local dentro de una función, estructura de control, o programa,
solo podrá ser usada en ese ámbito (dentro de donde fue declarada). También sirve para
declarar 2 variables de distinto tipo con el mismo nombre, siempre y cuando, pertenezcan
a distintos ámbitos, o que el ámbito de una sea “global” en comparación de la otra.

A dentro del “if” es tipo carácter, mientras que fuera de esta es tipo entero. B solo
existe dentro del “if”.

Entrada y Salida
Un flujo de Entrada/Salida o I/O stream es una secuencia de caracteres que se
envían (fluyen) desde o hacia un dispositivo, C++ utiliza cout para enviar caracteres a una
salida; y cin para tomar caracteres. También cerr y clog para manejo de errores.
Los flujos cin, cout, cerr y clog se hallan en el archivo iostream como
#include<iostream>(estos archivos son denominados “librerías”, “cabeceras” o “headers”). En
esta librería todas las definiciones del estandar se agrupan en un “espacio de nombres” que
se llama std (std::cout). using namespace std le indica al compilador que debe buscar los
identificadores que utilizemos dentro de ese espacio de nombres automáticamente.
Caracteres especiales y manipuladores para I/O: permiten lograr una salida más
legible y mejorar la interfaz con el usuario

La mayoría se encuentra definido en el archivo de cabecera <iomanip>


Unidad 7
Expresiones
conjunto de operandos ligados por operadores. habitualmente para efectuar
cálculos, relaciones, asignaciones, etc.

Operadores
Operadores Aritméticos: permiten efectuar cálculos aritméticos. La jerarquía o
precedencia es idéntica en el álgebra de números.

++x incrementa en 1 el valor de x


x++ toma el valor de x y luego lo incrementa a en 1
--x decrementa en 1 el valor de x
x-- pos decrementa en 1 el valor de x
Operadores de asignación: “=” permite asignar el resultado de la expresión de la
derecha a la variable de la izquierda (podemos hacer asignaciones múltiples o simultáneas).
a = b = c = 30 ;
Operadores relativos de asignación: Permiten hacer más eficiente el código
ejecutable
Operadores Relacionales: Concepto es idéntico al que poseen en el álgebra de
números.
Estos operadores nos permitirán plantear expresiones relacionales, las cuales al ser
evaluadas arrojarán un valor de verdad: verdadero o falso, un valor de tipo bool.

Operadores Lógicos: conjunción o and (&&), la disyunción u or ( || ) y la negación o


not ( ! ).

Evaluación en cortocircuito: Si el operando de la izquierda es suficiente para


determinar el resultado de la proposición, no se evalúa el operando de la derecha. Por
ejemplo: (b!=0) and (a/b>1) sirve para evitar que se ejecute una división por 0
Operadores de Manipulación de Bits: Tratan a la información conjunto de bits. Solo
operandos de tipo discreto y no flotante (reales).
Precedencia de Operadores en C++: La precedencia o prioridad de un operador
determina el orden de aplicación de los operadores de una expresión.

Si aparecen operadores consecutivos de igual prioridad debe considerarse la forma


de asociarlos para resolver la expresión
Deben tenerse en cuenta las reglas siguientes para el planteo de expresiones:
 Todos los operadores de un mismo grupo tienen igual prioridad y
asociatividad.
 Si dos operadores se aplican a un operando, se aplica antes el de
mayor prioridad.
 Asociatividad I-D significa que primero se aplica el operador de la
izquierda y luego el siguiente hacia la derecha. Asociatividad D-I significa hacer
lo contrario.
 La precedencia o prioridad de operadores puede alterarse con los
paréntesis, quienes tienen máxima prioridad.

Funciones de bibliotecas estándar de C++


C++ dispone de una interesante variedad de funciones en sus bibliotecas estándar
ahorran un importante esfuerzo a la hora de efectuar ciertos cálculos. Por ejemplo
#include<cmath>, incluye la function sin() y la constant M_PI

Estructuras de Control

While: Las acciones se ejecutan mientras la expresión lógica sea verdadera. La


condición se evalúa antes de cada iteración.

do-while: Las acciones se ejecutan hasta que la expresión lógica arroje o falso. La
condición se evalúa luego de cada iteración.
Sentencia for: Las acciones se ejecutan repetidamente mientras que la exp2 arroje
verdadero; exp1 hace de expresión de inicialización y exp3 se ejecuta al final del grupo de
acciones en cada iteración.

C++ permite en la sentencia for, a través del operador coma ( , ), realizar más de una
instrucción

If-else: Se evalúa una expresión lógica, si es verdadera se realizan las acciones


indicadas en if; si es falsa se realizan las acciones a continuación del else. La estructura la
salida por falso puede omitirse, y

Switch: selección entre múltiples opciones en base al valor de una variable de


control. La variable de control debe ser de algún tipo de dato numérico y entero.
La acción propuesta a continuación de default se ejecutará si el valor de la expresión
de control no coincide con ninguno de los valores propuestos (default es opcional, si no esta
no se ejecutara nada).
luego de cada grupo de acciones se debe colocar “break;”. Si no continuará
ejecutando las del siguiente. Esto puede usarse para asignar un mismo grupo de acciones a
dos o más posibles valores.

break y continue: Ambas sentencias interrumpen la ejecución del grupo de acciones


abarcadas por una estructura repetitiva. “break” interrumpe la iteración actual y se sale de
la estructura repetitiva sin ejecutar las iteraciones restantes. “Continue” salta al final de la
estructura de repetición, pero no la abandona, y permite continuar con la próxima iteración.
uso de llaves { }: se utilizan llaves ( “{“ y “}” ) para delimitar el conjunto de
instrucciones que abarcaba una estructura de control es opcional cuando la estructura
abarca una sola instrucción o estructura anidada.
Unidad 8
función
Conjunto de acciones, diseñado generalmente en forma independiente para
resolver una parte del problema. pueden ser invocadas desde diferentes puntos de un
mismo programa y también desde otras funciones.
La finalidad del uso es simplificar el diseño, la codificación y la posterior depuración.

Las ventajas de usar subprogramas


 Reducen la complejidad del programa
 Facilitan el trabajo en equipo.
 Facilitan la prueba de un programa.
 Permiten optimizar el uso y administración de recursos. Cada función puede
gestionar localmente sus recursos auxiliares.
 Facilitan la reutilización del código: se pueden crear bibliotecas con
funciones para reutilizarlas fácilmente desde múltiples programas.
 Evitan mezclar en un mismo código problemas correspondientes a diferentes
niveles de abstracción: problemas de distinta naturaleza en un mismo programa se
resuelven en funciones diferentes.

¿Cuándo emplear subprogramas?


Cuando:

 Existe un conjunto de operaciones que se utilizan más de una vez en un


mismo programa
 Existe un conjunto de operaciones útiles que pueden ser utilizadas por otros
programas.
 Se desea agrupar procesos para lograr una mayor claridad en el código del
programa.
 Se pretende crear bibliotecas que permitan lograr mayor productividad en el
desarrollo de futuros programas.
 Se deben resolver en un mismo programa problemas correspondientes a
niveles de abstracción muy dispares, o problemas demasiado complejos.
diseñamos un programa al que llamaremos programa o función principal (“main”,
que significa “principal” función con que inicia un programa C/C++). Este podrá incluir entre
sus acciones llamar o invocar a otra función o subprograma.
En la etapa de ejecución del programa, la llamada a la función transfiere el control
de ejecución a ésta y comienzan a ejecutarse las acciones previstas. Al finalizar el control
retorna al programa que produjo la llamada, transfiriendo los resultados, y continúa luego
su ejecución.

Este esquema simple: programa principal - subprograma, puede adquirir mayor


complejidad con la existencia de otros subprogramas.

Tipos de Funciones/Subprogramas
Se los suele denominar funciones, procedimientos, subprocesos o subrutinas,
dependiendo de si el subprograma retorna o no un resultado.

Funciones en C++
Si un programa C++ contiene varias funciones estas pueden definirse en cualquier
lugar del programa (aún en archivos diferentes) pero en forma independiente una de otra
(no incluir la definición de una función dentro de otra).
Suele existir intercambio de información entre el programa o módulo que llama a la
función (desde ahora “cliente”) y la función misma. El programa puede enviarle información
(entradas) a la función al realizar la llamada, y esta puede a su vez retornar un resultado al
programa cliente.
Cuando una función resultada que se envía al programa cliente la función
“devuelve” o “retorna” un valor. Al evaluarse la expresión que invoca a una función, se
evalúa (ejecuta) la función y el resultado de la misma “reemplaza” a la llamada.

Declarando y definiendo funciones en C++


C++ exige declarar una función antes de que sea utilizada, especificar su interface.
Describir la función como un sistema de caja negra: cómo se la denomina, qué debe recibir,
y qué tipo de resultados produce en la cabecera de la función. Al declarar esta se debe
especificar tipo de resultado que devuelve la función, su nombre/identificador y,
finalmente, sus argumentos entre paréntesis (tipo y nombre separados por comas), lo que
se conoce como prototipo.

Usualmente se escribe el prototipo de la función antes de la función main, pero


recordemos que en C++ es posible efectuar la declaración de un elemento en cualquier lugar
del programa, con la única condición de hacerlo antes de invocar a dicho elemento. Cuando
se encuentran en archivos fuente separados (bibliotecas), se escriben los prototipos en un
archivo llamado “cabecera”, que por lo general tendrá la extensión .h (header/cabecera) y
se coloca antes del main la directiva “#include” seguida del nombre del archivo de cabecera
entre signos menor y mayor (si es una biblioteca del sistema) o entre comillas (si es una
biblioteca propia).
El ejecutable no estará completo hasta que no contenga las definiciones
correspondientes a todas las funciones invocadas se debe ingresar su prototipo y a
continuación, entre llaves (y sin el punto y coma) el cuerpo de la misma.

Resultados de una función en C++


Si una función devuelve un resultado, se debe especificar su tipo antes del nombre
o identificador y una variable o expresión de igual tipo (return ()).
Cuando se ejecuta una sentencia return la función finaliza inmediatamente
retornando el resultado indicado (pueden programarse funciones con múltiples sentencias
return utilizando estructuras de control).
Es posible además que una función no devuelva resultados. En ese caso se especifica
el tipo nulo void en su prototipo.

Intercambio de información desde funciones C++


En el prototipo y en la definición de la función planteamos los parámetros formales
o de diseño, y cuando invocamos a la función utilizamos parámetros actuales o de llamada.
¿qué pasa si una función modifica un parámetro? dos posibles respuestas, y ambas
pueden ser válidas en C++: por valor y por referencia.
Pasaje de parámetros por valor: Los valores de los parámetros actuales son
asignados en (copiados a) los parámetros formales. Los parámetros formales son entonces
variables nuevas, locales a la función independientes de los parámetros actuales
Pasaje de parámetros por referencia: La referencia consiste en utilizar como
parámetro formal una referencia a la posición de memoria del parámetro actual o de
llamada. Esto declarando un alias (mediante el símbolo &), o empleando punteros (Un alias
es otro nombre para la misma cosa). De esta forma, si la función modifica al argumento, en
realidad está modificando una variable del programa cliente.
Muchas bibliotecas utilizan este mecanismo en sus funciones cuando necesitan
retornar al main varios resultados, ya que el mecanismo del return como se mostró hasta
el momento solo admite un único valor de retorno. Aún así, las reglas de estilo modernas
no recomiendan utilizar la referencia como primera opción para retornar indirectamente
resultados.
En caso de usarse y no querer modificar el resultado se puede usar la proposición
“const” para no modificarla. Pero entonces, ¿Por qué la utilizaría?, hay varios motivos para
utilizar así las variables por referencia, uno de estos es en caso se necesite mandar una
enorme cantidad de información, y para no crear una nueva variable, lo que relentizaria el
programa, se utiliza un pasaje por referencia con el prefijo “const” para evitar la
modificación.
Parámetros por defecto: Es posible proponer, en el prototipo de la función,
parámetros formales inicializados con valores. Estos valores serán asumidos por defecto en
el cuerpo de la función cuando no se indique parámetros actuales en la llamada para tales
argumentos.

Sobrecarga de Funciones
Dos funciones diferentes pueden tener el mismo nombre si el prototipo varía en sus
parámetros (si tienen distinta cantidad de parámetros y/o diferentes tipos de parámetros).
Obsérvese un caso erróneo de aplicación de sobrecarga en funciones:

El programa cliente no podrá discernir a cuál, de las 2 funciones se refiere la llamada

Múltiples valores de retorno


no es posible colocar dos o más valores en una sentencia return. Y aunque una
función sí puede tener varias sentencias return, solo una de ellas será ejecutada en cada
invocación. Para el caso de 2 valores, utilizaremos el tipo std::pair (par). Es como enviar
desde la función al programa cliente un único “paquete”, que al abrirlo dentro contiene dos
elementos (el primer elemento siempre se denomina first y el segundo second). dos formas
de implementar

 La primera genera los dos resultados en variables independientes, y las


agrupa para conformar un par al momento de hacer el return . 1
 La segunda versión, en cambio, declara una variable p de tipo par y asigna
sus dos valores accediendo a ellos con p.first y p.second.
Ambos mecanismos son válidos.
dos formas de recibir los datos del par
Ambas versiones generan a ojos del usuario el mismo programa.
 En la primera, el resultado de la función se recibe en una variable r de tipo
par, y se accede a los dos datos mediante r.first y r.second.
 En la segunda implementación se declaran dos variables independientes
resultado y resto, que se unen “temporalmente” para parecer un par y permitir la
asignación, gracias a la función tie. Luego de asignado el resultado de la función, las
variables seguirán siendo independientes.

Recursividad
Una función es recursiva cuando se invoca a sí misma. Cualquier función C++ puede
incluir en su código una invocación a sí misma, a excepción de main().
Ventaja: Permite en algunos casos resolver elegantemente algoritmos complejos.
Desventaja: Son menos eficientes –en términos de velocidad de ejecución, y que la
cantidad de llamadas recursivas que una función puede realizar se encuentra limitada.

Entonces, para implementar una función recursiva debemos identificar dos cosas:
una definición recursiva o recurrente, que plantee la solución a una versión del problema
en términos de otras; y un caso base al cual arriben tarde o temprano todos los demás casos
y pueda resolverse directamente.
Condiciones para que una función sea recursiva
Toda función recursiva debe.
1. Realizar llamadas a sí misma para efectuar versiones reducidas de la misma
tarea.
2. Incluir uno o más casos donde la función realice su tarea sin emplear una llamada
recursiva, permitiendo detener la secuencia de llamadas (condición de
detención o stop)

Identificación y diseño de funciones


Diseño de prototipos: Un prototipo de función bien diseñado permite deducir
rápidamente qué hace la función y qué significan cada uno de sus argumentos.
Pasaje por referencia y múltiples valores de retorno: dos mecanismos, pasaje por
referencia y el uso de pares, para tal fin se recomienda en C++ moderno utilizar el segundo.
Esto se debe a que permite separar mejor cual es la entrada y cuál es la salida para dicha
función.
Entrada/salida en funciones: En general, no es conveniente emplear operaciones
de entrada y salida en funciones. Es mejor operar a través de parámetros y que la entrada
y salida la realice el programa cliente de la función.
Por ejemplo: si en una función incluimos operaciones de salida empleando el modo
consola en C++ a través de los objetos cin/cout, no podremos emplear esta función en un
programa C++ que opere en un entorno gráfico donde la entrada y salida se realizan a través
de componentes visuales ni tampoco cuando los datos se guarden en otros medios como
archivos. ¿Esto significa que nunca debemos usar cin/cout dentro de una función? No.
Significa que no debemos hacerlo cuando el objetivo de la función es calcular algo.
División de responsabilidades: Objetivos iniciales de la división en funciones separar
en partes más pequeñas para más facilidad de resolver. Estas partes deben ser
independientes. podría haber un conjunto de funciones que sólo realice cálculos, y otro
conjunto que solo se encargue de la entrada/salida de datos.
Es importante destacar que cada una de estas cuatro funciones tiene una y solo una
responsabilidad. No es recomendable asignar múltiples responsabilidades a una misma
función. Si ese fuera el caso en algún punto del programa, esa función con múltiples
responsabilidades deberá descomponerse a su vez de sub-funciones

Unidad 9
Definición de arreglo
Estructura de datos formada por una secuencia de elementos homogéneos donde
cada elemento tiene una posición relativa dentro de la secuencia.
Arreglos lineales
Tipo de dato denominado vector. Se debe incluir la biblioteca #include<vector>. Los
elementos que contiene un vector pueden ser int, float, char, string, o hasta vector
nuevamente. Todos sus elementos serán de un mismo y único tipo. El tipo de elemento se
debe explicitar al definir el arreglo
En C++ se utilizan posiciones “en base 0”. La primera posición válida es la posición 0
y la ultima es N (tamaño del vector) – 1. Sin embargo, C++ no verifica la validez del Índice,
con lo que, si se pide la posición 300 de un vector, el programa va a buscarlo, y al no
encontrarlo podría continuar sin problema, arrojar cualquier resultado o producir un error
de tiempo de ejecución (incluso después del momento de realizarse el error). C++ podemos
realizar dos operaciones adicionales sobre un arreglo previamente definido:
consultar(x.size()) y modificar su tamaño(x.resize()).
Notar que para los contadores de los ciclos se utiliza el tipo unsigned int (o size_t)
en 1 lugar de int cuando se compara con el .size() del vector. Esto se debe a que un índice
no puede ser negativo.
Inicialización de los elementos: Para inicializar un arreglo en el programa podemos
recorrer cada elemento del mismo y asignar los valores correspondientes, como en
pseudocodigo.
Cuando se requiera inicializar todos los elementos de un vector con un mismo valor
este valor se puede ingresar a continuación de la dimensión, separándolo de esta mediante
una coma.

Al cambiar el tamaño con “resize” se puede agregar también un valor con el cual se
llenarán las nuevas posiciones en el caso de que el nuevo tamaño sea mayor que el anterior.
Existe además una sintaxis alternativa que permite definir e inicializar el arreglo con una
secuencia de valores fija. Tambien se pueden declarar el valor de cada espacio de la
siguiente manera.

Arreglos bi/multi-dimensionales
No existe en C++ una forma sencilla de operar con arreglos multidimensionales
dinámicos. Para resolver este problema, se debe recurrir bibliotecas externas. Una
biblioteca llamada “matriz”. Para operar con matrices (arreglos bi-dimensionales) directiva
#include<Matrix>.

(Diferencia entre una biblioteca estándar y una externa, es la primera forma parte
de cualquier entorno de desarrollo C++, y la segunda debe obtenerse por separado).
se declara de una forma muy similar a la que se utilizó previamente para vectores:
Al utilizar .size() para obtener el tamaño de una matriz, se debe explicitar entre los
paréntesis cuál de estos dos tamaños se desea consultar (0 = filas, 1= columnas):

Arreglos y funciones
Es posible utilizar arreglos como parámetros de funciones o como tipos de retorno.
Sin embargo, dado que engeneral un arreglo contendrá muchos elementos, será
recomendable pasarlos por referencia cuando sean argumentos (para evitar copiar tantos
elementos), y utilizar el calificativo const para prevenir las modificaciones involuntarias.

Matrices y funciones para arreglo lineales: La implementación de matrix que


estamos utilizando esconde en realidad un vector de vectores.
Definición de registro
Estructura de datos formada por un conjunto de elementos (no necesariamente de
igual tipo), donde cada elemento está identificado por un nombre (identificador) único
dentro de dicho conjunto.

El tipo struct.
Se requiere organizar múltiples datos en una única estructura, pero admitiendo
diferente naturaleza (tipo). Registros. En C y C++ se denomina. Cada variable (denominada
variable miembro, campo, o atributo) debe declararse individualmente con su propio y
único identificador

Luego de esta definición, “ficha” podrá ser considerado como un nuevo tipo de
datos, y usado para declarar variables de ese tipo, como si fuese un int o un float, por
ejemplo.
Se puede utilizar una lista de inicialización de forma similar a la que se presentó para
arreglos, listando los valores para cada campo en el orden en que fueron declarados en el
struct.

Procesamiento de una variable struct: Para procesar la información relacionada a


una estructura podemos operar con sus miembros individualmente o en ocasiones con la
estructura completa. Para acceder a un miembro individual debemos utilizar el identificador
de la variable struct, un punto de separación y el nombre del miembro componente.
Es posible asignar un struct a otro. Esto permite entonces, pasar efectivamente por
copia structs a funciones, o hacer funciones que retornen structs. No es posible mostrar
(cout) o leer (cin) un struct completo en una sola instrucción deben realizarse sobre cada
uno de sus campos por separado.

Arreglos y structs
Es posible emplear arreglos como miembros de una composición struct y también
definir un arreglo cuyos elementos sean estructuras:

También podría gustarte