modularidad - wordpress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);}...

55
Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación TIG - TUP 1 Programación – Unidad 4 Modularidad

Upload: others

Post on 07-Oct-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1

Programación – Unidad 4

Modularidad

Page 2: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP 2

222

Dividir para Vencer (1)• Es una técnica para resolver problemas que consiste en

dividir el problema original en subproblemas (de menortamaño), resolver cada un de los subproblemas, yfinalmente combinar las soluciones de cada uno de ellospara obtener la solución del problema original. En cadanivel del procedimiento, este método consta de lossiguientes pasos:

1) Dividir el problema en subproblemas.2) Resolver cada uno de los subproblemas.3) Combinar las soluciones de los subproblemas para

obtener la solución del problema original.

Page 3: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

3

Dividir para Vencer (2)

Page 4: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

44

Dividir para Vencer (3)

• Es decir que si:

• Entonces:

"Todo problema P puede ser descompuesto en una seriede subproblemas P1, P2, …, Pn, de forma tal que laresolución de todos los subproblemas Pi, involucre laresolución del problema P inicial".

P = P1 + P2 + ... + Pn

resolución(P) = resolución(P1) + ...+ resolución(Pn)

Page 5: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

555

Dividir para Vencer (4)• Siendo la principal ventaja de esta estrategia, que

generalmente se cumple con:

• A su vez, si un problema Pi es todavía difícil deresolver, podemos nuevamente descomponerlo ensubproblemas Pi,j tal que:

complejidad(P) > Σ complejidad(Pi)

Pi = Pi,1 + Pi,2 + ... + Pi,m

Page 6: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

6666

Dividir para Vencer (5)• Es decir que aplicamos nuevamente este método

(denominado Refinamientos Sucesivos) para laresolución de cada subproblema:

666

resolución(Pi) = SI Pi es lo suficientemente fácilENTONCES resolverlo inmediatamenteSINO descomponerlo en problemas Pi,j

Page 7: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

7

Dividir para Vencer (6)

Page 8: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

8

1) Estar jerarquizados.

2) Ser pequeños, sencillos y legibles (Legilibilidad).

3) "Esconder" los detalles poco importantes a los módulosque se encuentran por arriba de ellos en la jerarquía(Ocultamiento de la Información).

• Consiste en "descomponer" (subdividir) un programa enpartes, denominadas módulos (ó subprogramas), cadauno de ellos realizando una tarea específica, quedeberán cumplir con los siguientes requisitos:

Modularidad (1)

Page 9: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

99

4) Deberán, a su vez, usarse tantos módulos de más bajajerarquía como sean necesarios, para cumplir con elpunto (2).

Modularidad (2)

Page 10: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1010

1) El costo total de resolver cada subproblema de maneraindependiente, es con frecuencia menor que el deabordar la resolución del problema completo.

2) Facilita el trabajo en equipo pues varios grupos depersonas pueden estar resolviendo, simultánemente,cada uno de ellos un subproblema distinto.

3) Incrementa la reusabilidad de los módulos, pues esposible volverlos a utilizar en la resolución de otrosproblemas.

• Las ventajas de la modularidad son las siguientes:

Modularidad (3)

Page 11: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1111

• La mayoría de los lenguajes de programación soportanampliamente la modularidad, poniendo a nuestradisposición, desde el punto de vista conceptual, dostipos de módulos:

Modularidad (4)

Funciones: Es una abstracción sobre un proceso decálculo, pues son similares a las funciones matemáticas,que devuelven un solo valor.

Procedimientos: Es una abstracción sobre una orden,pues actúan como una sentencia más del lenguaje, quedeben ser invocadas para ejecutar su tarea.

Page 12: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

121212

• En el lenguaje C un programa está compuesto por unconjunto de funciones, siendo main la función principal(por donde se inicia la ejecución del programa) .

• La estructura general de una función en C es lasiguiente:

<tipo> <nombre> (<parámetros>){<declaraciones><sentencias>return (<expresión>)

}

Modularidad en C (1)

Page 13: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

