INTRODUCCION C++ Como C
El Proceso de Programar Definir el problema Hago o compro el software? Diseño el programa Codifico (escribo) el programa Pruebo (Test & debug) el programa Documento el programa
Definir el Problema Qué se debe resolver?  Cuál es el objetivo?  Cuál es el entorno ?
Definir el Problema Se necesita: Especificación completa Salida Esperada Entrada Disponible
Definir el Problema Que se necesita saber Restricciones? Condiciones especiales? Hacer un plan
Documentación Implica mejora de la calidad Ayuda a recordar Otros entienden Facilita el mantenimiento
Diseñar una Solución Descomponer el problema en pequeñas partes Descomponer las partes en pequeñas componentes  Facilita el testeo y debugging Existen otras soluciones? pro y contra de cada solución Resolver cada parte Integrar las soluciones de los  partes para resolver el problema  original
Programación Estructurada No existen pasos de gigante Muchas tareas pequeñas  Desarrolladores concentrados en los detalles Normalmente se desarrolla en equipo
Programación Estructurada Reduce el tiempo (y $) Diferentes módulos Aislamiento de los Errores Diseño escrito en código
Algoritmos en Pseudocódigo comienzo juego muestro instrucciones elijo un número entre 1 y 100 repito el turno hasta que el número se adivine o 7 vueltas se completen entro dato del usuario respondo   fin repito fin juego muestro mensajes finales Pasos Lógicos  Escrito en lengua nativa  Indentación para las estructuras lógicas
Diagramas de flujo Los pasos lógicos se representan por símbolos normalizados display instruccion get numero es el numero? True False continue
Pruebo el Diseño Resuelve el problema? no - elegir otro diseño - volver a analizar el    problema   sí - seguir adelante
Implementar el Diseño Elegir un lenguaje Escribir el código SIN plan, SIN AYUDA SIN plan, SIN ayuda Sin plan, SIN AYUDA SIN plan, SIN ayuda
Ejemplo de Diseño Búsqueda Líneal Problema: encontrar el número más grande de una lista Algoritmo: llamar al 1°  mayor llamar al 2°  actual (cont.)
Ejemplo de Diseño Búsqueda Líneal 1 while no se termine 2 comparar el  mayor  con el  actual 3 if  actual  >  mayor 4 asignar  actual  como  mayor 5   asignar al próximo número de  la lista como  actual 6 end  while 7 output el  mayor
Lenguajes de Programación Más de 200 lenguajes El Lenguaje depende de la aplicación  COBOL Logo   C++ ADA   Pascal FORTRAN BASIC
Lenguajes de Programación Níveles de los Lenguajes: Bajo máquina assembler
Lenguajes de Programación Niveles de Lenguajes: Alto COBOL Pascal FORTRAN Logo
Lenguajes de Programación Niveles de los Lenguajes: Nivel Medio C C++
Lenguajes de Programación Lenguajes Procedurales Lenguajes Orientados al Objeto Object-Oriented languages (OOP)
Los Computadores no pueden Entender C ++ COBOL  FORTRAN Pascal BASIC ADA LISP
La base de C++: el lenguaje C Lenguaje  e structurado,   pero no estrictamente estructurado en  b loques (no se pueden definir funciones dentro de funciones). Compartimentalización de código   (funciones)   y datos   (variables locales). Incluye las construcciones típicas de los   lenguajes estructurados (distintos tipos de condicionales y  lazos ). Componente estructural básico: la función Otra forma de   estructuración: el bloque de código If   (x<10)   { cout << “   muy pequeño, pruebe de nuevo&quot;; reini_contador(-1);  } Se distingue entre minúscula y mayúscula Palabras claves en minúsculas Un bloque de código   (delimitado por llaves)
Lenguajes de Programación Traducción al Lenguaje de Máquina Intérprete Compilador enlazador (linker)
Generación de un ejecutable Código fuente compilador  h-archivos  Código objecto Enlace a bibliotecas Archivo .exe
Generación de un ejecutable
El preprocesador El preprocesador transforma el programa fuente de esta forma: Elimina los comentarios Incluye en el fuente el contenido de los archivos declarados con #include <archivo.h>  (cabeceras) Sustituye en el fuente las macros declaradas con #define ( #define PI  3.1416 )
El compilador El compilador convierte el  archivo fuente  en un archivo en lenguaje de máquina:  archivo objeto Algunos compiladores pasan por una etapa intermedia en lenguaje ensamblador
El enlazador El enlazador genera el  ejecutable binario , a partir del contenido de los archivos objetos y de las  bibliotecas Las bibliotecas contienen el código de las funciones precompiladas, a las que el archivo fuente llama
Bibliotecas Estándares La especificación del lenguaje C no incluye el manejo de strings o cadenas de letras, entrada/salida, etc Por ello, recurre bastante a funciones  de biblioteca (definidas en el estándar ) Entrada/salida: printf, scanf, fopen, fclose, … Strings: strcpy, strcat, strlen, … Memoria: malloc, free, memcpy, …
Bibliotecas de funciones Los compiladores de C/C++ proporcionan bibliotecas de funciones. Cada biblioteca de funciones tiene asociada un archivo de definición   que se denomina archivo de cabecera(o   simplemente   cabecera). Los archivos de cabecera en C   tienen la extensión  .h   y   contienen   las declaraciones de los elementos de programa (datos y   funciones)   que la biblioteca exporta (   pone a   disposición).
Bibliotecas de funciones Para utilizar algo de una biblioteca en un módulo de programa   hay que colocar al principio una directiva de preprocesamiento   #include   seguida del nombre del correspondiente archivo de   cabecera entre comillas dobles o   ángulos: #include < cabecera > Programación modular (compilación separada de módulos)
Bibliotecas de funciones Por ejemplo, para mostrar datos en la pantalla  se usa  el operador  <<  con el elemento  cout , que representa la salida   estándar (la pantalla   normalmente): cout <<  dato ; Pero para poder usar  cout  y   su operador  <<  (insertor)  se  debe incluir la biblioteca donde está   definido; se trata de la biblioteca cuyas   declaraciones se encuentran   en el archivo de cabecera  iostream.h : #include <iostream.h> Una vez que se incluye el archivo de cabecera se conocen las   declaraciones de la biblioteca   y, por tanto, se puede usar lo que está   definido en ella.
Bibliotecas de funciones y espacios de nombres Las bibliotecas más modernas de C++ tienen archivos de cabecera   que no llevan la   extensión  .h ; por ej . , la biblioteca  iostream   se rescribió para mejorarla y   para distinguirla de la antigua su archivo   de   cabecera no lleva la extensión  .h : #include <iostream> En  estas  bibliotecas  están  definidos  espacios de   nombres , que son algo así como secciones con nombre dentro   de las que se incluyen las declaraciones; los  e spacios de nombres   permiten usar varias veces un mismo identificador, cada una en un   espacio de nombres distinto;  por lo que se necesita,  en esos casos ,  indicar   el espacio de nombres que se usa: #include <iostream> using namespace std; std  es el espacio de nombres estándar.
Estructura del programa La estructura normal de un programa en C: Inclusión de los archivos de cabecera Declaraciones de prototipos de funciones, de tipos y variables Definición de funciones Todo ejecutable tiene que tener una función  main()
Ejemplo de programa # i nclude <iostream> #include <string> using namespace std; void main() { cout << &quot;hola estoy aqui &quot; << endl; } Directiva Preprocesador Biblioteca de E/S por cónsola Este programa usa la definición de cout  como salida estándard y el operador << que se le aplica La biblioteca puede tener definida  espacios de nombres Si no se usa (using namespace) un espacio de nombres (std en este caso), los elementos importados deben ser calificados (std::cout por ejemplo)
Ejemplo de programa # i nclude <iostream> using namespace std; void main() { cout << &quot;hola estoy aqui &quot; << endl; } Cabecera de la función tipo de dato que devuelve nombre lista de parámetros entre paréntesis Cabecera de la función Función Cuerpo de la función un bloque { ................} La ejecución siempre comienza con la función  main( )
Ejemplo de programa # i nclude <iostream> using namespace std; int  main() { cout << &quot;hola estoy aqui  \n &quot;; return 0; } Devuelve el valor resultado Constante de cadena de caracteres Secuencia de escape (constante de caracter de barra invertida cout flujo de salida estandard (pantalla) << operador de inserción (insertor) para flujo de salida Envía el flujo el operando derecho El punto y coma (;) es un terminador de instrucciones (declaraciones o ejecutables)
“ Descubrí que siempre tengo alternativas, y la mayor parte de las veces es sólo un cambio de actitud.” Judith M. Knowlton

