16
C Sharp C# (pronunciado si sharp en inglés) es un lenguaje de programaciónorientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes. El nombre C Sharp fue inspirado por la notación musical, donde '#' (sostenido, en inglés sharp) indica que la nota (C es la nota do en inglés) es un semitono más alta, sugiriendo que C# es superior a C/C++. Además, el signo '#' se compone de cuatro signos '+' pegados. 1 Aunque C# forma parte de la plataforma .NET, ésta es una API, mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows,Unix, Android, iOS, Windows Phone, Mac OS y GNU/Linux. Tipos de datos C# contiene dos categorías generales de tipos de datos integrados: tipos de valor y tipos de referencia. El término tipo de valor indica que esos tipos contienen directamente sus valores. Tipos para definir números enteros : Tipo de datos de enteros Tipo EquivalenteBCL Tamaño Rango Significado byte System.Byte 8-bit (1- byte) 0 a 255 Entero sin signo sbyte System.SByte 8-bit (1- byte) -128 a 127 Entero con signo

C sharp

Embed Size (px)

Citation preview

Page 1: C sharp

C Sharp

C (pronunciado si sharp en ingleacutes) es un lenguaje de programacioacutenorientado a

objetos desarrollado y estandarizado por Microsoft como parte de su plataforma NET

que despueacutes fue aprobado como un estaacutendar por la ECMA (ECMA-334)

e ISO (ISOIEC 23270) C es uno de los lenguajes de programacioacuten disentildeados para

la infraestructura de lenguaje comuacuten

Su sintaxis baacutesica deriva de CC++ y utiliza el modelo de objetos de la plataforma

NET similar al de Java aunque incluye mejoras derivadas de otros lenguajes

El nombre C Sharp fue inspirado por la notacioacuten musical donde (sostenido en

ingleacutes sharp) indica que la nota (C es la nota do en ingleacutes) es un semitono maacutes alta

sugiriendo que C es superior a CC++ Ademaacutes el signo se compone de cuatro

signos + pegados1

Aunque C forma parte de la plataforma NET eacutesta es una API mientras que C es

un lenguaje de programacioacuten independiente disentildeado para generar programas sobre

dicha plataforma Ya existe un compilador implementado que provee el marco Mono -

DotGNU el cual genera programas para distintas plataformas

como WindowsUnix Android iOS Windows Phone Mac OS y GNULinux

Tipos de datos

C contiene dos categoriacuteas generales de tipos de datos integrados tipos de

valor y tipos de referencia El teacutermino tipo de valor indica que esos tipos contienen

directamente sus valores

Tipos para definir nuacutemeros enteros

Tipo de datos de enteros

Tipo EquivalenteBCL Tamantildeo Rango Significado

byte SystemByte 8-bit (1-

byte) 0 a 255

Entero sin

signo

sbyte SystemSByte 8-bit (1-

byte) -128 a 127

Entero con

signo

short SystemInt16 16-bit (2-

byte) -32768 a 32767

Entero corto

con signo

ushort SystemUInt16 16-bit (2-

byte) 0 a 65535

Entero corto

sin signo

int SystemInt32 32-bit (4-

byte) -2147483648 a 2147483647

Entero medio

con signo

uint SystemUInt32 32-bit (4-

byte) 0 a 4294967295

Entero medio

sin signo

long SystemInt64 64-bit (8-

byte)

-9223372036854775808 a

9223372036854775807

Entero largo

con signo

ulong SystemUInt64 64-bit (8-

byte) 0 a 18446744073709551615

Entero largo

sin signo

Los tipos de coma flotante pueden representar nuacutemeros con componentes fraccionales

Existen dos clases de tipos de coma flotante float y double El tipo double es el maacutes

utilizado porque muchas funciones matemaacuteticas de la biblioteca de clases de C usan

valores double Quizaacute el tipo de coma flotante maacutes interesante de C es decimal

dirigido al uso de caacutelculos monetarios La aritmeacutetica de coma flotante normal estaacute sujeta a

una variedad de errores de redondeo cuando se aplica a valores decimales El

tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales

Tipo de datos de coma flotante

Tipo Equivalente BCL Tamantilde

o Rango

Significad

o

float SystemSingle 32-bit

(4-byte) plusmn1401298Eminus45 a plusmn3402823E+38

Coma

flotante

corto

double SystemDouble 64-bit

(8-byte)

plusmn494065645841246Eminus324 a

plusmn179769313486232E+308

Coma

