SlideShare una empresa de Scribd logo
Programación 1
Funciones en C
Angel Vázquez-Patiño
angel.vazquezp@ucuenca.edu.ec
Departamento de Ciencias de la Computación
Universidad de Cuenca
14 de septiembre de 2017
14/09/17 Angel Vázquez-Patiño 2/51
Objetivos
1) Conocer el concepto de función
2) Conocer el concepto de parámetro/argumento
3) Implementar funciones en C
4) Tener una primera aproximación al concepto
de puntero
5) Entender las llamadas de funciones por valor y
por referencia
6) Entender las reglas de ámbito de las variables
14/09/17 Angel Vázquez-Patiño 3/51
Funciones y parámetros
14/09/17 Angel Vázquez-Patiño 4/51
Divide et impera
Resolver un problema difícil dividiéndole en
partes más simples
14/09/17 Angel Vázquez-Patiño 5/51
Divide et impera
Tantas veces hasta que la resolución sea obvia
14/09/17 Angel Vázquez-Patiño 6/51
Función
Definición
●
Subalgoritmo, parte de un algoritmo principal
que permite resolver una tarea específica
●
Puede ser invocada desde otras partes del
algoritmo cuantas veces se necesite
●
Puede recibir valores (parámetros o
argumentos)
●
Puede devolver valores
14/09/17 Angel Vázquez-Patiño 7/51
Función
5 25
14/09/17 Angel Vázquez-Patiño 8/51
Función
Función resultado <- Potencia (base, exponente)
resultado <- base ^ exponente;
FinFunción
Algoritmo funcionPotencia
Definir base, exponente Como Entero;
Escribir "Ingrese Base: ";
Leer base;
Escribir "Ingrese Exponente: ";
Leer exponente;
Escribir "Resultado: ", Potencia(base, exponente);
FinAlgoritmo
14/09/17 Angel Vázquez-Patiño 9/51
1 #include<stdio.h>
2 // prototipo/declaración de función
3 float cuadrado(float x);
4 int main( ){
5 float m, n ;
6 scanf ("%f", &m) ;
7 n = cuadrado (m) ; // llamada
8 }
9 // definición
10 float cuadrado(float x){
11 float p = x * x;
12 return p;
13 }
14/09/17 Angel Vázquez-Patiño 10/51
Función
Cómo nombrar una función
●
Letras del alfabeto inglés, dígitos y el carácter _
●
El primer carácter no puede ser número
●
No usar palabras reservadas
●
Usar nombres descriptivos (nemotécnicos)
●
No usar el mismo nombre de las funciones para
variables ni viceversa
●
No usar espacios
14/09/17 Angel Vázquez-Patiño 11/51
Ejemplo guiado 1
Problema: calcular el cubo de un número
int cubo(int num)
{
return num*num*num;
}
Nombre ParámetroTipoTipo
Para devolver un valor
14/09/17 Angel Vázquez-Patiño 12/51
Ejemplo guiado 1
#include<stdio.h> // Uso de la función
int cubo(int num);
int main(){
int m, n;
printf("Número: "); scanf("%d", &m);
n = cubo(m);
printf ("El cubo de %d es %d.", m,
n);
}
int cubo(int num){ return num*num*num; }
14/09/17 Angel Vázquez-Patiño 13/51
Ejemplo guiado 1
#include<stdio.h> // Otra forma de llamar
int cubo(int num);
int main(){
int m;
printf("Número: "); scanf("%d", &m);
printf("%d^%d", m, cubo(m));
}
int cubo(int num){ return num*num*num; }
14/09/17 Angel Vázquez-Patiño 14/51
Ejemplo guiado 2
Problema: calcular el área de un triángulo
●
Para más parámetros, se separa con coma
int areaTriangulo(int base,int altura)
{
return base*altura;
}
14/09/17 Angel Vázquez-Patiño 15/51
Ejemplo guiado 2
#include<stdio.h>
int areaTriangulo(int base, int altura);
int main(){
int b, a;
printf("Base: "); scanf("%d", &b);
printf("Altura: "); scanf("%d", &a);
printf("Área: %d", areaTriangulo(b, a));
}
int areaTriangulo(int base, int altura)
{ return base*altura; }
14/09/17 Angel Vázquez-Patiño 16/51
Ejemplo guiado 3
Problema: calcular 5!
●
Es posible usar funciones sin parámetros
#include<stdio.h>
int factorial5();
int main(){
printf("5!: %d", factorial5());
}
int factorial5(){return 5*4*3*2;}
14/09/17 Angel Vázquez-Patiño 17/51
Ejemplo guiado 4
Problema: mostrar la tabla de multiplicar (1-10) de
un número
●
Una función no necesariamente devuelve un
valor
● En C se usa void para indicar que la función
no devuelve ningún valor. Y no se usa nunca
return (porque nunca se devuelve nada)
14/09/17 Angel Vázquez-Patiño 18/51
Ejemplo guiado 4
#include<stdio.h>
void tablaMultiplicar(int num);
int main(){ tablaMultiplicar(8); }
void tablaMultiplicar(int num){
for(int i=1; i<11; i++)
printf("%d x %d = %dn", num, i,
num*i);
}
14/09/17 Angel Vázquez-Patiño 19/51
Ejemplo guiado 5
Problema: mostrar la tabla de multiplicar del 7
●
Se puede definir funciones sin parámetros
#include<stdio.h>
void tabla7();
int main(){ tabla7(); }
void tabla7(){
for(int i=1; i<11; i++)
printf("7 x %d = %dn", i,
7*i);}
14/09/17 Angel Vázquez-Patiño 20/51
Ejercicio propuesto 1
●
Implementar una función que reciba un número
entero y devuelva True si dicho valor es impar
y False si es par
●
Utilizar un nombre adecuado para la función,
i.e., un nombre nemotécnico
14/09/17 Angel Vázquez-Patiño 21/51
Ejercicio propuesto 1
#include<stdio.h>
_Bool esImpar(int n);
int main(){
int num;
printf("Número: "); scanf("%d", &num);
printf(esImpar(num)==0?"nImpar: F":"nImpar: T");
}
_Bool esImpar(int n){
if(n%2 != 0)
return 1;
return 0;}
14/09/17 Angel Vázquez-Patiño 22/51
Ejercicio propuesto 2
●
Implementar una función que reciba un número
entero e imprima en pantalla los valores
anterior y posterior a ese número
●
Utilizar un nombre adecuado para la función,
i.e., un nombre nemotécnico
14/09/17 Angel Vázquez-Patiño 23/51
Ejercicio propuesto 2
#include<stdio.h>
void antPos(int n);
int main(){
int num;
printf("Número: "); scanf("%d", &num);
antPos(num);}
void antPos(int n){
printf("Anterior: %d.n", n-1);
printf("Posterior: %d.", n+1);}
14/09/17 Angel Vázquez-Patiño 24/51
Llamada de funciones por valor y
por referencia
14/09/17 Angel Vázquez-Patiño 25/51
Llamada por valor y por referencia
Llamada por referencia
●
La dirección de la variable es pasada a la
función como parámetro
●
El valor del parámetro puede ser modificado
●
El mismo espacio de memoria es usado en la
función y desde donde se llama
14/09/17 Angel Vázquez-Patiño 26/51
Llamada por valor y por referencia
Puntero
●
Variable que contiene la dirección de memoria
de un dato o de otra variable que contiene al
dato en un arreglo
●
Apunta al espacio físico donde está el dato o la
variable
●
Vea https://youtu.be/YqoV6UMQEcE
14/09/17 Angel Vázquez-Patiño 27/51
Llamada por valor y por referencia
Puntero
●
Muchas de las funciones estándares de C,
trabajan con punteros, e.g. scanf y strcpy
char a;
scanf ("%c",&a);
14/09/17 Angel Vázquez-Patiño 28/51
Llamada por valor y por referencia
Declaración de punteros
●
Igual que cualquier otra variable, pero
anteponiendo un * antes del nombre de la
variable
tipo *NombrePuntero;
14/09/17 Angel Vázquez-Patiño 29/51
1 #include <stdio.h>
2 int main(){
3 int a=0; int *punt;
4 punt=&a;//Asigna dir memori de a
5 printf("Valor de a: %d. nValor de
*punt: %d. n", a, *punt);
6 printf("Dirección de memoria de
*punt: %p", punt);
7 printf("nDirección de memoria de a
(&a): %p", &a);
8 }
14/09/17 Angel Vázquez-Patiño 30/51
#include<stdio.h>
void swap(int *a, int *b);
int main(){
int m = 22, n = 44;
printf("Antes m = %d y n = %dn", m, n);
swap(&m, &n);
printf("Después m = %d y n = %dn", m, n);}
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
printf("Función a = %d y b = %dn", *a, *b);}
14/09/17 Angel Vázquez-Patiño 31/51
#include<stdio.h>
void swap(int a, int b);
int main(){
int m = 22, n = 44;
printf("Antes m = %d y n = %dn", m, n);
swap(m, n);
printf("Después m = %d y n = %dn", m, n);}
void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
printf("Función a = %d y b = %dn", a, b);}
14/09/17 Angel Vázquez-Patiño 32/51
Funciones que devuelven un arreglo
14/09/17 Angel Vázquez-Patiño 33/51
1 #include <stdio.h>
2 int * obtenerPares(int n){
3 // Arreglo entero stático local
4 static int arregloPares[100];
5 for(int i=0; i<n; i++)
6 arregloPares[i] = (i+1)*2;
7 // devuelve base address de arregloPares
8 return arregloPares;}
9 int main(){
10 int *arreglo; arreglo = obtenerPares(10);
11 for(int cont=0; cont<10; cont++)
12 printf("%dn", arreglo[cont]);}
14/09/17 Angel Vázquez-Patiño 34/51
Ejercicio propuesto 3 (1)
//****************************************
num <- divisor
a_d <- num
Repetir
num <- a_d
a_d <- 0
Mientras num > 0 Hacer
a_d <- a_d + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que a_d < 10
//********************************************
num <- cociente
ac <- num
Repetir
num <- ac
ac <- 0
Mientras num > 0 Hacer
ac <- ac + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que ac < 10
Algoritmo pruebaDelNueve
// Versión de Angel Vázquez
Leer dividendo
Leer divisor
cociente <- trunc(dividendo / divisor)
residuo <- dividendo MOD divisor
//****************************************
num <- dividendo
aD <- num
Repetir
num <- aD
aD <- 0
Mientras num > 0 Hacer
aD <- aD + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que aD < 10
14/09/17 Angel Vázquez-Patiño 35/51
Ejercicio propuesto 3 (2)
num <- residuo
ar <- num
Repetir
num <- ar
ar <- 0
Mientras num > 0 Hacer
ar <- ar + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que ar < 10
//***********************
num <- a_d * ac + ar
a_dc_r <- num
Repetir
num <- a_dc_r
a_dc_r <- 0
Mientras num > 0 Hacer
a_dc_r <- a_dc_r + num MOD 10
num <- trunc(num / 10)
FinMientras
Hasta Que a_dc_r < 10
//****************************************
Escribir "Dividendo: ", dividendo, ". Suma: ", aD
Escribir "Divisor : ", divisor, ". Suma: ", a_d
Escribir "Cociente : ", cociente, ". Suma: ", ac
Escribir "Residuo : ", residuo, ". Suma: ", ar
Escribir " "
Escribir " D = d * c + r -> ", aD, " = ",
a_dc_r
Escribir " "
Si aD = a_dc_r Entonces
Escribir " División correcta."
Sino
Escribir " División incorrecta."
Fin Si
FinAlgoritmo
14/09/17 Angel Vázquez-Patiño 36/51
Ámbito de las variables
14/09/17 Angel Vázquez-Patiño 37/51
Ámbito de las variables
Ámbito
●
Región del programa donde una variable definida
puede tener su existencia y más allá de esa
variable no puede ser accedida
Tres lugares donde se pueden declarar en C
1) Dentro de una función o bloque, variables locales
2) Fuera de todas las funciones, variables globales
3) En la definición de los parámetros de la función,
parámetros formales
14/09/17 Angel Vázquez-Patiño 38/51
Ámbito de las variables
Variables locales
●
Declaradas dentro de una función o bloque
●
Pueden ser usadas sólo por sentencias que
están dentro de esa función o bloque de código
●
No son conocidas por funciones fuera de donde
fueron declaradas
14/09/17 Angel Vázquez-Patiño 39/51
1 #include <stdio.h>
2 int main() {
3 /* declaración de variables locales */
4 int a, b;
5 int c;
6 /* inicialización */
7 a = 10; b = 20; c = a + b;
8 printf("a: %d, b: %d y c: %d",a,b,c);
9 return 0;
10 }
14/09/17 Angel Vázquez-Patiño 40/51
Ámbito de las variables
Variables globales
●
Definidas fuera de una función, usualmente al
inicio del programa
●
Toman sus valores durante todo el tiempo de
vida del programa
●
Pueden ser accedidas dentro de cualquier
función definida en el programa
14/09/17 Angel Vázquez-Patiño 41/51
1 #include <stdio.h>
2 /* declaración de variable global */
3 int g;
4 int main() {
5 /* declaración de variables locales */
6 int a, b;
7 /* inicialización */
8 a = 10; b = 20; g = a + b;
9 printf("a: %d, b: %d y g: %d", a, b, g);
10 return 0;
11 }
14/09/17 Angel Vázquez-Patiño 42/51
Ámbito de las variables
Variables globales
●
Un programa puede tener el mismo nombre
para una variable local y una variable global
●
El valor de la variable local dentro de una
función tendrá la preferencia
14/09/17 Angel Vázquez-Patiño 43/51
1 #include <stdio.h>
2 /* declaración de variable global */
3 int g = 20;
4 int main()
5 {
6 /* declaración de variable local */
7 int g = 10;
8 printf("g: %d.n", g);
9 return 0;
10 }
14/09/17 Angel Vázquez-Patiño 44/51
Ámbito de las variables
Parámetros formales
●
Son tratados como variables locales dentro de
una función y toman la precedencia por encima
de cualquier variable global
14/09/17 Angel Vázquez-Patiño 45/51
1 #include <stdio.h>
2 int a = 20;
3 int main(){
4 int a = 10; int b = 20; int c = 0;
5 printf("a en main(): %d.n", a);
6 c = sumar(a, b);
7 printf("c en main(): %d.n", c);
8 return 0;}
9 int sumar(int a, int b){
10 printf("a en sumar(): %d.n", a);
11 printf("b en sumar(): %d.n", b);
12 return a + b;}
14/09/17 Angel Vázquez-Patiño 46/51
Ámbito de las variables
Inicialización de variables locales y globales
●
Cuando se define una variable local, no es
inicializada por el sistema. El programador la
debe inicializar
●
Cuando se define una variable global, es
inicializada automáticamente por el sistema
14/09/17 Angel Vázquez-Patiño 47/51
Ámbito de las variables
Tipo de dato Valor inicial por
defecto
int 0
char ‘0’
float 0
double 0
pointer NULL
14/09/17 Angel Vázquez-Patiño 48/51
Ámbito de las variables
Inicialización de variables locales y globales
Es una buena práctica de programación
inicializar las variables apropiadamente, de otro
modo el programa puede producir resultados
inesperados porque las variables no inicializadas
tomarán valores basura ya disponibles en sus
posiciones de memoria
14/09/17 Angel Vázquez-Patiño 49/51
Conceptos y términos importantes
●
Palabras reservadas de C que no pueden ser
usadas como nombres de funciones
●
Punteros: obtención del valor del espacio de
memoria y la dirección del espacio de memoria
●
Llamado de función por valor y por referencia
●
Funciones que devuelven un arreglo
●
Reglas del ámbito de una variable
14/09/17 Angel Vázquez-Patiño 50/51
Referencias
●
C programming tutorial,
http://fresh2refresh.com/c-programming/
●
Departamento de Ciencias de la Computación, 2016.
Guía de aprendizaje del MOOC de Fundamentos de
Programación: parte II. Universidad de Cuenca,
Cuenca, Ecuador.
●
Plataforma MOOC Cedia, https://goo.gl/VDWwKV
●
Programación en C/Punteros, https://goo.gl/Wqx2Pa
●
Return array from function in C, https://goo.gl/YnlUbi
14/09/17 Angel Vázquez-Patiño 51/51
Preguntas

