profesora: alumnos: sergio luis pérez pérez luis...

40
Programación Estructurada en C++ Profesora: Ana Lilia Laureano-Cruces Alumnos: Sergio Luis Pérez Pérez Luis Eduardo Urbán Rivero Abraham Gonzalez Hernández

Upload: hoanglien

Post on 20-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Programación Estructurada en C++

Profesora: Ana Lilia Laureano-Cruces

Alumnos: Sergio Luis Pérez Pérez

Luis Eduardo Urbán Rivero

Abraham Gonzalez Hernández

Programación Estructurada en C++

Una reflexión…

Algunas veces se rechaza C++ por ser este un lenguaje demasiado permisivo y conducente a escribir programas no legibles y difíciles de decifrar. Sin embargo, se puede intentar el uso de ciertas características del lenguaje con el fin de modelar apropiadamente el diseño de programas. Esta introducción es un intento por mantener un control sobre la escritura en código C++.

Programación Estructurada en C++

Comunicación entre módulos En programación estructurada el diseño

es con base en abstracciones:Procedurales o procedimentales y Funcionales

Y la comunicación entre estas abstracciones es a través de datos:A este mecanismo se le conoce como paso

de parámetros

Programación Estructurada en C++

Abstracciones Procedimentales

Una abstracción procedimental es aquella que integra una serie de acciones sus características son:

Los parámetros relaccionados a la abstracción, pueden pasar por valor o por referencia. Lo anterior implica que los valores: 1) se producen, 2) se modifican, o 2) permanecen constantes.

Programación Estructurada en C++

Abstracciones Procedimentales en C ++

En C++ no existen explícitamente este tipo de abstracciones, sin embargo pueden ser simuladas en su implementación de dos formas diferentes.

Programación Estructurada en C++

Primera Forma

Void Nombre_Proc (Parámetros){instrucciones;

}

Programación Estructurada en C++

Segunda Forma

Tipo_de_Dato Nombre_proc(parametros){

Instrucciones;return;

}

En este caso la función tiene asociado un tipo de dato pero al no regresar nada(return) puede considerarse una abstracción procedural.

Se recomienda utilizar la Primera Forma.

Programación Estructurada en C++

Abstracciones Funcionales en C++ Integra una serie de operaciones aritméticas,

regresando un valor. Este último debe estar asociado algún tipo de dato sus características son:

Todos los parámetros pasan por valor.

Se hace hincapié en el hecho de que la función nos debe regresar un valor ya que éste se generará a través de la abstracción de las operaciones matemáticas.

Programación Estructurada en C++

Paso de parámetros

Existen dos tipos de paso de parámetros:

Referencia: apuntan a una localidad de memoria lo que les da la capacidad de crear o modificar los datos.

Valor: solo copia el contenido para ser utilizado

dentro de la abstracción. Se mantiene su valor original, una vez terminadas las acciones del procedimiento.

Programación Estructurada en C++

Como se hace en C++ En el caso de paso de parámetros por

referencia se antepone un ampersand (&) al nombre de la variable.

En el caso de paso de parámetros por valor, sólo se pone el nombre de la variable.

Por valor Por referenciaVoid Mod(int variable) Void Mod(int &variable)

Programación Estructurada en C++

En el caso de los Arreglos…un caso especial siempre pasan por referencia, pensando

en abstracciones procedimentales, ya que …

En el caso de las abstracciones funcionales no tiene ningún sentido

Programación Estructurada en C++

Ejemplo de una abstracción procedural y funcional void cubo(float x, &res) { res=(x*x*x); }

float cubo(float x) { float res; res = (x*x*x) return res; }

Programación Estructurada en C++

void main()

{

float n, res1, res2;

cin>>n;

res1 = cubo(n);

cubo(n, res2);

cout<< res1;

cout<< res2;

}

Programación Estructurada en C++

Lenguaje C++Lenguaje C++FundamentosFundamentos

Primer programa en C++Primer programa en C++ // pp1.cpp// pp1.cpp # include# include < iostream.h> < iostream.h> main ( )main ( ) {{