flotante

largo

decima

l

SystemDecima

l

128-bit

(16-

byte)

minus7922816251426433759354395033

5 a

+7922816251426433759354395033

5

Coma

flotante

monetario

Los caracteres en C no tienen un tamantildeo de 8 bits como en otros muchos lenguajes de

programacioacuten sino que usa un tamantildeo de 16 bits llamado Unicode al cual se le

llama char No existen conversiones automaacuteticas de tipo entero achar

Tipo de datos de caracteres

Tipo Equivalente BCL Tamantildeo Rango Significado

char SystemChar 16-bit (2-byte) u0000 a uFFFF Caraacutecter unicode

Para los tipos de datos loacutegicos no existen conversiones automaacuteticas de tipo entero

a bool

Tipo de datos loacutegicos

Tipo Equivalente BCL Tamantildeo Rango Significado

bool SystemBoolean 8-bit (1-byte) true o false Verdadero o falso

OPERADORES

C es un lenguaje muy rico en operadores Se definen seis tipos de operadores

aritmeacuteticos relacionales de asignacioacuten loacutegicos de direccioacuten y de movimiento

Operadores loacutegicos

sect1 Sinopsis

Los operadores loacutegicos producen un resultado booleano ( 321b) y sus operandos son tambieacuten valores loacutegicos o asimilables a ellos (los valores numeacutericos son asimilados a cierto o falsoseguacuten su valor sea cero o distinto de cero) Por contra recuerde que las

operaciones entre bits ( 493) producen valores arbitrarios

Los operadores loacutegicos son tres dos de ellos son binarios el uacuteltimo (negacioacuten) es unario Tienen una doble posibilidad de representacioacuten en el Estaacutendar C++ actual la representacioacuten tradicional que se indica a continuacioacuten y la natural introducida

recientemente que se detalla maacutes adelante

Y loacutegico ampamp AND

O loacutegico || OR

Negacioacuten loacutegica NOT

Las expresiones conectadas con los operadores ampamp y || se evaluacutean de izquierda a derecha y la evaluacioacuten se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una loacutegica que se basa en este propiedad)

sect2 ampamp Operador Y loacutegico

Tambieacuten denominado por su nombre en ingleacutes (generalmente en mayuacutesculas) AND loacutegico Devuelve un valor loacutegico true si ambos operandos son ciertos En caso contrario el resultado es false

Sintaxis

expr-AND-logica ampamp expresion-OR-inclusive

Comentario

La operatoria es como sigue El primer operando (de la izquierda) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido es convertido

a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado es false el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es cierto se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota la Norma informa que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubiesen creado

Ejemplo

int m[3] = 012

int x = 0

if (m ampamp x) coutltlt Cierto

elsecoutltlt Falso

Salida

Falso

El valor m que es interpretado como un puntero al primer elemento de la matriz es transformado a un bool Como es distinto de cero (no es un puntero nulo) el resultado es cierto A continuacioacuten el valor x es convertido tambieacuten a bool En este caso la conversioacuten produce falso con lo que este es el resultado del pareacutentesis de la sentencia if

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto ampamp bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto ampamp blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo ampamp negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno falso

Dos cierto

Tres falso

sect3 || Operador O loacutegico

Este operador binario devuelve true si alguno de los operandos es cierto En caso contrario devuelve false

Sintaxis

expr-OR-logica || expresion-AND-logica

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 2: C sharp

short SystemInt16 16-bit (2-

byte) -32768 a 32767

Entero corto

con signo

ushort SystemUInt16 16-bit (2-

byte) 0 a 65535

Entero corto

sin signo

int SystemInt32 32-bit (4-

byte) -2147483648 a 2147483647

Entero medio

con signo

uint SystemUInt32 32-bit (4-

byte) 0 a 4294967295

Entero medio

sin signo

long SystemInt64 64-bit (8-

byte)

-9223372036854775808 a

9223372036854775807

Entero largo

con signo

ulong SystemUInt64 64-bit (8-

byte) 0 a 18446744073709551615

Entero largo

sin signo

Los tipos de coma flotante pueden representar nuacutemeros con componentes fraccionales

Existen dos clases de tipos de coma flotante float y double El tipo double es el maacutes

utilizado porque muchas funciones matemaacuteticas de la biblioteca de clases de C usan

valores double Quizaacute el tipo de coma flotante maacutes interesante de C es decimal

dirigido al uso de caacutelculos monetarios La aritmeacutetica de coma flotante normal estaacute sujeta a