Más contenido relacionado

PPT
Algoritmos y diagramas de flujo
PPT
Estructuras en c++
PPTX
Estructuras iterativas en java y pseudocódigo
PPTX
Estructuras Repetitivas con PSeInt (Parte 2)
PPT
1.Tipos de Datos.ppt
PPT
Fundamentos de Programacion
PDF
10 ejercicios-de-do-while
PPTX
Estructura de Datos -Unidad III: Estructuras Lineales
Algoritmos y diagramas de flujo
Estructuras en c++
Estructuras iterativas en java y pseudocódigo
Estructuras Repetitivas con PSeInt (Parte 2)
1.Tipos de Datos.ppt
Fundamentos de Programacion
10 ejercicios-de-do-while
Estructura de Datos -Unidad III: Estructuras Lineales

La actualidad más candente (20)

DOC
Ejemplos Para Dev C++
PPTX
Estructura básica de un programa en C++
PDF
Programación 1: arreglos en C
PDF
Estructuras de Datos (Arreglos)
PDF
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
PPTX
Arreglos de registros
PDF
Ejercicios resueltos en el Laboratorio de estructuras struct registros
PDF
ALGORITMO RESUELTOS EN PSEINT
PDF
Ejercicios resueltos de punteros 12a15
PDF
Estructura Repetitiva MIENTRAS (While) con PSeInt
PPTX
Condicion Si ANIDADA
PPSX
PPTX
Librerias Básicas y sus Funciones Lenguaje de Programación C
PPT
Clase04 tutorial p-seint
TXT
Serie Fibonacci en C
PPT
Estructuras en c++
PPT
Funciones en C++
PPT
Elementos Basicos del Lenguaje C++
PPTX
Flujos y archivo en java
PDF
52 ejercicios resueltos en pseudocodigo
Ejemplos Para Dev C++
Estructura básica de un programa en C++
Programación 1: arreglos en C
Estructuras de Datos (Arreglos)
Ejercicios de programación en C (Estructuras condicionales-Selectivas)
Arreglos de registros
Ejercicios resueltos en el Laboratorio de estructuras struct registros
ALGORITMO RESUELTOS EN PSEINT
Ejercicios resueltos de punteros 12a15
Estructura Repetitiva MIENTRAS (While) con PSeInt
Condicion Si ANIDADA
Librerias Básicas y sus Funciones Lenguaje de Programación C
Clase04 tutorial p-seint
Serie Fibonacci en C
Estructuras en c++
Funciones en C++
Elementos Basicos del Lenguaje C++
Flujos y archivo en java
52 ejercicios resueltos en pseudocodigo
Publicidad

