Sie sind auf Seite 1von 26

Prof.

Jairo Parra
MANUAL DE C++
Estudiantes de la “ETCNRJRGS”
Conceptos Básicos
PROGRAMA
- En sentido informático -, está constituido por un conjunto de instrucciones que se
ejecutan ordinariamente de modo secuencial, es decir, cada una a continuación de la
anterior.
(Ejecute)

Lenguaje de
(Lenguaje maquina o binario 0 – 1).
bajo nivel
Lenguaje de alto
(Lenguaje natural)
nivel
Programa de alto nivel (código fuente)
extensión .cpp
Compilador
Programa ejecutable
Extensión .exe

El compilador, es capaz de detectar ciertos errores durante el proceso de


compilación, enviando al usuario el correspondiente mensaje de error.

COMANDOS
Todos los lenguajes, naturales o computacionales, tienen palabras que denotan una
acción. Los comandos no son más que acciones que debe interpretar y ejecutar el
computador.

DATOS
Los datos son símbolos que se convierten en condiciones, hechos, situaciones o
valores. Un dato puede significar un número, una letra, un signo ortográfico o
cualquier símbolo que represente una cantidad, una medida, una palabra o una
descripción. La importancia de los datos está en su capacidad de asociarse dentro de
un contexto para convertirse en información. Es decir, por si mismos los datos no
tienen capacidad de comunicar un significado y por tanto no pueden afectar el
comportamiento de quien los recibe. Para ser útiles, los datos deben convertirse en
información que ofrezca un significado, conocimiento, ideas o conclusiones.

1
PALABRAS CLAVES O PALABRAS RESERVADAS
Son una serie de palabras claves (keywords) que el programador no puede utilizar
como identificadores, ya que le pertenecen específicamente al programa, por lo que
el compilador lo reconocerá inmediatamente.

Ejemplo:
int, cout, cin, float.

INSTRUCCIÓN O SENTENCIA
Define una acción o un mandato que se debe realizar, esa acción o mandato, esa
acción o mandato se representa a través de un comando o lo que es lo mismo
palabras reservadas de un lenguaje de programación en particular. Una instrucción
esta compuesta por uno o más comandos (acción), datos, símbolos, variables o
constantes y expresiones, que en conjunto representan una instrucción o sentencia.
En la construcción de los programas se estila utilizar una instrucción por línea. Así
mismo, se utiliza la IDENTACIÓN, que no es más que la alineación de aquellas
instrucciones dentro de las estructuras que las contienen de manera ordenada que
permita visualizar el inicio y fin de cada bloque de instrucciones.

CONCEPTO DE SINTAXIS
Conjunto de reglas con las que se indica de modo inequívoco las operaciones que se
quieren realizar.

COMENTARIOS
La misión de los comentarios es servir de explicación o aclaración sobre como esta
hecho el programa, de forma que pueda ser entendido por una persona diferente o
por el mismo programador algún tiempo después, el compilador ignora por
completo los comentarios realizados en el programa.