una variedad de errores de redondeo cuando se aplica a valores decimales El

tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales

Tipo de datos de coma flotante

Tipo Equivalente BCL Tamantilde

o Rango

Significad

o

float SystemSingle 32-bit

(4-byte) plusmn1401298Eminus45 a plusmn3402823E+38

Coma

flotante

corto

double SystemDouble 64-bit

(8-byte)

plusmn494065645841246Eminus324 a

plusmn179769313486232E+308

Coma

flotante

largo

decima

l

SystemDecima

l

128-bit

(16-

byte)

minus7922816251426433759354395033

5 a

+7922816251426433759354395033

5

Coma

flotante

monetario

Los caracteres en C no tienen un tamantildeo de 8 bits como en otros muchos lenguajes de

programacioacuten sino que usa un tamantildeo de 16 bits llamado Unicode al cual se le

llama char No existen conversiones automaacuteticas de tipo entero achar

Tipo de datos de caracteres

Tipo Equivalente BCL Tamantildeo Rango Significado

char SystemChar 16-bit (2-byte) u0000 a uFFFF Caraacutecter unicode

Para los tipos de datos loacutegicos no existen conversiones automaacuteticas de tipo entero

a bool

Tipo de datos loacutegicos

Tipo Equivalente BCL Tamantildeo Rango Significado

bool SystemBoolean 8-bit (1-byte) true o false Verdadero o falso

OPERADORES

C es un lenguaje muy rico en operadores Se definen seis tipos de operadores

aritmeacuteticos relacionales de asignacioacuten loacutegicos de direccioacuten y de movimiento

Operadores loacutegicos

sect1 Sinopsis

Los operadores loacutegicos producen un resultado booleano ( 321b) y sus operandos son tambieacuten valores loacutegicos o asimilables a ellos (los valores numeacutericos son asimilados a cierto o falsoseguacuten su valor sea cero o distinto de cero) Por contra recuerde que las

operaciones entre bits ( 493) producen valores arbitrarios

Los operadores loacutegicos son tres dos de ellos son binarios el uacuteltimo (negacioacuten) es unario Tienen una doble posibilidad de representacioacuten en el Estaacutendar C++ actual la representacioacuten tradicional que se indica a continuacioacuten y la natural introducida

recientemente que se detalla maacutes adelante

Y loacutegico ampamp AND

O loacutegico || OR

Negacioacuten loacutegica NOT

Las expresiones conectadas con los operadores ampamp y || se evaluacutean de izquierda a derecha y la evaluacioacuten se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una loacutegica que se basa en este propiedad)

sect2 ampamp Operador Y loacutegico

Tambieacuten denominado por su nombre en ingleacutes (generalmente en mayuacutesculas) AND loacutegico Devuelve un valor loacutegico true si ambos operandos son ciertos En caso contrario el resultado es false

Sintaxis

expr-AND-logica ampamp expresion-OR-inclusive

Comentario

La operatoria es como sigue El primer operando (de la izquierda) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido es convertido

a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado es false el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es cierto se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota la Norma informa que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubiesen creado

Ejemplo

int m[3] = 012

int x = 0

if (m ampamp x) coutltlt Cierto

elsecoutltlt Falso

Salida

Falso

El valor m que es interpretado como un puntero al primer elemento de la matriz es transformado a un bool Como es distinto de cero (no es un puntero nulo) el resultado es cierto A continuacioacuten el valor x es convertido tambieacuten a bool En este caso la conversioacuten produce falso con lo que este es el resultado del pareacutentesis de la sentencia if

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto ampamp bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto ampamp blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo ampamp negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno falso

Dos cierto

Tres falso

sect3 || Operador O loacutegico

Este operador binario devuelve true si alguno de los operandos es cierto En caso contrario devuelve false

Sintaxis

expr-OR-logica || expresion-AND-logica

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 3: C sharp

double SystemDouble 64-bit

(8-byte)

plusmn494065645841246Eminus324 a

plusmn179769313486232E+308

Coma

flotante

largo

decima

l

SystemDecima

l

128-bit

(16-

byte)

minus7922816251426433759354395033

5 a

+7922816251426433759354395033

5

Coma

flotante

monetario

Los caracteres en C no tienen un tamantildeo de 8 bits como en otros muchos lenguajes de

programacioacuten sino que usa un tamantildeo de 16 bits llamado Unicode al cual se le

