Вы находитесь на странице: 1из 9

Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!

$
%&I'(")I*+* *(, '+,,(, -+C%,.+* *( CI(&CI+), *(P+".+M(&./ *( -I)IC+
C+P0.%,/ I
Introduccin y conceptos fundamentales.
1. .ipo2 #! 'aria3l!2.
Para poder escribir programas tiles, es necesario introducir el concepto de variable.
Ejercicio Mental: Imagine que le solicito recordar el nmero 5 y luego le pido memoriar el nmero !
al mismo tiempo. "sted tiene almacenados dos #alores diferentes en su memoria $5 y !%. &'ora, le
solicito sumar ( al primer nmero que le dije, usted debe retener en su memoria los nmeros ) $esto es
5*(% y !. Por ltimo le pido que reste los dos #alores y obtenga + como resultado.
El ejercicio mental, es un ejemplo sencillo de lo que un computador puede 'acer con dos #ariables. El
mismo proceso puede ser e,presado en -** con las siguientes declaraciones:
1
2
3
4
a = 5;
b = 2;
a = a + 1;
result = a -
b;
.efinimos variable como una porcin de memoria destinada para almacenar un #alor.
-ada #ariable necesita un nombre que la identifica y que la distingue de otras. Por ejemplo, los
nombres de #ariables a, b, and result. Puede ser usado cualquier nombre siempre y cuando son
identificadores #/lidos en -**.
1.1. I#!ntifica#or!2
"n identificador 45li#o es una secuencia de una o m/s letras, d0gitos o guin bajo $1%.
&dem/s, los identificadores deben comenar con una letra $o con guin bajo o con dos guiones bajos,
pero 2stos son reser#ado para palabras cla#es espec0ficas del compilador o identificadores e,ternos%.
Identificadores &/ 45li#o26 espacios, signos de puntuacin $. , 3 : % y s0mbolos $4 5 6 7 8 9 :%
;o pueden en ningn caso comenar con un d0gito.
-** utilia un nmero de palabras cla#e para identificar operaciones y descripciones de datos, as0 que
los identificadores creados por el programador no pueden ser iguales a estas palabras cla#es. <as
palabras cla#es est/ndar reser#adas que el programador no puede ser como identificadores son:
alignas, alignof, and, and_eq, asm, auto, bitand, bitor, bool, break, case,
catc, car, car1!_t, car32_t, class, com"l, const, conste#"r,
const_cast, continue, declt$"e, default, delete, do, double, d$namic_cast,
else, enum, e#"licit, e#"ort, e#tern, false, float, for, friend, goto, if,
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
inline, int, long, mutable, names"ace, ne%, noe#ce"t, not, not_eq, null"tr,
o"erator, or, or_eq, "ri&ate, "rotected, "ublic, register,
reinter"ret_cast, return, sort, signed, si'eof, static, static_assert,
static_cast, struct, s%itc, tem"late, tis, tread_local, tro%, true,
tr$, t$"edef, t$"eid, t$"ename, union, unsigned, using, &irtual, &oid,
&olatile, %car_t, %ile, #or, #or_eq
Important!776
-** es un lenguaje sensiti#o. <o que significa que un identificador escrito en maysculas no es
equi#alente a otro con el mismo nombre pero en minsculas. En el ejemplo anterior, la #ariable
()*+,- no es la misma que la #ariable result, o que la #ariable (esult. Estos son tres
identificadores diferentes que identifican tres #ariables diferentes.
1.2. .ipo2 fun#am!ntal!2 #! #ato2
En - slo e,isten cinco tipos fundamentales que son: 4oi#, c8ar, int, float y #ou3l! y los tipos
enumerados, !num. -** a=ade un s2ptimo tipo, el 3ool, y el resto de los tipos son deri#ados de ellos.
>ambi2n e,isten ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada
tipo3 los modificadores pueden ser: 28ort, long, 2ign!# y un2ign!#, y pueden combinarse algunos de
ellos.
<os #alores de las #ariables son almacenados en algn lugar no espec0ficado en la memoria del
computador en forma de ceros y unos. El programa no sabe la locacin de la #ariable, 2ste slo se
refiere a ella por su nombre. <o que el programa necesita es saber el tipo de dato que es almacenado
en la #ariable. ;o es lo mismo almacenar un simple nmero entero que una letra o que nmero largo
de punto flotante o real, as0 todos est2n representados por unos y ceros, no son interpretados de la
misma manera y sobre todo no ocupan la misma cantidad de memoria.
<os tipos fundamentales de datos son las unidades de almacenamiento b/sicas $que se encuentran en
la mayor0a de los sistemas%. Pueden ser clasificados de la siguiente manera:
.ipo Caract!r!2 : Pueden representar un caracter simple como ./. o .0.. El tipo m/s b/sico
es car, el cual es un caracter de ( bit.
.ipo &9m!ro (nt!ro6 Pueden almacenar el #alor de un nmero completo, como 1 o 1224.
E,isten en una #ariedad de tama=os y pueden ser signed o unsigned, depediendo de si pueden
almacenar #alores negati#os o no.
.ipo Punto -lotant! (o "!al)6 Pueden almacenar #alores reales, como 3.14 o 2.21, con
diferentes ni#eles de precisin, dependiendo de cu/l de los tres tipos de punto flotante se usa.
.ipo :ool!ano6 Es conocido en -** como bool, y puede slo representar dos estados true o
false.
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
&qu0 encontrar/n una lista completa de los tipos fundamentales en -**:
;rupo &om3r! #!l .ipo #! #ato< &ot!2 2o3r! tama=o > pr!ci2in
>ipo caracter
char
>iene e,actamente ( bit de tama=o9Por lo
menos ? bits.
char16_t
;o m/s peque=o que car9Por lo menos 16
bits.
char32_t
;o m/s peque=o que car1!_t./Por lo
menos 32 bits.
wchar_t
Puede representar el conjunto de caracteres
m/s largo que soporta -**
Tipo Entero (signed)
signed char Mismo tamao que car./ Por lo menos 8 bits.
signed short int
o m!s pequeo que car./Por lo menos 16
bits.
signed int o m!s pequeo que sort. /Por lo menos bits.
signed long int o m!s pequeo que int. /Por lo menos 32 bits.
signed long long int
o m!s pequeo que long. /Por lo menos 6"
bits.
Tipo Entero (unsigned)
unsigned char
(tiene los mismo tamaos que su #om$logo
signed)
unsigned short int
unsigned int
unsigned long int
unsigned long long int
Tipo Punto %lotante
float Por lo menos 32 bits.
double Pre&isi$n no menor que float
long double Pre&isi$n no menor que double
'oolean t(pe bool
)oid t(pe void o alma&ena
ull pointer decltype(nullptr)
@<os nombres de ciertos tipos de enteros puden ser abre#iados sin sus componentes signed e int,
slo la parte que ;A est/ en it/lica se requiere para identificar el tipo de dato, la parte en it/lica es
opcional. Por ejemplo: signed sort int puede ser abre#iado como signed sort* sort
int* o simplemente sort3 todos ellos identifican el mismo tipo de dato.
.entro de cada uno de los grupos antes descritos, la diferencia entre los tipos dedatos es solamente su
tama=o $cu/nto ocupan ellos en memoria%: El primer tipo de cada grupo es el m/s peque=o $ocupa
menos espacio en memoria% y el ltimo el m/s largo $ocupa m/s espacio en memoria%, con cada tipo
siendo como m0nimo tan largo como el inmediantamente anterior. <os tipos dentro de cada grupo
tienen las mismas propiedades.
;ote que en la lista anterior nicamente car tiene un tama=o especifico, el cual es e,actamente de
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
un byte u ? bits, de resto ningn tipo fundamental de dato tiene un tama=o espec0fico est/ndard, slo
un m0nimo tama=o a lo sumo.
+os tipos est!n e,presandos en bits- mientras m!s bits un tipo tiene* ma(or es la &antidad de .alores
que puede representar* pero al mismo tiempo* &onsume tambi/n m!s espa&io en memoria0
Tamao Valores represntables
81bit !5)
2 2
8
161bit )5 5B)
2 2
16
321bit + !C+ C)D !C)
2 2
32

6"1bit (? ++) D++ EDB DEC 55( )()
2 2
6"

Para datos tipo enteros* tener m!s posibilidades para representarlos* signi3i&a que los rangos de los
.alores que representan son m!s grandes. Por e4emplo* un unsigned integer de 161bits puede ser
representar 65536 de .alores di3erentes en un rango de 6 a 65535* mientras que su #om$logo signed
ser! &apa7 de representar en el me4or de los &asos .alores entre 132868 ( 32868. ote que el rango de
los .alores positi.os es apro,imadamente la mitad &omparando /stos dos tipos de datos* esto es debido
al #e&#o que uno de los 16 bits es usado por el signo. Esta es una di3eren&ia modesta en el rango ( es
una ra7$n que 4usti3i&a que uso indis&rimidado de los tipos unsigned pasaos puramente en el rango de
.alores positi.os que pueden representar.
Para datos tipo puntos flotantes* el tamao a3e&ta la pre&isi$n.
Fi el tama=o o la precisin del tipo de dato no es su principal problema, entonces car* int*
y double son los que los programadores usualmente usan para representar caracteres, enteros y
puntos flotantes $reales% respecti#amente. <os otros tipos en los respecti#os grupos son utiliados slo
en casos muy particulares.
<os tipos de datos descritos anteriormente $caracteres, enteros, puntos flotantes y booleanos% son
colecti#amente conocidos como tipos aritm2ticos. Pero e,isten adicionalmente dos tipos
fundamentales: &oid* que identifica la falta de tipo de dato3 y el tipo null"tr, que es un tipo
especial de puntero. &mbos ser/n discutidos en cap0tulos m/s adelante.
9:: soporta una amplia .ariedad de tipos basados en los tipos 3undamentales dis&utidos aqu;* estos
otros tipos son &ono&idos &omo <tipos de datos &ompuestos< ( &onstitu(en una de las 3ortale7as del
lengua4e 9::* es posible que las .eamos en 3uturos &ap;tulos.
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
?. *!claracin #! 4aria3l!2
-** es un lenguaje de programacin con una fuerte dependencia a los tipos de datos, cada #ariable
requiere ser declarada con su tipo de dato antes de ser usada por primera #e. Gsto informa al
compilador, el tama=o en memoria que debe estar disponible y cmo debe interpretar dic'o #alor. <a
sinta,is para declarar una nue#a #ariable en -** es una sola: debe escribir el tipo de dato seguido del
nombre de la #ariable $o identificador%. Por ejemplo:
1
2
int a;
float m$number;
<as anteriores son dos declaraciones #/lidas de #ariables:
<a primera declara una #ariable tipo entera int con un identificador $o nombre% a.
<a segunda declara una #ariable tipo real o punto flotante float con el identificador
m$number .
"na #e declaradas, las #ariables a y m$number pueden ser usadas dentro del resto del programa a su
alcance. Fi declara m/s de una #ariable del mismo tipo, pueden ser declaradas en un slo rengln
seprando sus identificadores con comas y terminando el rengln con un punto y coma. Por ejemplo:
int a, b, c;
Gsto declara tres #ariables $a, b y c%, todas del mismo tipo int, y tiene e,actamente el mismo
significado de :
1
2
3
int a;
int b;
int c;
Para #er como lucen estas declaraciones en un programa en un ejemplo sobre el ejercicio
mental propuesto al principio del numeral ? de 2ste cap0tulo:
-digo fuente 5: Falida:
1
2
3
4
5
!
1
3
4
12
11
12
13
14
15
// operando con variables
5include 6iostream7
using namespace std;
int main 89
:
// declarando las variables:
int a, b;
int result;
// proceso:
a = 5;
b = 2;
a = a + 1;
4
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
1!
11
13
14
22
21
22
23
result = a - b;
// escribir out el resultado:
cout 66 result;
// terminar el programa:
return 2;
;
;o se preocupe si algo aparte de las declaraciones de las #ariables luce un poco e,tra=o en el
programa. >odo ser/ e,plicado en detalle bien sea en 2ste o en otro cap0tulo.
9.1 Initialization of variables
-uando las #ariables en el ejemplo anterior son declaradas, ellas pueden tener un #alor indeterminado
'asta que son asignadas a un #alor por primera #e. Pero tambi2n es posible para una #ariable tener
un #alor espec0fico desde el mismo momento de ser declarada. & esto es lo que se llama inicializacin
de la #ariable: cuando se le d/ un #alor por primera #e.
En -** 'ay tres maneras de inicialiar #ariables. >odas son equi#alentes y son producto de la 'istoria
e#oluti#a del lenguaje en a=os:
<a primera es conocida como inicializacin tipo C $la 'erencia #iene del lenguaje -%, consiste en colocar
un signo igual $H% entre el tipo de dato y el #alor al cual es inicialiada:
t$"e identifier = initial_&alue;

Por ejemplo, para declarar una #ariable tipo int llamada # e inicialida al #alor cero en el momento
de ser declarada, escribimos:
int # = 2;
El segundo m2todo es conocido como la inicializacin tipo constructor $introducida por el lenguaje -**%
donde se encierra el #alor entre par2ntesis. $ $% %.
t$"e identifier 8initial_&alue9;
Ior e,ample:
int # 829;
Iinalmente, el tercer m2todo es conocido como inicialiacin uniforme, es similar a la anterior pero se
usan corc'etes $ JK % en lugar de par2ntesis redondos $esta #ersin fue introducida en la #ersin
re#isada de -** en el !E((%.
t$"e identifier :initial_&alue;;
Ior e,ample:
int # :2;;
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
<as tres maneras de inicialar #ariables son #/lidas y equi#alentes en -**.
-digo fuente ): Falida:
1
2
3
4
5
!
1
3
4
12
11
12
13
14
15
1!
11
13
// initializacin de variables
5include 6iostream7
using namespace std;
int main 89
:
int a=5; // valor inicial: 5
int b839; // valor inicial: 3
int c:2;; // valor inicial: 2
int result; // valor inicial indeterminado
a = a + b;
result = a - c;
cout 66 result;
return 2;
;
!
?.2 Intro#ucin a la2 ca#!na2 #! #ato2
<os tipos de datos fundamentales representan los tipos m/s basicos que las maquinas puede
manipular. Fin embargo, como digimos anteriormente, una de las fortaleas de -** es la riquea en
tipos compuestos para los cuales los tipos fundamentales son la base que los forma.
"n ejemplo de tipo compuesto es la clase string. Lariables de este tipo est/n disponibles para
almacenar secuencias de caracteres, tales como palabras o frases. Fon una 'erramienta muy til4
<a primera diferencia con los tipos de datos fundamentales es que para poder declarar y usar objetos
$#ariables% de este tipo de datos, los programas necesitan incluir un encabeado donde el tipo est/
definido dentro de una librer0a $en nuestro caso estamos trabajando con la librer0a estandar%, el 'eader
es 6string7:
-digo fuente D: Falida:
1
2
3
4
5
!
1
3
4
12
//Mi segundo string. El primero esta en
//el cdigo fuente 2.
5include 6iostream7
5include 6string7
using namespace std;
int main 89
:
string m$string;
m$string = <)ste es un string<;
)ste es un string
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
11
12
cout 66 m$string;
return 2;
;
-omo se #e en el cdigo anterior, las cadenas o strings puden ser inicialiados con una una cadena de
de letras o caracteres #/lida literalmente 'ablando, as0 como pensar0amos que un tipo de #ariable
num2rica ser0a inicialiada con nmeros. .e igualmanera que los tipos fundamentales, todos los
formatos de inicialiacin son #/lidos con las cadenas o strings:
1
2
3
string m$string = <-is is a string<;
string m$string 8<-is is a string<9;
string m$string :<-is is a string<;;
Fe pueden realiar con los strings todas las operaciones b/sicas de igual m anera que para los tipos de
datos fundamentales, como por ejemplo ser declararas con o sin #alores iniciales y cambiar su #alor
durante el programa:
-digo fuente ?: Falida:
1
2
3
4
5
!
1
3
4
12
11
12
13
14
//Mi segundo string. El primero esta en //el
cdigo fuente 2.
5include 6iostream7
5include 6string7
using namespace std;
int main 89
:
string m$string;
m$string = <)ste es el contenido inicial
del string<;
cout 66 m$string 66 endl;
m$string = <)ste es el contenido inicial
del string<;
cout 66 m$string 66 endl;
return 2;
;
)ste es el contenido inicial
del string
)ste es el contenido inicial
del string
;ota: recuerde que el manipulador endl termina la linea $ends t'e line%. >enga en cuenta que
adicionalmente endl descarga en el perisf2rico, en nuestro caso el perisf2rico es la pantalla, esto lo
#eremos en m/s detalles.
Programacin (106050M), II-2014 Captulo I Prof. ar!m "o#rgu!$
(4aluacin @ .ar!a. .all!r 2. "()P%().+)
(. .efina qu2 es una #ariable:
!. .efina, qu2 es un identificador y de dos ejemplos de identificadores #/lidos y dos ejemplos de
identificadores ;A #/lidos.
B. Por qu2 se dice que -** es un lenguaje sensiti#o:
+. Enumere los D tipos fundamentales de #ariables.
5. -uales son los B tipos fundamentales que los programadores usualmente usan para representar
caracteres, nmeros enteros y reales respecti#amente:
). Mu2 significa que -** tenga una fuerte dependencia a los tipos de datos:
D. -u/l es la sinta,is para declarar una nue#a #ariable en -**: y d2 ! ejemplos.
?. & qu2 se le llama inicializacin de una #ariable: N de ! ejemplos de cada una de las B formas #istas.
C. .efina los tipos de datos compuestos. .efina string y d2 un ejemplo.
(E. Mu2 es necesario para poder usar un tipo de dato compuesto: .e el ejemplo correspondiente al
ejemplo de la pregunta anterior.
((. "tilie el cdigo fuente ? como base y realice un programa donde la salida sea la que se obser#a en
el recuadro. .ebe utiliar cout, cin, endl, string, int y double
)lige un numero =n=.
>eli?o el 14@
Aoblalo .
>me da 143@
*umale !.
> obtengo 154@
Ai&idelo entre 2 $ restale 3.
> sor"resa B obtengo el numero inicial , 14@.
Abligatorio: -omience a 'acer un glosario como el que se ejemplifica a continuacin, complete a
cabalidad con las definiciones, sentencias y declaraciones que #amos #iendo:
cout: salida est/ndar a pantalla.
cin: entrada est/ndar por teclado.
endl:
c'ar:
int:
double:
string:

Вам также может понравиться