Punteros

Arreglos

Paso de arreglos y punteros como parámetros.

                   
Paso de Arreglos como Parametros

Para pasar arreglos como parámetros debemos recordar que con arreglos no existe el paso por valor como existía en las variables individuales, solo se puede pasar por referencia(dirección)lo que quiere decir que todas las modificaciones que se hagan dentro del arreglo afectaran también a la variable original
Para pasar un arreglo completo como parametro a un procedimiento a una función solo se manda el nombre del arreglo sin corchetes e indices, en el procedimiento o función que recibe solo se declara un arreglo del mismo tipo y se puede usar el mismo o diferente nombre del arreglo.
Entonces tenemos 2 maneras:
void func(int a[]);
void func(int a[5]); 

Ejemplo:
int ingreso(int );
void imprimir(int );

void main() {
      int n[100];
      ingreso(n[100]);
      imprimir(n[100]);
      system("pause");

}

int ingreso(int vect) {
      for (int i = 0; i < 5; i++) {
            cout << "Ingrese un numero: ";
            cin >> vect;
            return vect;
      }
}

void imprimir(int vect) {
      for (int i = 0; i < 5; i++) {
            cout << ingreso(vect) << "\n";
            (vect++);
      }
}

Paso de arreglos utilizando punteros

La manera de declarar la función es:
void func(int *a); 
Podemos acceder a los elementos de un modo alternativo usando un puntero de esta manera:
int *ptr;
 ptr = &mi_arreglo[0]; /* apuntamos nuestro apuntador al primer entero de nuestro arreglo */
ejemplo:
int mi_arreglo[] = {1,23,17,4,-5,100};
int *ptr;
int main(void)
{
 int i;
 ptr = &mi_arreglo[0]; /* apuntamos nuestro puntero
 al primer elemento del arreglo*/
 printf("\n\n");
 for (i = 0; i < 6; i++)
 {
 printf("mi_arreglo[%d] = %d ", i, mi_arreglo[i]); /*<-- A */
 printf("ptr + %d = %d\n",i, *(ptr + i)); /*<-- B */
 }
 return 0;
}

En C, el estándar establece que donde usemos &nombre_de_la_variable[0] podemos reemplazarle con nombre_de_la_variable, esto en el código de ejemplo lo que escribimos como:
ptr = &mi_arreglo[0];
podemos escribirlo como:
 ptr = mi_arreglo;
y obtenemos el mismo resultado.

Arreglos en Memoria Dinámica

Para utilizar un arreglo en memoria dinámica debemos declarar: arreglo = new char[filas]; de esta manera podemos reservar memoria para cada uno de sus espacios.

char * cadena_dinamica = NULL; // arreglo vacio.
 int cantidad = 0;
 //obtenemos un valor de cantidad capturado de consola
 cout<< "Por favor digite el tamaño del arreglo ";
 cin>>cantidad;

 // creamos el arreglo dinámico con el parametro capturado
 cadena_dinamica = new char[cantidad];


Paso de Matrices como Parametros

Para matrices, funciona de la misma forma que existía para arreglos, al momento de declarar la función es importante especificar el numero de columnas  ya que la función receptora debe conoce la estructura interna de la matriz, para poder para acceder a sus elementos, y esto solo es posible informándole de su tipo y dimensiones.

int matriz[100][100];
void main() {

      int n, n1;
     
      cout << "ingrese el tamaño de la fila = ";
      cin >> n;
      cout << "ingrese el tamaño de la columna = ";
      cin >> n1;
      for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; n++) {
                  cout << "ingrese el valor de [" << i+1 << "],[" << j+1 << "]  =";
                  cin >> matriz[i][j];
            }
      }
      for (int i = 0; i < n; i++) {
            for (int j = 0; j < n1; n++) {
                  //gotoxy(i + 5, 2 * j + 3);
                  cout << matriz[i][j];
            }
      }
}
func (int dias[2][12]) {...}

Matrices en memoria dinámica