llama char No existen conversiones automaacuteticas de tipo entero achar

Tipo de datos de caracteres

Tipo Equivalente BCL Tamantildeo Rango Significado

char SystemChar 16-bit (2-byte) u0000 a uFFFF Caraacutecter unicode

Para los tipos de datos loacutegicos no existen conversiones automaacuteticas de tipo entero

a bool

Tipo de datos loacutegicos

Tipo Equivalente BCL Tamantildeo Rango Significado

bool SystemBoolean 8-bit (1-byte) true o false Verdadero o falso

OPERADORES

C es un lenguaje muy rico en operadores Se definen seis tipos de operadores

aritmeacuteticos relacionales de asignacioacuten loacutegicos de direccioacuten y de movimiento

Operadores loacutegicos

sect1 Sinopsis

Los operadores loacutegicos producen un resultado booleano ( 321b) y sus operandos son tambieacuten valores loacutegicos o asimilables a ellos (los valores numeacutericos son asimilados a cierto o falsoseguacuten su valor sea cero o distinto de cero) Por contra recuerde que las

operaciones entre bits ( 493) producen valores arbitrarios

Los operadores loacutegicos son tres dos de ellos son binarios el uacuteltimo (negacioacuten) es unario Tienen una doble posibilidad de representacioacuten en el Estaacutendar C++ actual la representacioacuten tradicional que se indica a continuacioacuten y la natural introducida

recientemente que se detalla maacutes adelante

Y loacutegico ampamp AND

O loacutegico || OR

Negacioacuten loacutegica NOT

Las expresiones conectadas con los operadores ampamp y || se evaluacutean de izquierda a derecha y la evaluacioacuten se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una loacutegica que se basa en este propiedad)

sect2 ampamp Operador Y loacutegico

Tambieacuten denominado por su nombre en ingleacutes (generalmente en mayuacutesculas) AND loacutegico Devuelve un valor loacutegico true si ambos operandos son ciertos En caso contrario el resultado es false

Sintaxis

expr-AND-logica ampamp expresion-OR-inclusive

Comentario

La operatoria es como sigue El primer operando (de la izquierda) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido es convertido

a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado es false el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es cierto se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota la Norma informa que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubiesen creado

Ejemplo

int m[3] = 012

int x = 0

if (m ampamp x) coutltlt Cierto

elsecoutltlt Falso

Salida

Falso

El valor m que es interpretado como un puntero al primer elemento de la matriz es transformado a un bool Como es distinto de cero (no es un puntero nulo) el resultado es cierto A continuacioacuten el valor x es convertido tambieacuten a bool En este caso la conversioacuten produce falso con lo que este es el resultado del pareacutentesis de la sentencia if

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto ampamp bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto ampamp blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo ampamp negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno falso

Dos cierto

Tres falso

sect3 || Operador O loacutegico

Este operador binario devuelve true si alguno de los operandos es cierto En caso contrario devuelve false

Sintaxis

expr-OR-logica || expresion-AND-logica

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 4: C sharp

Operadores loacutegicos

sect1 Sinopsis

Los operadores loacutegicos producen un resultado booleano ( 321b) y sus operandos son tambieacuten valores loacutegicos o asimilables a ellos (los valores numeacutericos son asimilados a cierto o falsoseguacuten su valor sea cero o distinto de cero) Por contra recuerde que las

operaciones entre bits ( 493) producen valores arbitrarios

Los operadores loacutegicos son tres dos de ellos son binarios el uacuteltimo (negacioacuten) es unario Tienen una doble posibilidad de representacioacuten en el Estaacutendar C++ actual la representacioacuten tradicional que se indica a continuacioacuten y la natural introducida

recientemente que se detalla maacutes adelante

Y loacutegico ampamp AND

O loacutegico || OR

Negacioacuten loacutegica NOT

Las expresiones conectadas con los operadores ampamp y || se evaluacutean de izquierda a derecha y la evaluacioacuten se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una loacutegica que se basa en este propiedad)

sect2 ampamp Operador Y loacutegico

Tambieacuten denominado por su nombre en ingleacutes (generalmente en mayuacutesculas) AND loacutegico Devuelve un valor loacutegico true si ambos operandos son ciertos En caso contrario el resultado es false

Sintaxis

expr-AND-logica ampamp expresion-OR-inclusive

Comentario

La operatoria es como sigue El primer operando (de la izquierda) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido es convertido

a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado es false el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es cierto se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota la Norma informa que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubiesen creado