13131313

• En donde:

tipo: Es el tipo del valor devuelto por la función; y si lafunción no devuelve valor alguno (porque es unprocedimiento), se utiliza la palabra reservada void.

nombre: Es el nombre o identificador asignado a lafunción.

parámetros: Componen la lista de declaración de losargumentos que deben ser pasados a la función. Estalista consta de un conjunto de variables con sus tipos,separadas por comas.

Modularidad en C (2)

Page 14: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1414141414

declaraciones y sentencias: Forman el cuerpo dela función. Las sentencias definen lo que hace lafunción; y también se pueden realizar declaraciones devariables utilizadas en dichas sentencias.

return (expresión): Se devuelve un valor a lasentencia de invocación (ó llamada) de la función.

• Por ejemplo:int cubo(int nro){

return (nro * nro * nro);}

Modularidad en C (3)

Page 15: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

15

• Variables Locales

Son las declaradas dentro del módulo.

Sólo pueden utilizarse en el módulo en el quefueron definidas.

No pueden conservar los datos entre dosinvocaciones (salvo las estáticas).

Evitan los efectos colaterales.

Permiten escribir módulos autosuficientes.

Variables Locales y Globales (1)

Page 16: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1616

• Variables Globales:

Son las declaradas al comienzo del programa, fuerade cualquier módulo.

Pueden ser utilizadas por todos los módulos.

Variables Locales y Globales (1)

Page 17: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

17

Clases de Almacenamiento (1)• Todas las variables en C, además de un nombre y un

tipo de dato, poseen una clase de almacenamiento,consistente en una indicación al compilador, sobre elmodo de asignarle memoria a esa variable. Esos modosson:

1) auto: Indica al compilador que reserve una posición dememoria temporal, de manera que cada vez que seproduce una llamada a una función, se emplea unanueva posición de memoria para las variables,quedando luego libre esa posición cuando se produce elretorno de la función. Un ejemplo de esto son lasvariables locales .

Page 18: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

1818

Clases de Almacenamiento (2)2) register: Indica al compilador que de ser posible,

emplee un registro interno de la CPU para almacenar lavariable, en lugar de utilizar una posición de lamemoria principal. Con esto se logra disminuir eltiempo de acceso a las variables que son referenciadasmuy frecuentemente, y por lo tanto, mejorar lavelocidad de ejecución del programa. Por ejemplo:

{register int i;for (i=0; i < N; i++){...}

}

Page 19: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

191919

Clases de Almacenamiento (3)3) static: Produce la asignación de una posición fija

(estática) de memoria, de manera que en cadainvocación a la función, utiliza siempre la mismaposición de memoria, conservando por lo tantoinalterable su contenido en el transcurso de dosllamadas consecutivas a la función. Por ejemplo:

void demoStatic(){static int contador = 0;printf("%d", contador++);

}

Page 20: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

202020

Clases de Almacenamiento (4)4) extern: Produce la asignación de un lugar fijo de

memoria, por lo que distintas funciones pueden accedera ella. Las variables externas constituyen un métodopara transmitir información entre funciones. Cuandouna variable se declara fuera de una función, se leasigna almacenamiento permanente, y su clase esextern.

int x = 1; // variable externa main(){

x = x + 10;printf("%d",x);

}

Page 21: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

21

Clases de Almacenamiento (5)

CLASE DURACIÓN ALCANCE

auto temporal local

register temporal local

static permanente local/global

extern permanente global

Page 22: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

22

Invocación de Módulos

Page 23: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

2323

// programa mayor1 (v0)

main(void){

int a, b, max;

scanf("%d %d",&a, &b);

if (a > b) max = a;

else max = b;

printf("%d", max);

}

// programa mayor1 (v1)

int a, b, max;

void maximo2 (void){

if (a > b) max = a;

else max = b;

}

main(void){

scanf("%d %d",&a, &b);

maximo2();

printf("%d", max);

}

Ejemplo de Procedimiento

Page 24: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

24