Para utilizar matrices con memoria dinámica primero debemos reservar el espacio para el numero de filas como si fuera un vector mat = new int*[*dim]; después lo hacemos para cada una de sus columnas, para la lectura de datos utilizamos la estructura siguiente: (&(*(*(mat + i) + j))) o también (*(*(&mat) + i) + j)), y para la escritura (*(*(mat + i) + j))
void diagonal();
void ingreso(int **, int *);
void ingresomat(int **, int *);
void impresion(int **, int *);
int main() {
      diagonal();
      system("pause");
}

void diagonal() {
      int **mat, *dim;
      ingreso(mat, dim);

     
      system("pause");
}

void ingreso(int **mat, int *dim) {
      dim = new (int);
      cout << "ingrese dimension" << endl;
      scanf("%d", (&(*dim)));
      mat = new int*[*dim];
      for (int i = 0; i < *dim; i++) {
            *(mat+i) = new int[*dim];
      }
      ingresomat(mat, dim);
}

void ingresomat(int **mat, int *dim) {
      for (int i = 0; i < *dim; i++) {
            for (int j = 0; j < *dim; j++) {
                  scanf("%d", (&(*(*(mat + i) + j))));

            }
      }

      impresion(mat, dim);
}

void impresion(int **mat, int *dim) {
      for (int i = 0; i < *dim; i++) {
            for (int j = 0; j < *dim; j++) {
                  printf("%d", *(&(*(*(mat + i) + j))));
            }
            cout << endl;
      }
}


Programa que Multiplica 2 matrices en memoria dinamica

void multiplicacion();
void datosmat(int **,int *,int *);
void impresion(int **mat,int *fila, int *columna);
void encerar(int **mat,int *filas, int *columnas);
void multiplicar(int **mat1,int **mat2,int **mat3,int *filas,int *filas2, int *columnas2);

int main(){
      multiplicacion();
      return 0;
}

void multiplicacion(){
      int *filas=new (int),*columnas=new (int);
      cout<<"ingrese las dimensiones de la matriz 1"<<endl;
      cin>>*filas>>*columnas;
      int **mat1=new int*[*filas];
      for(int i=0;i<*filas;i++){
            *(mat1+i)=new int[*columnas];
      }
     
     
      int *filas2=new (int),*columnas2=new (int);
      cout<<"ingrese las dimensiones de la matriz 1"<<endl;
      cin>>*filas2>>*columnas2;
      int **mat2=new int*[*filas2];
      for(int i=0;i<*filas2;i++){
            *(mat2+i)=new int[*columnas2];
      }
     
      cout<<"ingrese datos de matriz 1"<<endl;
      datosmat(mat1,filas,columnas);
     
      cout<<"datos de la matriz 1:"<<endl;
      impresion(mat1,filas,columnas);
     
      cout<<"ingrese datos de la matriz 2"<<endl;
      datosmat(mat2,filas2,columnas2);
     
      cout<<"datos de la matriz 2:"<<endl;
      impresion(mat2,filas2,columnas2);              
     
      int **mat3=new int*[*filas];
      for(int i=0;i<*filas;i++){
            *(mat3+i)=new int[*columnas2];
      }
     
     
      cout<<"datos de la matriz 3"<<endl;
      encerar(mat3,filas,columnas2);
      cout<<endl<<endl;
      cout<<"la multiplicacion es:"<<endl;
      multiplicar(mat1,mat2,mat3,filas,filas2,columnas2);
     
}

void datosmat(int **mat,int *filas, int *columnas){
      for(int i=0;i<*filas;i++){
            for(int j=0;j<*columnas;j++){
                  //scanf("%d",&(*(*(mat+i)+j)));
                  scanf("%d",*(*(&mat)+i)+j);
            //    cin>>mat[i][j];
            }
      }
}

void impresion(int **mat,int *filas, int *columnas){
      for(int i=0;i<*filas;i++){
            for(int j=0;j<*columnas;j++){
                  printf("%d        ",*(*(mat+i)+j));
                  //printf("%d            ",*(*(mat)+i)+j);
            }
            cout<<endl;
      }
}

