PDF de programación - Tema 1. Programación modular

Imágen de pdf Tema 1. Programación modular

Tema 1. Programación modulargráfica de visualizaciones

Publicado el 4 de Marzo del 2020
481 visualizaciones desde el 4 de Marzo del 2020
66,7 KB
21 paginas
Creado hace 14a (26/09/2009)
Tema 1.
Programación
modular

Programación Avanzada
Ingeniería Técnica en
Informática de Gestión

Jorge Badenas

1.1. Objetivos

Repasar brevemente mediante

ejemplos los elementos principales
del lenguaje C.

Introducir algunos elementos de
C++ que no están directamente
relacionados con la programación
orientada a objetos, pero que
mejoran la programación:
Nueva E/S.
Nuevos operadores para manejo de

memoria.

Paso de parámetros por referencia.

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

2

1.2. Un primer programa en
C++ (E/S en C++)

#include <stdio.h>

int main ( )
{

int i;
int edades [10];
float media;

for( i=0; i<10; i++)
{

printf(“Edad persona numero %d:”, i);
scanf(“%d”, &edades[i]);

}
printf(“\n”);
media = 0.0;
for( i=0; i<10; i++)

media += edades[i];

media /= 10.0;
printf(“La edad media son %f años”,
media);
return 0;

}

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

3

1.3. Espacio de utilización
de las variables

Una variable puede usarse desde
el punto donde se declara hasta el
final del bloque donde fue
declarada.

float mediaCuadrados( float v[ ], int tam)
{

float acumulado;
acumulado = 0.0;
for( int i=0; i<tam; ++i)
{

acumulado

i

float cuadrado = v[i] * v[i];
acumulado += cuadrado;

}
float media = acumulado / tam;
return media;

cuadrado

media

}

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

4

1.4. Nuevos tipos de datos
C++ tiene 7 tipos de datos básicos:

void
int
char
float
double
bool
wchar

Ya existían en C

Nuevos en C++

Siguen existiendo los modificadores

de tipo:
short
long
signed
unsigned

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

5

1.5. El tipo bool

#include <iostream>
using namespace std;

int main()
{

bool iguales = false;
int i1, i2;

iguales = i1 == i2;
if( iguales )

cout << “Los dos son iguales”

<< endl;

return 0;

}

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

6

1.6. Paso de parámetros por
referencia al estilo de C
En C si quiero que una función
pueda modificar el contenido de
una variable he de pasar su
dirección.

// fragmento de una función
int x = 5;
int y = 6;
intercambiarValores( &x, &y );
cout<<“Valores actuales: “<<x<<“,”<<y<<endl;

} // Final de la función

void intercambiarValores( int *dx, int *dy)
{

int aux = *dx;
*dx = *dy;
*dy = aux;

}

dx es la dirección de

x, por lo tanto

estamos asignando x

dy es la dirección de

y, por lo tanto

estamos

modificando y

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

7

1.7. Referencias
Referencia: nombre alternativo

para una variable.
int i = 1;
int &x = i; // x es referencia a i
x = 5;
cout << i; // Se muestra un 5

Utilidad de las referencias: paso de

parámetros por referencia.
// fragmento de una función
int x = 5;
int y = 6;
intercambiarValores( x, y);
cout<<“Valores actuales: “<<x<<“,”<<y<<endl;

} // Final de la función

void intercambiarValores( int &rx, int &ry)
{

int aux = rx;
rx = ry;
ry = aux;

}

ry es un nombre

alternativo de y, por lo

tanto estamos
modificando y
Programación Avanzada - Ingeniería Técnica en Informática de Gestión

8

1.8. Funciones inline
Las funciones aportan muchas

ventajas:
Reutilización de código
Mejor estructuración Programas

más simples de diseñar y
comprender

Sólo cuando una función se ejecuta

un gran número de veces, su
pequeño coste temporal puede
significar un inconveniente.
Funciones inline: cuando el

compilador transforma el programa
en código ejecutable se substituyen
las llamadas a funciones inline por
su código.

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

9

1.9. Sobrecarga de funciones
Sobrecargar una función: definir

varias funciones con el mismo
nombre, pero con distintos
parámetros.

¿Para qué? Para que funciones

conceptualmente similares
compartan el mismo nombre.

struct MatrizCuadrada
{

int tam;
float matriz [100][100];

};

void construirMatriz( MatrizCuadrada &m )
{

m.tam = 0;

}

// Sigue en la siguiente transparencia

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

10

1.9 Sobrecarga de funciones
(continuación)

// Viene de la trasparencia anterior

void construirMatriz( MatrizCuadrada&m, int t)
{

m.tam = t;
for( int i=0; i<t; ++i)

for( int j=0; j<t; ++j)

m.matriz[i][j] = 0.0;

}

{

}

void construirMatriz( MatrizCuadrada &m,
MatrizCuadrada &o)

m.tam = o.tam;
for( int i=0; i<m.tam; ++i )