Ejemplo

int m[3] = 012

int x = 0

if (m ampamp x) coutltlt Cierto

elsecoutltlt Falso

Salida

Falso

El valor m que es interpretado como un puntero al primer elemento de la matriz es transformado a un bool Como es distinto de cero (no es un puntero nulo) el resultado es cierto A continuacioacuten el valor x es convertido tambieacuten a bool En este caso la conversioacuten produce falso con lo que este es el resultado del pareacutentesis de la sentencia if

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto ampamp bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto ampamp blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo ampamp negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno falso

Dos cierto

Tres falso

sect3 || Operador O loacutegico

Este operador binario devuelve true si alguno de los operandos es cierto En caso contrario devuelve false

Sintaxis

expr-OR-logica || expresion-AND-logica

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 5: C sharp

Nota la Norma informa que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubiesen creado

Ejemplo

int m[3] = 012

int x = 0

if (m ampamp x) coutltlt Cierto

elsecoutltlt Falso

Salida

Falso

El valor m que es interpretado como un puntero al primer elemento de la matriz es transformado a un bool Como es distinto de cero (no es un puntero nulo) el resultado es cierto A continuacioacuten el valor x es convertido tambieacuten a bool En este caso la conversioacuten produce falso con lo que este es el resultado del pareacutentesis de la sentencia if

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto ampamp bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto ampamp blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo ampamp negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno falso

Dos cierto

Tres falso

sect3 || Operador O loacutegico

Este operador binario devuelve true si alguno de los operandos es cierto En caso contrario devuelve false

Sintaxis

expr-OR-logica || expresion-AND-logica

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 6: C sharp

Comentario

Este operador sigue un funcionamiento anaacutelogo al anterior El primer operando (izquierdo) es convertido a bool Para ello si es una expresioacuten se evaluacutea para obtener el resultado (esta computacioacuten puede tener ciertos efectos laterales) A continuacioacuten el valor obtenido

es convertido a bool ciertofalso siguiendo las reglas de conversioacuten estaacutendar ( 321b) Si el resultado estrue el proceso se detiene y este es el resultado sin que en este caso sea necesario evaluar la expresioacuten de la derecha (recueacuterdese que en el disentildeo de C++ prima la velocidad)

Si el resultado del operando izquierdo es false se continuacutea con la evaluacioacuten de la expresioacuten de la derecha que tambieacuten es convertida a bool Si el nuevo resultado es true entonces el resultado del operador es true En caso contrario el resultado es false

Nota el Estaacutendar establece que antes de ser evaluada la expresioacuten derecha han sucedido todos los posibles efectos laterales de la expresioacuten izquierda a excepcioacuten de la destruccioacuten de los posibles objetos temporales que se hubieran creado

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false blanco = true negro = false

intmain (void)

if (alto || bajo) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto || blanco) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo || negro) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos cierto

Tres falso

sect4 Operador NO loacutegico

Este operador es denominado tambieacuten negacioacuten loacutegica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el coacutedigo)

Sintaxis

expresion-cast

Comentario

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 7: C sharp

El operando expresion-cast (que puede ser una expresioacuten que se evaluacutea a un

resultado 121) es convertido a tipo bool con lo que solo puede ser uno de los valores ciertofalso A continuacioacuten el operador cambia su valor Si es cierto es convertido a falso y viceversa

Resulta por tanto que el resultado de este operador es siempre un tipo bool aunque al existir una conversioacuten estaacutendar por la que un cero es convertido a false y cualquier valor

distinto de cero atrue ( 321b) coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0 En otras palabras este operador devuelve cierto (true) si la expresioacuten se evaluacutea a distinto de cero en caso contrario devuelve falso (false)

Ejemplo

includeltiostreamhgt

bool alto = true bajo = false

intmain (void)

if (alto) coutltlt Uno cierto ltltendl

elsecoutltlt Uno falso ltltendl

if (alto) coutltlt Dos cierto ltltendl

elsecoutltlt Dos falso ltltendl

if (bajo) coutltlt Tres cierto ltltendl

elsecoutltlt Tres falso ltltendl

Salida

Uno cierto

Dos falso

Tres cierto

Si E es una expresioacuten E es equivalente a (0 == E) Como consecuencia las expresiones que siguen son equivalentes dos a dos

if ( valid)

if (valid == 0)

if (valid)

if (valid = 0)

sect7 Representacioacuten expliacutecita