void encerar(int **mat,int *filas, int *columnas){
      for(int i=0;i<*filas;i++){
            for(int j=0;j<*columnas;j++){
                  *(*(mat+i)+j)=0;
            //    printf("%d",*(*(mat+i)+j));
            }
            cout<<endl;
      }
}

void multiplicar(int **mat1,int **mat2,int **mat3,int *filas,int *filas2, int *columnas2){
      for (int k = 0; k<*filas; k++) {
                        for (int f = 0; f<*columnas2; f++) {
                              for (int c = 0; c<*filas2; c++) {
                                    *(*(mat3+k)+f )= *(*(mat3+k)+f ) + (*(*(mat1+k)+f )       *     (*(*(mat2+k)+f )));
                              }
                              printf("%d  ",*(*(mat3+k)+f));
                        }
                        cout << endl;
                  }
}


Arreglos de punteros

Son vectores cuyos elementos son punteros, cada uno de estos puede apuntar a un tipo de dato especifico

Funciones Recursivas



FUNCIONES RECURSIVAS


Se dice que una función es recursiva cuando se define en función de si misma.
No todas las funciones pueden llamarse a sí mismas, sino que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente.
Tampoco todos los lenguajes de programación permiten usar recursividad.
C++ permite la recursividad. Cada vez que se llama a una función, se crea un juego de variables locales, de este modo, si la función hace una llamada a sí misma, se guardan sus variables y parámetros, usando la pila, y la nueva instancia de la función trabajará con su propia copia de las variables locales. Cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros de la pila y continúa la ejecución en el punto en que había sido llamada.



Hay algunas limitaciones:
  •     No es posible calcular el factorial de números negativos, no está definido.
  •     El factorial de cero es 1.

Por ejemplo:
Podríamos crear una función recursiva para calcular el factorial de un número entero.
El factorial se simboliza como n!, se lee como "n factorial", y la definición es:

                                                             n! = n * (n-1) * (n-2) * ... * 1

Ventajas y desventajas de la Recursividad:

Ventajas:
·         No es necesario definir la secuencia de pasos exacta para resolver el problema.
·         Soluciones simples, claras.
·         Soluciones elegantes.
·         Soluciones a problemas complejos.

Desventajas:
·         Podría ser menos eficiente.
·         Sobrecarga asociada con las llamadas a sub algoritmos
·         Una simple llamada puede generar un gran número de llamadas Recursivas. (Fact(n) genera n llamadas recursivas)
·         El valor de la recursividad reside en el hecho de que se puede usar para resolver problemas sin fácil solución iterativa.
·         La ineficiencia inherente de algunos algoritmos recursivos.


Un requisito importante para que sea correcto un algoritmo recursivo es que no genere una
secuencia infinita de llamadas así mismo. Claro que cualquier algoritmo que genere tal secuencia
no termina nunca. Una función recursiva f debe definirse en términos que no impliquen a f al
menos en un argumento o grupo de argumentos. Debe existir una "salida" de la secuencia de
llamadas recursivas.
Si en esta salida no puede calcularse ninguna función recursiva. Cualquier caso de definición
recursiva o invocación de un algoritmo recursivo tiene que reducirse a la larga a alguna
manipulación de uno o casos más simples no recursivos.


Ejercicio #1: Factorial de un número

