Repaso de conceptos - Librerías - Departamento de Ingeniería de

Anuncio
Programación de
Computadores
Andrea Rueda
Pontificia Universidad Javeriana
Departamento de Ingeniería de Sistemas
Repaso de conceptos
●
Problema:
Se desea encontrar uno o varios objetos
desconocidos, que cumplen condiciones o
relaciones, previamente definidas, respecto a
uno o varios objetos conocidos.
Repaso de conceptos
●
Resolución de problemas:
Encontrar los objetos desconocidos.
Requiere caracterizar claramente objetos
conocidos, condiciones y objetos
desconocidos.
Repaso de conceptos
●
Algoritmo:
Secuencia finita y bien definida de tareas bien
definidas, cada una de las cuales se puede
realizar con una cantidad de recursos finitos.
–
Preciso.
–
Definido.
–
Finito.
Repaso de conceptos
●
Algoritmo:
Secuencia finita y bien definida de tareas bien
definidas, cada una de las cuales se puede
realizar con una cantidad de recursos finitos.
–
Datos.
–
Instrucciones.
–
Estructuras de control.
Repaso de conceptos
●
Metodología de programación:
Métodos, principios y reglas que permiten
desarrollar sistemáticamente un programa que
resuelva un problema algorítmico.
Estructura: secuencia de pasos que parten de
la definición del problema y culminan con un
programa que lo resuelve.
Problema
Metodología
Programa
Repaso de conceptos
Pasos generales de la metodología:
1. Análisis: comprensión del problema.
2. Especificación: identificación precisa de los
elementos constituyentes.
3. Diseño: construcción del algoritmo.
4. Prueba y refinamiento: comprobación y
corrección.
5. Codificación: en un lenguaje de programación.
6. Verificación: pruebas de la implementación.
Repaso de conceptos
Metodología simplificada (a usar en el curso):
1. Análisis
entender completamente el problema.
2. Diseño
identificación precisa de elementos,
relaciones y pasos para resolver el problema.
3. Implementación
codificación en el lenguaje de programación.
4. Pruebas
verificación de la exactitud de la solución.
Repaso de conceptos
1. Análisis
Determinar de una manera clara y concisa:
- Objetos, datos conocidos o datos de entrada:
información presente en el problema.
- Objetos, datos desconocidos o datos de salida:
datos a entregar como solución al problema.
- Condiciones: o relaciones a cumplir por los datos
de entrada y salida.
Repaso de conceptos
1. Análisis
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Repaso de conceptos
1. Análisis
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Objetos conocidos
Objetos desconocidos
Condiciones
N números enteros
Una propiedad de la suma de los
N números
Debe haber al menos un número.
Es cuadrado perfecto si la raíz
cuadrada de la suma de los N
números es un número entero, en
otro caso no lo es.
Repaso de conceptos
2. Diseño
Especificar y describir de manera formal
(lenguaje matemático):
- Entradas: (objetos conocidos) descripción,
cantidad y tipo.
- Salidas: (objetos desconocidos) descripción,
cantidad y tipo.
- Condiciones: condiciones o propiedades de los
datos de entrada, dependencia de las salidas
obtenidas con las entradas recibidas.
Repaso de conceptos
2. Diseño
Proponer la secuencia de pasos
o instrucciones que permiten
resolver el problema (algoritmo),
partiendo de las entradas y
utilizando las condiciones
definidas para llegar a las
salidas especificadas.
Descripción a través de un
diagrama de flujo.
inicio
instrucción A
instrucción B
instrucción C
fin
Repaso de conceptos
2. Diseño
Elementos del diagrama de flujo:
Inicio / fin
Lectura de datos
Selección
Impresión de datos
Proceso
Dirección de flujo
Ciclo
Repaso de conceptos
2. Diseño
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Repaso de conceptos
2. Diseño
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Entradas
N (número de datos)
d1, d2, …, dN (los números enteros)
Salidas
es_cuadrado, tipo booleano
Condiciones
N>0
es_cuadrado → verdadero, si la parte
entera de la raíz cuadrada de la suma de los
n números enteros es igual a la raíz cuadrada
de la suma de los n enteros
es_cuadrado → falso, en caso contrario
Repaso de conceptos
2. Diseño
inicio
N
d1, d2, …, dN
suma = d1 + d2 + … + dN
V
piso(raiz(suma))
== raiz(suma)
la suma es un
cuadrado perfecto
F
la suma no es un
cuadrado perfecto
fin
Repaso de conceptos
3. Implementación
Codificar en un lenguaje de programación específico.
(en nuestro caso: C++)
La implementación debe coincidir con las
especificaciones realizadas en el diseño:
–
–
–
–
Cantidad y tipo de entradas.
Cantidad y tipo de salidas.
Condiciones de las entradas y salidas.
Secuencia de instrucciones especificada en el
diagrama de flujo.
Repaso de conceptos
3. Implementación
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Repaso de conceptos
3. Implementación
1 int n, suma, dato, i;
2 cout << “número de enteros:”;
3 cin >> n;
4 suma = 0;
5 for (i=1; i<=n; i++) {
6 cout << “ingrese un número entero:”;
7 cin >> dato;
8 suma = suma + dato;
9 }
10 if (floor(sqrt(suma))==sqrt(suma))
11 cout << “la suma de los números es un cuadrado perfecto”;
12 else
13 cout << “la suma de los números no es un cuadrado perfecto”;
Repaso de conceptos
4. Pruebas
Realización de diferentes pruebas del programa
implementado, para determinar su efectividad en la
resolución del problema.
- Identificar diferentes casos o posibilidades.
- Generar datos de ejemplo para cada uno de los
casos.
- Manualmente calcular o generar las soluciones
(pruebas de escritorio).
- Ejecutar el programa con los datos de ejemplo, y
verificar la coincidencia con las soluciones manuales.
Repaso de conceptos
4. Pruebas
Ejemplo: dada una serie de N números enteros,
determinar si la suma de los mismos es un
cuadrado perfecto.
Repaso de conceptos
4. Pruebas
instrucción
N
suma dato
i
operaciones
Línea 2
Línea 3
Línea 4
Número de enteros:
2
0
Línea 5
1
Línea 6
Ingrese un número entero:
Línea 7
Línea 8
7
7
0+7
Línea 5
2
1+1
Línea 6
Ingrese un número entero:
Línea 7
Línea 8
Línea 10
Línea 12
pantalla
5
12
7+5
⌊√12⌋=3; √12=3.46
La suma de los números no es un
cuadrado perfecto
Repaso de conceptos
●
Dato: elemento básico de información.
●
Tipo de dato: conjunto al que el dato pertenece.
entero
real
caracter
booleano
int, long
float, double
char
bool
Repaso de conceptos
Nombre
Descripción
Tamaño Rango
bool
Valor de verdad
1 byte
true (1) o false (0)
char
Caracter
1 byte
0 a 255
signed char
Entero pequeño
1 byte
-128 a 127
unsigned char
Entero pequeño sin signo
1 byte
0 a 255
short int (short)
Entero corto
2 bytes
-32768 a 32767
2 bytes
0 a 65535
unsigned short int Entero corto sin signo
(unsigned short)
Repaso de conceptos
Nombre
Descripción
Tamaño Rango
int
Entero
4 bytes
-2147483648 a
2147483647
unsigned int
Entero sin signo
4 bytes
0 a 4294967295
long int (long)
Entero largo
8 bytes
-9223372036854775808 a
9223372036854775807
unsigned long int
(unsigned long)
Entero largo sin signo
8 bytes
0a
18446744073709551615
float
Punto flotante
4 bytes
+/- 3.4e +/- 38 (~7 dígitos)
double
Punto flotante de doble
precisión
8 bytes
+/- 1.7e +/- 308 (~15
dígitos)
Repaso de conceptos
●
Variable: símbolo para referenciar un espacio
en memoria donde se puede almacenar un
dato.
–
Nombre.
–
Tipo.
–
Estado o valor.
int numero = 135; float x = 23.45;
char simb = 'ñ';
Repaso de conceptos
●
●
Conversiones: permiten realizar operaciones
entre variables de diferentes tipos de datos.
Conversión implícita: el compilador detecta la
conversión.
short n1 = 450;
int n2;
n2 = n1;
el valor de n1 pasa de short a int
●
Advertencia en caso de conversión a menor
capacidad.
Repaso de conceptos
●
Conversión explícita: indicar específicamente el
tipo de dato al que se quiere cambiar.
–
Notación funcional
int n1;
float n2 = 45.76;
n1 = int (n2);
–
Notación tipo C
int n1;
float n2 = 45.76;
n1 = (int) n2;
Repaso de conceptos
●
Expresiones numéricas:
( a + 5 ) * ( y + abs ( x ) )
●
Expresiones lógicas:
( a + 5 < 4) ʌ ( b == 3 )
Repaso de conceptos
●
Precedencia de operadores:
Repaso de conceptos
●
Instrucciones sobre variables:
Repaso de conceptos
●
Instrucciones sobre variables:
–
Asignación:
x = 145.76;
–
Lectura:
std::cin >> x;
–
Escritura:
std::cout << x;
Repaso de conceptos
●
Estructura de selección:
if (<cond>) {
<bloque de instrucciones>
}
if (<cond>) {
<bloque de instrucciones 1>
} else {
<bloque de instrucciones 2>
}
Repaso de conceptos
●
Estructuras de selección anidadas:
if (<cond 1>) {
<bloque de instrucciones 1>
} else {
if (<cond 2>) {
<bloque de instrucciones 2>
} else {
<bloque de instrucciones 3>
}
}
Repaso de conceptos
●
Estructura de selección múltiple:
switch (<opcion>) {
case <constante 1>:
<bloque de instrucciones 1>
break;
case <constante 2>:
<bloque de instrucciones 2>
break;
default:
<bloque de instrucciones 3>
break;
}
Repaso de conceptos
●
Estructuras de iteración:
while (<cond>) {
<bloque de instrucciones>
}
do {
<bloque de instrucciones>
} while (<cond>);
Repaso de conceptos
●
Estructuras de iteración.:
for (i=<lim_inf>; i<=<lim_sup>; i++) {
<bloque de instrucciones>
}
●
●
Variables contadoras: llevan la cuenta dentro
de un ciclo (tipo entero).
Variables acumuladoras: almacenan valores
numéricos en cada paso del ciclo.
Repaso de conceptos
●
Ejercicio (código):
Dado un número entero, imprimir en pantalla la
tabla de multiplicar (del 1 al 10) de ese número.
Repaso de conceptos
●
Ejercicio (código):
Dado un número entero, imprimir en pantalla la
tabla de multiplicar (del 1 al 10) de ese número.
int n, i;
cout << “Ingrese número:”;
cin >> n;
for (i=1; i<=10; i++) {
cout << n << “*” << i << “=”;
cout << (n*i) << “\n”;
}
Repaso de conceptos
●
Función: proceso que recibe valores de entrada
(parámetros) y retorna un resultado.
–
Nombre.
–
Tipo de retorno.
–
Número de parámetros.
●
●
Nombre.
Tipo.
Repaso de conceptos
●
Función: proceso que recibe valores de entrada
(parámetros) y retorna un resultado.
int potencia (int base, int exponente) {
int resultado = base;
for (int i=1; i<exponente; i++) {
resultado = resultado * base;
}
return resultado;
}
Repaso de conceptos
●
Ejercicio (código):
Escribir una función que calcule el máximo de
dos números reales.
–
Tipo de retorno.
–
Cantidad de parámetros.
●
Tipo de dato de cada parámetro.
Repaso de conceptos
●
Ejercicio (código):
Escribir una función que calcule el máximo de
dos números reales.
–
Tipo de retorno → real.
–
Cantidad de parámetros → 2 números.
●
Tipo de dato de cada parámetro → reales.
Repaso de conceptos
●
Ejercicio (código):
Escribir una función que calcule el máximo de
dos números reales.
float maximo (float num1, float num2) {
if (num1 > num2)
return num1;
else
return num2;
}
Repaso de conceptos
●
Arreglo o vector: espacio en memoria que
permite almacenar una colección de datos de
un mismo tipo.
–
Nombre.
–
Tipo de dato.
–
Dimensión.
float arreglo[3];
arreglo[0] = 4.5;
cin >> arreglo[2];
cout << arreglo[0];
Repaso de conceptos
●
Arreglos bidimensionales (matrices):
organización en filas y columnas.
–
Nombre.
–
Tipo de dato.
–
Dimensión (cantidad de filas, cantidad de
columnas).
float matriz[3][3];
matriz[0][1] = 4.5;
cin >> matriz[2][0];
cout << matriz[0][1];
Repaso de conceptos
●
Ejercicio (código):
Dado un arreglo de enteros (junto con su
tamaño), ¿cómo llenar una matriz cuadrada
con los datos del arreglo?
Repaso de conceptos
●
Ejercicio (código):
Dado un arreglo de enteros (junto con su
tamaño), ¿cómo llenar una matriz cuadrada
con los datos del arreglo?
–
leer tamaño del arreglo y cada uno de los enteros.
–
calcular la dimensión de la matriz cuadrada que
puede contener todos los elementos.
–
llenar la matriz de izquierda a derecha y de arriba a
abajo con los datos del arreglo.
Repaso de conceptos
●
Ejercicio (código):
Dado un arreglo de enteros (junto con su
tamaño), ¿cómo llenar una matriz cuadrada
con los datos del arreglo?
–
leer tamaño del arreglo y cada uno de los enteros.
int n;
cin >> n;
int arr[n];
for (int i=0; i<n; i++)
cin >> arr[i];
Repaso de conceptos
●
Ejercicio (código):
Dado un arreglo de enteros (junto con su
tamaño), ¿cómo llenar una matriz cuadrada
con los datos del arreglo?
–
calcular la dimensión de la matriz cuadrada que
puede contener todos los elementos.
int tam = int(ceil(sqrt(n)));
int mat[tam][tam];
Repaso de conceptos
●
Ejercicio (código):
Dado un arreglo de enteros (junto con su
tamaño), ¿cómo llenar una matriz cuadrada
con los datos del arreglo?
–
llenar la matriz de izquierda a derecha y de arriba a
abajo con los datos del arreglo.
int l=0;
for (int i=0; i<tam; i++)
for (int j=0; j<tam; j++) {
mat[i][j] = arr[l];
l = l+1;
}
Creación de librerías
Librerías
●
●
●
Archivos que almacenan funciones y rutinas de
uso repetitivo.
Facilitan la organización y reutilización de
código.
Constan de:
–
Archivo cabecera (declaraciones).
–
Archivo de implementación o objeto precompilado.
Librerías en C++
●
Archivo cabecera (.h)
–
●
declaración de métodos, funciones.
Archivo de implementación (.cpp, .cxx).
(exactamente mismo nombre que la cabecera)
–
incluye el archivo de cabecera.
–
implementa todas las funciones.
(información de las funciones coincide exactamente
con la declaración en la cabecera)
Librerías en C++
●
Ejemplo:
int sumaArr (int arr[], int n) {
int res = 0;
for (int i=0; i<n; i++)
res = res + arr[i];
return res;
}
Librerías en C++
●
Archivo cabecera “arreglo.h”:
#ifndef ARREGLO_H
#define ARREGLO_H
int sumaArr (int arr[], int n);
#endif
Librerías en C++
●
Archivo de implementación “arreglo.cpp”:
#include “arreglo.h”
int sumaArr (int arr[], int n) {
int res = 0;
for (int i=0; i<n; i++)
res = res + arr[i];
return res;
}
Librerías en C++
●
Listo para usar! (archivo “prueba.cpp”):
#include <iostream>
#include “arreglo.h”
int main (int argc, char** argv) {
int arrA[5] = {5,­3,2,­11,7};
cout << ”Suma: ” << sumaArr(arrA,5);
return 0;
}
Descargar