• Si queremos que un módulo actúe sobre distintasvariables, entonces deberemos usar unas variablesespecíficas asociadas al módulo.

• También muchos programas precisan que seintercambie información entre un módulo y el puntoen que el mismo fue invocado.-

• El uso de parámetros ofrece un método para lacomunicación entre módulos.-

• El nombre del módulo junto con los parámetros queutiliza, constituyen la interfaz del mismo.-

Parámetros (1)

Page 25: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

25

• Parámetros Formales

o Corresponden a las definiciones de los parámetrosdel módulo (procedimiento ó función).

o Deben tener su nombre identificador y su tipo dedato.

o Un parámetro formal se comporta como unavariable local dentro del módulo.-

Parámetros (2)

Page 26: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

2626

• Parámetros Actuales

o Estos corresponden a los valores ó expresiones conlos cuáles se invoca al módulo.

o El parámetro actual toma el lugar del parámetroformal.

Parámetros (3)

Page 27: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

27

• Cuando se invoca a un módulo con parámetros, lacorrespondencia entre parámetros (actuales y formales)se resuelve en el lenguaje C por posición.

• Por posición: La correspondencia se establecerelacionando los parámetros según su posición. Porejemplo, el primer parámetro actual A1 se correspondecon el primero formal F1, y Ai se corresponde con Fi,para i = 1, 2, . . ., n.

Parámetros (4)

Page 28: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

28

Parámetros (5)• Métodos de Paso de Parámetros: Son las formas

mediante las cuales los parámetros actuales y formalesson transmitidos o devueltos entre los módulos. En ellenguaje C existen básicamente dos métodos para elpaso de parámetros, ellos son:

Por valor

Por referencia

Page 29: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

29

• Paso de Parámetros por Valor

Pueden considerarse como parámetros que ingresaninformación a sus respectivos módulos.-

Su uso hace que el valor del parámetro actual se asigneal parámetro formal (es decir, mediante unaasignación).-

Sus valores no pueden ser transferidos en la direcciónopuesta, esto es, desde el módulo al punto en dondefue invocado.-

Parámetros (6)

Page 30: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

30

Parámetros (7)• Paso de Parámetros por Valor

Page 31: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

31

Parámetros (8)• Paso de Parámetros por Referencia Cuando se invoca un módulo, lo que se le transfiere es

la dirección física en memoria del parámetro actual (esdecir se realiza una substitución).

Cualquier cambio en el valor del parámetro porreferencia dentro del módulo, involucrará lacorrespondiente modificación del parámetro actualfuera de él.

Pueden afectar globalmente a un programa, aúncuando su ámbito sea local al módulo dentro del cualfueron declarados.

Page 32: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

32

Parámetros (9)• Paso de Parámetros por Referencia

Page 33: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

33

Tipos de Parámetros en C

Page 34: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

34

Procedimiento con Parámetros (1)

Page 35: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

35

Procedimiento con Parámetros (2)#include <stdio.h>

// programa mayor2 (v2)

int a, b, may; // Variables Globales

void maximo2(int x, int y, int *max){// x, y, max: Parámetros Formalesif (x > y) *max = x;else *max = y;

}

main(){ // principalscanf("%d %d", &a, &b);maximo2(a, b, &may);// a, b, may: Parámetros Actualesprintf("%d", may);

}

Page 36: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

36

Procedimiento con Parámetros (3)

Page 37: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

37

Procedimiento con Parámetros (4)

Page 38: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

38

#include <stdio.h>

// programa mayor2 (v3)int a, b, may;

void leerDatos(...)

void maximo2(int x, int y, int *max){......}

void mostrarMayor(...)

main(){leerDatos(&a, &b);maximo2(a, b, &may);mostrarMayor(may);

}

Procedimiento con Parámetros (5)

Page 39: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

39

Procedimiento con Parámetros (6)

Page 40: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

40

Procedimiento con Parámetros (7)

void leerDatos(int *x, int *yr)

{

scanf("%d %d", &x, &y);

}

void mostrarMayor(int max)

{

printf("%d",max);

}

Page 41: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

41