Destacado (8)

PDF
Programación 1: cadenas en C
PDF
Programación 1: algoritmos
PDF
Programación 1: estructuras de control
PDF
Programación 1: introducción a C
PDF
Programación 1: tipos básicos de datos en C
PDF
Machine learning: aprendizaje basado en árboles de decisión
PDF
Teoría de redes: presentación
PDF
Machine learning: presentación
Programación 1: cadenas en C
Programación 1: algoritmos
Programación 1: estructuras de control
Programación 1: introducción a C
Programación 1: tipos básicos de datos en C
Machine learning: aprendizaje basado en árboles de decisión
Teoría de redes: presentación
Machine learning: presentación
Publicidad

Similar a Programación 1: funciones en C (20)

PPT
Funcionesenlenguaje c
PDF
Ejemplos_funciones.pdf
PDF
Capítulo 6 funciones y procedimiento
PDF
Algoritmos y lenjuage de programacion
PDF
ESTRUCTURAS DE CONTROL: BUCLES EN C++
DOCX
FUNCIONES EN LENGUAJE C
PDF
Metodos funciones
PDF
Laboratorio1 entrada-salida de datos / Lenguance C
PPTX
programación Milton.pptx
PDF
Programacion ii modulo2-leccion3
PPT
FUNCIONES LENGUAJE C
PPT
Funciones en C
DOCX
Funciones lenguaje c modulo4
PPT
11funciones 1231096290787715-2
PDF
Funciones con vectores y matrices
PDF
Funcione con vectores y matrices en c
PDF
Fundamentos de la programacion u1 ejercicios
PPTX
Presen iii 26 funciones
Funcionesenlenguaje c
Ejemplos_funciones.pdf
Capítulo 6 funciones y procedimiento
Algoritmos y lenjuage de programacion
ESTRUCTURAS DE CONTROL: BUCLES EN C++
FUNCIONES EN LENGUAJE C
Metodos funciones
Laboratorio1 entrada-salida de datos / Lenguance C
programación Milton.pptx
Programacion ii modulo2-leccion3
FUNCIONES LENGUAJE C
Funciones en C
Funciones lenguaje c modulo4
11funciones 1231096290787715-2
Funciones con vectores y matrices
Funcione con vectores y matrices en c
Fundamentos de la programacion u1 ejercicios
Presen iii 26 funciones

