Vous êtes sur la page 1sur 12

Computacin II Tema 2

Tema 2 Programacin Procedimental

La programacin procedimental es usada cuando se necesita resolver problemas complejos , que debido a sus caractersticas requieren el uso de gran cantidad de instrucciones. Este tipo de programacin permite dividir el programa en Mdulos cuya solucin resulta ms sencilla. - Mdulo ( Funcin Procedimiento) : Bloque de instrucciones que realiza una funcin especfica. - Objetivos de la Programacin Procedimental : - Dividir un algoritmo muy complejo en varios algoritmos sencillos y de fcil comprensin. ( Diseo Descendente ). - Separar los fragmentos repetitivos en un solo algoritmo. - Ventajas : - El programador puede escribir cada mdulo y verificarlo, sin preocuparse de los detalles de otros mdulos. Esto facilita considerablemente la localizacin de un error cuando se produce. - Los programas desarrollados de este modo son ms fciles de comprender, ya que la estructura de cada mdulo del programa puede ser estudiada independientemente de los otros mdulos del programa. - El cdigo puede ser reutilizado en otras aplicaciones donde se requiere resolver un problema similar. - Mtodo usado : El mdulo principal ( algoritmo principal), es quien coordina la ejecucin del programa. Este es el algoritmo donde se inicia el programa y puede llamar, desde varias lneas de instruccin , a otros submdulos. Cuando un mdulo llamado termina su ejecucin, regresa a la instruccin siguiente a la que lo llam y contina la ejecucin del programa principal.

Computacin II Tema 2
- Ambito de las variables : El mbito es la zona de un programa en el que es visible una variable.

Variables Globales : Su valor es reconocido en todo el proceso, es decir, son espacios de memoria reservados de forma permanente; se mantienen en memoria durante la ejecucin del programa y su valor es reconocido por todos los mdulos del mismo. Variables Locales : Su valor es reconocido solo por el mdulo que las declara, es decir, son espacios de memoria reservados que se mantienen durante la ejecucin del mdulo. Al finalizar el mdulo, stas se borran de memoria. - Consideraciones acerca del uso de las variables : - Una variable global se declara en el mdulo principal, las variables locales se declaran al inicio de cada mdulo. - No debe existir dos ms variables, locales globales, que compartan el mismo nombre. - Los mdulos se pueden pasar datos entre s solo a travs de las variables globales, ya que stas se crean al inicio del programa y se destruyen al finalizar el mismo. - Paso de Parmetros : Cuando un programa llama a un mdulo, la informacin que ste requiere para su ejecucin le es transferida desde el programa principal a travs de una lista de parmetros , los cuales son escritos entre parntesis despus del nombre del mdulo. Estos parmetros reciben el nombre de parmetros actuales ( usados en la instruccin de llamada desde el programa principal ) y parmetros formales ( usados en el mdulo ). - Mtodos Usados para el Paso de Parmetros : 1- Paso por Valor : Cuando se realiza el paso por valor, el mdulo llamado recibe una copia de los valores de los parmetros actuales. En este caso, los cambios que se produzcan por efecto del mdulo no producen cambios en los valores originales, por lo tanto, no se pueden pasar valores de retorno al punto de llamada. 2 - Paso por Referencia : ( llamada por direccin variable ) En este caso, se proporciona al subprograma la direccin de la variable, por lo que el subprograma la utiliza como propia, modificndola si es necesario. El Paso por Valor limita al mdulo solo para leer los parmetros suministrados, mientras que El Paso por Referencia permite tanto la lectura como la escritura en ellos.

Computacin II Tema 2
- Tipos de Mdulos : 1.- Procedimientos Subrutinas :

Un procedimiento es un mdulo subprograma que ejecuta un proceso y retorna cero ( 0 ), uno ( 1 ) varios valores , en funcin de los parmetros definidos. 2.- Funciones : Mdulo subprograma que retorna un solo valor resultado. - Formato de las Instrucciones de llamado desde el programa principal : Funciones : Nombre funcin ( parmetro 1, parmetro 2,..parmetro n) Procedimientos : Llamar a nombre procedimiento (parmetro 1, parmetro 2,..parmetro n) - Formato de la Declaracin : Funciones : Tipo de Resultado Nombre funcin (tipo param 1, tipo param 2,tipo param n ) Inicio Declaracin variables locales Accin 1 Accin 2 Accin n Devolver ( resultado, expresin ) Fin Procedimientos : Nombre Procedimiento (tipo param 1, tipo param 2,tipo param n ) Inicio Declaracin variables locales Accin 1 Accin 2 Accin n Fin - Uso del valor devuelto por la funcin : Cuando una funcin devuelve un valor, el programa principal que la llama puede usarlo de diferentes maneras: 1.- Puede asignarlo a una variable, usando una instruccin de asignacin. Ej : monto = sueldo( nombre, horas, salario ) 2.- Puede mostrar directamente el resultado de la funcin .