#include <iostream>
using namespace std;
long double factorial(int);
int main()
{   int n;
    cout << "Introduzca numero: ";
    cin >> n;
    cout << "factorial: " << factorial(n) << endl;
    system("pause");
}
long double factorial(int n)
{
    long double fact;
    if (n==0)
        return 1;
    else
         return n*factorial(n-1);





Ejercicio #2: Las Torres De Hanoi


# include <iostream>

using namespace::std;

// FUNCION MOVER_TORRES

void Mover_Torres(int N, int Origen, int Intermedio, int Destino)

{ // Abre funcion Mover_Torres

if (N > 1)

{ // Abre if
Mover_Torres(N - 1, Origen, Destino, Intermedio);

/* Se mueve una torre de N - 1 discos desde la columna origen
pero hacia la columna intermedia ( para dejar la destino libre)
usando la columna destino como intermedia cout << "\nMueve disco "
<< N << " de " << Origen << " a " << Destino <<endl;
con esta instrucción se mueve el disco de la base hacia su destino
Como comento arriba, ahora hay que mover nuevamente la torre de
N - 1 discos hacia el destino original ( en donde se ha puesto el
disco mayor ) Esto implica una segunda llamada recursiva. Ahora
el origen es la columna intermedia a la que se movió la torre y
el destino es el destino primitivo,lo que originalmente era el
origen se usa ahora como columna intermedia */

cout << "\nMueve el disco " << N << " de " << Origen << " a " << Destino << endl;
Mover_Torres(N - 1, Intermedio, Origen, Destino);
} // Cierra if

// El caso limite mas sencillo se resuelve directamente

if (1 == N)
cout << "\nMueve el disco 1 de " << Origen << " a " << Destino << endl;

} // Cierra funcion Mover_Torres

int main()

{ // Abre funcion main
int Discos;
cout << "\nEste programa resuelve el problema clasico de las Torres de Hanoi";
cout << " mediante la recursion." << endl;
cout << "\nPor favor introduzca el numero de discos que quiere mover ";
cout << " de la pila 1 a la pila 3" << endl;
cin >> Discos;

Mover_Torres(Discos, 1, 2, 3);

cout << endl << endl;

return 0;
system("pause");

} // Cierra funcion main




Ejercicio: Multiplicar dos números

#include <iostream>
using namespace std;
int producto(int, int);
int main()
{
 int n1,n2,p;

 cout << "Introduzca primer numero: ";
 cin >> n1;
 cout << "Introduzca segundo numero: ";
 cin >> n2;
 p=producto(n1,n2);
 cout << "producto: " << p << endl;
 system("pause");

}

int producto(int a, int b)
{
 if(a==0 or b==0)
   return 0;
  else
   {
    return a+producto(a,b-1);
   }

}



Gracias

Jossua Orellana G,         Marcelo Olalla. 

Videos Explicativos Referentes al Tema: 


COMO INSTALAR ECLIPSE


COMO INSTALAR ECLIPSE ,CON COMPILADOR C++



 PASOS


A..- INSTALACION JAVA, JDK:

        java                     Descargar Java

-----------------------------------------------------------------------------------------------------------
        jdk:

para 32 bits:

                                    Descargar JDK32 
para 64 bits:
                                    Descargar JDK 64 

-----------------------------------------------------------------------------------------------------------


B.-INSTALACIÓN DEL COMPILADOR
          1.-Descargar  TDM-GCC      Descargar 
     
          2.-Instalar TDM*----Click en Create----click MINGW/TDM(32bits)***--**Siguiente*--finalizar

-------------------------------------------------------------------------------------------------------------
C.-INSTALACION DE  ECLIPSE 

1.-Descargar eclipse mars 

    64 bits:         Descargar 
    32bits:          Descargar 
2.-Descomprimir eclipse del archivo (eclipse-cpp-mars-1-win32-x86_64.rar )en el disco local  c
LISTO.

-----------------------------------------------------------------------------------------------------------
D.-CONFIGURACION



1.-Abrir eclipse ubicado en el disco  c  .--------Seleccionar la carpeta que se utilizara para guardar los proyectos de eclipse.-----click en (use this as the default and do  not ask again)


2.-dar click en windows----->Preferences------->seleccionar  general luego en la lista desglozada seleccionar workspace----
**En la pestaña de Workspace 
en el recuadro de (text file encoding )click--->en  other---luego seleccionar (UTF-8)
en el recuadro de (New text file line delimiter )click--->en other--luego seleccionar(unix) 
**En el panel de la izquierda seleccionar  C/C++-----luego en New C/C+ Project------Seleccionar Empty Project-----Seleccionar MINGW CC y dar lick en (Make toolchain(s) preferred) y finalmente clicken OK listo.

















SILABUS

PROGRAMA DE ASIGNATURA PROGRAMACIÓN I  – SÍLABO-  PRESENCIAL

1.     DATOS INFORMATIVOS
MODALIDAD:
Presencial
DEPARTAMENTO:
Ciencias de la Computación
ÁREA DE CONOCIMIENTO:
Programación
CARRERAS:
Sistemas, Mecánica
NOMBRES ASIGNATURA:
Programación I
PERÍODO ACADÉMICO:
Octubre 2015 – Febrero 2016
PRE-REQUISITOS:
Fundamentos de Programación
CÓDIGO:
15081
NRC:
No. CRÉDITOS:
6
NIVEL:
Segundo
CO-REQUISITOS: 

FECHA ELABORACIÓN:
31/08/2015
SESIONES/SEMANA:
EJE DE FORMACIÓN
Profesional
TEÓRICAS:
1 H
LABORATORIOS:
5 H
 DOCENTE:  
DESCRIPCIÓN DE LA ASIGNATURA:
El crecimiento de la industria del Software permite que el estudiante innove nuevas habilidades, destrezas utilizando diferentes técnicas de manipulación de información basados en métodos con programación funcional y /u orientada a objetos en búsqueda de nuevas alternativas de solución y automatización de programas bases apoyados en el conocimiento e implementación de técnicas avanzadas de programación estructurada, Programación Orientad a Objetos con sus diferentes funcionalidades.

CONTRIBUCIÓN DE LA ASIGNATURA A LA FORMACIÓN PROFESIONAL:
Desarrolla programas informáticos empleando programación avanzada  con creatividad e innovación para la resolución de problemas computacionales usando técnicas y mecanismos de programación con razonamiento matemático y lógico en búsqueda de soluciones informáticas.

RESULTADO DE APRENDIZAJE DE LA CARRERA: (UNIDAD DE COMPETENCIA)
Desarrolla  proyectos de sistemas de información aplicando ingeniería de software y estándares que garanticen la calidad del producto, liderando grupos de trabajo con creatividad, eficiencia, eficacia  y responsabilidad profesional.

OBJETIVO DE LA ASIGNATURA:
Aplicar conceptos, técnicas y herramientas para el diseño, desarrollo y ejecución de programas informáticos, utilizando programación modular y orientada a objetos en búsqueda de automatización a los procesos manuales.

RESULTADO DE APRENDIZAJE DE LA ASIGNATURA:  (ELEMENTO DE COMPETENCIA)
1.     Realiza el análisis de requisitos del sistema de información
  1. Determina la metodología, estándares y métricas para el proceso de desarrollo de software con calidad.
3.     Modela y diseña los sistemas de información.
4.     Construye, prueba e implanta los  sistemas de información en diferentes plataformas



2.     SISTEMA DE CONTENIDOS Y RESULTADOS  DEL APRENDIZAJE  

No.
UNIDADES DE CONTENIDOS
RESULTADOS  DEL APRENDIZAJE Y SISTEMA DE TAREAS

1
UNIDAD  1:                                      
TÉCNICAS AVANZADAS PROGRAMACIÓN ESTRUCTURADA
Resultados de Aprendizaje de la Unidad1:
Desarrollar programas computacionales con características modulares
Contenidos:  
1.1.         Presentación, indicaciones generales
1.2. Arreglos: definición, declaración, acceso a elementos.
1.3. Punteros: definición, declaración, operadores, aritmética de punteros, punteros a cadenas.
1.4. Relación entre arreglos y punteros. Aplicaciones que usan indexación y aritmética de punteros.
1.5. Funciones: definición, declaración, llamadas a función parámetros por valor,  dirección y referencia.
1.6. Paso de arreglos y punteros como parámetros.
1.7. Funciones que devuelven un puntero.
1.8. Punteros a función.
1.9. Funciones recursivas
1.10. Estructuras: definición, declaración, acceso a elementos.
1.11. Tipos de datos abstractos.
1.12. Arreglos dentro de una estructura.
1.13. Arreglos de estructuras.
1.14.  Paso de estructuras como parámetros
1.15.  Estructuras anidadas.
1.16.  Enum, Uniones.
1.17. Asignación dinámica de memoria: funciones      malloc () y free(). Operadores new y delete.
1.18. Arreglos dinámicos de estructuras.

Tarea 1: Creación de un programa utilizando prototipos.

Tarea 2: Elaboración de programas usando punteros.

Tarea3: Informe de representación de prototipos y funciones en el lenguaje C++.

Tarea 4: Desarrollo de aplicaciones utilizando el lenguaje de programación C++, implementando funciones.

Tarea 5: Resolución de Problemas aplicando arreglos.

Tarea 6: Resolución de Problemas Aplicando estructuras

Tarea 7:
Resolución de problemas utilizando memoria dinámica.

2
UNIDAD 2:
ORIENTACIÓN A OBJETOS
Resultados de Aprendizaje de la Unidad 2:
Desarrollar programas computacionales basados en manejo de memoria dinámica
Contenidos:
2.1. Introducción a la programación orientada a objetos (POO). Principios fundamentales de la POO.
2.2. Definiciones de clases, objetos, atributos, métodos y mensajes.
2.3. Especificaciones de acceso (private, protected y public).
2.4. Funciones inline. Archivos fuente de definición (cabecera .h) e implementación (.cpp).
2.5. Constructores y destructores. El puntero this.
2.6. Getters y setters.
2.7. Sobrecarga de funciones. Argumentos por defecto.
2.8. Clases anidadas. Composición, agregación.
2.9. Diagramas UML de clases.
2.10. Funciones amigas y clases amigas.
2.11. Sobrecarga de operadores.
2.12. Atributos y métodos estáticos.
2.13. Punteros a atributos y métodos.
2.14. Arreglo de objetos: estáticos
2.15. Arreglo de objetos: dinámicos.


Tarea 1:
Resolución de Problemas sobre P.O.O.

Tarea 2:
Resolución de problemas utilizando arreglos dinámicos



3
UNIDAD 3:
HERENCIA POLIMORFISMO Y ARCHIVOS
Resultados de Aprendizaje de la Unidad 3:
Desarrollar programas Orientados a Objetos con sus características funcionales
Contenidos:
3.1. Herencia simple. Constructores y listas de parámetros en herencia simple. Jerarquía de clases.
3.2. Clases y funciones virtuales.
3.3. Herencia múltiple. Constructores y listas de parámetros en herencia múltiple. Herencia repetida.
3.4. Funciones virtuales puras. Clases abstractas. Polimorfismo.
3.5. Entrada y salidas por archivos. Apertura de archivos, creación de archivos.
3.6. Funciones para manipulación de archivos.

Tarea 1:
Aplicación utilizando herencia simple y múltiple  de ejecución simulando eventos de la vida real.

Tarea 2:
Almacenamiento de datos  en archivos planos.

Tarea 3
Aplicación para Ingreso  consulta, búsqueda, actualización y eliminación de datos.




3.     PROYECCIÓN METODOLÓGICA Y ORGANIZATIVA PARA EL DESARROLLO DE LA  ASIGNATURA


( PROYECCIÓN DE LOS MÉTODOS DE ENSEÑANZA-APRENDIZAJE QUE SE UTILIZARÁN)
Conforme al modelo educativo de la ESPE, centrado principalmente en el estudiante (aprendizaje), se privilegia una metodología con enfoque constructivista a través de la participación constante, el trabajo cooperativo y la permanente vinculación entre la teoría y la práctica.

La asignatura se impartirá mediante clases teórico prácticas con sesiones de dos horas de duración, 6 sesiones en la semana. De acuerdo con la naturaleza del curso, sus contenidos serán desarrollados en diferentes niveles de aprendizaje desde la adquisición de conocimientos básicos, su aplicación, análisis, síntesis y evaluación a través de actividades diseñadas para mejorar su  aprendizaje.


Adicionalmente, se utilizarán las siguientes estrategias:
      Clase magistral.
      Análisis de casos particulares.
      Prácticas de laboratorio.
      Talleres y ejercicios prácticos.
      Aplicación de lo aprendido en un proyecto por unidad.

El curso será evaluado de la siguiente manera:

Unidad  1-  2 – 3

      El estudiante deberá elaborar programas considerando la temática analizada para lograr el RDA 1.
      Portafolio de Ejercicios: El estudiante deberá resolver los ejercicios planteados por el docente y subirlos a la plataforma virtual. Se adjunta rúbrica.
      Documentación del proyecto a desarrollar: Por equipo de trabajo los estudiantes deberán generar la documentación para la gestión del proyecto seleccionado, la cual incluye propuestas de proyecto, informe de selección de proyecto, acta de constitución, planes de gestión del proyecto y solución del proyecto.  Esta calificación considera nota grupal y nota individual, la nota individual depende de la calificación entre pares de estudiantes y de la defensa individual del trabajo realizado en la Unidad 3.
      Portafolio de lecciones aprendidas: El estudiante deberá desarrollar un blog con lecciones aprendidas, el cual deberá ser actualizado según el avance de la materia.
      Cuestionarios y Pruebas: El estudiante rendirá evaluaciones prácticas y teóricas. Resolución de problemas para los temas en búsqueda de los objetivos de los RDA 1, 2 y 3. Para esta nota también serán considerados los controles de lectura que asigna el docente.
      Examen: El estudiante rendirá una evaluación final que considera el contenido estudiado en las unidades 1 y 2.
      Informes y exposición de Investigación: Los estudiantes deberán investigar, sintetizar y realizar una presentación del tema enviado por el docente en equipos de trabajo.  El informe y presentación deberán subirse a la plataforma virtual. Se adjunta rúbrica.
      Debates: El docente plantea temas complementarios a las sesiones presenciales, cuyas aportaciones serán ubicadas en la plataforma virtual.

Asistencia:

·         Se tomará lista en cada sesión de clase.

PROYECCIÓN DEL  EMPLEO DE LAS TIC EN LOS PROCESOS DE APRENDIZAJE
El crecimiento de la industria del Software permite  que el estudiante innove nuevas habilidades, destrezas utilizando diferentes técnicas de manipulación de información basados en herramientas que logren los objetivos deseados tales como manejo de herramientas de programación como C++ en sus diferentes IDE: CodeBlocks, Borland C, Dev, Visual Studio; creación de Blog, Wikis y foros usando la plataforma existente en la institución como es e-ducativa.


4.  RESULTADOS DEL APRENDIZAJE,  CONTRIBUCIÓN AL PERFIL DE EGRESO Y TÉCNICA DE EVALUACIÓN


LOGRO O
RESULTADOS DE APRENDIZAJE

NIVELES DE LOGRO
Técnica de evaluación
Evidencia del aprendizaje
A
Alta
B
Media
C
Baja
1) Desarrollo programas computacionales con características modulares
X