Más de Angel Vázquez Patiño (20)

PDF
Capítulo 1: funciones, límites y continuidad
PDF
Python aplicado en las Ciencias Ambientales
PDF
Introducción al lenguaje de programación Python
PDF
Integral definida e integración
PDF
Valores extremos y comportamiento de las funciones y de sus gráficas
PDF
Derivada y diferenciación
PDF
Causality and climate networks approaches for evaluating climate models, trac...
PDF
Diferencias finitas y Ecuación de calor
PPTX
Puntos ordinarios y singularidades de una EDO lineal
PPTX
La ecuación diferencial de Legendre
PPTX
Solución en series de y' = f(x,y)
PPTX
Métodos de resolución de EDOs mediante series
PPTX
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
PDF
Problemas que originan sistemas de ecuaciones
PPTX
Linealización de sistemas de primer orden
PPTX
Sistemas de EDOs
PDF
Método de la secante
PDF
Iteraciones de punto fijo
PDF
Objetos y variables en Python
PDF
Definiciones de Error
Capítulo 1: funciones, límites y continuidad
Python aplicado en las Ciencias Ambientales
Introducción al lenguaje de programación Python
Integral definida e integración
Valores extremos y comportamiento de las funciones y de sus gráficas
Derivada y diferenciación
Causality and climate networks approaches for evaluating climate models, trac...
Diferencias finitas y Ecuación de calor
Puntos ordinarios y singularidades de una EDO lineal
La ecuación diferencial de Legendre
Solución en series de y' = f(x,y)
Métodos de resolución de EDOs mediante series
Solución en series de EDOs no lineales de orden mayor a uno y de un sistema d...
Problemas que originan sistemas de ecuaciones
Linealización de sistemas de primer orden
Sistemas de EDOs
Método de la secante
Iteraciones de punto fijo
Objetos y variables en Python
Definiciones de Error

