You are on page 1of 53

TEMA 2.

Introduccin al Lenguaje C++

2.1 Estructura de un programa en C++ impresin de una lnea suma de dos enteros aritmtica: expresiones y operadores 2.2 Componentes de un programa proposiciones declaraciones: variables, constantes y referencias los tipos: int, char, bool, float, double typedef conversin de tipos entrada/salida bsica

2.3 Proposiciones de control: composicin secuencial seleccin: if, if/else, switch iteracin: while, do/while, for los operadores (?:) y coma (,) prioridades 2.4 Propiedades de los programas

Introduccin al lenguaje C++

2.1 Estructura de un programa en C++ (01 Bienvenido)

//Este programa solamente escribe //Bienvenido al C++ #include <iostream> #include <cstdlib> using namespace std; int main () { cout << Bienvenido al C++; cout << "\n\n\a"; system("PAUSE"); return 0; }

Comentarios Directiva de preprocesador inclusin de archivo de encabezado (cabeceras) de flujo de entrada/salida

Est o es necesario para que se mantenga la vent ana de salida La funcin principal que devuelve 0

Introduccin al lenguaje C++

Bienvenido cout << \tBienvenido \nal \n\nC++\n; al <<Lnea en blanco>> C++

Secuencia de escape \n \t \r \a

descripcin Salto de linea Tabulacin horizontal. Mueve el cursor hasta la siguiente tabulacin Retorno de carro. Coloca el cursor al inicio de la lnea actual Alerta. Hace sonar la campana

Introduccin al lenguaje C++

Suma de dos enteros (02 Suma dos enteros)

Problema: Solucin

Suma dos nmeros enteros ledos desde el teclado y muestra el resultado de la suma Algoritmo sumar dos numeros es leer los dos nmeros x1 y x2; sumar x1 y x2 y acumular el valor en suma; escribir el valor de suma fin. Codificado en C++

/* Este programa pide dos numeros enteros, despus los suma y muestra el resultado */ #include <iostream> #include <cstdlib> using namespace std; int main (){ int x1, x2, suma; //declaracin de variables cout << "\nEscribe el primer numero entero "; cout << "\nEscribe el segundo numero entero "; suma = x1 + x2; //los suma y guarda el valor cout << "\nLa suma de " << x1 << " y " << x2 << " es " << suma << endl; cout << "\n\n\a"; system("PAUSE"); return 0; }

cin >> x1; cin >> x2;

Introduccin al lenguaje C++

Primeras observaciones sobre los programas en C++

Los identificadores nombran los objetos que intervienen en los programas

son sensibles a las maysculas o minsculas (a1, A1) no pueden comenzar por un dgito y pueden llevar _ pero NO blancos: este_es_un_nombre_de_variable_algo_largo EsteEsUnNombreDeVariableAlgoLargo _mivariable_83 // se suelen reservar para uso del propio lenguaje

conviene no usar ident ificadores de m s de 31 caract eres por cuest iones de portabilidad

Las variables nombradas por un identificador

deben declararse (su tipo) antes de ser usadas las declaraciones pueden incluir valores iniciales

int x1 = 0, x2 = 47, suma = 21;

corresponden a direcciones de memoria de la computadora


5

Introduccin al lenguaje C++

Aritmtica

suma = x1 + x2; x1 = x1 + 1;

//los suma y guarda el valor //los suma y guarda el valor

Operadores Aritmticos: + - * /

divisin

Enteros (int) int x1= 5, x2 = 2; cout << (x1 / x2) 2 cout << (x1 % x2) 1

Reales (float) float x1= 5, x2 = 2; cout << (x1 / x2) 2.5 cout << (x1 % x2) error

modulo

Funciones Predefinidas: pow(x,y), log(x), log10(x), sin(x), cos(x) Definidas por el programador
Introduccin al lenguaje C++ 6

(#include <cmath> )

Ejemplos

(y + z) * 2 + 1

3/z+1

3%z

f(x + 1)

((2 * z) + (5 3 * y))

pow(2,3)

pow( ((2 * z) + (5 3 * y)) , (z + 2) )

Prioridades de los operadores aritmticos

() * / % + =

Se evalan primero. Si estn anidados, 1 los ms internos En segundo lugar. Si hay varios, de izquierda a derecha para acabar

z = p * r % q + w / x y; 6 1 2 4 3 5

Introduccin al lenguaje C++

Comparacin de dos nmeros (03 Compara dos enteros)

Est e program a lee dos nm eros ent eros, los com para e indica si son iguales o, en caso contrario, cul es el mayor y cul el menor. ... { int x1, x2; cout << Escribe dos numeros enteros << endl; cin >> x1 >> x2; if (x1 == x2) cout << Los numeros son iguales << endl; if (x1 > x2) cout << x1 << es mayor que << x2 << endl; if (x1 < x2) cout << x2 << es mayor que << x1 << endl; ...}

Introduccin al lenguaje C++

Otra versin de Comparacin de dos nmeros

... { int x1, x2; cout << Escribe dos numeros enteros << endl; cin >> x1 >> x2; if (x1 == x2) cout << Los numeros son iguales << endl; else if (x1 > x2) cout << x1 << es mayor que << x2 << endl; else cout << x2 << es mayor que << x1 << endl; ...}

Introduccin al lenguaje C++

Operadores de igualdad y relacionales

Operador () ! * / % + >> << < <= > >= == != && || =

Asociatividad ID DI (tiene carcter funcional por ser unario) ID ID ID ID ID ID ID DI (carcter funcional)

Tipo parntesis negacin multiplicacin suma Insercin o extraccin de flujo relacional igualdad conjuncin disyuncin asignacin

Observaciones

== =!

!= =>

>= =<

<=

no pueden ir con un blanco entre los dos smbolos son errores sintcticos

() incluye la llamada de funciones

no se debe confundir == con =


10

Introduccin al lenguaje C++

Asignaciones

Son expresiones El operador de asignacin devuelve el valor de la part e derecha que, com o efect o lateral (importantsimo) lo asigna al objeto situado a la izquierda.

Asociatividad de = significa significa significa (x + y) + z x = (y = 0) y = 0; x = 0;

x+y+z x=y=0 x=y=0

Asignaciones Abreviadas x += 2 x=x/y x /= y x *= y x = x + 1 x += 1 x -= 1 x-- --x x++ ++x Exp Abreviadas int x = 3, y = 4; y = x++; y++ = x (++y)++; x = ++x + --y x += (y /= 2) y=3, x=4 Error!! y=6 y=3, x=7 y=2, x=5 y = ++x; ++y = x; x = x++ + y-x = (y *= 5) + 3 y=4, x=4 y=3, x=3 y=3, x=8 y=20, x=23

x=x+2 x=x*y x=x-1 07

Introduccin al lenguaje C++

11

2.2 Componentes de un programa

El texto de un programa en C++ esencialmente consta de

funciones:

int main ()

contienen proposiciones que especifican las operaciones que se van a realizar:

proposicin expresin proposicin compuesta proposicin de seleccin proposicin de iteracin proposicin de salto

x1 = x2 + 3; { x1 = x2 + 3; cout << x1;} if (x1 == x2) . . . for (int i = 1;i<=10;i++) { } break;

variables: almacenan los valores utilizados durante los clculos

Introduccin al lenguaje C++

12

Declaraciones: variables, constantes y referencias (04 Const y Refs)

Las variables, ya lo vimos, deben ser declaradas antes de ser usadas. Una declaracin

incluye: pueden ir fuera del

<calificador> <tipo> <lista de objetos declarados> int main() const int cien = 100; double &l = longitud;

pueden usarse para valores que no se podrn cambiar pueden especificar referencias (sinnimos de variables)

{........ const double pi = 3.1416; double radio = 25.345; double longitud = 2 * pi * radio; double &l = longitud;

// l y longitud son sinonimos

cout << "\nradio = " << radio << "\nLongitud = " << longitud << "\nl = " << l << endl; cout << "\nSi asignamos a Longitud el valor 35.56 tenemos: " << endl; longitud = 35.56; cout << "\nlongitud = " << longitud << "\nl = " << l << endl; ........}

Introduccin al lenguaje C++

13

Tipos de datos elementales de C++

Nmeros enteros: int, short, long, unsigned reales: float, double, long double

Caracteres char, unsigned char

Lgico bool

Definiciones sinnimas typedef int entero;

Introduccin al lenguaje C++

14

Tipos Enteros: con base en la representacin entera

La representacin entera: Si usan


n

bit

0/1

bits para su representacin pueden almacenar 2n valores distintos unsigned, signed char int

long, short

Valores o Constantes, sus lmites

short

int

long

Expone nte 8 16 32

2 elevado a Exponente = 256 32,768 2,147,483,648

Introduccin al lenguaje C++

15

Usando #include <climits> se pueden obtener los valores extremos para cada implementacin (05 Limites) int Maximo valor entero, INT_MAX = 2147483647 Minimo, INT_MIN = -2147483648 Enteros sin signo. El mayor es UINT_MAX = 4294967295 short SHRT_MAX = 32767 SHRT_MIN = -32768 USHRT_MAX = 65535 long LONG_MAX = 2147483647 LONG_MIN = -2147483648 ULONG_MAX = 4294967295 El compilador GNU C tambin tiene 'long long int' LONG_LONG_MAX = 9223372036854775807 LONG_LONG_MIN = -9223372036854775808 ULONG_LONG_MAX = 18446744073709551615

Introduccin al lenguaje C++

16

Tipos Reales

Punto fijo y punto flotante representacin externa con decimal con punto: 12.045 producto de una mantisa por una exponencial con base 10: 12.34E- 23

representacin interna: punto flotante con mantisa y exponente en base 2


#include <cfloat> Limites de los valores positivos de los numeros reales 1.17549e-38 3.40282e+38 2.22507e-308 1.79769e+308 2.22507e-308 1.79769e+308

Type float double long double

Size (bits) 32 64 64

Operaciones

Operadores Aritmticos: + - * / double x, y, z; y = 1.23; . . . (y + z) * 2 + 1.98 . . . . . . ((2.3E-2 * z) + (5.98 * y)) . . . Comparaciones y Funciones z >= 3.6

z = 0.0; z = -2.4567; . . . 3.0 / z + 1 . . .

(x + y) < pow(z,2.0) z == y x != y
17

/* NO DEBEN HACERSE! */
Introduccin al lenguaje C++

Fragmento del Programa que imprime los lmites de distintos tipos numricos #include <iostream> #include <cstdlib> #include <cfloat> #include <climits> using namespace std; int main () { cout << "\nLimites de los valores positivos de los numeros reales" << endl; cout << "\n\n\tFloat:" << "\n\t\t menor positivo:\t" << FLT_MIN << "\n\t\t mayor positivo:\t" << FLT_MAX; //***************************************************************************** // Lmites de enteros cout << "\nLimites de los valores enteros" << endl; cout << "\n Valores maximos y minimos para'int'egers" << "\n\tMaximo valor entero, INT_MAX = " << INT_MAX << "\n\tMinimo, INT_MIN = " << INT_MIN << "\n\tEnteros sin signo. El mayor es UINT_MAX = " << UINT_MAX;
Vase tambin (06 Exp Aritmticas)
Introduccin al lenguaje C++

(05 Limites)

// 2147483647 // (-INT_MAX-1) //(2U * INT_MAX + 1)

18

Tipo Carcter

Se representan en 1 byte (8 bits) char [-128..127]) Valores o Constantes normales a A + 1 ; ....

unsigned char

[0..255]

especiales

\n \t ....

Operaciones Comparaciones:
== != > < >= <=

Funciones Predefinidas y definidas por el programador #include <ctype> ... char c = 'A'; int otra_char; otra_char = tolower(c); cout << "\nEn mayuscula " << (char) otra_char << endl; if (isdigit('9')) cout << "\n9 Es un digito" <<endl;

Observacin: no debe confundirse \n con \n


Introduccin al lenguaje C++ 19

Tipo lgico

Valores o Constantes (1 bit) false true


Operaciones

Operadores Lgicos: && || !

Comparaciones: false < true

Observaciones

Los valores numricos se interpretan como lgicos y los lgicos como numricos
numero != 0 0 true false 1 0
Ejemplos

bool cierto_o_no; int x = 2, y; cierto_o_no = x; y = cierto_o_no; cout << "\nLo que es cierto_o_no = " << cierto_o_no << "\nLo que es x = " << x << "\nLo que es y = " << y << endl;

Lo que es cierto_o_no = 1 Lo que es x = 2 Lo que es y = 1

No se pueden leer y al escribirlos se interpretarn como nmeros


Introduccin al lenguaje C++ 20

Conversin de tipos

Automtica char integer float double bool nmeros

int x = 4 + a;

float r = 3.0 + 4;

if (x + a) { ... }

No automtica (cast o promocin) cout << static_cast<int>(a); char c =a; cout << static_cast<float>(c); cout << (float)(c); static_cast <tipo> (. . . ) (tipo) expresion

Introduccin al lenguaje C++

21

08 Conversin de tipos int main() { char c = 'a';

int x = 25;

float f = 2.3;

bool h = true;

cout << "\n Ejemplos de promocion de tipos " << "\n ==============================" << "\n\nEl valor de c es " << c << "\nEl valor de static_cast<int>(c) es " << static_cast<int>(c) << "\n\nEl valor de x es " << x << "\nLa expresion 'c + x' vale " << (c+x) << endl;

// // // //

a 97 25 122

cout << "\nIntroduce un valor para c "; cin >> c; // b cout << "\nEl valor de c es " << c // b << "\nEl valor de static_cast<bool>(c) es " << static_cast<bool>(c); // 1 cout << "\n\nEl valor de f es " << f << ". El valor de x es " << x << ". El valor de c es " << c << "\nLa expresion 'f + c + x' vale " << (f+x+c) <<endl; cout << "\n\nEl valor de f es " << f << ". El valor de x es " << x << ". El valor de c es " << c << "\nEl valor de h es " << h; h = c + x + f; cout << "\nEl valor de h tras hacer 'h = c + x + f' es " << h <<endl ; . . .}
Introduccin al lenguaje C++

// // // // // // // //

2.3 25 b 125.3 2.3 25 b 1

// 1
22

Entrada/salida bsica La bibliot eca iostream de C+ + cont iene cient os de posibilidades de ent rada/ salida. Aqu est n definidos los objetos cin, cout y los operadores << y >> cin >> variable; cout << variable; son expresiones que devuelven el fluj o que t ransm it en, por defect o a los disposit ivos st andard de entrada y de salida funciones:
cin.get(), cout.put(),

Introduccin al lenguaje C++

23

Ejemplo (09 Lee Escribe Car) Est e program a lee una secuencia de caract eres que se int roduce por t eclado y t erm ina en . y la escribe sin el . int main () { char c; cout << "Escribe la secuencia de caracteres, en una o varias lineas." << "\nPara terminar escribe un \".\" " << endl; c = cin.get(); while ( c != '.' ) { cout.put(c); if (c!='\n') cout << '-'; c = cin.get(); } cin.ignore(); /* esto es para que se ignore el contenido actual del buffer de entrada que contiene lo que hayamos tecleado despues del '.' (solo el '\n' seguramente) */

Introduccin al lenguaje C++

24

cout << "\n\nAhora haremos lo mismo pero terminando con la marca de fin de" << "\nfichero. Escribe otra secuencia de caracteres y" << "\npara terminar escribe <ctrl> + z al principio de una linea" << endl; c = cin.get(); while ( !cin.eof() ) { cout << c; if (c!='\n') cout << ' '; c = cin.get(); } cout << "\nFin de la salida del programa"; ...}

Introduccin al lenguaje C++

25

2.3 Proposiciones de control

Las instrucciones de C++ normalmente se ejecutan en el orden de escritura.

compuesta

{ x1 = x2 + 3; cout << x1;}

Esto lo evitan las proposiciones que vamos a ver a continuacin:

de seleccin de iteracin de salto

if (x1 == x2) . . . for (int i = 1;i<=10;i++) {. . .} break;

Introduccin al lenguaje C++

26

Composicin secuencial de acciones

accion-1

Bloque {accion-1;accin-2; ... ;accion-n;}


accion-n

Ei

Comp. Secuencial

Ef

Descubrir los estados intermedios Descubrir las acciones

Ei

a1

a2

E .....

an

Ef

Asegurar la coherencia Accion/Estado


27

Introduccin al lenguaje C++

Esquemas condicionales if e if/else

falso condicion

semntica: if (<condicion>) <accion>; sintaxis: if (<expresion>) <proposicion>;

cierto accion

semntica: if (<condicion>) <accion-1>; else <accion-2>; sintaxis: if (<expresion>) <proposicion-1>; else <proposicion-2>;

cierto condicion

falso

accion-1

accion-2

Estilo de programacin Debe evitarse if (variable == true) ..... if (otra_variable == false) .... Mejor usar if (variable) . . . if (!otra_variable) . . .

Introduccin al lenguaje C++

28

Ejemplos de uso de los condicionales (10 Exp Logicas)

{. . . bool p, q, r; cout << "Introduce valores logicos para p, q, r (0 = false, 1 = true): " << endl; cin >> p >> q >> r;
p true true false false true true false false q true false true false true false true false r true true true true false false false false accion A B B B A B B A

//obsrvese la sangra if ((p && q && r) || (p && q && !r) || (!p && !q && !r)) cout << "Accion A" << endl; else cout << "Accion B" << endl; . . .}

Introduccin al lenguaje C++

29

Ejemplo (ifs anidados)

Valor de c a b c d e otro

Accion a realizar <accion-a> <accion-b> <accion-c> <accion-d> <accion-e> <accion>

char c; c = cin.get(); //obsrvese la sangra if (c == a) <accion-a>; else if (c == b) <accion-b>; else if (c == d) <accion-d>; else if (c == e) <accion-e>; else <accion>;

Introduccin al lenguaje C++

30

Observaciones sobre los condicionales

Es un error comn escribir 3 < x < 4 en lugar de (3 < x) && (x < 4) o bien (3 < x && x < 4) pues la prioridad de < es mayor que la de && La evaluacin de condicion_1 && condicion_2 se realiza de izquierda a derecha. Si condicion_1 es falsa ya no se sigue evaluando. Est o debe t enerse en cuent a para cuestiones de eficiencia y de pertenencia al dominio de definicin de condicion_2 Dualm ent e, la evaluacin de || se lleva t am bin de izquierda a derecha hast a que se encuentre una condicin verdadera.

Introduccin al lenguaje C++

31

Cul es el mayor de 3 enteros? (11 MayorDeTres)

{. . . int x, y, z, mayor; cout << "Escribe tres numeros enteros" << endl; cin >> x >> y >> z;

cierto

(x < y) (x >= y)

(x < y)

cierto

(y < z)

cierto

(x < z)

if (x < y) if (y < z) mayor = z; else mayor = y; else if (x < z) mayor = z; else mayor = x;

mayor=z

mayor=y

mayor=z

mayor=x

cout << "El mayor de los tres es: " << mayor << endl; . . .}

Cada else se asocia con el if anterior sin else ms cercano

Introduccin al lenguaje C++

32

Otro ejemplo de uso de condicionales: notas de los alumnos (12 NotaFinal) En cierta asignatura se siguen estas normas para determinar la nota final: Si las prct icas est n m al o bien si la not a de t eora es m enor que 5, la not a final es suspenso Si la not a de t eora llega al 5 pero es m enor que 7, ent onces la not a final ser suspenso, aprobado o not able en el caso de que la not a de prct icas sea regular, bien o m uy bien, respectivamente Si la not a de t eora llega al 7 pero no al 8,5, ent onces la not a final ser aprobado, not able o sobresaliente dependiendo de que la nota de practicas sea regular, bien o muy bien Por lt im o en el caso, poco probable, de que la not a de t eora supere el 8,5 la not a final ser notable, sobresaliente o matrcula de honor, anlogamente a los casos anteriores Escribir un programa que implemente razonablemente esta lista de condiciones.

Introduccin al lenguaje C++

33

Anlisis de las condiciones y acciones asociadas

Nota de Practicas (np) 0 nt < 5 Suspenso Mal (m) Suspenso Regular (R) Suspenso Bien (B) Muy Bien (M) Suspenso

Nota de Teora (nt) 5 nt < 7 Suspenso 7 nt <8,5 Suspenso 8,5 nt Suspenso

Suspenso

Aprobado

Notable

Aprobado

Notable

Sobresal.

Notable

Sobresal.

M. de H.

Introduccin al lenguaje C++

34

Una solucin con esquemas if (12 NotaFinal)

int main () { char np,nf; cout << "\nNota de Practicas (m,R,B,M) "; cout << "\nNota de Teoria [0..10]: "; if ( (nt < 5.0) || (np == 'm') ) nf = 'S'; else if ( nt < 7.0 ) if ( np == 'R') nf = 'S'; else if ( np == 'B') nf = 'A'; else /* np == 'M' */ nf = 'N'; else if ( nt < 8.5 ) if ( np == 'R') nf = 'A'; else if ( np == 'B') nf = 'N'; else /* np == 'M' */ nf = 'B'; else /* 8.5 <= nt <= 10 */ if ( np == 'R') nf = 'N'; else if ( np == 'B') nf = 'B'; else /* np == 'M' */ nf = 'M'; cout << "\nLa nota final es: " << nf << endl; . . . . . . . . .. }

float nt; np = cin.get(); cin >> nt;

Introduccin al lenguaje C++

35

El esquema switch

switch (<expresion>){ case <expresion-constante-entera>: proposiciones; case <expresion-constante-entera>: proposiciones; ......... default: proposiciones }

Tant o la expresin com o las que acom paan al case deben ser de t ipo ent ero ( int . . . char) Si el valor de la expresion coincide con la et iquet a de un case se ej ecut a desde all. Los case . . son etiquetas y no son ejecutables. Por eso se suelen usar los break o los return (funciones) la clusula default no es obligat oria y se considera sat isfecha si ninguna de las dem s coincide.

Introduccin al lenguaje C++

36

char c; ..... switch (c){ case a: <accion-a>; break; case b: <accion-b>; break; ........ default: <accion>; }

cierto

c=a
falso cierto

accion-a

break

c=b
falso

accion-b

break

accion

Introduccin al lenguaje C++

37

Ejemplos de uso del esquema switch (13 Switch)

char c; cout << "Introduce un caracter: " << endl; cin.get(c); //otro modo de uso de cin.get() cout << "\n\tEl entero que le corresponde es: "; switch (c) { case 'a': cout << 1 << endl; break; case 'e': cout << 2 << endl; break; case 'i': cout << 3 << endl; break; case 'o': cout << 4 << endl; break; case 'u': cout << 5 << endl; break; default: cout << 6 << endl; };

switch (c) { case 'a': cout << 1 << endl; break; case 'e': case 'i': case 'o': cout << 4 << endl; // 4 si es e, i u o break; case 'u': cout << 5 << endl; break; default: cout << 6 << endl; };

Introduccin al lenguaje C++

38

char c; ... switch (c){ case a: <accion-a>; case b: <accion-b>; break; case c: case d: <accion-d>; break; default: <accion>; }

cierto

c=a
falso cierto

accion-a

c=b
falso cierto

accion-b

break

c=c
falso cierto

c=d
falso accion

accion-d

break

Introduccin al lenguaje C++

39

Otra solucin al problema de las notas con esquemas if y switch

int main () { char np,nf; int nt; cout << \nNota de Teoria [0..10]: ; cout << \nNota de Practicas (m,R,B,M) ; if ( (nt < 5) || (np == m) ) nf = S; else if ( nt < 7 ) switch (np) { case R: nf = S; break; case B: nf = A; break; case M: nf = N; break; ................................ cin >> nt; cin >> np;

Introduccin al lenguaje C++

40

El Operador condicional

<expresion-1> ? <expresion-2> : <expresion-3>

Se evala la <expresin-1>. Si es ciert a ( dist int a de cero) devuelve el valor de <expresion-2>. Si es falsa (<expresion-1> es cero) devuelve el valor de <expresion-3> int x ; cout << "\nPor favor, escribe un entero y pulsa retorno "; cin >> x; cout << ( x >= 0 ? "\nPositivo" : "\nNegativo" );

z = (a > b) ? a : b;

// z = maximo de a y b

Este operador tiene una prioridad inferior a && y a || y superior a las asignaciones Es un operador ternario

Introduccin al lenguaje C++

41

Esquema while

semntica: while(<condicion>) <accion>;


condicion

cierto accion

sintaxis: while (<expresion>) <proposicion>;

falso

La ejecucin de la accin debe repetirse mientras que la condicin sea verdadera La proposicin o cuerpo del while debe cont ener acciones que hagan que la condicin pueda ser falsa. En otro caso tendramos un bucle infinito while (i < 3) j++; while (true) {. . . . }

Correctamente diseado est int x = 0; while (x < 10) { x++; cout << x << endl; }

(14 while) int x = 0; while (x++ < 10) { cout << x << endl; }

Introduccin al lenguaje C++

42

Ejemplos de uso del while (15 While Potencia Mayor)

El siguient e program a calcula la prim era pot encia de 2 ( 2 exponente ) que es m ayor que 1000. Es decir 2^(exponente-1) <= 1000 < 2^exponente

int x = 1;

// 2^0 int exponente = 0; exponente++; // exp = 1 x = 2 * x; // x = 2^exp & 2 ^exp-1 < 1000 while (x <= 1000) { exponente++; x = 2 * x; // x = 2^exp & 2 ^exp-1 < 1000 }

int exponente = 0; // x = 2^exp & 2 ^exp-1 < 1000 while (x <= 1000) { exponente = exponente + 1; x = 2 * x; // x = 2^exp & 2 ^exp-1 < 1000 }

int exponente = 1; while ((x *= 2) <= 1000) { exponente++; }

cout << "La primera potencia de 2 mayor que 1000 es 2^" << exponente << " = " << x << endl;

Introduccin al lenguaje C++

43

16 While Media de 10

El siguiente programa lee una secuencia de 10 nmeros y calcula su media { float media; cout << "Escribe los 10 numeros: " << endl; int x, i = 0, suma = 0; // suma ahora es .... while (i < 10){ i = i + 1; cin >> x; suma = suma + x; // suma ahora es .... } while (i++ < 10) { cin >> x; suma += x; // suma ahora es .... }

media = static_cast<float>(suma) / 10; cout << "El valor de la media es: " << media << endl;

Introduccin al lenguaje C++

44

Media de los nmeros enteros ledos

int main () { int x, i, suma; float media; cout << Escribe los numeros y <ctrl>+Z: << endl; i = 0; suma = 0; cin >> x; while ( !cin.eof() ) { i = i + 1; suma = suma + x; cin >> x; } // suma ahora es ....

// suma ahora es ....

media = ( (i==0) ? 0.0 : static_cast<float>(suma) / i ); ....... }

Tambin se puede hacer con // suma ahora es .... while (cin >> x) { i = i + 1; suma = suma + x; }
Introduccin al lenguaje C++

// suma ahora es ....

45

Esquema for

Semntica (prcticamente equivalente a:) for(<expresion1>;<expresion2>;<expresion3>) <accion> <expresion1>; while(<expresion2>) { <accion> <expresion3>; }

Observaciones sobre el for

Normalmente, expresion1 y expresion3 son asignaciones o llam adas a funciones, mientras que la expresin2 central, es una relacin for (int i = x; i <= j + 10; i+= k/x)

Cualquiera de la expresiones es opcional, pero los ; son obligatorios Si expresion2 se omite, se interpreta que siempre es verdadera for( ; ; ) { ....} // es una iteracin infinita

Introduccin al lenguaje C++

46

Observaciones sobre el for

Si se declara una variable en expresion1, no tendr valor fuera del bucle for. (17 For) for (int i = 1; i <= 10; i++) cout << << i; cout << i; //este i no est definido: error de sintaxis

Si varias de est as expresiones no son necesarias, result a m s natural usar while que for while ((C = cin.get()) == ) ; // salta los espacios en blanco

for tiene una interpretacin intuitiva y directa en fragmentos del tipo


for (i = 1; i <= n; i++) { . . .}

para todos los i <= n desde 1 y yendo de 1 en 1 . . .

Introduccin al lenguaje C++

47

Ejemplos de uso razonable del for

const int N = 25; int i; for (i = 1; i <= N; i++) cout << i;

const int N = 25; int i; for (i = N; i >= 1; i--) cout << i;

const int N = 25; int i, x, suma = 0; float media; for (i = 1; i <= N; i++){ cin >> x; suma += x; } media = static_cast<float>(suma) / N;

Imprime los ndices de una matriz N M, por filas (18 For Indices Matriz)

const int N = 2, M = 3; for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++) cout << ( << i << , << j << ) << endl; (1,1) (1,2) (1,3) (2,1) (2,2) (2,3)
48

Introduccin al lenguaje C++

Las sentencias break y continue (19 Break Continue)

break (con switch, while, for) provoca la salida del esquema


for (int x = 1;x<=10;x++) { if ( x == 5) break; cout << x; }

continue (con while, for) provoca un salto a la siguiente iteracin


for (int x = 1; x<=10; x++) { if ( x == 5) continue; cout << x; }

Cuando se usan se rompe la equivalencia while-for i=1; while (i<=10) { if (i == 5 ) continue; // lo siguiente es la // comparacion: no para!! cout << i; i++; }

for (i=1; i<=10; i++) { if (i == 5) continue; //lo siguiente es el i++ cout << i; }

Introduccin al lenguaje C++

49

Precedencia de los operadores vistos

Operador () ! * / % + >> << < <= > >= == != && || ?: = += -= *= /= %= ,

Asociatividad ID DI ID ID ID ID ID ID ID DI DI ID

Tipo parntesis negacin multiplicacin suma insercin o extraccin de flujo relacional igualdad conjuncin disyuncin condicional asignacin coma

Introduccin al lenguaje C++

50

Esquema do/while (20 DoWhile)

do <accion>; while(<condicion>);

accion

cierto

do <proposicion>; while (expresion>);

condicion falso

<accion>; while(<condicion>) <accion>;

La accin se ejecuta, al menos, 1 vez Este esquema no se usa tantas veces como los otros iterativos

Introduccin al lenguaje C++

51

Este programa lee un entero y lo imprime, dgito a dgito, al revs

{ int n; . . . char signo; if (n > 0) signo = '+'; else {signo = '-'; n = -n;} do { cout << n % 10; n = n / 10; } while (n > 0); cout << signo << endl; . . .} [K & R] // guardamos el signo de n // y trabajaremos con n sin signo // escribe el ltimo dgito de n // elimina ese dgito de n

Introduccin al lenguaje C++

52

2.4 Propiedades de los programas

El proceso de program acin deber est ar encam inado a producir program as con las siguient es propiedades: correctos o eficaces.- produzcan resultados coherentes con su especificacin legibles.- fcilm ent e com presibles por el program ador ( t iem po despus de su diseo) y por cualquier ot ro program ador con acceso a la docum ent acin aport ada junto con el cdigo fuente modificables.- a lo largo de su ciclo de vida reutilizables.- algunos trozos deberan poder ser utilizados en otros casos eficientes.- que opt im icen el consum o de recursos inform t icos ( t iem po, espacio, uso de perifricos)

Introduccin al lenguaje C++

53

You might also like