Resolución de prácticas de casos
El estudiante deberá subir los ejercicios a la plataforma
2) Desarrolla programas Orientados a Objetos con sus características funcionales
X


Resolución de prácticas de casos
El estudiante deberá subir los ejercicios a la plataforma
3) Desarrolla programas computacionales basados en manejo de memoria dinámica
X


Resolución de prácticas de casos
El estudiante deberá subir los ejercicios a la plataforma


5.     DISTRIBUCIÓN DEL TIEMPO

TOTAL HORAS
CONFERENCIAS
CLASES
PRÁCTICAS
LABORATORIOS
CLASES
DEBATES
CLASES
EVALUACIÓN
TRABAJO AUTÓNOMO DEL ESTUDIANTE

96

2

30

26

4

4


30


6.                  TÉCNICAS Y PONDERACIÓN DE LA EVALUACIÓN

Técnica de evaluación
1er Parcial*
2do Parcial*
3er Parcial*
Resolución de ejercicios



Investigación Bibliográfica
3
3

Lecciones oral/escrita



Pruebas orales/escrita



Laboratorios
2
2
3
Talleres



Solución de problemas



Prácticas
3
3
3
Exposición
2
2
2
Trabajo colaborativo
2
2
2
Examen parcial
8
8

Otras formas de evaluación