Último (20)

PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
DOC
informacion acerca de la crianza tecnificada de cerdos
PPTX
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PDF
Módulo-de Alcance-proyectos - Definición.pdf
PPTX
Contexto Normativo NSR10, presentacion 2025
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PPTX
NILS actividad 4 PRESENTACION.pptx pppppp
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PDF
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
PPTX
Gestion de seguridad y salud ocupacional.pptx
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PDF
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
PPT
357161027-seguridad-industrial-diapositivas-ppt.ppt
PPT
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
PDF
Electricidad-Estatica-Peligros-Prevencion.pdf
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
PDF
prg2_t01_p01_Fundamentos POO - parte1.pdf
PDF
Perfilaje de Pozos _20250624_222013_0000.pdf
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
informacion acerca de la crianza tecnificada de cerdos
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
Módulo-de Alcance-proyectos - Definición.pdf
Contexto Normativo NSR10, presentacion 2025
Manual ISO9001_2015_IATF_16949_2016.pptx
NILS actividad 4 PRESENTACION.pptx pppppp
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
Gestion de seguridad y salud ocupacional.pptx
Sustancias Peligrosas de empresas para su correcto manejo
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
HISTORIA DE LA GRÚAA LO LARGO DE LOS TIEMPOSpdf
357161027-seguridad-industrial-diapositivas-ppt.ppt
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
Electricidad-Estatica-Peligros-Prevencion.pdf
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
prg2_t01_p01_Fundamentos POO - parte1.pdf
Perfilaje de Pozos _20250624_222013_0000.pdf