Ejemplo de comentario de una línea: ( // )


// Este es un ejemplo de comentario de una línea
Ejemplo de comentario de varias líneas: ( /* ----- */ )
/*
ejemplo de
cometario
de varias
líneas
*/

2
OPERADOR DE INSERCCION ( << )
Se utiliza para introducir texto en un flujo de salida

OPERADOR DE EXTRACCIÓN ( >> )


Se utiliza para extraer caracteres de un flujo de entrada

SECUENCIAS DE ESCAPE

Nombre del carácter Nombre ASCII Secuencia de escape C++


Nueva línea NL \n
Tabulador horizontal HT \t
Alerta o pitido BEL \a
Retorno de carro CR \r
Barra invertida \ \\
Comilla simple ‘ \’
Comillas dobles “ \”
Signo de interrogación ? \?
Pág. 70

FUNCIÓN
Los programas informáticos suelen contener decenas de líneas de códigos. A
medida que los programas se van desarrollando y aumentan de tamaño, se
convertirían rápidamente en poco manejables si no fuera por la modularización, que
es el proceso consistente en dividir un programa muy grande en una serie de
módulos más pequeños y manejables, los cuales se les ha solido denominar de
distintas formas (subprogramas, subrutinas, procedimientos, funciones, etc).

La función MAIN()
Todo programa en C++ tiene un programa principal, que es con el que se
comienza su ejecución. Este programa es una función, pero que esta por
encima de las demás, como también se puede realizar por medio de un
procedimiento.

Ejemplo:
FUNCIÓN PROCEDIMIENTO
int main() void main()
{ {
Sentencia 1; Sentencia 1;
Sentencia 2; Sentencia 2;
Return 0;
} }
ESTRUCTURA BÁSICA DE UN PROGRAMA EN C++

3
1. // Mi primer programa
2. #include <iostream> librería - biblioteca
3. using namespace std;
4. int main ()
5. {
6. cout<< “mi primer programa”<<endl;
7. return 0;
8. }

La salida del código anterior es: mi primer programa, a continuación estudiaremos


línea por línea el código anterior.

1. Línea de comentario (slash)


2. Las líneas que comienzan con un símbolo de sostenido # son directivas para
el procesador. En este caso, la directiva #include<iostream>, le dice al
procesador que incluye el iostream estándar de archivo, este archivo
específico incluye las declaraciones de la norma básica de entrada y salida
de la biblioteca de C++ que son el cout (pantalla) y el cin (teclado).
3. Todos los elementos del modelo de librería de C++ se declaran dentro de lo
que se denomina un espacio de nombres. Indica que el programa utilizará
objetos que tienen nombre en una región especial denominada std. Por lo
tanto, para acceder a la funcionalidad declaramos esta expresión para poder
utilizar estas entidades. Esta línea es muy frecuente en los programas que
utilizan la biblioteca estándar, y de hecho será incluido en la mayoría de los
códigos. Los objetos incluidos en iostream (es decir, cin y cout) se
encuentran definidos en el espacio de nombres std.
4. Esta línea corresponde con el comienzo de la definición de la función
principal
5. Llave aperturando la función principal, int main()
6. El operador cout es un objeto. Su definición, junto con las descripciones de
las operaciones que se pueden aplicar sobre él, se encuentran en el archivo
iostream dentro del espacio de nombres std. Los objetos descritos en
iostream forman parte de la biblioteca iostream y se utiliza para realizar la
entrada y salida de datos por pantalla como también el operador endl que
forma parte de la biblioteca iostream.
7. Esta declaración hace que la función principal termine, retornando el valor 0
8. Llave finalizando la función principal, int main()

LIBRERIAS (bibliotecas) Y SUS TIPOS


4
La inclusión de un archivo de cabecera al comienzo de un archivo de programa
permite a los programadores utilizar las declaraciones del archivo de cabecera
dentro del archivo del programa. Los archivos de cabecera que hacen sus
declaraciones globalmente disponibles tienen típicamente la extensión h. por otro
lado, los archivos de cabecera que sitúan sus declaraciones dentro de un espacio de
nombres no global no utilizan típicamente ninguna extensión en el nombre de
archivo. Así, iostream es un archivo de cabecera cuyas declaraciones se sitúan en un
espacio de nombres no global. En particular, se incluyen en el espacio de nombres
std. Similarmente, recta.h es uno de los archivos de cabecera de las bibliotecas
EzWindows y sus declaraciones no se asignan a un espacio de nombres particular.
Por tanto, sus declaraciones forman parte de un espacio de nombres global. Así
mismo, se podría finalizar que la utilización de las mismas permite a la gente que
desarrolla software elegir personalmente la biblioteca adecuada para su tarea.

5
Manipuladores
biblioteca Tipos Propósito
cin>>
<iostream> Entrada y salida
cout<<
Pág. 267 endl; Manda un carácter de nueva línea a la salida y vacía el flujo de datos
ends; Mana un carácter nulo a la salida y vacía el flujo de datos
flush; Vacía la memoria intermedia de flujo de datos
dec Visualiza valores numéricos en notación decimal
hex Visualiza valores numéricos en notación hexadecimal
oct Visualiza valores numéricos en notación octal
Ejemplo
cout<< oct << i << endl; // realizan la misma función las 2 líneas
cout<< oct << i << “\n”<< flush;
<iomanip> setw( ) Fija la anchura del campo
Pág. 269 setfill (‘ ‘) Fija el carácter de relleno
left Los caracteres de relleno se colocan después de la visualización
right Los caracteres de relleno se colocan antes de la visualización
skips Se ignoran los caracteres espacio en blanco durante las
extracciones
setprecision Fija el número de dígitos de precisión, sin formato (SF).
() con formato (CF).
fixed Visualiza los valores en coma flotante con notación decimal,
(CF=6)
scientific Visualiza los valores en coma flotante con notación científica.
boolalpha Visualiza valores lógicos simbólicamente como true y false
noboolalpha Visualiza valores lógicos como 0 y 1
Ejemplo
cout<< setfill(‘#’) <<setw(15) <<”hola”<< endl;
Salida
###########hola
<math.h> acos ( x ) Ángulo cuyo coseno es x
Pág. 283 asin ( ) Ángulo cuyo seno es x
atan ( ) Ángulo cuya tangente es x
ceil ( ) El menor número entero mayor o igual a x
cos ( ) El coseno del ángulo x
cosh ( ) El coseno hiperbólico del ángulo x
exp ( x ) ex
fabs ( ) Valor absoluto de x
floor ( ) El mayor número entero menor o igual a x
log ( ) El logaritmo natural de x
log10 ( ) El logaritmo en base 10 de x
pow(x,y) xy
sin ( ) El seno del ángulo x
sinh ( ) El seno hiperbólico del ángulo x
sqrt ( ) La raíz cuadrada de x

6
tan ( ) La tangente del ángulo x
tanh ( ) La tangente hiperbólica del ángulo x
IDENTIFICADORES
Un identificador es un nombre con el que se hace referencia a una función o al
contenido de una zona de memoria (variable, constante), cada lenguaje tiene sus
propias reglas respecto a las posibilidades de elección de nombre.

Regla para la construcción de identificadores

1. Se forma con una secuencia de letras mayúsculas, minúsculas y números.


2. El carácter underscore ( _ ), se considera como una letra mas.
3. No puede contener espacios en blanco, ni otros caracteres citados, como
(* ; : - + , etc.).
4. El primer carácter de un identificador siempre debe ser una letra ó un
( _ ), no puede ser otro digito.
5. Diferencia las letras mayúsculas de las minúsculas, por esta razón Clase
es un identificador distinto a clase.
6. C++ permite definir identificadores con un número ilimitado de
caracteres.
7. elegir

VARIABLE
Son los identificadores que cambian su valor durante la ejecución del programa.

Variables locales: Se define solo en bloque en el que vaya a utilizar, de esta manera
evitamos tener variables definidas que luego no se utilizan

Variables globales: No son las mas recomendables, pues su existencia atenta contra
la comprensión del código y su encapsulamiento.

OPERADOR DE RESOLUCIÓN DE VISIBILIDAD falta operador ?:


Este operador permite acceder a una variable global cuando ésta se encuentra oculta
por otra variable local del mismo nombre.

Ejemplo:
int a=2;
void main ()
{
int a=10;
cout<< a << endl; // mustra en pantalla 10
cout<< ::a << endl; // mustra en pantalla 2

7
}

CONSTANTES
Son los identificadores que no cambian su valor durante la ejecución del programa.

Constantes de tipo CONST


Una variable declarada const no se puede cambiar, es decir, es una
constante. No obstante, la palabra const sólo se tiene en cuenta durante el
tiempo de compilación. El compilador emite un error cuando encuentra una
instrucción que quiere asignar un valor a una constante. Se declara dentro de
la sentencia int main().
Ejemplo:
const int c = 5;
Constante de tipo #DEFINE

#define CONSTANTE 5

La directiva #define es una palabra clave del pre-procesador.


Técnicamente se podría decir que no forma parte del lenguaje C++. Antes
que el compilador ve el código, el pre-procesador ya a reemplazado la macro
CONSTANTE por su definición – en nuestro caso el símbolo 5. Es decir, en
todos los sitios donde aparece el identificador CONSTANTE, el compilador
ve un 5 como si nosotros mismos hubiéramos escrito un 5 en estos sitios. Es
posible que el compilador ni siquiera puede decirnos qué exactamente está
mal en una compilación fracasa, porque no sabe nada del identificador
CONSTANTE. Se declara fuera del int main () y NO LLEVA ( ; ) AL
FINAL DE LA INSTRUCCIÓN.

Constates de tipo ENUM


Un tipo de datos enumerado es una manera de asociar nombres a números, y
por consiguiente de ofrecer más significado a alguien que lea el código. La
palabra reservada enum (de C++) enumera automáticamente cualquier lista
de identificadores que se le pase, asignándoles valores de 0, 1, 2, etc. Se
pueden declarar variables enum (que se representan siempre como valores
enteros). También se le pueden asignar los valores que se desean y ellos se
incrementan automáticamente y secuencialmente dependiendo de la
declaración que se hace. Se declaran fuera del int main ().

8
Ejemplo:

#include<iostream>
using namespace std;

enum colores{amarillo=10, azul, rojo}; // declaracion de enum


int main()
{
colores a=rojo; // declaracion y asignación

cout<<"resultado: "<<a; // muestra de resultado que es 12

system("pause");
return 0;
}

EXPRESIONES Y OPERADORES
Las expresiones son combinaciones de constantes, variables, operadores
(matemáticos, lógicos y relacionales) y nombre de funciones que se utilizan en el
cuerpo del programa. Las expresiones pueden ser simples o compuestas, las
expresiones simples, son asignaciones directas a una variable o constante de un
valor numérico o carácter. Ejemplo A=20, Una expresión compuesta es la
asignación a una variable o constante que surge de la unión de valores numéricos,
operadores aritméticos, de comparación o lógicos. ejemplo A=10+2.
Por otro lado, los operadores son signos especiales o conjunto de caracteres que
indican determinadas operaciones a realizar con las variable y/o constantes sobre las
que actúa en el programa. Entre los que tenemos:
Prioridad de operadores: explicar.
Aritméticos: ( +, -, *, /, % ).
Asignación: ( =, +=, -=, ++, --, *=, /= ).
Relacionales: ( ==, <, >, <=, >=, != ).
Permiten estudiar si se cumple o no
ciertas condiciones. Se obtienen
resultados de tipo boléanos (true-false).
Lógicos: ( &&, | |, ! ).
Son los que me permiten combinar los
resultados de los operadores
relacionales, comprobando que se
cumplan simultáneamente varias
condiciones. Se obtienen resultados de
tipo boléanos (true-false).

9
Operadores de incremento y decremento
Son operadores unarios que incrementan (++) ó disminuye (--) en una unidad
el valor de la variable a la que afectan. Estos operadores pueden ir antes o
después de la variable.

Ejemplo: (pre-post)

++variable // incrementa la variable antes que sea utilizada


variable++ // se utiliza la variable y después es incrementada
--variable // decrementa la variable antes que sea utilizada
variable-- // se utiliza la variable y después es decrementada

Operador ( , )
Este operador lo que nos permite es separar las expresiones.

Ejemplo:
int a, b, c;

Operador de dirección (&) e indirección ( * )


La forma de estos operadores es la siguiente:
&variable;
*expresión;
El operador dirección &, devuelve la dirección de memoria donde se
guarda el contenido de la variable.

Ejemplo:
Variable = &variable_1.

El operador indirección *, es el operador complementario de &. Aplicado


a una expresión que representa una dirección de memoria (puntero), permite
hallar el contenido o valor almacenado en esa dirección.

Ejemplo:
Variable = *variable_1. (Se explicaran mas adelante).

10
TABLA DE CODIGO ASCII

TIPOS DE DATOS

Tipo Rango Byte Bit Declaración


bool 0= false – 1=true 1 8 bool a=true;
Char -128 a 127 1 8 char a= ‘a’;
unsigned char 0 a 255 1 8 unsigned char a;
short int -32.768 a 32.767 2 16 hort int a;
unsigned short 0 a 65.535 2 16 Unsigned short a;
Int -2.147.483.648 al 2.147.483.647 4 32 int a=10;
unsigned int 0 al 4.294.967.295 4 32 unsigned int a;
long -2.147.483.648 al 2.147.483.647 4 32 IQLA
unsigned long 0 a 4.294.967.295 4 32 IQLA
Enum ----------------------------- 4 32 averiguar el rango
float 3.4x10-38 a 3.4x1038 4 32 IQLA
double 1.7x10-308 a 1.7x10308 8 64 IQLA
long double 3.4x10-4932 a 1.1x104932 10 80 IQLA
void Sin valor

11
CADENA DE CARACTERES

Es una secuencia de caracteres delimitados por comillas ( “ ), como por ejemplo: “esto es
una cadena de caracteres”. Dentro de las cadenas pueden aparecer caracteres (espacios) en
blanco y se pueden emplear las mismas secuencias de escape válidas para las constantes
carácter. Por ejemplo, las comillas ( “ ) deben estar precedidas por ( \ ), para no ser
interpretadas como fin de la cadena; también la propia barra invertida ( \ ). Es muy
importante señalar que el compilador sitúa siempre un byte nulo (\0) adicional al final de
cada cadena de caracteres para señalar el final de esta. Así la cadena “HOLA” no ocupa 4
byte, sino 5 byte, como también el primer carácter de una cadena de caracteres se localiza
en la posición 0. Es importante recalcar que a la hora de asignar un valor de tipo string
debe ir encerrado en doble comillas ( “ ), ya que si lo colocas en comillas simples ( ‘ ), el
compilador enviara un errar, ya que estas ultimas son utilizadas para variables tipo carácter
(char).

Manipuladores
biblioteca Tipos Propósito
<string> + Operador de concatenación – ejemplo: =nombre + ‘ ‘ + apellido
Pág. 134 += Añadido, añade caracteres al final de una cadena
Devuelve el número de caracteres de la cadena– Ejemplo:
.size() nombre.size()
Devuelve una subcadena de una cadena de caracteres, donde x es la
posición de inicio en la cadena, y y es el numero de caracteres que se
.substr (x,y) extraen o longitud de la subcadena solicitada –
Ejemplo:
nombre.substr(9,4)
Busca una subcadena dentro de una cadena de caracteres y devuelve su
posición, donde x es la subcadena a buscar y y es la posición de inicio
donde se pretende comenzar la búsqueda, si la subcadena no se
.finfd (“x”,y) encuentra devuelve un número mayor a la cadena de caracteres -
Ejemplo:
nombre.find(“hola”,0)
Lee una línea completa de la entrada introduciéndola en una cadena de
caracteres, el primer argumento especifica el flujo de caracteres del que
getline se quiere leer, el segundo es la cadena de caracteres que recibirá la
(cin,nomb,’\n’) línea leída y el tercero es el carácter que determina cuando finalizará la
getline (cin,nomb, extracción.
’a’) Esta función permite no utilizar el tercer argumento, ya que si no se
getline (cin,nomb) coloca, ella automáticamente asume que finalizara con la sentencia
ENTER.

Pág. 140, realizar el ejercicio.

12
CONTROL DEL FLUJO DE EJECUCIÓN

En principio, la sentencia de un programa en C++ se ejecutan secuencialmente, esto es,


cada una a continuación de la anterior empezando por la primera y acabando con la última.
El lenguaje C++ dispone de varias sentencias para modificar este flujo secuencial de la
ejecución. Las más utilizadas se agrupan en dos familias: las bifurcaciones, que permiten
elegir entre dos o más opciones según ciertas condiciones, y los bucles, que permiten
ejecutar repetidamente un conjunto de instrucciones tantas veces como se desee, cambiando
o actualizando ciertos valores.

SENTENCIA IF
Esta sentencia de control permite ejecutar o no una sentencia según se cumpla o no
una determinada condición.

Sintaxis:
if (expresión)
{
Sentencia 1;
}

Se evalúa expresión. Si el resultado es true (!=0), se ejecuta la


sentencia; si el resultado es false (=0), se salta sentencia y se prosigue
en la línea siguiente. Hay que recordar que la sentencia puede ser una
sentencia simple o compuesta.

SENTENCIA IF…ELSE
Esta sentencia permite hacer una bifurcación, ejecutando una parte u otra del
programa según se cumpla o no una cierta condición.

Sintaxis:

if (expresión)
{
Sentencia 1
}
else
{
Sentencia 2;
13
}

Se evalúa expresión. Si el resultado es true (!=0), se ejecuta la


sentencia 1 y se prosigue en la línea siguiente a sentencia 2; si el
resultado es false (=0), se salta sentencia 1 y se ejecuta sentencia 2 y
se prosigue en la línea siguiente. Hay que recordar que sentencia 1 y
sentencia 2 pueden ser sentencias simples o compuestas.

SENTENCIA IF…ELSE MÚLTIPLE


Esta sentencia permite realizar una ramificación múltiple, ejecutando una entre
varias partes según se cumpla una entre n condiciones.

Sintaxis:

if (expresión 1)
{
Sentencia 1
}
else if (expresión 2)
{
Sentencia 2
}
else if (expresión 3)
{
Sentencia 3
}
else if (…)
….
else
sentencia n;

SENTENCIA IF ANIDADAS
Una sentencia if puede incluir otros if dentro de la parte correspondiente a su
sentencia. A estas sentencias se les llama sentencias anidadas (una dentro de la
otra).
Sintaxis
if (a >= b ) if (a >= b )
if (b != 0.0) if (b != 0.0)
c = a / b; c = a / b;
else
c = 0.0;

14
Explicar el uso del else, dependiendo a cual if
corresponde, si al primero o al segundo.
SENTENCIA SWITCH
La sentencia que se va a describir a continuación desarrolla una función similar a la
de la sentencia if … else con multiples ramificaciones, aunque como se puede ver
presenta también importantes diferencias. La forma general de la sentencia switchn
es la siguiente:

Sintaxis:

switch (expresión)
{
Case expresión_cte_1:
sentencia 1;
break; //indica que la sentencia switch ha completado su tarea
Case expresión_cte_2:
sentencia 2;
break;
Case expresión_cte_3:
sentencia 3;
break;
….
Case expresión_cte_n:
sentencia n;
break;

default: “se ejecuta cuando ninguna expresión_cte coincide”;


}

La sentencia break interrumpe la ejecución de la expresión que se


evalúa y termina la estructura swicth. Si se omite la sentencia break,
después de ejecutar el código de case, la computadora ejecutará el
código que sigue a la siguiente case.

15
BUCLES

Además de bifurcaciones, en el lenguaje C++ existen también varias sentencias que


permiten repetir una serie de veces la ejecución de unas líneas de código, así mismo, cada
repetición del cuerpo del bucle se llama iteración del bucle. Esta repetición se realiza, bien
un número determinado de veces, bien hasta que se cumpla una determinada condición de
tipo lógico o aritmético. De modo genérico, a estas sentencias se les denomina bucles. Las
tres construcciones del lenguaje C++ para realizar bucles son el for, while y do…while.

SENTENCIA FOR
Es el tipo de bucle más versátil y utilizado del lenguaje C++. Se implementa cuando
se conoce la cantidad de iteraciones dentro del bucle que se desean realizar. Su
forma general es la siguiente:

Sintaxis:
For (iniciaización; expresión de control; incremento)
{
Sentencia 1;
Sentencia 2; for infinito:
…..
for ( ; ; )
Sentencia n;
}

Inicialización: Declaración e inicialización de la variable.


Expresión de control: expresión lógica que determina si se ejecuta
la acción.
Incremento: preparación para la siguiente iteración del bucle, sea
por incremento o decremento.

SENTENCIA WHILE
Esta sentencia permite ejecutar un bucle repetidamente, mientras se cumpla una
determinada condición, una sentencia o bloque de sentencias.

Sintaxis:
While (expresión de control)
{
Sentencia 1;
Sentencia 2;
…..
Sentencia n;
}
16
Expresión de control: se evalúa la expresión y si el resultado es
false no se ejecuta el bucle de la sentencia while; si el resultado es
true se ejecutan las sentencias y se vuelve a evaluar la expresión de
control hasta que sea false, en cuyo caso, la ejecución continúa en la
línea siguiente. En otras palabras, la sentencia while se ejecuta
repetidamente mientras la expresión de control se hace false.

(DE AQUÍ EN ADELANTE SE UTILIZÓ EL ÚLTIMO LIBRO)

SENTENCIA DO…WHILE
Se utiliza para especificar un bucle condicional que se ejecuta al menos una vez.
Esta situación se suele dar en algunas circunstancias en la que se ha de tener la
seguridad de que una determinada acción se ejecutará una o varias veces, pero al
menos una.

Sintaxis:
do
{
Sentencia 1;
Sentencia 2;
…..
Sentencia n;
}
While (expresión de control);

La construcción do comienza ejecutando sentencias. Se evalúa a


continuación la expresión lógica, si la expresión en true, entonces se repite la
ejecución de sentencias. Esta condición continúa hasta que la expresión es
false.

17
ESTRUCTURAS PARA TRABAJAR CON BUCLES

CONTADOR
Es una variable cuyo valor se incrementa o decrementa en una cantidad constante
cada vez que se produce un determinado suceso, acción o iteración. Los contadores
se utilizan con la finalidad de contar sucesos, acciones o iteraciones internas de un
bucle, proceso subrutina o donde se requiera cuantificar; deben ser inicializados
antes del ciclo o proceso, e incrementados o decrementados dentro del ciclo.

Ejemplo:

cont=0;
for (int i=0; i<n; i++ )
{
cont=cont + 1; sentencias // puede utilizarse el contador en
//cualquier sentencia que se necesite
cont=cont+1;
}
// diferencia en suma y multiplicación

ACUMULADOR
Es una variable que como su nombre lo indica, suma sobre si misma un conjunto de
valores, al finalizar con el ciclo contendrá, en una sola variable, la sumatoria de
todos los valores, que cumplen una determinada condición. La diferencia entre un
contador y un acumulador es que mientras el primero va aumentando en una
cantidad fija preestablecida, el acumulador va aumentando en una cantidad o valor
variable.

Ejemplo:

acum=0;
for (int i=0; i<n; i++ )
{
sentencias // puede utilizarse el contador en
acum=acum + variable; //cualquier sentencia que se necesite

acum=acum+variable;
}

18
VECTORES UNIDIMENSIONALES Y BIDIMENCIONALES

VECTORES
Un array (también conocido como arreglo, vector o matriz) es un modo de manejar
una gran cantidad de datos del mismo tipo bajo un mismo nombre o identificador
también se puede decir que es una secuencia de objetos del mismo tipo. Los
elementos de un array se enumeran consecutivamente 0, 1, 2, 3….., estos númeos se
denominan valores índices o subíndices del array, estos números localizan la
posición del elemento dentro del array.

Declaración del array


tipo nombre[número de elementos];
Ejemplo
int a[10];

Se reserva espacio para 10 variables de tipo int. Las 10 variables se llaman a y se


acceden a una u otra por medio de un subíndice, que es una expresión entera escrita
a continuación del nombre entre corchetes [ … ].

MATRICES
Las matrices se declaran de forma análoga, con corchetes independientes para cada
sudíndice. La forma general de la declaración es:

Tipo nombre[número_filas][número_columnas];

Donde tanto las filas como las columnas se numeran también a partir de 0. La forma
de acceder a los elementos de la matriz es utilizando su nombre, seguido de las
expresiones enteras correspondientes a los dos subíndices, entre corchetes.

En C++ tanto los vectores como las matrices admiten los tipos de variables escalares
(char, int, long, float, doublé, etc), y los modos de almacenamiento auto, extern,
static, con las mismas características que las variables normales (escalares), no se
admite el modo register. Los arrays static y extern se inicializan a cero por defecto.
Los arrays auto no se inicializan, contienen basura informática.

Como se verá más adelante, los arrays presentan una especial relación con los
punteros. Puesto que los elementos de un vector y una matriz están almacenados
consecutivamente en la memoria, la aritmética de punteros descrita previamente
presenta muchas ventajas. Por ejemplo, supóngase el código siguiente:

19
int vect[10], mat [3][4], *p;
p = &vect[0];
cout<< *( p + 2 ) << endl; // se imprimirá vec[2]
p = &mat[0][0];
cout<< *( p + 2 ) << endl; // se imprimirá vec [0][2]
cout<< *( p + 4 ) << endl; // se imprimirá vec [0][4]
cout<< *( p + 5 ) << endl; // se imprimirá vec [1][0]
cout<< *( p + 12 ) << endl; // se imprimirá vec [2][2]

RELACIÓN ENTRE VECTORES Y PUNTEROS

20
PUNTEROS

DIRECCIONES Y REFERENCIA
Cuando una variable se declara, se asocian tres atributos fundamentales con la
misma: su nombre, su tipo y su dirección de memoria.

Ejemplo:
int n; // asocia el nombre n, el tipo int y la dirección de alguna
// posición de memoria donde se almacena el valor de n.

0x4fffd34
n 13

int

Esta caja representa la posición de almacenamiento en memoria. El


nombre de la variable está a la izquierda de la caja, la dirección de la
variable esta encima de la caja, el tipo de variable está debajo de la
caja y el valor de la variable se encuentra dentro de la caja, para
acceder a este valor se realiza por medio del nombre de la variable.

Ejemplo: cout << n;

A la dirección de la variable se accede por medio del operador de


dirección ( & ),

Ejemplo: cout << &n;

El operador de dirección opera sobre el nombre de la variable para


obtener sus direcciones.

REFERENCIA
Una referencia es un alias de otra variable, se declara utilizando el operador
de referencia ( & ) que se añade al tipo de la referencia.

Ejemplo 1:
int n = 13;
int &r = n; // r es una referencia para n
cout<< “n = “ << n << “, r = “ << r << endl;

Ejecución: n = 13, r = 13
21
Ejemplo 2:
int n = 13;
int &r = n; // r es una referencia para n
cout<< “&n = “ << &n << “, &r = “ << &r << endl;

Ejecución: &n = 0x4fffd34, &r = 0x4fffd34

Regla: El carácter ( & ), tiene diferentes usos en C++:


1. Cuando se utiliza como prefijo de un nombre de una variable, devuelve la
dirección de esa variable.
2. Cuando se utiliza como sufijo de un tipo en una declaración de una variable,
declara la variable como sinónimo de la variable que se ha inicializado.
3. Cuando se utiliza como sufijo de un tipo en una declaración de parámetros de
una función, declara el parámetro referencia de la variable que se pasa a la
función.

DECLARACIÓN DE PUNTEROS
La declaración de una variable puntero debe indicar al compilador el tipo de dato al
que apunta el puntero; para ello se hace preceder a su nombre con un asterisco ( * ),
mediante el siguiente formato:

<tipo de dato apuntado> * <identificador de puntero>


int * n; //variable puntero
Para mi:
Ejercicio 1
int i=6, *p; // declaracion del puntero

p = &i; // p contiene la dirección de i


*p = 10; // i toma el valor 10

cout<<"el resultado de P: "<<p<<endl; // p contiene la dirección de i


cout<<"el resultado de *p: "<<*p<<endl; // muestra el valor 10
cout<<"el resultado de i: "<<i<<endl; // muestra el valor 10
Ejercicio 2
int i=6;
int *p = &i; // declaracion y asignación de dirección y valor de i=6
*p = 10; // i toma el valor 10

cout<<"el resultado de P: "<<p<<endl; // p contiene la dirección de i


cout<<"el resultado de *p: "<<*p<<endl; // muestra el valor 10
cout<<"el resultado de i: "<<i<<endl; // muestra el valor 10
Se pueden realizar de las dos formas, la diferencia es que en el ejercicio 1 el puntero se declara
aparte y por ello cuando se le asigna la dirección de i hay que colocar la variable p sin el signo ( *
): p = &i; para evitar error en compilación.
En cambio en el ejercicio 2 se declara *p y se le asigna la dirección y el valor en la misma
instrucción, sin provocar error de compilación

22
CONCEPTO DE PUNTERO O APUNTADOR
El valor de cada variable está almacenado en un lugar determinado de la memoria,
caracterizado por una dirección (que suele expresarse en hexadecimal). El
ordenador mantiene una tabla de direcciones que relaciona el nombre de cada
variable con su dirección en la memoria.

Variable Dirección de memoria


A 00FA:0000
B 00FA:0002
C 00FA:0004
P1 00FA:0006
P2 00FA:000A

Gracias a los nombres de las variables (identificadores), no hace falta que el


programador se preocupe de la dirección de memoria donde están almacenados sus
datos. Sin embargo, en ciertas ocasiones es más útil trabaja con las direcciones que
con los propios nombres de las variables. El lenguaje C++ dispone del operador
dirección ( &) que permite determinar la dirección de una variable, y de un tipo
especial de variable destinada a contener direcciones de las variables. Estas
variables se llaman punteros o apuntadores.

Así pues, un puntero es una variable que puede contener la dirección de otra
variable. Por tanto, los punteros están almacenados en algún lugar de la memoria y
tienen su propia dirección.

Como se ha dicho, el lenguaje C++ dispone del operador de dirección (&) que
permite hallar la dirección de la variable a la que se aplica. Un puntero es una
verdadera variable, y por tanto puede cambiar el valor a la variable a la que apunta.
Para acceder al valor depositado en la zona de memoria a la que apunta un puntero
se debe utilizar el operador indirección ( * ).

Ejemplo:

int i, j, *p; // p es un puntero int


p = &i; // p contiene la dirección de i
*p = 10; // i toma el valor 10
P = &j; // p contiene ahora la dirección de j
*p = -2; // j toma el valor de -2

23
Las constantes y las expresiones no tienen dirección, por lo que no se le puede
aplicar el operador ( & ). Tampoco puede cambiarse la dirección de una variable.
Los valores posibles para un puntero son las direcciones posibles de memoria.

Ejemplo:

p = &34; // las constantes no tienen dirección


p = & ( i + 1)i; // las expresiones no tienen dirección
*i = p; // las direcciones de las variables no se pueden cambiar

En conclusión se puede decir que un puntero es una variable que contiene una
dirección de memoria, y utilizando punteros su programa puede realizar muchas
tareas que no sería posible utilizando tipos de datos estándar.

Ejemplo de punteros: llamada de teléfono ó envía de carta

Ejemplo:
int main()
{
int n = 75;
int *p = &n; // p contiene la dirección de n

cout<<”n = “<< n <<”, &n = “ << &n <<”, p “ << p << endl;
cout<<” &p = “ << &p << endl;
}

Ejecución:
n = 75, &n = 0x4fffd34, p = 0xfffd34
&p = 0x4fffd10

24
ARITMETICA DE PUNTEROS

void main (void)


{
int a, b, c;
int *p1, *p2;
int **p; // p es un puntero que apuntará a otro puntero

p1 = &a; // la dirección de a es asignada a p1


*p1 = 1; // a p1 (a) se le asigna 1. Equivale a = 1
P2 = &b; // la dirección de b es asignada a p2
*p2 = 2; // a p2 (b) se le asigna 2. Equivale b = 2
p1 = p2; // le asigna a p1 la dirección de memora de p2 ( b )
*p1 = 0; // a p1 (b) se le asigna 0. Equivale b = 0
p2 = &c; // la dirección de c se le asigna a p2
*p2=3; // a p2 (c) se le asigna 3;

Cout << a << b << c << endl; // se imprime 103

p = &p1; // p contiene la dirección de p1


*p = p2; // p1 = p2
*p1 = 1; // c = 1

Cout << a << b << c << endl; // se imprime 101


}

Cppbasico_70 Pág. 45. RELACION ENTRE VECTORES Y MATRICES

25
OTRAS FUNCIONES IMPORTANTES

1. sizeof (varible): devuelve el tamaño en byte del tipo de variable introducida dentro
del paréntesis.

26

Das könnte Ihnen auch gefallen