10
Total:
20
20
20


7.     BIBLIOGRAFÍA BÁSICA/ TEXTO GUÍA DE  LA ASIGNATURA

TITULO
AUTOR
EDICIÓN
AÑO
IDIOMA
EDITORIAL
1.     C/C++. Edición revisada y actualizada 2012
Acera García, Miguel Ángel
Tercera
2011
Español
ANAYA MULTIMEDIA
2.     Programación C++
Liberty, Jesse; Cadenhead, Rogers
Segunda
2011
Español
ANAYA MULTIMEDIA
3.     Fundamentos de programación C++
Villalobos Marcelo
Segunda
2010
Español
Macro







        BIBLIOGRAFÍA COMPLEMENTARIA

TITULO
AUTOR
EDICIÓN
AÑO
IDIOMA
EDITORIAL
4.     Como programar en C/C++
Deithel y Deithel
Sexta
2010
Español
Prentice Hall



8.     LECTURAS PRINCIPALES

TEMA

TEXTO
PÁGINA
Todos
Aprende a programar en C++ con nosotros
http://c.conclase.net/
Todos

POO (Programación Orientada a objetos)

http://www.ciberaula.com/articulo/tecnologia_orientada_objetos/
Descarga de libro, con licencia CC
Programación Orientada a Objetos
http://www.libreriaalvaro.com/libropoo.pdf