Programación 1: funciones en C

  • 1. Programación 1 Funciones en C Angel Vázquez-Patiño angel.vazquezp@ucuenca.edu.ec Departamento de Ciencias de la Computación Universidad de Cuenca 14 de septiembre de 2017
  • 2. 14/09/17 Angel Vázquez-Patiño 2/51 Objetivos 1) Conocer el concepto de función 2) Conocer el concepto de parámetro/argumento 3) Implementar funciones en C 4) Tener una primera aproximación al concepto de puntero 5) Entender las llamadas de funciones por valor y por referencia 6) Entender las reglas de ámbito de las variables
  • 3. 14/09/17 Angel Vázquez-Patiño 3/51 Funciones y parámetros
  • 4. 14/09/17 Angel Vázquez-Patiño 4/51 Divide et impera Resolver un problema difícil dividiéndole en partes más simples
  • 5. 14/09/17 Angel Vázquez-Patiño 5/51 Divide et impera Tantas veces hasta que la resolución sea obvia
  • 6. 14/09/17 Angel Vázquez-Patiño 6/51 Función Definición ● Subalgoritmo, parte de un algoritmo principal que permite resolver una tarea específica ● Puede ser invocada desde otras partes del algoritmo cuantas veces se necesite ● Puede recibir valores (parámetros o argumentos) ● Puede devolver valores
  • 7. 14/09/17 Angel Vázquez-Patiño 7/51 Función 5 25
  • 8. 14/09/17 Angel Vázquez-Patiño 8/51 Función Función resultado <- Potencia (base, exponente) resultado <- base ^ exponente; FinFunción Algoritmo funcionPotencia Definir base, exponente Como Entero; Escribir "Ingrese Base: "; Leer base; Escribir "Ingrese Exponente: "; Leer exponente; Escribir "Resultado: ", Potencia(base, exponente); FinAlgoritmo
  • 9. 14/09/17 Angel Vázquez-Patiño 9/51 1 #include<stdio.h> 2 // prototipo/declaración de función 3 float cuadrado(float x); 4 int main( ){ 5 float m, n ; 6 scanf ("%f", &m) ; 7 n = cuadrado (m) ; // llamada 8 } 9 // definición 10 float cuadrado(float x){ 11 float p = x * x; 12 return p; 13 }
  • 10. 14/09/17 Angel Vázquez-Patiño 10/51 Función Cómo nombrar una función ● Letras del alfabeto inglés, dígitos y el carácter _ ● El primer carácter no puede ser número ● No usar palabras reservadas ● Usar nombres descriptivos (nemotécnicos) ● No usar el mismo nombre de las funciones para variables ni viceversa ● No usar espacios
  • 11. 14/09/17 Angel Vázquez-Patiño 11/51 Ejemplo guiado 1 Problema: calcular el cubo de un número int cubo(int num) { return num*num*num; } Nombre ParámetroTipoTipo Para devolver un valor
  • 12. 14/09/17 Angel Vázquez-Patiño 12/51 Ejemplo guiado 1 #include<stdio.h> // Uso de la función int cubo(int num); int main(){ int m, n; printf("Número: "); scanf("%d", &m); n = cubo(m); printf ("El cubo de %d es %d.", m, n); } int cubo(int num){ return num*num*num; }
  • 13. 14/09/17 Angel Vázquez-Patiño 13/51 Ejemplo guiado 1 #include<stdio.h> // Otra forma de llamar int cubo(int num); int main(){ int m; printf("Número: "); scanf("%d", &m); printf("%d^%d", m, cubo(m)); } int cubo(int num){ return num*num*num; }
  • 14. 14/09/17 Angel Vázquez-Patiño 14/51 Ejemplo guiado 2 Problema: calcular el área de un triángulo ● Para más parámetros, se separa con coma int areaTriangulo(int base,int altura) { return base*altura; }
  • 15. 14/09/17 Angel Vázquez-Patiño 15/51 Ejemplo guiado 2 #include<stdio.h> int areaTriangulo(int base, int altura); int main(){ int b, a; printf("Base: "); scanf("%d", &b); printf("Altura: "); scanf("%d", &a); printf("Área: %d", areaTriangulo(b, a)); } int areaTriangulo(int base, int altura) { return base*altura; }
  • 16. 14/09/17 Angel Vázquez-Patiño 16/51 Ejemplo guiado 3 Problema: calcular 5! ● Es posible usar funciones sin parámetros #include<stdio.h> int factorial5(); int main(){ printf("5!: %d", factorial5()); } int factorial5(){return 5*4*3*2;}
  • 17. 14/09/17 Angel Vázquez-Patiño 17/51 Ejemplo guiado 4 Problema: mostrar la tabla de multiplicar (1-10) de un número ● Una función no necesariamente devuelve un valor ● En C se usa void para indicar que la función no devuelve ningún valor. Y no se usa nunca return (porque nunca se devuelve nada)
  • 18. 14/09/17 Angel Vázquez-Patiño 18/51 Ejemplo guiado 4 #include<stdio.h> void tablaMultiplicar(int num); int main(){ tablaMultiplicar(8); } void tablaMultiplicar(int num){ for(int i=1; i<11; i++) printf("%d x %d = %dn", num, i, num*i); }
  • 19. 14/09/17 Angel Vázquez-Patiño 19/51 Ejemplo guiado 5 Problema: mostrar la tabla de multiplicar del 7 ● Se puede definir funciones sin parámetros #include<stdio.h> void tabla7(); int main(){ tabla7(); } void tabla7(){ for(int i=1; i<11; i++) printf("7 x %d = %dn", i, 7*i);}
  • 20. 14/09/17 Angel Vázquez-Patiño 20/51 Ejercicio propuesto 1 ● Implementar una función que reciba un número entero y devuelva True si dicho valor es impar y False si es par ● Utilizar un nombre adecuado para la función, i.e., un nombre nemotécnico
  • 21. 14/09/17 Angel Vázquez-Patiño 21/51 Ejercicio propuesto 1 #include<stdio.h> _Bool esImpar(int n); int main(){ int num; printf("Número: "); scanf("%d", &num); printf(esImpar(num)==0?"nImpar: F":"nImpar: T"); } _Bool esImpar(int n){ if(n%2 != 0) return 1; return 0;}
  • 22. 14/09/17 Angel Vázquez-Patiño 22/51 Ejercicio propuesto 2 ● Implementar una función que reciba un número entero e imprima en pantalla los valores anterior y posterior a ese número ● Utilizar un nombre adecuado para la función, i.e., un nombre nemotécnico
  • 23. 14/09/17 Angel Vázquez-Patiño 23/51 Ejercicio propuesto 2 #include<stdio.h> void antPos(int n); int main(){ int num; printf("Número: "); scanf("%d", &num); antPos(num);} void antPos(int n){ printf("Anterior: %d.n", n-1); printf("Posterior: %d.", n+1);}
  • 24. 14/09/17 Angel Vázquez-Patiño 24/51 Llamada de funciones por valor y por referencia
  • 25. 14/09/17 Angel Vázquez-Patiño 25/51 Llamada por valor y por referencia Llamada por referencia ● La dirección de la variable es pasada a la función como parámetro ● El valor del parámetro puede ser modificado ● El mismo espacio de memoria es usado en la función y desde donde se llama
  • 26. 14/09/17 Angel Vázquez-Patiño 26/51 Llamada por valor y por referencia Puntero ● Variable que contiene la dirección de memoria de un dato o de otra variable que contiene al dato en un arreglo ● Apunta al espacio físico donde está el dato o la variable ● Vea https://youtu.be/YqoV6UMQEcE
  • 27. 14/09/17 Angel Vázquez-Patiño 27/51 Llamada por valor y por referencia Puntero ● Muchas de las funciones estándares de C, trabajan con punteros, e.g. scanf y strcpy char a; scanf ("%c",&a);
  • 28. 14/09/17 Angel Vázquez-Patiño 28/51 Llamada por valor y por referencia Declaración de punteros ● Igual que cualquier otra variable, pero anteponiendo un * antes del nombre de la variable tipo *NombrePuntero;
  • 29. 14/09/17 Angel Vázquez-Patiño 29/51 1 #include <stdio.h> 2 int main(){ 3 int a=0; int *punt; 4 punt=&a;//Asigna dir memori de a 5 printf("Valor de a: %d. nValor de *punt: %d. n", a, *punt); 6 printf("Dirección de memoria de *punt: %p", punt); 7 printf("nDirección de memoria de a (&a): %p", &a); 8 }
  • 30. 14/09/17 Angel Vázquez-Patiño 30/51 #include<stdio.h> void swap(int *a, int *b); int main(){ int m = 22, n = 44; printf("Antes m = %d y n = %dn", m, n); swap(&m, &n); printf("Después m = %d y n = %dn", m, n);} void swap(int *a, int *b){ int tmp = *a; *a = *b; *b = tmp; printf("Función a = %d y b = %dn", *a, *b);}
  • 31. 14/09/17 Angel Vázquez-Patiño 31/51 #include<stdio.h> void swap(int a, int b); int main(){ int m = 22, n = 44; printf("Antes m = %d y n = %dn", m, n); swap(m, n); printf("Después m = %d y n = %dn", m, n);} void swap(int a, int b){ int tmp = a; a = b; b = tmp; printf("Función a = %d y b = %dn", a, b);}
  • 32. 14/09/17 Angel Vázquez-Patiño 32/51 Funciones que devuelven un arreglo
  • 33. 14/09/17 Angel Vázquez-Patiño 33/51 1 #include <stdio.h> 2 int * obtenerPares(int n){ 3 // Arreglo entero stático local 4 static int arregloPares[100]; 5 for(int i=0; i<n; i++) 6 arregloPares[i] = (i+1)*2; 7 // devuelve base address de arregloPares 8 return arregloPares;} 9 int main(){ 10 int *arreglo; arreglo = obtenerPares(10); 11 for(int cont=0; cont<10; cont++) 12 printf("%dn", arreglo[cont]);}
  • 34. 14/09/17 Angel Vázquez-Patiño 34/51 Ejercicio propuesto 3 (1) //**************************************** num <- divisor a_d <- num Repetir num <- a_d a_d <- 0 Mientras num > 0 Hacer a_d <- a_d + num MOD 10 num <- trunc(num / 10) FinMientras Hasta Que a_d < 10 //******************************************** num <- cociente ac <- num Repetir num <- ac ac <- 0 Mientras num > 0 Hacer ac <- ac + num MOD 10 num <- trunc(num / 10) FinMientras Hasta Que ac < 10 Algoritmo pruebaDelNueve // Versión de Angel Vázquez Leer dividendo Leer divisor cociente <- trunc(dividendo / divisor) residuo <- dividendo MOD divisor //**************************************** num <- dividendo aD <- num Repetir num <- aD aD <- 0 Mientras num > 0 Hacer aD <- aD + num MOD 10 num <- trunc(num / 10) FinMientras Hasta Que aD < 10
  • 35. 14/09/17 Angel Vázquez-Patiño 35/51 Ejercicio propuesto 3 (2) num <- residuo ar <- num Repetir num <- ar ar <- 0 Mientras num > 0 Hacer ar <- ar + num MOD 10 num <- trunc(num / 10) FinMientras Hasta Que ar < 10 //*********************** num <- a_d * ac + ar a_dc_r <- num Repetir num <- a_dc_r a_dc_r <- 0 Mientras num > 0 Hacer a_dc_r <- a_dc_r + num MOD 10 num <- trunc(num / 10) FinMientras Hasta Que a_dc_r < 10 //**************************************** Escribir "Dividendo: ", dividendo, ". Suma: ", aD Escribir "Divisor : ", divisor, ". Suma: ", a_d Escribir "Cociente : ", cociente, ". Suma: ", ac Escribir "Residuo : ", residuo, ". Suma: ", ar Escribir " " Escribir " D = d * c + r -> ", aD, " = ", a_dc_r Escribir " " Si aD = a_dc_r Entonces Escribir " División correcta." Sino Escribir " División incorrecta." Fin Si FinAlgoritmo
  • 36. 14/09/17 Angel Vázquez-Patiño 36/51 Ámbito de las variables
  • 37. 14/09/17 Angel Vázquez-Patiño 37/51 Ámbito de las variables Ámbito ● Región del programa donde una variable definida puede tener su existencia y más allá de esa variable no puede ser accedida Tres lugares donde se pueden declarar en C 1) Dentro de una función o bloque, variables locales 2) Fuera de todas las funciones, variables globales 3) En la definición de los parámetros de la función, parámetros formales
  • 38. 14/09/17 Angel Vázquez-Patiño 38/51 Ámbito de las variables Variables locales ● Declaradas dentro de una función o bloque ● Pueden ser usadas sólo por sentencias que están dentro de esa función o bloque de código ● No son conocidas por funciones fuera de donde fueron declaradas
  • 39. 14/09/17 Angel Vázquez-Patiño 39/51 1 #include <stdio.h> 2 int main() { 3 /* declaración de variables locales */ 4 int a, b; 5 int c; 6 /* inicialización */ 7 a = 10; b = 20; c = a + b; 8 printf("a: %d, b: %d y c: %d",a,b,c); 9 return 0; 10 }
  • 40. 14/09/17 Angel Vázquez-Patiño 40/51 Ámbito de las variables Variables globales ● Definidas fuera de una función, usualmente al inicio del programa ● Toman sus valores durante todo el tiempo de vida del programa ● Pueden ser accedidas dentro de cualquier función definida en el programa
  • 41. 14/09/17 Angel Vázquez-Patiño 41/51 1 #include <stdio.h> 2 /* declaración de variable global */ 3 int g; 4 int main() { 5 /* declaración de variables locales */ 6 int a, b; 7 /* inicialización */ 8 a = 10; b = 20; g = a + b; 9 printf("a: %d, b: %d y g: %d", a, b, g); 10 return 0; 11 }
  • 42. 14/09/17 Angel Vázquez-Patiño 42/51 Ámbito de las variables Variables globales ● Un programa puede tener el mismo nombre para una variable local y una variable global ● El valor de la variable local dentro de una función tendrá la preferencia
  • 43. 14/09/17 Angel Vázquez-Patiño 43/51 1 #include <stdio.h> 2 /* declaración de variable global */ 3 int g = 20; 4 int main() 5 { 6 /* declaración de variable local */ 7 int g = 10; 8 printf("g: %d.n", g); 9 return 0; 10 }
  • 44. 14/09/17 Angel Vázquez-Patiño 44/51 Ámbito de las variables Parámetros formales ● Son tratados como variables locales dentro de una función y toman la precedencia por encima de cualquier variable global
  • 45. 14/09/17 Angel Vázquez-Patiño 45/51 1 #include <stdio.h> 2 int a = 20; 3 int main(){ 4 int a = 10; int b = 20; int c = 0; 5 printf("a en main(): %d.n", a); 6 c = sumar(a, b); 7 printf("c en main(): %d.n", c); 8 return 0;} 9 int sumar(int a, int b){ 10 printf("a en sumar(): %d.n", a); 11 printf("b en sumar(): %d.n", b); 12 return a + b;}
  • 46. 14/09/17 Angel Vázquez-Patiño 46/51 Ámbito de las variables Inicialización de variables locales y globales ● Cuando se define una variable local, no es inicializada por el sistema. El programador la debe inicializar ● Cuando se define una variable global, es inicializada automáticamente por el sistema
  • 47. 14/09/17 Angel Vázquez-Patiño 47/51 Ámbito de las variables Tipo de dato Valor inicial por defecto int 0 char ‘0’ float 0 double 0 pointer NULL
  • 48. 14/09/17 Angel Vázquez-Patiño 48/51 Ámbito de las variables Inicialización de variables locales y globales Es una buena práctica de programación inicializar las variables apropiadamente, de otro modo el programa puede producir resultados inesperados porque las variables no inicializadas tomarán valores basura ya disponibles en sus posiciones de memoria
  • 49. 14/09/17 Angel Vázquez-Patiño 49/51 Conceptos y términos importantes ● Palabras reservadas de C que no pueden ser usadas como nombres de funciones ● Punteros: obtención del valor del espacio de memoria y la dirección del espacio de memoria ● Llamado de función por valor y por referencia ● Funciones que devuelven un arreglo ● Reglas del ámbito de una variable
  • 50. 14/09/17 Angel Vázquez-Patiño 50/51 Referencias ● C programming tutorial, http://fresh2refresh.com/c-programming/ ● Departamento de Ciencias de la Computación, 2016. Guía de aprendizaje del MOOC de Fundamentos de Programación: parte II. Universidad de Cuenca, Cuenca, Ecuador. ● Plataforma MOOC Cedia, https://goo.gl/VDWwKV ● Programación en C/Punteros, https://goo.gl/Wqx2Pa ● Return array from function in C, https://goo.gl/YnlUbi