Primera Clase

  • 1.
  • 2.
    El Proceso deProgramar Definir el problema Hago o compro el software? Diseño el programa Codifico (escribo) el programa Pruebo (Test & debug) el programa Documento el programa
  • 3.
    Definir el ProblemaQué se debe resolver? Cuál es el objetivo? Cuál es el entorno ?
  • 4.
    Definir el ProblemaSe necesita: Especificación completa Salida Esperada Entrada Disponible
  • 5.
    Definir el ProblemaQue se necesita saber Restricciones? Condiciones especiales? Hacer un plan
  • 6.
    Documentación Implica mejorade la calidad Ayuda a recordar Otros entienden Facilita el mantenimiento
  • 7.
    Diseñar una SoluciónDescomponer el problema en pequeñas partes Descomponer las partes en pequeñas componentes Facilita el testeo y debugging Existen otras soluciones? pro y contra de cada solución Resolver cada parte Integrar las soluciones de los partes para resolver el problema original
  • 8.
    Programación Estructurada Noexisten pasos de gigante Muchas tareas pequeñas Desarrolladores concentrados en los detalles Normalmente se desarrolla en equipo
  • 9.
    Programación Estructurada Reduceel tiempo (y $) Diferentes módulos Aislamiento de los Errores Diseño escrito en código
  • 10.
    Algoritmos en Pseudocódigocomienzo juego muestro instrucciones elijo un número entre 1 y 100 repito el turno hasta que el número se adivine o 7 vueltas se completen entro dato del usuario respondo fin repito fin juego muestro mensajes finales Pasos Lógicos Escrito en lengua nativa Indentación para las estructuras lógicas
  • 11.
    Diagramas de flujoLos pasos lógicos se representan por símbolos normalizados display instruccion get numero es el numero? True False continue
  • 12.
    Pruebo el DiseñoResuelve el problema? no - elegir otro diseño - volver a analizar el problema sí - seguir adelante
  • 13.
    Implementar el DiseñoElegir un lenguaje Escribir el código SIN plan, SIN AYUDA SIN plan, SIN ayuda Sin plan, SIN AYUDA SIN plan, SIN ayuda
  • 14.
    Ejemplo de DiseñoBúsqueda Líneal Problema: encontrar el número más grande de una lista Algoritmo: llamar al 1° mayor llamar al 2° actual (cont.)
  • 15.
    Ejemplo de DiseñoBúsqueda Líneal 1 while no se termine 2 comparar el mayor con el actual 3 if actual > mayor 4 asignar actual como mayor 5 asignar al próximo número de la lista como actual 6 end while 7 output el mayor
  • 16.
    Lenguajes de ProgramaciónMás de 200 lenguajes El Lenguaje depende de la aplicación COBOL Logo C++ ADA Pascal FORTRAN BASIC
  • 17.
    Lenguajes de ProgramaciónNíveles de los Lenguajes: Bajo máquina assembler
  • 18.
    Lenguajes de ProgramaciónNiveles de Lenguajes: Alto COBOL Pascal FORTRAN Logo
  • 19.
    Lenguajes de ProgramaciónNiveles de los Lenguajes: Nivel Medio C C++
  • 20.
    Lenguajes de ProgramaciónLenguajes Procedurales Lenguajes Orientados al Objeto Object-Oriented languages (OOP)
  • 21.
    Los Computadores nopueden Entender C ++ COBOL FORTRAN Pascal BASIC ADA LISP
  • 22.
    La base deC++: el lenguaje C Lenguaje e structurado, pero no estrictamente estructurado en b loques (no se pueden definir funciones dentro de funciones). Compartimentalización de código (funciones) y datos (variables locales). Incluye las construcciones típicas de los lenguajes estructurados (distintos tipos de condicionales y lazos ). Componente estructural básico: la función Otra forma de estructuración: el bloque de código If (x<10) { cout << “ muy pequeño, pruebe de nuevo&quot;; reini_contador(-1); } Se distingue entre minúscula y mayúscula Palabras claves en minúsculas Un bloque de código (delimitado por llaves)
  • 23.
    Lenguajes de ProgramaciónTraducción al Lenguaje de Máquina Intérprete Compilador enlazador (linker)
  • 24.
    Generación de unejecutable Código fuente compilador h-archivos Código objecto Enlace a bibliotecas Archivo .exe
  • 25.
  • 26.
    El preprocesador Elpreprocesador transforma el programa fuente de esta forma: Elimina los comentarios Incluye en el fuente el contenido de los archivos declarados con #include <archivo.h> (cabeceras) Sustituye en el fuente las macros declaradas con #define ( #define PI 3.1416 )
  • 27.
    El compilador Elcompilador convierte el archivo fuente en un archivo en lenguaje de máquina: archivo objeto Algunos compiladores pasan por una etapa intermedia en lenguaje ensamblador
  • 28.
    El enlazador Elenlazador genera el ejecutable binario , a partir del contenido de los archivos objetos y de las bibliotecas Las bibliotecas contienen el código de las funciones precompiladas, a las que el archivo fuente llama
  • 29.
    Bibliotecas Estándares Laespecificación del lenguaje C no incluye el manejo de strings o cadenas de letras, entrada/salida, etc Por ello, recurre bastante a funciones de biblioteca (definidas en el estándar ) Entrada/salida: printf, scanf, fopen, fclose, … Strings: strcpy, strcat, strlen, … Memoria: malloc, free, memcpy, …
  • 30.
    Bibliotecas de funcionesLos compiladores de C/C++ proporcionan bibliotecas de funciones. Cada biblioteca de funciones tiene asociada un archivo de definición que se denomina archivo de cabecera(o simplemente cabecera). Los archivos de cabecera en C tienen la extensión .h y contienen las declaraciones de los elementos de programa (datos y funciones) que la biblioteca exporta ( pone a disposición).
  • 31.
    Bibliotecas de funcionesPara utilizar algo de una biblioteca en un módulo de programa hay que colocar al principio una directiva de preprocesamiento #include seguida del nombre del correspondiente archivo de cabecera entre comillas dobles o ángulos: #include < cabecera > Programación modular (compilación separada de módulos)
  • 32.
    Bibliotecas de funcionesPor ejemplo, para mostrar datos en la pantalla se usa el operador << con el elemento cout , que representa la salida estándar (la pantalla normalmente): cout << dato ; Pero para poder usar cout y su operador << (insertor) se debe incluir la biblioteca donde está definido; se trata de la biblioteca cuyas declaraciones se encuentran en el archivo de cabecera iostream.h : #include <iostream.h> Una vez que se incluye el archivo de cabecera se conocen las declaraciones de la biblioteca y, por tanto, se puede usar lo que está definido en ella.
  • 33.
    Bibliotecas de funcionesy espacios de nombres Las bibliotecas más modernas de C++ tienen archivos de cabecera que no llevan la extensión .h ; por ej . , la biblioteca iostream se rescribió para mejorarla y para distinguirla de la antigua su archivo de cabecera no lleva la extensión .h : #include <iostream> En estas bibliotecas están definidos espacios de nombres , que son algo así como secciones con nombre dentro de las que se incluyen las declaraciones; los e spacios de nombres permiten usar varias veces un mismo identificador, cada una en un espacio de nombres distinto; por lo que se necesita, en esos casos , indicar el espacio de nombres que se usa: #include <iostream> using namespace std; std es el espacio de nombres estándar.
  • 34.
    Estructura del programaLa estructura normal de un programa en C: Inclusión de los archivos de cabecera Declaraciones de prototipos de funciones, de tipos y variables Definición de funciones Todo ejecutable tiene que tener una función main()
  • 35.
    Ejemplo de programa# i nclude <iostream> #include <string> using namespace std; void main() { cout << &quot;hola estoy aqui &quot; << endl; } Directiva Preprocesador Biblioteca de E/S por cónsola Este programa usa la definición de cout como salida estándard y el operador << que se le aplica La biblioteca puede tener definida espacios de nombres Si no se usa (using namespace) un espacio de nombres (std en este caso), los elementos importados deben ser calificados (std::cout por ejemplo)
  • 36.
    Ejemplo de programa# i nclude <iostream> using namespace std; void main() { cout << &quot;hola estoy aqui &quot; << endl; } Cabecera de la función tipo de dato que devuelve nombre lista de parámetros entre paréntesis Cabecera de la función Función Cuerpo de la función un bloque { ................} La ejecución siempre comienza con la función main( )
  • 37.
    Ejemplo de programa# i nclude <iostream> using namespace std; int main() { cout << &quot;hola estoy aqui \n &quot;; return 0; } Devuelve el valor resultado Constante de cadena de caracteres Secuencia de escape (constante de caracter de barra invertida cout flujo de salida estandard (pantalla) << operador de inserción (insertor) para flujo de salida Envía el flujo el operando derecho El punto y coma (;) es un terminador de instrucciones (declaraciones o ejecutables)
  • 38.
    “ Descubrí quesiempre tengo alternativas, y la mayor parte de las veces es sólo un cambio de actitud.” Judith M. Knowlton