7/29/2019 Fund. de Programacin - Tema 1
1/50
23-ene-13Santiago, Rep. Dom.
Leccin 1: Consolidacin en la Modularizacin de Programas
FUNDAMENTOS DE PROGRAMACIN
Pontificia Universidad Catlica Madre y Maestra
Vicerrectora Acadmica
Facultad Ciencias de las Ingenieras
Ingeniera en Sistemas y Computacin - ISC
7/29/2019 Fund. de Programacin - Tema 1
2/50
CONSOLIDACIN EN LA MODULARIZACIN
DE PROGRAMASFundamentos de Programacin
7/29/2019 Fund. de Programacin - Tema 1
3/50
RECORDANDO LAS BASES
El proceso de compilacin.
Qu podemos hacer en Lenguaje C?
7/29/2019 Fund. de Programacin - Tema 1
4/50
RECORDANDO LAS BASES
El proceso de compilacin.
7/29/2019 Fund. de Programacin - Tema 1
5/50
RECORDANDO LAS BASES
Qu podemos hacer en Lenguaje C?
float temp = 98.6; int contadorFilas = 4; temp = (temp 32) * 5 / 9;
Escribir una
Sentencia
if(eresMuyChevere){
strcpy(invitado, Estas invitado!;
}else{
strcpy(invitado, Lo sentimos,pero ya se lleno la fiesta.;}
Tomar Decisiones
while(contadorFilas > 0){procesarFilas();contadorFilas = contadorFilas
1;}
Realizar
Sentencias Una yOtra Vez
7/29/2019 Fund. de Programacin - Tema 1
6/50
RECORDANDO LAS BASES
Cmo declarar una variable?
Cmo nombrar una variable?
Volvindonos expresivos
Toma decisiones en lenguaje C
Hazlo una y otra y otra y otra vez
7/29/2019 Fund. de Programacin - Tema 1
7/50
RECORDANDO LAS BASES
Cmo declarar una variable?
tipo variable;
Inicializar una variable
tipo nombre_variable = expresin;
Duracin de una variable
Locales y Globales
7/29/2019 Fund. de Programacin - Tema 1
8/50
RECORDANDO LAS BASES
Cmo nombrar una variable?
Regla nmero 1: Inicia el nombre de la variable con una letra o un guin bajo.
Regla nmero 2: Luego, puedes usar cualquier nmero de letras, dgitos numricoso guin bajo.
Regla nmero 3: Asegrate de no usar palabras reservadas del lenguaje deprogramacin.
7/29/2019 Fund. de Programacin - Tema 1
9/50
RECORDANDO LAS BASES
Palabras reservadas del lenguaje C:
auto else long switch
break enum register typedef
case extern return unionchar float short unsigned
const for signed void
continue goto sizeof volatile
default if static while
do int struct _Packed
double
7/29/2019 Fund. de Programacin - Tema 1
10/50
RECORDANDO LAS BASES
Volvindonos expresivos
Categoras Operadores Asociacin
Unarios - ++ -- ! DI
Multiplicacin, Divisin y Mdulo * / % ID
Suma y Sustraccin + - ID
Relacionales < >= ID
Igualdad == != ID
Y lgico && IDO lgico || ID
Asignacin = += -= *= /= %= DI
7/29/2019 Fund. de Programacin - Tema 1
11/50
RECORDANDO LAS BASES
Volvindonos expresivos
(9 / 5) * tempC + 32
Cul es el resultado si tempC es 10?
strcat(strcat(Numero, ), 2);
Cul es la cadena resultante?
7/29/2019 Fund. de Programacin - Tema 1
12/50
RECORDANDO LAS BASES
Volvindonos expresivos
level >= 5;
Cul es el resultado cuando level es 10?Y si level es 5?
color != rosado;
Cul es el resultado si color es azul?
(2 * PI) * r;
Cul es el resultado si r es 3?
7/29/2019 Fund. de Programacin - Tema 1
13/50
RECORDANDO LAS BASES Toma decisiones en lenguaje Cif(cucharas < 3){
printf(El helado se esta acabando);
}
else if (cucharas > 9){
printf(Come rapido, o se va a derretir el helado!);
}
else
{
printf(Queda mucho helado ven y come!);
}
7/29/2019 Fund. de Programacin - Tema 1
14/50
RECORDANDO LAS BASES Toma decisiones en lenguaje Cswitch(expresion){
case 0:
instrucciones;break;
default:
instrucciones;
break;}
7/29/2019 Fund. de Programacin - Tema 1
15/50
RECORDANDO LAS BASES
Hazlo una y otra y otra y otra vez
while(condicion)
{
sentencias;
}
7/29/2019 Fund. de Programacin - Tema 1
16/50
RECORDANDO LAS BASES
Hazlo una y otra y otra y otra vez
do
{
sentencias;
}while(condicin);
7/29/2019 Fund. de Programacin - Tema 1
17/50
RECORDANDO LAS BASES
Hazlo una y otra y otra y otra vez
for(inicializacin; condicin; cambio)
{
sentencias;
}
7/29/2019 Fund. de Programacin - Tema 1
18/50
RECORDANDO LAS BASES Ejercicio: Completa los espacios en blanco.
#include #include
int main(){
int a, b, result _____, __________;
printf("Este programa permite multiplicar dos valores por el m%ctodo de sumassucesivas.\n\n", _____);
do{printf("Digite el primer valor positivo: ");scanf(____", &a);
if(a
7/29/2019 Fund. de Programacin - Tema 1
19/50
RECORDANDO LAS BASES Ejercicio: Completa los espacios en blanco.
do{
printf("Digite el segundo valor positivo: ");scanf("%d", _____);
if(b
7/29/2019 Fund. de Programacin - Tema 1
20/50
RECORDANDO LAS BASES Ejercicio: Completa los espacios en blanco.
// En este punto, ya a es el valor mayor y b el menor.
// Procedemos a la multiplicacin sucesiva.while(b > 0){
result+=a;______;
}
printf("El resultado es: %d", ______);
return 0;}
7/29/2019 Fund. de Programacin - Tema 1
21/50
RECORDANDO LAS BASES
Cmo se pueden guardar mltiples valores en lenguaje C?
float tempPorHora[24];
tempPorHora[0] = 59.2;
tempPorHora[1] = 60.1;
tempPorHora[2] = 63;
7/29/2019 Fund. de Programacin - Tema 1
22/50
RECORDANDO LAS BASES
Cmo se pueden usar los arreglos?
printf(A las 08:00 horas, la temperatura era de %.2f, tempPorHora[8]);
7/29/2019 Fund. de Programacin - Tema 1
23/50
RECORDANDO LAS BASES
Ejercicio: Qu hace este programa?
while(1)
{
printf("%c", ((rand()%2) ? 47 : 92));
}
7/29/2019 Fund. de Programacin - Tema 1
24/50
RECORDANDO LAS BASES
Ejercicio: Qu hace este programa?
int busquedaBinaria(int arr[], int valor, int limI, int limS)
{
if(limI > limS)
return -1;
int i, j, pivote = (limI + limS) / 2;
return (valor == arr[pivote] ? pivote
: (valor > arr[pivote] ? busquedaBinaria(arr, valor, pivote+1, limS): busquedaBinaria(arr, valor, limI, pivote-1)));
}
7/29/2019 Fund. de Programacin - Tema 1
25/50
RECORDANDO LAS BASES
Ejercicio: Identifica los bloques de instrucciones que son permitidos:
int x = 1138; ____
int y = 3/8; ____
chars[] = 3-8; ____
x = y; ____
int n = 3uno; ____
7/29/2019 Fund. de Programacin - Tema 1
26/50
RECORDANDO LAS BASES
Ejercicio: Identifica los bloques de instrucciones que son permitidos:
chart[] = uno + dos;
short 3po = 1;
z y;
int level_ = 11;
z--;
7/29/2019 Fund. de Programacin - Tema 1
27/50
CONTINUANDO CON LA MODULARIZACIN
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
28/50
CONSOLIDACIN EN LAMODULARIZACIN
Estructura de un Programa
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
29/50
CONSOLIDACIN EN LAMODULARIZACIN
Estructura de un Programa
#include Incluir librerias de C#define Definir constantes/macros
[declaracin de funciones][declaracin de variables globales]
main()
{declaracin de variables locales para el main;Sentencias;llamadas de funciones;
}
funcion_a(){
declaracin de variables locales para funcin_a;Sentencias;
}
funcion_b(){}
Todas las sentencias deben terminarCon punto y comas (;)
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
30/50
CONSOLIDACIN EN LAMODULARIZACIN
Funcin
Es un segmento del programa que realiza determinadas tareas.Siempre regresa cero o un valor nico.
Una funcin puede recibir cero o ms valores de entrada, los cualesreciben el nombre de argumentos o parmetros.
Funciones
Valores
IntroducidosFUNCIN
Valor
Regresado
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
31/50
CONSOLIDACIN EN LAMODULARIZACIN
Una funcin puede ser llamada desde cualquier parte de un programa.
Cuando esto sucede, el programa se detiene y pasa el control a lafuncin, la cual al completarse su ejecucin retorna a la instruccin de
donde fue invocada (su punto de referencia) y el programa retoma elcontrol.
Funciones
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
32/50
CONSOLIDACIN EN LAMODULARIZACIN
Elementos
Funciones
int maximo(int a, int b, int c)
{ int m;
m=a;if (b > m)
m=b;
if (c > m)m=c;
return m;}
Encabezado Tipo de dato que retorna Nombre de la funcin Lista de parmetros
Cuerpo. Declaracin de variables
locales. Clculos. Instruccin de retorno.
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
33/50
CONSOLIDACIN EN LAMODULARIZACIN
Asociacin de Parmetros
Funciones
Prototipo de una Funcin
Es cuando declaramos una funcin. Contiene el tipo de dato deretorno, el nombre de la funcin y la lista de parmetros encerradosentre parntesis y terminando con un punto y coma (;).
int maximo(int a, int b, int c) en la funcin
max = maximo(int val1, int val2, int val3) en el programa
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
34/50
CONSOLIDACIN EN LAMODULARIZACIN
Pase de Parmetros Por Valor: La funcin reciba
una copia de los valores delos parmetros. Si secambia el valor dentro de lafuncin, este cambio slo
afecta el mbito de lafuncin.
Por Referencia: La funcinpuede modificar los valoresde los parmetros. Aqu se
pasa la direccin dememoria del valor delparmetro a la funcin.
Funciones
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
35/50
CONSOLIDACIN EN LAMODULARIZACIN
Pase de Parmetros
Por Valor:
int main()
{
int i = 6;
func(i);
return 0;
}
Funciones
void func( int i){
printf(%d,i)i++;
}
6 6
7/29/2019 Fund. de Programacin - Tema 1
36/50
CONSOLIDACIN EN LA
7/29/2019 Fund. de Programacin - Tema 1
37/50
CONSOLIDACIN EN LAMODULARIZACIN
Ejercicios:
Realice un programa que, utilizando una funcin con un prototipoque tiene una lista variable de argumentos permita a otra funcin
consultar cul es el mximo de los valores tipo double pasados. Laaplicacin deber luego imprimir dicho mximo.
Realice un programa que, utilizando una librera propia haga unallamada a una funcin esPrimo() para generar los primeros N
nmeros primos, segn especifique el usuario.
Funciones
7/29/2019 Fund. de Programacin - Tema 1
38/50
Una funcin recursiva es una funcin que se llama a s misma directa oindirectamente de forma repetitiva hasta que se satisface determinadacondicin de parada. Se puede utilizar como una alternativa a laiteracin.
Directa: Se llama a s misma desde el mismocuerpo de la funcin.
Indirecta: Intervienen varias funciones donde unallama a la otra.
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
39/50
Tanto la iteracin como la recursin se basan en una estructura decontrol; la primera es repetitiva y la recursin hace llamadas repetidas afunciones (estructura de seleccin). Ambas evalan condiciones determinacin; la primera termina cuando la condicin es falsa y lasegunda cuando se reconoce el caso base (axioma, condicin de salida).
Todo problema que se puede resolver recursivamente, se puede resolvertambin iterativamente; la recursividad se ha de evitar a menos que estjustificada, debido a que la misma consume memoria adicional y empleatiempo adicional.
Se prefiere la recursividad en situaciones en que sta resulta ms naturalpara resolver ciertos problemas y produce un programa ms fcil decomprender y depurar.
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
40/50
Para construir una funcin recursiva, es necesario considerar lossiguientes tres puntos:
Caso base (condicin de parada o axioma): Es el caso de salida de larecursin, en el que se retornara algn valor puntual o se dejara de
llamar recursivamente la funcin. Normalmente es sencillo y se ubicaal inicio de la funcin recursiva, aunque esto ltimo no es una regla. Cuerpo de la funcin: Son las instrucciones que conforman la funcin.
Notar si el cuerpo estar antes, durante o despus de la llamadarecursiva, ya que esto afecta significantemente los resultados.
Llamada recursiva: Se refiere a la sentencia que invocar
recursivamente la funcin. Debe de promover un cambio en losargumentos o circunstancias de manera que eventualmente seacerque al caso base.
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
41/50
Ej. El factorial. n! = nx(n-1)x(n-2)....x3x2x1.
n! =1 si n=0
n(n-1)!, si n>0
long int factor(int n){
int i;
if (n
7/29/2019 Fund. de Programacin - Tema 1
42/50
n! =1 si n=0
n(n-1)!, si n>0
Ejemplo 5!
main()
5n5
f(5)
5n4
120
f(4)
4n3
f(3)
3n2
f(2)
2n1
f(1)
1n
24 6 2 1
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
43/50
#include
#include #define EOLN '\n'void inverso(void);main(){
printf("\n Digite una linea de Texto \n" );
inverso();system("PAUSE");
}
void inverso(void){
char c; int i=0;if((c=getchar()) != EOLN) inverso();putchar(c);printf("\n llamado # %d",i++);return ;
}
La funcin inverso procedea leer caracteres hasta se dela condicin de final de lnea(\n).
Cada llamado a la funcinhace que se lleve a lapila(cola) un nuevo carcter.
Luego se visualizan enorden: ltimo en entrar,primero en salir.
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
44/50
Ej. El fibonacci
Fn =0, si n=01, si n=1
F(n-1)+F(n-2), si n>1
long fibor(int n){
if (n < 2)return n;return fibor(n-1)+fibor(n-2);
}
Consolidacin en la Modularizacin
Funciones Recursivas
7/29/2019 Fund. de Programacin - Tema 1
45/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que permita imprimir una lnea de texto demanera inversa utilizando una funcin recursiva sin emplear arreglos.
7/29/2019 Fund. de Programacin - Tema 1
46/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que capture un arreglo de valores enteros detamao N y los invierta utilizando una funcin recursiva voidinverso_arreglo(int[], int, int);
La aplicacin deber al final imprimir el contenido invertido de dichoarreglo.
7/29/2019 Fund. de Programacin - Tema 1
47/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que dado una cadena de enteros permitarealizar una bsqueda binaria recursiva, recibiendo en la funcinrecursiva:
- El arreglo a recorrer.- El elemento que se desea consultar.- El ndice inferior de la bsqueda.- El ndice superior de la bsqueda.
Deber retornar el ndice del elemento encontrado, o -1 si no se
encontr.
7/29/2019 Fund. de Programacin - Tema 1
48/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Programar un algoritmo recursivo que permita sumar los elementosde una matriz de enteros.
7/29/2019 Fund. de Programacin - Tema 1
49/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que permita invertir una matriz de datos ya seapor filas o por columnas, utilizando un algoritmo recursivo en unafuncin que reciba un enum para la alternativa (invertir por fila o por
columna), cantidad total de filas y de columnas y la posicin actual.
7/29/2019 Fund. de Programacin - Tema 1
50/50
Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Algoritmos de ordenamiento: BubbleSort SelectionSort
InsertionSort MergeSort QuickSort