Funciones (1)• Un programa esta formado por funciones.• No se pueden definir funciones anidadas.• Desde una función se puede llamar a cualquier otra.• Si no se indica otro tipo, las funciones son de tipo int

por defecto.• El mecanismo de paso de parámetros es por valor.• Devuelven un solo valor (simple ó estructurado).• Está permitida la recursividad (funciones que se

llaman a sí mismas).

Page 42: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

42

Ejemplo de Función#include <stdio.h>

// programa mayor2 (v4)

int max(int x,int y){int res;if (x > y) res = x;else res = y;return (res);

}

main(){int a, b, may;scanf("%d %d", &a,& b);may = max(a, b);printf("%d",may);

}

Page 43: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

43

Número Primoroso (1)• Un entero n se llama "primoroso" si todos sus dígitos

son números primos. Por ejemplo, el número 235 es unnúmero primoroso.

1) Escribir un módulo de nombre esPrimoroso, quedetermine si un número entero es o no primoroso.

2) Escribir un programa que determine en una lista de N

números enteros, y utilizando el módulo del puntoanterior, cuáles son primorosos.

Page 44: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

44

Número Primoroso (2)

Page 45: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

45

int esPrimoroso(int n){int band;

if (cantPrimos(n) == cantDigitos(n))band = 1; // Verdadero

elseband = 0; // Falso

return (band);}

Número Primoroso (3)

Page 46: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

46

int cantPrimos(int n){

int cp, d;

cp = 0;while (n > 0){d = n % 10;if (esPrimo(d) == 1)

cp = cp + 1;n = div(n,10);

}return (cp);

}

Número Primoroso (4)

Page 47: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

47

Número Primoroso (5)int cantDigitos(int n){

int cd;

cd = 0;while (n > 0){cd = cd + 1;n = div(n, 10);

{return (cd);

}

Page 48: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

48

Número Primoroso (6)int esPrimo(int n){

int band,i;

band = 1;

for (i = 2; i < n; i++)

if (n % i == 0)

band = 0;

return (band);

}

Page 49: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

49

Número Primoroso (7)main(){

int num;

scanf("%d", &num);

if (esPrimoroso(num)) printf("Es primoroso")

else printf ("No es primoroso");

while (!kbhit()); // getch();

}

Page 50: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

50

Arrays como Parámetros (1)main(){

int i, n, Lista[100]; float prom;

scanf("%d", &n);

for (i = 0; i < n; i++)

scanf("%d", &Lista[i]);

prom = promedio(n, Lista);

printf("%f", prom);

}

Page 51: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

51

Arrays como Parámetros (2)float promedio (int n, int V[]){

int i, s;

s = 0;

for (i = 0; i < n; i++)

s = s + V[i];

return(s/n);

}

Page 52: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

52

main(){

int cant, Lista[MAX];

leerLista(&cant, Lista);

ordenarLista(cant, Lista);

mostrarLista(cant, Lista);

}

Arrays como Parámetros (3)

Page 53: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

53

Arrays como Parámetros (4)void leerLista(int *n, int V[]){

int i;

printf("Ingrese N: ");

scanf("%d", n);

printf("Ingrese los Elementos: ");

for (i = 0; i < *n; i++)

scanf("%d", &V[i]);

}

Page 54: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

54

Arrays como Parámetros (5)void ordenarLista(int n, int V[]){

int i,j, aux;

for (i = 0; i < n - 1; i++)

for(j = i + 1; j < n; j++)

if (V[i] > V[j]){

aux = V[i];

V[i] = V[j];

V[j] = aux;

}

}

Page 55: Modularidad - WordPress.com · 2016. 10. 30. · int cubo(int nro){return (nro * nro * nro);} Modularidad en C (3) Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA Programación

Sede Regional OránUNIVERSIDAD NACIONAL DE SALTA

ProgramaciónTIG - TUP

55

Arrays como Parámetros (6)

void mostrarLista(int n, int V[]){

int i;

for (i = 0; i < n; i++)

printf("%d \n", V[i]);

}