Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

PROGRAMACIÓN - Clases 1 a 7

Curso de Programación en C++ - Prof. de Matemática - UNL FHUC - 2016
by

Daniel Ambort

on 20 September 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of PROGRAMACIÓN - Clases 1 a 7

mensajes
{
PROGRAMACIÓN
2016
Prof. Daniel Ambort
Programación
Clase Teoría
Martes de 10 a 12 hs
Clase Consulta
Viernes de 12 a 13 hs
Aula 9
Sala Informática I
Programación
Unidad 1: Conceptos Fundamentales
Unidad 2: Programas y datos simples
Unidad 5: Estructuras de datos y Algoritmos
Unidad 4:
Unidad 3: Estructuras de Control
(1 semana)
(2 semanas)
(2 semanas)
(2 semanas)
(8 semanas)
Clase 1
Conceptos Fundamentales
Unidad 1
Unidad
1

Clase 2
Programas y datos simples
Unidad 2
Unidad
2

Clase 4
Estructuras de Control
Unidad 3
Unidad
3

Clase 3
Unidad 2
Clase 5
Unidad 3
Clase 6
Programación Modular
Funciones
Unidad 4
Unidad
4

Clase 7
Recursividad
Unidad 4
Clase 8
Arreglos
Unidad 5
Unidad
5

Clase 9
Complejidad
Unidad 5
Clase 10
Búsqueda y Ordenamiento
Unidad 5
Clase 11
Strings
Unidad 5
Clase 12
Registros
Unidad 5
Clase 13
Problemas combinados
Unidad 5
Clase 14
Archivos
Unidad 5
Clase 15
Evaluación
Unidad 5
Programas y datos simples
Estructuras de Control
Programación
Programación
Programación
Detalles
Ver planeamiento.pdf !!!
Reguralidad ?
Promoción parcial ?
Bibliografía ?
Programación modular, funciones y recursividad.
- Aprobar los dos TPs, y rendir los dos parciales con 50% ó más.
- Aprobar los dos TPs, y rendir los dos parciales con 70% ó más.
"Fundamentos de programación con el Lenguaje de Programación C++"
de Benjumea V. , Roldán M.
Programación
Objetivos ?
Comprender el proceso de programación.
Estudiar y aplicar las estructuras de control y de datos fundamentales.
Solucionar problemas diseñando algoritmos y codificando programas en C++.
Entorno virtual ?
http://entornovirtual.unl.edu.ar

Curso MATEPROG
Programación
Examen final ?
- Alumno Regular: examen escrito sobre todo el programa.
- Alumno Promocionado: examen escrito sobre la unidad 5.
- Alumno Libre: examen escrito sobre todo el programa (de mayor extensión que el examen de alumno regular).
.
secuencia ordenada de pasos
orientada a la consecución de un objetivo
Los algoritmos deben:

Tener cero o más datos de entrada
Proporcionar uno o más datos de salida
Pasos definidos con exactitud
Ser finito
Ser eficaces (cumplir el objetivo)
Ser eficientes
(alcancen el objetivo con un uso adecuado
de los recursos)
Algoritmo:
Actividades para los Alumnos:
Ingresar al Entorno Virtual
Sistemas de Computación
software

hardware
PC
mainframe
red
dispositivos de entrada
dispositivos de salida
CPU
Memoria Principal
Memoria Secundaria
Sistemas de Computación
software

sistema operativo
programa
lenguajes de programación
de alto nivel
de bajo nivel
ensamblador
de máquina
Compiladores
Enlazamiento
Solución de
Programación

algoritmo
diseño de programas
etapas
fase de resolución de problemas
fase de implementación
ciclo de vida del software
Introducción a C++
Ahora...
Pasemos nuestro algoritmo a un programa!

"Resolución de Problemas con C++"
de Savitch, Walter
problemas
Prueba y Depuración
bug
debugging
Tipos de errores:
Errores de sintaxis
Errores en tiempo de ejecución
Errores lógicos
de error
de advertencia
Guía de Actividades Prácticas Nro. 1 y 2
Variables
valor
dirección
nombre
tipo
Utilice nombres significativos para las variables !!!
Identificador: nombre de algún elemento que se puede definir en un programa.
Un identificador debe comenzar con una letra o con el símbolo de guión bajo, y el resto de los caracteres deben ser letras, dígitos o el guión bajo.
C++ es sensible a mayúsculas y minúsculas.
Palabras reservadas:
una clase especial de identificadores, que tienen un significado predefinido en C++ y que no podemos utilizar como nombres de variables o para cualquier otro elemento.
Ej.: int, double, long, while, for, if....
Declaración de variables
Le indica al compilador que tipo de dato se almacena en la variable.
Ej.:
int
contador=0;
contador es una variable de tipo entero, y el nombre del tipo es
int
.
Sintaxis:
Nombre_Tipo
Nombre_Var1, Nombre_Var2, .... ;

Instrucciones de Asignación
Sintaxis:
Variable = Expresión
Primero se evalúa la expresión del lado derecho del signo igual y luego se establece el valor del lado izquierdo con dicho valor.
Ej.:
distancia = velocidad * tiempo;
cuenta = cuenta + 1;
Ojo con las variables no inicializadas!!!
Salida mediante cout
cout << "Hola! " << endl;
cout << "Hay " << alumnos << " alumnos.\n"
Un flujo de salida es el flujo que genera el programa hacia un dispositivo de salida. Por ahora, asumiremos que el dispositivo de salida es la pantalla.
Entrada mediante cin
cin >> cantidad;
Un flujo de entrada es el flujo que se genera desde un dispositivo de entrada hacia el programa. Por ahora, asumiremos que el dispositivo de entrada es el teclado.
Secuencias de escape
La diagonal invertida, \ , que precede a un carácter, le indica al compilador que el carácter que sigue a \ no tiene el mismo significado que el carácter que aparece sólo.
Esa secuencia de 2 caracteres se denomina
secuencia de escape
.
cout << "\t\t Dos tabuladores \n ";
cout << "\a " << endl;
Tips de programación
Formato de salida de números reales
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << "Precio = " << precio << endl;
Tipos de datos
Tipos numéricos
Tipos de datos
Tipo char
char letra= 'A';
cout << "Apellidos con " << letra << endl;
Tipo boolean
bool mayor;
mayor = edad >= 18;
cout << "Es mayor? " << mayor << endl;
Espacios de nombres
C++ organiza los nombres en
espacios de nombres
Ej.: using namespace std;
cada nombre en el espacio de nombres contiene solamente una especificación en dicho espacio.
Mezcla de tipos
No es recomendable mezclar tipos de datos en una instrucción de asignación!
Ej.: variable_int = variable_double;
Diferentes compiladores pueden tener comportamientos diferentes...
Tipos int y double
El tipo
int
no contiene sorpresas
El tipo
double
:

almacena un número limitado de dígitos signicativos (14 ó mas).
variantes: float, double, long double
se muestra con notación de punto flotante ó científica.
El número permitido más grande de tipo double siempre es mucho más grande que el número permitido más grande de tipo int.
Reglas de precedencia
Determinan el orden en el cual se ejecutan los operadores dentro de una expresión
Ej.: y = x + y * z;
Utilice paréntesis para especificar el orden de ejecución de los operadores (si no está seguro de cómo actúan las reglas de precedencia)
Notación abreviada de Asignación
En asignaciones donde se suma, resta, multiplica ó divide, se puede usar una notación abreviada:
Ejemplos:
cont= cont+1;
x= x*2;
m= m/cant;
total= total-desc;
cont+=1 ;
x *= 2;
m/=cant;
total-=desc;
Operadores
Aritméticos
Relacionales
Lógicos
Condicionales
de manipulación de bits
Clase Práctica
Viernes de 8 a 12 hs
Conversiones automáticas de Tipos
C++ realiza
conversiones de tipo automáticas
para que el resultado de la operación sea del tipo más amplio de los implicados en ella.
Promoción: si en una operación aparecen dos tipos diferentes, se eleva el rango del tipo menor para igualarlo al del mayor.
Rango de los tipos de mayor a menor:

double, float, long, int, short, char
Conversiones explícitas de Tipos
Podemos realizar conversiones explíticas ó
castings
:
Ej.: char x = char (66); // 'b'
double x = double (2); // 2.0
int x = int('a');
Visibilidad de los identificadores
Los identificadores se declaran para poder determinar en que parte del programa son
visibles.
Un bloque es una agrupación de instrucciones delimitadas por '
{'
y '
}'
.
Visibilidad de los identificadores
Cuando un identificador se declara dentro de un bloque, su visibilidad abarca desde el punto de su declaración hasta el final de dicho bloque.
Cuando se declara fuera de cualquier bloque, su ámbito de visibilidad abarca desde el punto de su declaración hasta el final de la unidad de compilación.
Las variables se declaran siempre antes de su uso
Para los alumnos:
Leer capítulo 3, libro "Fundamentos de Programación con el L. P. C++ .
Estructuras de Control
Global vs. Local
Sentencias de Selección
En C++ la unidad fundamental de acción es la
sentencia
, terminada con el carácter ;
Su orden de ejecución es secuencial.

Un
bloque
es una unidad de ejecución mayor que una sentencia y permite agrupar un conjunto de ellas como una unidad.

Entidades globales son aquellas definidas fuera de cualquier bloque.
Entidades locales son aquellas que se definen dentro de un bloque.
La declaración más interna oculta a la más externa.
Nos permiten especificar, según el resultado de una condición, que sentencias se ejecutarán...
Sentencia if:
Completa
Incompleta
Múltiple
Sentencias de Selección
Sentencia switch: se utiliza en situaciones donde la expresión es de tipo ordinal, y los valores para seleccionar cada rama son constantes.
Sentencias de Iteración:
En C++ hay tres tipos de sentencias de iteración:

while
for
do .. while
Sentencia while :
Ciclo iterativo que ejecuta el cuerpo del ciclo mientras que la condición evalúe a verdadero, y termina cuando evalúa a falso.
Sentencia for:
Sentencia do..while:
Ciclo iterativo exacto, ejecuta el cuerpo del mismo una cantidad determinada de veces, y conocida antes de ingresar al mismo.
Ciclo iterativo que ejecuta el cuerpo del ciclo, al menos una vez, y evalúa la condición al final del ciclo.
Programación Estructurada
Todas las estructuras de control que se utilizan en el programa (secuencia, selección, iteración y modularización) tienen un único punto de entrada y un único punto de salida.
Bohm y Jacopini demostraron que todo problema computable puede resolverse usando únicamente estas estructuras de control.
Estas características hacen posible aplicar la abstracción para el diseño y desarrollo (identificando los elementos a un determinado nivel e ignorando los detalles de niveles inferiores)
Ejemplos:
Producto de 2 números
División entera
Factorial
....
Subprogramas
Un subprograma es una aplicación explícita de la abstracción en el diseño y construcción de software.
Un subprograma es un mini programa encargado de resolver un subproblema.
Subprogramas
Cuando se hace uso de un subprograma, se lo invoca (en C++, desde main() ú otra función).
Un subprograma se comunica con el que lo llama, mediante parámetros.
Subprogramas
Dos tipos:

Procedimientos: resuelven un problema computacional general.
Funciones: realizan un cálculo computacional y retornan un único valor.
Diferencias entre
funciones y procedimientos:
La llamada a un procedimiento constituye por sí sola una sentencia independiente
La llamada a una función no constituye por sí sola una sentencia.
Una función debe ser llamada dentro de alguna sentencia que utilice el valor que retorna dicha función !!!
Definición de un subprograma
Consta de un encabezamiento y un cuerpo.
Encabezamiento: se especifica su nombre, su tipo y sus parámetros.
Cuerpo: secuencia de acciones necesarias.
Definición de un subprograma
Si es un procedimiento, el subprograma tendrá un tipo void.
Si es una función puede retornar cualquier tipo de datos (int, ó char por ejemplo), y deberá tener una sentencia return.
Ejecución de subprogramas
Se establecen las vías de comunicación entre llamante y llamado (parámetros).
El flujo de ejecución pasa a la primer sentencia del subprograma llamado....
Ejecución de subprogramas
se crean variables locales en caso de ser necesario.
cuando finaliza el subprograma: se destruyen variables locales y parámetros, y continúa la ejecución en el subprograma llamante.
Paso de parámetros
Según el contexto, los parámetros son:
Formales: aparecen en la definición del subprograma.
Reales (ó actuales): aparecen en la llamada al subprograma.
Paso de parámetros
Desde el punto de vista del subprograma llamado, los parámetros son:
de Entrada
de Salida
de Entrada/Salida
Parámetros de Entrada
Parámetros de Salida
Parámetros de E/S
Se utilizan para recibir información en la función llamada.
Se definen mediante
paso por valor
(los parámetros formales son variables independientes que se inicializan con copias de los valores de los parámetros actuales).
El parámetro actual tiene que ser una expresión cuyo tipo sea compatible.
Se utilizan para transferir al programa que invoca, información producida dentro del subprograma.
Se definen mediante
paso por referencia
: el parámetro formal es una referencia a la variable que se especificó como parámetro formal.
Se declaran con: tipo, símbolo '&' e identificador asociado.
Cualquier modificación en los parámetros es, en realidad, una modificación a las variables de los parámetros actuales.
Se utilizan tanto para recibir como para retornar información.
Los parámetros se definen por referencia, y por lo tanto se trabaja directamente sobre las variables usadas como parámetros actuales.
Paso de Parámetros
Prototipos
Los subprogramas deben declararse antes de ser utilizados (hasta ahora los definíamos antes de su uso).
Se puede declarar un subprograma, sin definirlo completamente, mediante su
prototipo
.
Actividades
Leer capítulo 5 "Subprogramas, funciones y procedimientos", del libro "Fundamentos de Programación con el LP C++"
Recursividad
En C++ decimos que una función es recursiva cuando se llama a sí misma.
Hay problemas que naturalmente tienen un planteo recursivo.
La solución recursiva suele ser más concisa que la iterativa.
Recursividad
Funciones Recursivas
Ejemplo: Factorial
Ejemplo: Fibonacci
Tienen un caso
base
: se conoce la solución en forma inmediata.
y un caso
general
: se resuelve con una llamada a la misma función con un problema de tamaño menor.
Funciones Recursivas
Las llamadas recursivas se "apilan" en memoria, hasta llegar al caso base. A partir de ahí se "desapilan" con los valores de retorno correspondientes.
El diseño debe garantizar que se llegue a algún caso base.
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
2! = 2
3! = 6
4! = 24
int factorial(int n){

if (n<=1)
return 1;
else
return n * factorial (n-1);
}
0,1, 1,2,3,5,8,13,21,...
0,1, y luego cada número es la suma de los dos anteriores....
caso general:
fib(n)= fib(n-1) + fib(n-2)

Ojo!, con las recursividades no lineales!
Sala Informática I
- Problemas aceptados en sitio juez en línea, todas las semanas ( 2 / semana ).
- Problemas aceptados en sitio juez en línea, todas las semanas ( 3 / semana ).
Registro en URI Online Judge
Libro Fundamentos de Programación con el LP C++ ( Leer capítulo 1 y 2 )
Sitio Juez en Línea:
http://www.urionlinejudge.com.br

pass: MateProg2015

=
_
Resolver y codificar problemas Guía de Actividades Prácticas Nro. 3.
Full transcript