Los operadores loacutegicos entre valores loacutegicos ampamp || la relacioacuten de desigualdad = algunos de los operadores loacutegicos entre bits (amp | ^ ~) y sus expresiones compuestas (amp= |= ^=) tienen una representacioacuten realmente difiacutecil de leer con la desventaja adicional que sus siacutembolos no siempre estaacuten faacutecilmente accesibles en ordenadores con teclados distintos del estaacutendar USA Para resolver este problema el Estaacutendar C++ ha introducido nuevas formas para su representacioacuten las denominamos formas expliacutecitas o

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 8: C sharp

naturales en razoacuten de que se parecen maacutes a las palabras correspondientes del lenguaje natural Las nuevas formas constituyen palabras-clave y la tabla de equivalencias es la siguiente

Palabra

clave Siacutembolo Referencia Descripcioacuten

and ampamp Operador Y loacutegico

or || Operador O loacutegico

not Operador negacioacuten loacutegica

bitand amp 493 Operador AND entre bits

xor ^ 493 Operador OR exclusivo entre bits

bitor | 493 Operador OR inclusivo entre bits

compl ~ 493 Operador complemento a uno de

bits

and_eq amp= 493 Asignacioacuten compuesta (AND entre

bits)

xor_eq ^= 493 Asignacioacuten compuesta (XOR entre

bits)

or_eq |= 493 Asignacioacuten compuesta (OR entre

bits)

not_eq = 4912 Operador relacional de desigualdad

Nota ni el compilador Borland C++ 55 ni MS VC++ 60 soportan esta caracteriacutestica del estaacutendar aunque el de Microsoft anuncia en su documentacioacuten que pueden utilizarse

defines ( 4910b) Por ejemplo

define bitandamp

define bitor |

define and_eqamp=

define or_eq |=

define not_eq =

Por su parte el compilador GNU gcc dispone de la opcioacuten de compilacioacuten -fno-operator-names que permite que las palabras-clave and bitand bitor compl not y or no sean tratadas como sinoacutenimos de los operadores correspondientes

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 9: C sharp

Operadores aritmeacuteticos

sect1 Sinopsis

Los operadores aritmeacuteticos se usan para realizar caacutelculos de aritmeacutetica de nuacutemeros reales y de aritmeacutetica de punteros C++ dispone de los siguientes

+ Dos posibilidades Suma binaria maacutes unitario

++ Incremento unitario (dos clases )

- Dos posibilidades Resta binaria menos unitario

-- Decremento unitario (dos clases )

Multiplicacioacuten (este siacutembolo tiene tambieacuten otros usos )

Divisioacuten

Resto o moacutedulo

Nota la aritmeacutetica de nuacutemeros reales es la claacutesica de la escuela primaria La de

punteros es una aritmeacutetica un tanto especial y rudimentaria ( 422)

sect2 Observaciones

Los operadores aritmeacuteticos pertenecen a dos grupos unos aceptan operandos de tipo numeacuterico otros aceptan operandos de tipo puntero-a-tipoX [3] Ademaacutes son de dos tipos unarios (que aceptan un solo operando) y binarios (que aceptan dos) La clasificacioacuten es la siguiente

Operadores aritmeacuteticos unarios

+ maacutes unitario

++ Incremento unitario (dos clases)

- menos unitario

-- Decremento unitario (dos clases)

Operadores artimeacuteticosbinaros

+ Suma binaria

- Resta binaria

Multiplicacioacuten

Divisioacuten

Resto o moacutedulo

Estos uacuteltimos pueden combinarse con el de asignacioacuten = para dar origen a operadores

compuestos ( 492) son los siguientes

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 10: C sharp

+= Asigna suma

-= Asigna diferencia (resta)

= Asigna producto

= Asigna divisioacuten