9.     ACUERDOS
DEL DOCENTE:
·         Estar puntuales a las clases, no se permitirá el ingreso de los estudiantes con retraso mayor a 15 minutos.
·         Apagar los celulares.
·         Se realizará prácticas de laboratorio grupales por semana.
·         Las pruebas y los exámenes serán aplicados en la fecha y hora fijada por el docente y en conocimiento de los estudiantes.
·         Se controlará el plagio.
·         Trabajar las actividades propuestas en el aula virtual
·         La autoridad del docente se limita a su materia por lo que los compromisos extraoficiales que él contraiga no representan la postura oficial de la administración de la carrera.
·         Brindar respeto y consideración a los alumnos y dirigir sus clases con el mejor ambiente de trabajo y colaboración, fomentando la investigación y el trabajo en equipo
·         Si es detectada la poca o ninguna participación en las actividades grupales de algún miembro de los equipos de trabajo y esto no es reportado por ellos mismos, se asumirá complicidad de ellos y serán sancionados con la nota de cero en todo el trabajo final (implica la pérdida del curso) dado el peso ponderado del trabajo en la nota final.

DE LOS ESTUDIANTES:
·         Asistir puntualmente a clases.
·         No realizar copia de exámenes, pruebas, informes, proyectos, capítulos, ensayos, entre otros, será severamente corregida, inclusive podría ser motivo de la pérdida automática del semestre, (código de ética de la ESPE).
·         Respeto en las relaciones docente- alumno y alumno-alumno será exigido en todo momento, esto será de gran importancia en el desarrollo de las discusiones en clase.
·         En los trabajos se deberán incluir las citas y referencias de los autores consultados (de acuerdo a normativas aceptadas, APA). Si un plagio es evidenciado, podría ser motivo de la separación del curso del o los involucrados.
·         Los casos y trabajos asignados deberán ser entregados el día correspondiente.
·         Apagar el celular.
·         Desarrollar las prácticas de laboratorio
·         Realizar  las pruebas y los exámenes en la fecha y hora.
·         Trabajar las actividades propuestas en el aula virtual



10.  FIRMAS DE LEGALIZACIÓN:






_______________________________         _______________________________________
                   DOCENTE                                                                       COORDINADOR DE ÁREA DE
                  Ing. Fausto Meneses                                                                CONOCIMIENTOS
                                                                                                                     Sr. Ing. Fernando Solís







_______________________________          _______________________________________
PLANIFICADOR DE DEPARTAMENTO            DIRECTOR DE DEPARTAMENTO/CARRERA
                Sr. Ing. Paúl Díaz                                                            Sr. Crnl. EMC (S.P.) Ing. Fidel Castro