Computacin II Tema 2
Ej : mostrar ( Sueldo = , sueldo( nombre, horas, salario )

3.- Puede usar el valor devuelto por la funcin dentro de una condicin : Ej : Si (sueldo( nombre, horas, salario ) < 500.000 ) Entonces Mostrar ( El empleado , nombre , necesita un aumento ) Fin Si 4.- Puede usar el resultado dentro de una expresin : Ej : impuesto = 0.10* sueldo( nombre, horas, salario ) Ejercicios usando variables simples como parmetros : 1.- Escribir un procedimiento que calcule el factorial de un nmero dado. Factorial ( entero n ) Inicio Entero i, Fact Fact = 1 Repetir desde i = 1 hasta i == n Fact = Fact * i Fin Repetir desde Fin 2.- Disear una funcin que permita obtener el valor absoluto de un nmero. Entero abs(entero numero) Inicio Si (numero<0 ) Entonces Devolver ((-1)*numero) Sino Devolver(numero) Fin Si Fin 3.- La funcin cos(x) se puede calcular usando la serie:

cos( x) = 1 + ( 1) i
i =1

x 2*i x2 x4 x6 =1 + + ( 2 * i )! 2! 4! 6!

Analisis. La solucin se construye usando un lazo de n ciclos y en cada ciclo se va agregando un trmino a la solucin. Para calcular cada uno de los trminos es necesario calcular el factorial de la expresin 2*i, donde i es igual a la posicin del trmino.

Diseo del Algoritmo.algoritmo coseno inicio entero i,n, factorial

Computacin II Tema 2
real x, cos cos = 1 leer(n,x) repetir_desde i = 1 hasta i == n factorial = FACT(2*i) cos = cos + (-1^i)*(x^(2*i))/factorial fin_repetir_desde mostrar(cos) fin

// Llamada de la funcin

entero FACT(entero n) // Declaracin de la Funcin inicio entero i, F F=1 repetir_desde i = 1 hasta i == n F=F*i fin_repetir_desde devolver(F) fin . 4.-Definir una funcin que permita determinar si un numero entero suministrado es primo. Utilizar esta funcin para llenar un vector de n elementos con solo nmeros primos. // Funcin: entero PRIMO(entero K) inicio entero flag, J, R flag = 1, J = 2, R = 1 repetir_mientras(R!=0 && J < K) R = K mod J si(R == 0) entonces flag = 0 fin_si J=J+1 fin_repetir_mientras devolver(flag) fin // Algoritmo : algoritmo vect_primo inicio entero n, K, A[100] mostrar( n=) leer(n) k=1 repetir_desde i = 1 hasta i == n repetir_mientras(PRIMO(K) == 0) K=K+1 fin_repetir_mientras A[i] = K K=K+1 fin_repetir_desde

Computacin II Tema 2

En la funcin se define una variable (flag) que indica si el numero ES PRIMO (flag = 1) o NO ES PRIMO (flag = 0). La funcin comienza asumiendo que el numero a probar (K) es primo (flag = 1), luego prueba dividiendo el numero entre valores de 2 hasta K1. Si en alguna de estas divisiones R == 0 entonces cambia flag a 0 y se detiene el proceso devolviendo la funcin la variable flag. 5.- Algoritmo Ejemplo Paso de Parmetros // Programa Principal Inicio Entero a, b, c Mostrar( Introduzca los valores de a, b y c ) Leer (a,b,c) Llamar a Proc ( a, a, a+b, c ) Mostrar ( El Resultado es : , c ) Fin // Procedimiento Proc ( Entero v, x, y, z ) Inicio v = v+1 z= x+y Fin Asumiendo que los valores ledos por teclado son : a = 3 , b = 5 y c=17 Indicar el resultado mostrado en el programa principal , asumiendo el paso de parmetros : - Por valor - Por Referencia Como puede observarse comparando la lista de parmetros actuales ( usados en la llamada al procedimiento ) y la lista de parmetros formales : Si a=3 v= x = 3 b=5 y=a+b =3 + 5 =8 c=17 z=17 Paso Por Valor : C no se modifica despus de la ejecucin del procedimiento, por lo tanto, la salida del programa ser : El resultado es : 17 Paso por Referencia : En este caso, el valor de la variable C es modificado en el procedimiento : V = v+1 = 3+ 1= 4 Z = x+y = 3+ 8 = 11 El programa mostrar : El resultado es : 11

Computacin II Tema 2

6.- Disear un algoritmo que, dados tres valores, determine si forman un tringulo, sabiendo que tres lados forman un tringulo si el mayor es menor que la suma de los otros dos lados. // Funcin Entero prueba ( entero a, b ,c ) Inicio Si ( a> b && a> c ) Mayor a Sino Si ( b>a y b > c ) Sino Mayor b Mayor c Fin Si Fin Si Devolver ( mayor ) Fin // Programa Principal Algoritmo Clculo Tringulo Inicio Entero x, m, n, may Mostrar ( Introduzca los tres lados ) Leer (x, m, n ) may = prueba (x, m ,n ) Si ( may < (x + m + n ) may ) Mostrar ( Los tres lados forman un tringulo ) Sino Fin Si Fin Mostrar ( Los tres lados no forman un tringulo )

Computacin II Tema 2
- Estructuras de datos como parmetros de funciones:

Paso de un vector:
Declaracin : tipo Nombre_Funcion(tipo nombre vector[ ], int param n) llamada: Nombre_Funcion(nombre Vector, NumElementos, . param n) NumElementos, .tipo

Paso de una matriz:


Declaracin : tipo Nombre_Funcion(tipo nombre Matriz[ ][10], int NumElementos, . tipo param n) llamada: Nombre_Funcion(nombre Matriz, NumElementos, . param n)

Paso de un registro:
Declaracin : tipo Nombre_Funcion(tipo_registro nombre variable, .tipo Pn) llamada: Nombre_Funcion(nombre variable, . param n)

Paso de un arreglo de registros:


Declaracin : tipo Nombre_Funcion(tipo_registro nombre arreglo[ ], int NumElementos , . tipo param n) llamada: Nombre_Funcion(nombre arreglo, NumElementos,. param n). - Ejercicios usando Estructuras de datos como parmetros : 1.- Disear un algoritmo para obtener el mayor valor de un vector de nmeros enteros . El valor mayor debe ser encontrado diseando una funcin. // Funcin entero MAYOR(entero vector[], entero n) inicio entero, i, mayor = 0 repetir_desde i = 1 hasta i == n si(vector[i] > mayor mayor = vector[i] fin_si fin_repetir_desde fin devolver(mayor)

Computacin II Tema 2

// Algoritmo Algoritmo Elemento mayor inicio entero vector[10 ], i, M, num Mostrar ( Introduzca el numero de elementos ) Leer(num) repetir_desde i = 1 hasta i == num Leer(vector[i]) fin_repetir_desde M = MAYOR(vector,num) mostrar( Elemento mayor es : , M) fin 2.- Disear un algoritmo que, dado un vector de nmeros enteros, lo ordene en forma ascendente. El algoritmo principal debe leer el vector, mostrarlo en forma desordenada, ordenarlo y luego mostrarlo ordenado . Disear procedimientos para ordenar y mostrar el vector. // Procedimiento Mostrar Mostrar (entero a [] ,entero n ) Inicio Entero i Repetir desde i = 1 hasta i == n Mostrar ( a [ i] ) Fin Repetir desde Fin // Procedimiento Ordenar Ordenar (entero a [ ] ,entero n ) Inicio Entero i , aux Repetir desde i = 1 hasta i ==( n 1) Repetir desde j = 1 hasta j ==( n 1) Si (a[j]>a[j+1]) a[j] aux a[j] a[j+1] a[j+1] aux

Fin Si Fin Repetir Desde Fin Repetir Desde Fin

// Programa Principal Algoritmo Ordenar Vector Inicio Entero vector [10 ], i, num Mostrar ( Introduzca el nmero de elementos ) Leer (num) Repetir desde i = 1 hasta i == num

Computacin II Tema 2
Leer ( vector[i] ) Fin Repetir Desde Mostrar ( Vector Desordenado : ) Llamar a Mostrar (vector,num) Llamar a Ordenar (vector,num) Mostrar ( Vector Ordenado : ) Llamar a Mostrar (vector,num) Fin

10

3.-Disear una funcin que ordene un vector y luego usar esa funcin para ordenar las columnas de una matriz. Ya que la funcin a disear recibe un VECTOR, se debe hacer el ordenamiento columna x columna. O sea que es necesario pasar primero cada columna a un vector auxiliar y luego se pasa este vector auxiliar a la funcin. algoritmo ordenar_matriz inicio entero M[4,5], i, j, vector[4] leer(fil,col) si(fil > F o col > C) mostrar(Error de datos) si_no repetir_desde i=1 hasta i==fil repetir_desde j=1 hasta j==col Leer(M[i,j]) fin_repetir_desde fin_repetir_desde MOSTRAR(M,fil) repetir_desde j=1 hasta j==col repetir_desde i=1 hasta i==fil vector[i] = M[i][j] fin_repetir_desde ORDENAR(vector,fil) repetir_desde i=1 hasta i==fil M[i,j] = vector[i] fin_repetir_desde fin_repetir_desde MOSTRAR(M,fil) fin_si fin MOSTRAR(entero M[][C], entero N) inicio int i,j repetir_desde i=1 hasta i==N repetir_desde j=1 hasta j== C mostrar(M[i][j]) fin_repetir_desde fin_repetir_desde fin ORDENAR(entero vector[],entero n) inicio int i,j,aux repetir_desde i=1 hasta i==(n-1) repetir_desde j=1 hasta j==(n-1) si(vector[j]>vector[j+1]) aux = vector[j] vector[j] = vector[j+1] vector[j+1] = aux fin_si fin_repetir_desde fin_repetir_desde fin

Computacin II Tema 2
Ejercicios Propuestos

11

1.- Disear una funcin que permita sumar los elementos de un vector de nmeros enteros, recibiendo como parmetros el arreglo y el nmero de elementos a sumar. 2.- Disear una funcin que reciba como parmetro una palabra de longitud n y retorne 1 si la palabra es capica y 0 si no lo es. ( Una palabra es capica cuando se lee igual al derecho y al revs). 3.- Dada la siguiente informacin de tipos y variables : registro fecha registro alumno entero da, mes, ao carcter nombre[20] fin registro registro fecha f_nac real notas[8] fin registro Se pide disear procedimientos para : - Visualizar los nombres de todos aquellos alumnos con nota media superior a 7. - Visualizar los nombres y contar el nmero de los alumnos nacidos en el mes de febrero. 4.- Se tiene la siguiente informacin sobre el nombre , ciudad y las ventas realizadas durante los ltimos 12 meses, de 50 tiendas de Venezuela : registro t_datos caracter nombre[20] , ciudad[15] real ventas[12] fin registro Suponiendo cargada la estructura, se pide : Desarrollar un procedimiento que visualice el nombre de las tiendas de una ciudad en particular cuyo promedio mensual de ventas sea inferior a un valor tope dado. 5.-El siguiente algoritmo permite calcular el rea de un crculo, el volumen de una esfera la superficie de una esfera segn la opcin introducida por un usuario, llamando a una funcin CALCULO. Se pide : Recorrer el algoritmo en fro e indicar los resultados obtenidos, asumiendo el paso del parmetro radio por valor y por referencia.

Algoritmo Inicio Entero cdigo , radio Mostrar( Introduzca el valor del radio ) Leer(radio) Mostrar(Introduzca la opcion deseada : 1= rea crculo , 2= volumen de la esfera , 3= superficie de la esfera) Leer( cdigo ) Mostrar(El resultado es : , CALCULO(cdigo, radio) Mostrar(El radio despus de ejecutarse la funcin es : , radio) Fin

Computacin II Tema 2
// Construccin de la funcin Real CALCULO ( entero opcin, r ) Inicio Real valor pi = 3.1459 En caso de (opcin) 1: valor = pi*r^2 2: valor = 4/3*pi*r^3 3: valor = 4*pi*r^2 Fin en caso de r = r + 10 Mostrar( El radio dentro de la funcin CALCULO es : , r ) Devolver (valor) Fin 6.-Disear un algoritmo que lea dos variables x y n y evale la frmula llamando a una funcin. y = x

12

7.- Disear una funcin para deducir el nmero de das de un mes en funcin del nmero de orden dentro del calendario (1 = Enero, 2 = Febrero, etc) y teniendo en cuenta si el ao es bisiesto. ( Para que un ao sea bisiesto debe ser divisible entre 4 , pero no entre 100; a esta ltima condicin quedan exentos los divisibles entre 400 ). 8.- Disear un algoritmo que permita resolver una ecuacin de segundo grado asumiendo todos los valores posibles para el discriminante. Los coeficientes a, b y c deben ser ledos en el programa principal y se debe llamar a un procedimiento para obtener la solucin deseada. 9.- Disear una funcin salario que calcule el salario de un trabajador para un nmero de horas trabajadas y un salario por hora. Las horas que superen las 40 horas semanales se pagarn como extras con un salario hora 1.5 veces el salario ordinario. 10.- Disear un algoritmo que permita utilizar la computadora como una calculadora normal. Considerar solo las operaciones aritmticas bsicas ( suma , resta, multiplicacin y divisin). El programa principal debe leer la opcin deseada y realizar el clculo correspondiente llamando a un procedimiento. 11.- Dada la serie : ex = x/1! + x2/2! + ...... xn/n! Desarrollar un algoritmo para evaluar la serie para valores de x y n introducidos por teclado. El algoritmo debe permitir repetir el proceso , contestando a la pregunta : Desea realizar otra evaluacin : si/no .La evaluacin de la serie debe ser realizada a travs de una funcin. 12.- Disear una funcin para evaluar la siguiente expresin: Y = e -0.1t sen ( 0.5t ) para valores de t entre 0 y 50. El incremento en los valores de t debe ser decidido por el usuario.

Vous aimerez peut-être aussi