= Asigna resto (moacutedulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos siacutembolos + y - Es un caso de sobrecarga incluida en el propio lenguaje [1] Como en el resto de los casos de sobrecarga el compilador deduce por el contexto de que versioacuten del operador se trata Como veremos inmediatamente en C++ es perfectamente vaacutelida una expresioacuten del tipo

int x = ptr+-++ptr

En el ejemplo siguiente se muestran los casos posibles

intai[] = 2 3

int ptr = ai

int r1 = +ai[0] L3 maacutes unitario sobre tipo numeacuterico

int r2 = -ai[1] L3 menos unitario sobre tipo

numeacuterico

int r3 = ai[0] + ai[1] L4 2 + 3 suma binaria (de enteros)

int r4 = ai[1] - ai[0] L5 3 - 2 resta binaria (de enteros)

int r5 = ai[0] + -ai[1] L6 2 +(-3) suma binaria seguida de

menos unitario

int r6 = ptr + -++ptr L7 Suma binaria (de enteros) a + (-

b)

En L7 coexisten tres operadores aritmeacuteticos no homogeacuteneos (de izquierda a derecha)

+ Suma binaria entre valores numeacutericos tipo int ( ) Los valores ptr y -++ptr

- Negacioacuten unitaria de un valor numeacuterico tipo int ( ) el valor (++ptr)

++ Preincremento de un puntero-a-int ( ) Equivale a suma binaria de puntero y

entero ++ptr == ptr = ptr + 1

Nota aunque vaacutelida la sentencia de L7 es un ejemplo de expresioacuten peligrosa y

desaconsejada En 490a se ha presentado una explicacioacuten del sorpresivo resultado ( 0 ) que se obtiene para L6

sect3 Suma y resta binaria

En el primer caso suma y resta binaria caben dos posibilidades sintaacutecticas

a- expresioacuten-suma + expresioacuten-de-multiplicacioacuten

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 11: C sharp

b- expresioacuten-suma - expresioacuten-de-multiplicacioacuten

sect31 Operador Suma binaria

Las posibilidades para los operandos en la expresioacuten A + B son los siguientes

1 A y B son tipos aritmeacuteticos enteros o fraccionarios ( 221) En este caso ambos

operandos estaacuten sujetos a las posibles conversiones aritmeacuteticas estaacutendar ( 225) y el resultado es la suma aritmeacutetica de ambos Ejemplo

int x = 10 y = 20

int z = x + y z == 30

2 A es un entero y B es un puntero a objeto Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[0] Sentildeala a 1

int x = (2 + ptr) x == 3

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

int z = (ptr + 3) x == 4

sect32 Operador Resta binaria

Las posibilidades para los operandos en la expresioacuten A - B son los siguientes

1 A y B son de tipo aritmeacutetico entero o fraccionario las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente El resultado es la resta aritmeacutetica de ambos operandos Ejemplo

int x = 10 y = 20

int z = x - y z == -10

2 A y B son punteros a objetos de tipos compatibles Ejemplo

intarr[5] = 1 2 3 4 5

int pt1 = amparr[0] Sentildeala a 1

int pt2 = amparr[4] Sentildeala a 5

int x = pt2 - pt1 x == 4

3 A es un puntero a objeto y B es un entero En estos dos uacuteltimos casos se aplican

las reglas de aritmeacutetica de punteros ( 422) Ejemplo

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 12: C sharp

intarr[5] = 1 2 3 4 5

int ptr = amparr[4] sentildeala a 5

int x = (ptr - 2) x == 3

sect4 Operadores plusmn Unitarios

Cuando los operadores + y - se utilizan como operadores unitarios las posibilidades sintaacutecticas son

+ ltexpresioacuten-castgt

- ltexpresioacuten-castgt

En ambos casos ltexpresioacuten-castgt debe ser de tipo numeacuterico Los resultados son

respectivamente

Valor del operando expresioacuten-cast despueacutes de cualquier promocioacuten interna

que sea necesaria

Valor negativo del operando expresioacuten-cast despueacutes de cualquier promocioacuten

interna que se necesite

Nota recuerde que cuando + y - se utilizan como operadores unitarios tienen mayor

precedencia que cuando se utilizan como suma y resta binarias ( 490a)

Ejemplo

int x = 7 y = 3

int r1 = - (y - x) r1 == 4

int r2 = + (y - x) r2 == -4

int r3 = - (x - y) r3 == -4

int r4 = + (x - y) r4 == 4

sect5 Operadores multiplicacioacuten y divisioacuten

Los operadores binarios (multiplicacioacuten) y (divisioacuten) realizan sus operaciones aritmeacuteticas correspondientes con todos los tipos numeacutericos (enteros y fraccionarios)

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

expresioacuten-de-multiplicacioacuten expresioacuten-cast

sect6 Operador moacutedulo

El operador binario (operador de moacutedulo) devuelve el resto de la divisioacuten de dos enteros no puede ser utilizado con nuacutemeros fraccionarios float o double [2]

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 13: C sharp

Sintaxis

expresioacuten-de-multiplicacioacuten expresioacuten-cast

Ejemplo

int resto = (6 4)

coutltlt El resto de 64 es ltlt resto ltltendl

Salida

El resto de 64 es 2

sect7 Operadores incremento y decremento

Los operadores unitarios ++ (incremento) y -- (decremento) suman y restan respectivamente una unidad al valor de la expresioacuten Existen dos variedades Pre y Post para cada uno de ellos

Las posibilidades sintaacutecticas son

postfix-expression ++ (postincremento)

++ expresioacuten-unitaria (preincremento)

postfix-expression -- (postdecremento)

-- expresioacuten-unitaria (predecremento)

En los ejemplos que siguen suponemos que originariamente n == 5

El postincremento antildeade uno a la expresioacuten despueacutes de que se ha evaluado

x = n++ -gt x == 5 y n == 6

El preincremento antildeade uno antes de que sea evaluada la expresioacuten

x = ++n -gt x == 6 y n == 6

El postdecremento resta uno del valor de la expresioacuten despueacutes de que sea evaluada

x = n-- -gt x == 5 y n == 4

El predecremento resta uno antes de la evaluacioacuten de la expresioacuten

x = --n -gt x == 4 y n == 4

En ambos casos el operando debe ser una variable no una expresioacuten Por

ejemplo (x+y)++ es ilegal

sect71 Para evidenciar la diferencia entre preincremento y postincremento observe las

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 14: C sharp

salidas que se obtienen con este pequentildeo programa seguacuten se van ejecutando las diversas liacuteneas Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que en todos los casos el argumento recibido por printf es un puntero-a-caraacutecter (char) Tambieacuten deben recordarse las reglas de aacutembito de los argumentos pasados a funciones

char s = Hola mundo

printf(Letra cn s) Letra H

printf(Letra cn s+1) Letra I

printf(Letra cn (s+1)) Letra o

printf(Letra cn s++) Letra H

printf(Letra cn s) Letra o

printf(Letra cn ++s) Letra l

printf(Letra cn s) Letra l

Como notas importantes a recordar siempre

En problemas de divisioacuten entre enteros C++ trunca la parte residual es decir

ltcodegt aacuterea de declaracioacuten de variables float a aacuterea de operaciones a = 10 4

aacuterea de despliegue de resultados desplegar a rarr En pantalla sale ( 2000000 ) ltcodegt El problema no es el tipo float sino que por definicioacuten de la divisioacuten

entre enteros C++ siempre trunca la parte residual mas adelante se indica como se resolveraacute este problema El operador () devuelve el residuo entero

de una divisioacuten entre enteros ejemplo ltcodegt aacuterea de declaracioacuten int alfa

aacuterea de operaciones alfa = 23 4 aacuterea de despliegue

desplegar alfa rarr El resultado en pantalla es 3

Otro ejemplo

alfa = 108 10

desplegar alfa rarr El resultado en pantalla es 8

ltcodegt

Para resolver los problemas de potencias y raiacuteces se usan ciertas instrucciones

especiales que proporciona el lenguaje llamadas funciones matemaacuteticas en C++ existe toda una libreriacutea de instrucciones o funciones matemaacuteticas

Recordar que todas las funciones reciben uno o maacutes datos o valores y regresan

siempre un resultado una de estas funciones matemaacuteticas es

includeltmathhgt

doublepow(double base doubleexp)

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 15: C sharp

Esta funcioacuten ocupa dos valores o datos( base y exp) ambos de tipo double y

regresa un resultado tambieacuten de tipo double ejemplo

Resolver el problema de calcular

includeltmathhgt

aacuterea de declaracioacuten de variables

double base exponente potencia

aacuterea de asignacioacuten o carga o inicializacioacuten de

variables

base=5

exponente=3

aacuterea de operaciones

potencia =pow( base exponente)

Despliegue

desplegar potencia -gt El resultado en pantalla es 125000000000

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc

Page 16: C sharp

Para resolver el problema de raiacuteces se aprovecha una de las mas elementales

y conocida de las leyes de exponentes que dice

Es decir una raiacutez cualquiera se puede transformar a una potencia con un exponente fraccionario

Ejemplo

problema ltmgt y = 3sqrtx ltmgt esto es equivalente a entonces

usando funcioacuten pow y= 3pow(x 05)

En este ejemplo se esta dando por supuesto que no interesa el tipo de dato que requiere la funcioacuten pow() para trabajar correctamente RESUMEN En C++ se puden resolver con la ayuda de estos operadores

toda clase de problemas ya sean financieros algebraicos de negocios contables etc