Clase_C_1

download Clase_C_1

of 49

description

Clase C 1

Transcript of Clase_C_1

  • COMPUTACION II OBJETIVOS

    Aprender las tcnicas bsicas del clculo numrico para su empleo en la resolucin de las ecuaciones que aparecen en Fsica.

    Aprender los elementos bsicos de al menos un lenguaje de programacin.

  • Direcciones electrnicas de inters:http://www.cplusplus.com/

    Libros de programacin-Programacin en C++. Serie Schaum Luis Joyanes Aguilar (Cdigos fuente en www.mh.es/joyanes)-C++ Programming Language. Bjarne Stroustup. Addison Wesley.-Programming with C++ . John Hubbard. Schaum.

    Libros de consulta de la asignatura-Anlisis Numrico con Aplicaciones. C.F. GERALD y P.O. WHEATLEY. Editorial Addison-Wesley. - Anlisis Numrico. R.L. BURDEN, J. DOUGLAS FAIRES. Editorial International Thomson Editores.Clculo Numrico. B. CARNAHAN, H.A. LUTHER y J.O. WILKES. EditorialRueda.-Elementary Numerical Analysis. KENDALL ATKINSON. John Wiley and Sons.

  • TEMA I: INTRODUCCIN

    Los idiomas ms utilizados en la computacin cientfica (especialmente en la fsica) son FORTRAN y C / C + +. Tradicionalmente FORTRAN fue el idioma de eleccin, y todava hoy hay una gran cantidad de programas disponibles en las bibliotecas FORTRAN.

    Sin embargo, durante la ltima dcada, C / C + + se ha hecho cada vez ms importante en la fsica, por lo que este curso se centra en C + + y se aleja del FORTRAN.

    Seguimos convencidos de que el lenguaje FORTRAN es mejor para la fsica, pero para obtener un compilador FORTRAN 90/95, uno tiene que comprar un paquete comercial, mientras que el compilador C + + est disponible sin costo alguno tanto para Linux como para Windows.

  • Algoritmos y programasLos programas son conjuntos de instrucciones escritas en un lenguaje de programacin (cdigo fuente) que ser interpretado por un ordenador y traducido a lenguaje mquina (cdigo objeto) para poder ser ejecutado (programa ejecutable).

    El lenguaje de programacin permite especificar a la computadora las acciones que debe ejecutar, escritas en un lenguaje relativamente prximo al lenguaje humano.

    El algoritmo es un procedimiento que se puede implementar en un ordenador. Consiste en una secuencia ordenada de pasos que conduce a la resolucin de un problema determinado en un nmero finito de pasos.

  • Estructura de un programa en C++lnea de comentario

    el signo # es una instruccinpara el compilador: incorpora una librera de entrada-salida

    namespace: lugar donde se ubicarn las sentencias.

    punto de comienzo de la ejecucinseguido de ( ) ya que es una funcin

    cuerpo de la funcin encerradoentre llaves { }

    // mi primer programa en C++# include using namespace std;int main (){cout

  • El programa anterior ha sido estructurado en diferentes lneas con objeto de ser mas comprensible, pero en C++ no existen reglas estrictas sobre como separar instrucciones en diferentes lneas. Por ejemplo, en lugar de:

    int main (){cout

  • INTRODUCCIN AL C++1.- Variables. Tipos de datos 2.- Operadores3.- Operaciones bsicas de Entrada/Salida: operadores cout y cin4.- Operadores de control:

    a) estructura condicional: if; if elseb) bucles: while; do while; for;

    5.- Arrays6.- Funciones. Parmetros de una funcin. Argumentos pasados como

    referencia. Recursividad.7.- Punteros. Reserva dinmica de memoria.

  • 1.- Variables

    Un identificador vlido es una secuencia de una o mas letras, dgitos o guion bajo ( _ ).

    Ejemplos:

    a=5;lambda=0.300;

    OJO CON PALABRAS RESERVADAS!!!

    Muy importante: El C++ es un lenguaje que distingue entre minsculas y maysculas.

  • Tipos de datosResumen de los fundamentales tipos bsicos en C++

    Nombre Descripcin Tamao Rango

    char Tipo carcter 1 byte

    int Enteros (con signo o sin signo) 4 bytes -2147483648 a 2147483647

    float Nmeros reales en coma flotante 4 bytes +/- 3.4 e+/- 38

    double Nmeros reales en doble precisin en coma flotante

    8 bytes +/- 1.7 e+/- 308

  • Todas las variables que queramos usar en el programa deben haber sido declaradas con su tipo al principio del programa.

    // Ejemplo:#include using namespace std;int main (){// declaramos variables:int a, b;int result;a = 5;b = 2;a = a + 1;result = a - b;// mostramos valores por pantalla:cout

  • Una variable puede ser global o local: Una variable global es aquella que se declara en el cuerpo principal del programa fuente, fuera de las funciones, mientras que una variable local es la que se declara en el cuerpo de una funcin o en un bloque.

    //Ejemplo:#include using namespace std;

    int main (){int edad;float A;cout > edad;.}

    int Numero_entero;char nombre;char apellido [20];

    Variables globales

    Variables locales

  • Constantes definidas por el usuario: #defineSe puede usar un nombre elegido por nosotros para referirnos a una constante que se vaya a usar frecuentemente, simplemente usando la instruccin #define

    // defined constants: calculate circumference#include using namespace std;#define PI 3.14159#define NEWLINE '\n'int main (){double r=5.0; // radiusdouble circle;circle = 2 * PI * r;cout

  • Constantes declaradas (const)

    Con el prefijo const podemos declarar constantes con un tipoespecfico de la misma forma que hacemos con una variable:

    const int ancho = 100;const char tabulador = '\t';

    Aqu, ancho y tabulador son dos constantes. Son tratadas como variablesnormales, salvo que sus valores no pueden ser modificados despus de sudefinicin.

  • Modulo es la operacin que da el resto de una divisin de dos valores. Por ejemplo, si escribimos:

    a = 11 % 3;

    la variable a contendr el valor 2, puesto que 2 es el resto de dividir 11 entre 3

    2.1 Operadores aritmticosLas cinco operaciones aritmticas implementadas en C++ son:

    + Suma (addition)- Resta (subtraction)* Multiplicacin (multiplication)/ Divisin (division)

    % Mdulo (module)

    2.- Operadores

  • cout
  • 2.3 Operadores de asignacin

    expresin es equivalente a

    a += b; a = a + b;

    a -= 5; a = a - 5;

    a /= b; a = a / b;

    a *= b; a = a * b;

  • Los operadores incremento (++) y decremento (--) incrementan o reducen en uno el valor almacenado en una variable. Son equivalentes a +=1 y a -=1, respectivamente.

    Ojo:x=y++;el resultado es:x=y; y=y+1;

    en cambio, si:x=++y;el resultado es:y=y+1; x=y;

    Operador Incremento y decremento (++, --)

    Por tanto:a++;a+=1;a=a+1;son todas ellas formas equivalentes: las tres incrementan en una unidad el valor de a.

  • 3- Operadores de Entrada/Salida

    cout: operador de salida por pantalla (cout

  • cin: operador de entrada por teclado (cin>> valor;).

    El dispositivo standard de entrada es el teclado. Para ello aplicaremos el operador extraccin (>>) seguido de la variable que almacena el dato que quiere ser extrado.

    Por ejemplo:

    // cin operator#include using namespace std;int main (){int i;couti;cout

  • 4.1 Estructura condicional: if

    La estructura if se usa para ejecutar una sentencia o un bloque de sentencias solamente si se cumple una determinada condicin. Por ejemplo:

    if (x == 100)cout

  • 4.2 Estructura condicional: if else

    Podemos especificar adicionalmente lo que queremos que ocurra si no se cumple la condicin usando la instruccin if..else.Por ejemplo:

    //condicional: if else#include using namespace std;int main (){int x;cin>>x;cout

  • a) Instruccin while

    4.3 Estructuras iterativas (bucles o loops)

    RESULTADO:

    Introduce el valor de partida > 88, 7, 6, 5, 4, 3, 2, 1, Terminado!

    //instruccin while#include using namespace std;int main (){int n;cout > n;while (n>0) {cout

  • b) Instruccin do-while

    Enter number: 12345You entered: 12345Enter number: 160277You entered: 160277Enter number: 0You entered: 0By by

    //instruccin do-while#include using namespace std;int main (){int n;do {

    cout > n;cout

  • Resultado:

    10, 9, 8, 7, 6, 5, 4, 3, 2, 1, Terminado!

    c) Instruccin for

    //instruccin for#include using namespace std;int main (){

    for (int n=10; n>0; n--) {cout

  • Un array es una serie de elementos del mismo tipo situados en posiciones de memoria consecutivas.

    0 1 32 4

    a

    Y para asignar valores al array, haremos, por ejemplo:int a[5]= {1,2,3,4,5}

    o bien int a[ ]= {1,2,3,4,5}

    5.- ARRAYS

    Por ejemplo, un array que contiene 5 valores enteros de tipo int llamado a se representara de la siguiente forma:

    Para declarar un array como el de ms arriba, haremos:

    int a[5];

  • // ejemplo de arrays#include using namespace std;int a[ ]={1,2,3,4,5};int n, result=0;int main () {for (n=0; n
  • #include using namespace std;#define Filas 3#define Columnas 5int A [Filas] [Columnas];int n,m;int main(){for (n=0; n
  • A(0,0)= 1A(0,1)= 2A(0,2)= 3A(0,3)= 4A(0,4)= 5A(1,0)= 2A(1,1)= 4A(1,2)= 6A(1,3)= 8A(1,4)= 10A(2,0)= 3A(2,1)= 6A(2,2)= 9A(2,3)= 12A(2,4)= 15Presione una tecla para continuar . . .

    0 1 32 4

    0

    1

    2

    1

    2

    3

    2 3 4 5

    4 6 8 10

    6 9 12 15

    Resultado

  • // ejemplo n 1 de funciones:#include using namespace std;int suma (int a, int b){int r; r = a+b; return (r); }int main ( ) {int z; z=suma(5,3); cout
  • // ejemplo n 2 de funciones:#include using namespace std;int resta (int a, int b){int r; r = a-b; return (r); }int main ( ) {int x=5, y=3, z;z = resta (7,2);cout
  • Funciones sin tipo: el uso de la instruccin void

    En ciertas ocasiones no es necesario que la funcin devuelva un valor al programa principal. En este caso especial usaremos el especificador void para indicar la ausencia de tipo de la funcin:

    // ejemplo n 3 de funciones:#include using namespace std;

    void funcionerror(){cout

  • Arrays como parmetros de una funcinEn ciertas ocasiones, podemos necesitar pasar un array a una funcin como parmetro. Para ello, cuando se declare la funcin, especificaremos en sus argumentos un identificador y un par de corchetes vacos [ ]. Por ejemplo:

    // ejemplo n 4 de funciones: arrays como parmetros#include using namespace std;

    void print_vector (int x [ ], int dim) {

    for (int n=0; n

  • Argumentos de una funcin pasados por referencia

    En la llamada a una funcin normalmente se pasan copias de los valores de las

    variables del programa principal y stos quedan inalterados despus de la

    llamada a la funcin. Sin embargo, a veces es necesario que dichos valores

    cambien, como en el ejemplo siguiente, donde se pasan los valores por

    referencia.

  • //function swap#include using namespace std;int swap(int *a, int *b){

    cout

  • a= 5, b= 3

    estoy en la funciondir a= 0x22ff74, dir b= 0x22ff70*a= 5, *b= 3hago el swap!*a= 3, *b= 5me voy de la funcion

    a= 3, b= 5& a= 0x22ff74, & b= 0x22ff70Programa terminadoPresione una tecla para continuar . . .

  • Es decir:

    &= operador direccin, permite hallar la direccin de la variable a la que se aplica.

    *= operador indireccin, permite acceder al valor almacenado en la zona de memoria donde resida la variable a la que se aplica el operador.

    5 7

    a b

    0x22ff74 0x22ff70

    direcciones

    valores

    nombre de las variables

  • Recursividad: una funcin se puede llamar a s misma. Por ejemplo, puede ser til en el caso del clculo del factorial de un nmero:

    //ejemplo n 6 de funciones: recursividad#include using namespace std;// factorial calculator#include using namespace std;long factorial (long a){if (a > 1) return (a * factorial (a-1));else return (1); }int main () {long number;cout > number;cout

  • Declaracin de funciones.

    Hasta ahora, hemos definido todas las funciones antes de que se realice la

    primera llamada desde el programa principal. Si no fuese as, dara error al

    compilar.

    Sin embargo, hay una alternativa para escribir el cdigo fuente de las

    funciones despus del programa principal. Se puede hacer mediante la

    declaracin de un prototipo de funcin antes de ser usada, en lugar de la

    funcin completa. Esta declaracin es mas corta que la definicin completa,

    pero suficiente como para que el compilador conozca su tipo y el tipo de sus

    argumentos.

  • //ejemplo n 7 de funciones: declaracin de funciones#include using namespace std;void odd (int a);void even (int a);

    int main (){int i;do {cout > i;odd (i);} while (i!=0);system ("PAUSE");return 0;}

    void odd (int a){if ((a%2)!=0) cout

  • Tecle un numero (0 para salir): 10Numero parTecle un numero (0 para salir): 21Numero imparTecle un numero (0 para salir): 11Numero imparTecle un numero (0 para salir): 4566668Numero parTecle un numero (0 para salir): 0Numero parPresione una tecla para continuar . . .

  • El tipo void es un tipo especial que indica la ausencia de tipo. Se usa para indicar el tipo del valor de retorno en funciones que no devuelven ningn valor, y tambin para indicar la ausencia de parmetros en funciones que no los requieren.

  • Ya vimos que podemos acceder a la direccin de memoria que ocupa una variable mediante el operador ampersand (&). Por ejemplo,

    int a= 5, &a= 0x22ff74

    Podemos adems usar una variable para que almacene la direccin de memoria donde se encuentra el dato al cual hace referencia. Dicha variable se llama puntero. Se puede declarar, por ejemplo, de la siguiente forma:

    int * mipuntero; // variable tipo puntero

    con la propiedad de que puede modificar el contenido de la variable hacia la que apunta. Por ejemplo:

    mipuntero=&a; *mipuntero=10; =>a=10

    En este ltimo caso hemos hecho uso del operador indirecin (*)

    7.- Punteros Reserva dinmica de memoria.

  • //puntero 1#include using namespace std;int main ( ){ int primervalor=5, segundovalor=7;int * mipuntero; // variable tipo punteromipuntero=&primervalor; //el puntero apunta a la variable primervalor*mipuntero=10;cout
  • //puntero2#include using namespace std;int main (){int firstvalue = 5, secondvalue = 15;int * p1, * p2;p1 = &firstvalue; // p1 = address of firstvaluep2 = &secondvalue; // p2 = address of secondvalue*p1 = 10; // value pointed by p1 = 10*p2 = *p1; // value pointed by p2 = value pointed by p1p1 = p2; // p1 = p2 (value of pointer is copied)*p1 = 20; // value pointed by p1 = 20cout
  • Punteros y arrays

    El concepto de array est muy vinculado al de puntero. De hecho, el identificador de un array es equivalente a la direccin de su primer elemento, es decir, es un puntero constante.

    Supongamos las dos declaraciones siguientes:

    int A [20];int *p;

    Si ahora hacemos la asignacin:

    p= A;

    A partir de ese momento p y A son equivalentes.

  • //punteros3: punteros y arrays#include using namespace std;int main ( ){ int A[5];int * p; // variable tipo punterofor (int n=0;n
  • Punteros a funcionesSe usa para pasar una funcin como argumento a otra funcin. Veamos el siguiente ejemplo:

    // pointer to functions#include using namespace std;int addition (int a, int b){ return (a+b); }int subtraction (int a, int b){ return (a-b); }int operation (int x, int y, int(*functocall)(int,int)){int g; g = (*functocall)(x,y); return (g);}int main (){int m,n;int (*minus)(int,int) = subtraction;m = operation (7, 5, addition);cout

  • Hasta ahora, en todos nuestros programas, slo hemos tenido la memoria disponible que hemos declarado para nuestras variablesantes de la ejecucin del programa. Pero existe un problema: qu hacemos si necesitamos una cantidad variable de memoria que slo se puede determinar en tiempo de ejecucin? ..Reserva de Memoria Dinmica

    int * bobby;bobby = new int [5];

    Operadores delete and delete[ ]Puesto que la necesidad de memoria dinmica se limita generalmente a momentos especficos dentro de un programa, una vez que ya no sea necesaria debe ser liberada para que la memoria vuelva a estar disponible para otras solicitudes de memoria dinmica. Este es el propsito de la eliminacin del operador, cuyo formato es:

    delete pointer;delete [ ] pointer;

    La primera expresin se usa para borrar la memoria asignada para un solo elemento y la segunda para borrar la memoria asignada para matrices de elementos.

    7.- Reserva dinmica de memoria

  • // reserva de memoria dinmica#include #include using namespace std;int main (){int i,n; int * p;cout > i;p= new (nothrow) int[i];if (p == 0)cout