cout <<cout << “ hola mundo ” “ hola mundo ” << endl<< endl;;

}}

Programación Estructurada en C++

Apuntadoresy el paso de Apuntadoresy el paso de parparáámetros por referenciametros por referencia

Los apuntadores son un tipo de datos en C++ Los apuntadores son un tipo de datos en C++ que se clasifican como que se clasifican como dirección.dirección.Puntero Puntero ReferenciaReferencia--------------------------------------------------------------------------------------------------------------------------------------

intint beta beta int*int* intPtr intPtr Podemos hacer que intPtr apunte a beta usando el operador Podemos hacer que intPtr apunte a beta usando el operador

& & (dirección de)(dirección de) intPtr = intPtr = && beta // con esta se puede accesar beta // con esta se puede accesar el contenidoel contenido de de

betabeta

Programación Estructurada en C++

MemoriaMemoria

int beta;int beta; int int *intPtr *intPtr = = & & beta;beta; 50005000 5008 5008 intPtrintPtr

5008 5008 betabeta

.

.

.

.

.

28

intPtr beta

28

Programación Estructurada en C++

*intPtr*intPtr // denota la variable a la que apunta intPtr // denota la variable a la que apunta intPtr En el ejemplo En el ejemplo intPtrintPtr apunta a apunta a betabeta Así que la siguiente sentencia Así que la siguiente sentencia *intPtr = 28;*intPtr = 28; Guarda el Guarda el valor 28 en betavalor 28 en beta. Este es un . Este es un

direccionamiento indirecto.direccionamiento indirecto. La sentencia La sentencia beta = 28; beta = 28; representa el representa el

direccionamiento directodireccionamiento directo a a betabeta..

Programación Estructurada en C++

*intPtr = 28;*intPtr = 28;

cout << cout << intPtrintPtr << endl; << endl; cout << cout << *intPtr *intPtr << endl;<< endl;

50085008 2828

Programación Estructurada en C++

Usos del operador de Usos del operador de AsignaciónAsignación

84

p1 = p2

99

p1

p2

p2

p1

p2

p1

p2

p1 84

84

99

99

99

99

* p1 = *p2

Programación Estructurada en C++

//ejem1.cpp//ejem1.cpp #include#include<stdio.h><stdio.h> #include#include<iostream.h><iostream.h> main ( )main ( ) {{ char Res;char Res; int int **p, q;p, q; Res = 's';Res = 's'; WHILE ((Res=='s') WHILE ((Res=='s') || || (Res=='S'))(Res=='S')) {{ q = 100; // se asigna 100 a la variable entera qq = 100; // se asigna 100 a la variable entera q p = p = &&q; //se asigna a p la direccion de qq; //se asigna a p la direccion de q cout <<cout << * *p); // se imprime el contenido de pp); // se imprime el contenido de p cout << endl;cout << endl; cout << "deseas desplegarlo de nuevo? (S/N) \n";cout << "deseas desplegarlo de nuevo? (S/N) \n"; cin >> Res;cin >> Res; }} }}

Programación Estructurada en C++

//este programa nos muestra el uso de las instrucciones para utilizar//este programa nos muestra el uso de las instrucciones para utilizar //apuntadores//apuntadores //pointer1.cpp//pointer1.cpp #include<iostream.h>#include<iostream.h> main(void)main(void) {{ int *int *p; // p es un apuntador a datos de tipo enterop; // p es un apuntador a datos de tipo entero p = new intp = new int; //asigna memoria para un entero; //asigna memoria para un entero // simpre se debe verificar si la asignación fue exitosa// simpre se debe verificar si la asignación fue exitosa if (!p)if (!p) {{

cout<<"fallo la asignacion";cout<<"fallo la asignacion"; return 1;return 1; }} *p *p = 20; //asigna a esa memoria el valor de 20= 20; //asigna a esa memoria el valor de 20 cout<<"el valor depositado en la dirección apuntada por p es ";cout<<"el valor depositado en la dirección apuntada por p es "; cout<< cout<< *p*p; //prueba que funciona mostrando el valor; //prueba que funciona mostrando el valor delete pdelete p; // libera la memoria; // libera la memoria return 0;return 0; }}

Programación Estructurada en C++

Paso de parámetros por valor Paso de parámetros por valor y por referencia en C++y por referencia en C++ En una En una abstracción funcionalabstracción funcional todos los todos los

parámetros por default son por parámetros por default son por valorvalor y la y la función regresa un valor como resultado.función regresa un valor como resultado.

En una En una abstracción proceduralabstracción procedural los los parámetros pueden pasar por parámetros pueden pasar por valor y/o valor y/o por referencia.por referencia.

Programación Estructurada en C++

#include <iostream.h> // paso por valores

void swap (int a,int b)

{

int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

}

Main ( )

{

int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(i,j);

cout <<"despues: i = " << i << " j = " << j << "\n";

}

Paso de Paso de parámetros parámetros por valor en por valor en C++C++

Programación Estructurada en C++

Paso de parámetrosPaso de parámetrospor referencia en C+por referencia en C+++

#include <iostream.h> // paso por referencia

void swap (int &a,int &b)

{

int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

}

main ( )

{

int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(i,j);

cout <<"despues: i = " << i << " j = " << j << "\n";

}

Programación Estructurada en C++

Paso de parámetros por referencia Paso de parámetros por referencia en C++: otra formaen C++: otra forma

#include <iostream.h> // paso por referencias

void swap(int *a, int *b); // a y b es una variable de tipo apuntador a entero

main()

{int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(&i,&j); // se pasan las direcciones de las localidades i y j

cout <<"despues: i = " << i << " j = " << j << "\n";

}

void swap(int *a,int *b)

{int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

Programación Estructurada en C++

//refer.cpp// programa que ejemplifica el paso de parámetros por valor// y por referencia# include <iostream.h>int q, w;void cambia(int x, int y){int temp;temp=x;x=y;y=temp;}void cambia1( int *a, int *b){ int t; t = *a; *a=*b; *b= t;}main() { cout<<"dame un valor entero"; cin>> q; cout<<"Dame un valor entero "; cin>> w; cout<<"Escribo los valores antes de mandarlos"; cout<<"q= "<<q<<" "<<"w= "<<w<<endl; cambia(q,w); cout<<"escribo los valores despues de haberlos enviado a cambia"; cout<<q<<" "<<w<<endl; cambia1(&q,&w);// intercambio de sus valores cout<< "escribo los valores despues de haberlos enviado a cambia 1"; cout<<q<<" "<<w<<endl; return 0;}

Programación Estructurada en C++

Para manejo dinámico de Para manejo dinámico de memoria (New y Delete)memoria (New y Delete)

New: New: asigna memoria para un asigna memoria para un

objeto del tipo y tamaño objeto del tipo y tamaño especificados.especificados.

Devuelve un apuntador Devuelve un apuntador a un objeto del tipo a un objeto del tipo especificado, que hace especificado, que hace referencia al espacio referencia al espacio reservado.reservado.

Delete: Delete: libera la memoria libera la memoria

reservada para un objeto.reservada para un objeto.

Sólo se puede aplicar a Sólo se puede aplicar a apuntadores que han sido apuntadores que han sido retornados por el retornados por el operador operador newnew..

Programación Estructurada en C++

El manejo del tamaño en El manejo del tamaño en newnew

En el En el caso de arreglos se especifica caso de arreglos se especifica explícitamenteexplícitamente..

En otros casos viene definido por el tipo.En otros casos viene definido por el tipo.

El tipo puede ser definido por el usuario.El tipo puede ser definido por el usuario.

Programación Estructurada en C++

//programa que utiliza la asignación de arrays utilizando new//este programa realiza lo mismo que el anterior pero de una manera//distinta//array2.cpp#include<iostream.h>main(void){

float *p; // la variable a la que apunta p es de tipo flotanteint i;p = new float[10]; //es un arreglo de 10 apuntadoresif (!p) {

cout<<"fallo en la asignacion\n";return 1;

}// asigna valores de 100 a 109for (i=0; i<10; i++) p[i]=100.00 +i; // asigna contenidos al array. Y lo que esta

moviendo es el apuntadorfor (i=0; i<10; i++) cout <<p[i]<<" "; // muestra los contenidos del arraydelete [10] p; // borra el arreglo de 10 apuntadoresreturn 0;

}

Programación Estructurada en C++

p=new float[10];0

1

2

7

8

9

float *p

float

Programación Estructurada en C++

Tipos definidos por el usuarioTipos definidos por el usuario

ESTRUCTURAS (o Registros)ESTRUCTURAS (o Registros)

struct struct date_sdate_s {{ int int day, month, year;day, month, year; }};;

Podemos definir variables de este tipo Podemos definir variables de este tipo referenciando la estructura por el nombre: referenciando la estructura por el nombre:

date_sdate_s AnotherDateAnotherDate;;

Programación Estructurada en C++

Lenguaje C++Lenguaje C++Tipos definidos por el usuarioTipos definidos por el usuario EnumeracionesEnumeraciones

enumenum_nombre {lista_de_elementos}_nombre {lista_de_elementos}Así como lo indica el formato a la lista de Así como lo indica el formato a la lista de

elementos se le asignan valores enteros elementos se le asignan valores enteros secuencialmente iniciando por cero o los secuencialmente iniciando por cero o los que el usuario asigne:que el usuario asigne:

enumenum colorescolores { negro, rojo, verde, azul} { negro, rojo, verde, azul} enumenum colorescolores { negro = 2, rojo, verde, azul} { negro = 2, rojo, verde, azul}

Programación Estructurada en C++

#include<iostream>#include<iostream> using namespace std;using namespace std;

structstruct persona persona { { int edad; int edad;

string nombre; string nombre; string apellido; string apellido;

}}; ; main main ()(){ {

persona emi; persona emi; cout<<("dime tu nombre")<<endl; cout<<("dime tu nombre")<<endl;

cin>>emi.nombre; cin>>emi.nombre; cout<<emi.nombre; cout<<emi.nombre;

}}

Programación Estructurada en C++

Lenguaje C++Lenguaje C++unos operadores especialesunos operadores especiales

Los operadores de Los operadores de incremento incremento ++++ y y ---- pueden ser explicados pueden ser explicados por medio del siguiente por medio del siguiente ejemplo. Si tienes la ejemplo. Si tienes la siguiente secuencia de siguiente secuencia de instrucciones instrucciones

a = a + 1; b = a; a = a + 1; b = a; Se puede usarSe puede usarb = b = a++;a++; // asigna el valor de // asigna el valor de aa a a

bb y después lo incrementa y después lo incrementab = b = ++a;++a; // incrementa el valor // incrementa el valor

de de aa y después lo asigna a y después lo asigna a bb

Estructuras de Control en C++: Selecciones

if (expresión lógica)

{ /*Verdadero*/

. . .

}

else

{ /*Falso*/

. . .

}

(expresión lógica)VF

Selección Sencilla

Selector (op)

1 2 3

Caso

switch (op)

{

case 1:

{

}break; case 2: { … }break; case 3: { … }break;

default:

{

}break;

}

Estructuras de Control en C++: Iteración: NO Condicional

for (i = 1; i <= N; i++)

{

.

.

.

}

Para I<- 1 hasta N

Progresión Aritmética

Estructuras de Control en C++: Iteración: Condicionales

while (expresión lógica = v)

{

.

.

.

}

(expresión lógica = V)

Mientras

do

{

.

.

.

} while (expresion lógica = V)

( expresión lógica = V)

Repite_Hasta

NOTA: C++ no cuenta de forma explícita con un REPITE_HASTA, se maneja como DO-WHILE.

Implica desarrollar una expresión lógica complemento de la diseñada en código neutro.

fin