for( int j=0; j<m.tam; ++j)

m.matriz[i][j] = o.matriz[i][j];

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

11

1.9 Sobrecarga de funciones
(continuación)
En las tres funciones el concepto
es el mismo “construir (inicializar)
una matriz a patir de los
parámetros que se pasen”.

¿Cómo distingue el compilador a

qué versión de la función
construirMatriz se está llamando?:
construirMatriz
Según los parámetros que se pasen

en la llamada a la función.

MatrizCuadrada m1, m2, m3;

construirMatriz( m1 ); // Primera función
construirMatriz( m2, 15); // Segunda función
construirMatriz( m3, m2); // Tercera función

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

12

1.10. Parámetros con valor
por defecto
void diagonalizarMatriz( MatrizCuadrada &m,

float d = 1.0)

{

for( int i=0; i<m.tam; ++i)

for( int j=0; j<m.tam; ++j)

if( i==j)

else

m.matriz[i][j] = d;

m.matriz[i][j] = 0.0;

}
Posibles llamadas:
MatrizCuadrada m1, m2;

diagonalizarMatriz( m1, 5.0 ); // d = 5.0
diagonalizarMatriz( m2); // d = 1.0

Regla:

Si el parámetro k tiene valor por

defecto, también el k+1

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

13

1.11. Memoria dinámica
new reserva de memoria

substituye a malloc.

delete liberación de memoria

substituye a free.

Sintaxis:

Reservar un elemento:

int *pi;
pi = new int;

Liberar un elemento

delete pi;

Reservar un vector de elementos

(vector dinámico).
int *pi = new int [5];

Liberar un vector dinámico.

delete [] pi;

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

14

1.12. string
string: clase cuyos objetos adaptan

su tamaño a la longitud de las
cadenas que contienen.

Clase:

Contiene datos no accesibles

Ocultación de la información.

Contiene funciones (métodos) para

manejar los datosInterface.

Frente a las cadenas de caracteres

de C presentan varias ventajas:
No necesito decidir el tamaño de

antemano.

Se pueden emplear operadores
para hacer ciertas operaciones:
= asignación
+ concatenación
<, >, == comparación

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

15

1.12. string (continuación)
#include <string>
using namespace std;

int main( )
{

string s1 = “HOLA”; // Se inicializa con un char*
string s2 = s1; // Se inicializa con un string
string s3; // Longitud 0

s2 = “Y ADIOS”; // Asignación con un char*
s3 = s1 + s2; // Concatenación

cout <<“El string contiene:”<<s3; // E/S
cin >> s2;

if( s2 == s1) cout <<“s1 y s2 son iguales”;
if( s2 < s1 ) cout << “s2 menor que s1”;

for( int i=0; i<s2.size(); ++i) // size = longitud

if( s2[i] == ‘A’)

s2[i] = ‘a’; // Acceso como un vector

return 0;

}

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

16

1.12. string (continuación)
Otras operaciones sobre string:

Vaciar un string:

string s;
s.clear();

Obtener un char* a partir de un

string
char cadena[10];
string s = “123456”;
strcpy( cadena, s.c_str());

Longitud

Se puede obtener la longitud tanto con

s.length() como con s.size().
Encontrar una subcadena:

string s = “23456”;
if( s.find( “345” ) != string::npos )

cout << “Subcadena encontrada”;
Para leer strings con blancos:

string str;
getline( cin, str );

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

17

1.13. vector
vector: clase que almacena

elementos de manera secuencial y
cuyo tamaño se adapta
dinámicamente.

Operaciones sobre vector:

Declaración:

#include <vector>
vector<int> vi;
vector<long> vl( 5 ); // Vector de 5 longs

Tamaño

vi.resize( 10, 0); // 10 elementos con valor 0
int tam = vi.size(); // Saber el tamaño

Insertar al final (aumenta el tamaño

del vector)
vi.push_back( 6 );
Eliminar el último

vi.pop_back();

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

18

1.13. vector

Vaciar un vector

vi.clear()

Acceder a un elemento

int t = vi[6];
vi[6] = 5;
Iteradores:

Se comportan como punteros.

vector<int> vi( 10 );
vector<int>::iterator it;
for( it = vi.begin(); it != vi.end(); it++ )

cin >> *it ;

vi.begin() es un iterador al primer

elemento de vi.

vi.end() es un iterador que apunta
detrás del último elemento. NO AL
ÚLTIMO.

Si el objeto es constante hay que

utilizar const_iterator.

Programación Avanzada - Ingeniería Técnica en Informática de Gestión

19

1.13. vector
Inserción y borrado con iteradores

insert

vi.insert ( vi.begin() + 3, 2, 0 )

erase

vi.erase( vi.begin()+3 );
El primer elemento:

vi.front( ); // Lo mismo que *vi.begin()

El últi
  • Links de descarga
http://lwp-l.com/pdf17354

Comentarios de: Tema 1. Programación modular (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad