Universidad Nacional de Salta Facultad de Ciencias Exactas
Ctedra: Programacin Ao 2014
Trabajo Prctico N 3: Tipo de Dato Puntero y Modularidad
Preguntas Generales: Analice las siguientes preguntas cada vez que pueda y en particular cuando sea requerido por algn ejercicio. i. Qu tipo de mdulos utiliz? ii. Los parmetros son pasados por valor o por referencia?. Porqu? iii. Clasifique los identificadores en locales y globales segn corresponda. iv. Observe en qu momento utiliza parmetros formales y cuando actuales. v. Analice y explique acoplamiento y cohesin en cada mdulo.
Ejercicio 1: Escribir un programa en el que se declara una variable entera y luego mostrar su valor y su Direccin de memoria.
Ejercicio 2: Dados estos programas en C:
#include <stdio.h> int main() { char u,v; char *pu, *pv;
... v = 'A'; pv = &v; *pv = v + 1; u = *pv + 1; pu = &u; ... return 0; } #include <stdio.h> int main() { float a = 0.1, b = 0.2; float c, *pa, *pb; ... pa = &a; *pa = 2 * a; pb = &b; c = 5 *(*pb - *pa); ... return 0; } #include <stdio.h> int main() { int i, j = 25; int *i, *j = &j; ... *pj = j + 5; i = *pj + 5; pi = pj; *pi = i + j; ... return 0; } Teniendo en cuenta que: cada carcter ocupa 1 byte de memoria y la variable u se sita en la direccin FC8 y la variable v se sita en la direccin FD5 (hexadecimal) cada variable de tipo float ocupa 4 bytes de memoria y la variable a se sita en la direccin 1230 (hexadecimal) Objetivos: Que el alumno aprenda a utilizar el tipo de dato puntero. aprenda los conceptos de funcin y procedimiento. aprenda a utilizar variables globales y locales. aprenda a diferenciar parmetros formales, actuales, por valor, por referencia. aprenda los conceptos de acoplamiento y cohesin.
Bibliografa sugerida Luis Joyanes Aguilar e Ignacio Martnez. Programacin en C. Metodologa, algoritmos y estructuras de datos. Cair, Osvaldo. Fundamentos de Programacin. Piensa en C. Andrs Marzal e Isabel Gracia. Introduccin a la programacin con C.
Universidad Nacional de Salta Facultad de Ciencias Exactas Ctedra: Programacin Ao 2014 suponiendo que cada variable entera ocupa 2 bytes de memoria y la variable i se sita en la direccin 1000 y la variable j en la direccin 1002
Responder a las siguientes preguntas:
Qu valor representa &v? Qu valor se asigna a pv? Qu valor representa *pv? Qu valor se asigna a u? Qu valor representa &u? Qu valor se asigna a pu? Qu valor se asigna a *pu? Qu valor representa &a? Qu valor representa &b? Qu valor representa &pb? Qu valor se asigna a pa? Qu valor representa *pa? Qu valor representa &(*pa)? Qu valor se asigna a pb? Qu valor representa *pb? Qu valor se asigna a c? Qu valor representa &i y &j? Qu valor se asigna a pj, *pj, y a i? Qu valor representa pi? Qu valor se asigna a *pi? Qu valor representa pi + 2? Qu valor representa la expresin (*pi+ 2)? Qu valor representa la expresin *(pi + 2)?
Ejercicio 3: Cree un programa, utilizando tipos de datos puntero, para que dados tres nmeros enteros los muestre ordenados y los sume utilizando para el resultado de la suma una variable esttica.
Ejercicio 4: Para cada una de las siguientes tareas indicar el prototipo correcto de cada mdulo, justificando porque es la correcta como as tambin porque descart las otras: 1) Sumar tres nmeros reales. a) void suma (float a, float b, float c); b) int suma(float a, float b, float c); c) float suma(float a, float b, float c); 2) Determinar si un nmero entero es o no es primo a) int EsPrimo(int n); b) byte EsPrimo(float n); c) void EsPrimo(int n); d) void EsPrimo(int n; byte Si); e) void EsPrimo(int *n; byte Si); 3) Mostrar un valor entero a) void Mostrar(int Total); b) void Mostrar(int *Total); c) void Mostar(void);
Ejercicio 5: Desarrollar los siguientes mdulos: a) Crear un mdulo que determine la suma de los divisores de un nmero (sin contarse a s mismo). b) Crear un mdulo que dado un nmero natural lo convierta (modifique) a base 2.
Realizar un programa utilizando los mdulos anteriores para que dado un numero natural K >1 indique para cada nmero natural menor que K si es Deficiente, Abundante o Perfecto y en caso de ser deficiente convertirlo a base 2.
Universidad Nacional de Salta Facultad de Ciencias Exactas Ctedra: Programacin Ao 2014 Un nmero natural N se dice que es deficiente si la suma de sus divisores (sin contarse a s mismo) es menor a N. Si la suma de sus divisores es mayor a N se dice que el nmero es abundante y si es igual a N se dice que es perfecto.
Ejercicio 6: Desarrollar los siguientes mdulos: a) Realizar un mdulo que determine si dos nmeros son amigos o no. Los nmeros son amigos, si cada uno de ellos es igual a la suma de los divisores del otro (tener en cuenta que no se debe tomar al mismo nmero como divisor). Por ejemplo, 220 y 284 son amigos, ya que: Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220 Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 Nota: si para la solucin de este problema detecta alguna otra tarea que deba ser un mdulo debe implementarse. b) Realizar un mdulo que determine si un nmero natural es primo.
Realizar un programa que utilizando los mdulos anteriores muestre todas las parejas de nmeros amigos menores o iguales que N, donde N es un nmero natural ingresado por el usuario, no considere los nmeros primos.
Ejercicio 7: a) Para x e i dados, disear un mdulo que calcule la sucesin.
S i = 1 + X + X 2 /2! + X 3 /3! +...+ X i /i!
b) Realizar otro mdulo en el que dado x y un error, como parmetros, (por ejemplo 0.001) devuelva el primer valor i que cumpla una aproximacin de e x .
Se cumple que lim S i = e x
i -->+
Reutiliz el mdulo del inciso a)? Contestar las preguntas generales.
Ejercicio 8: Crear un mdulo que manipule dos nmeros enteros suprimiendo la ltima cifra del primero y aadindola al final del segundo. Realizar un programa que utilice dicho mdulo para invertir un nmero. Ejercicio 9: Dada una lista de N nmeros reales se desea calcular y mostrar a medida que se ingresa, el valor de la mantisa normalizada y el valor del exponente para cada uno de los nmeros. Mostrar el promedio de las mantisas normalizadas y el promedio de los exponentes.
Ejercicio 10: Un grupo de adolescentes en Cachi estn aburridos en la plaza y deciden pasear por el pueblo segn el azar. Recorrern las 6, principales, cuadras del pueblo que se encuentran en lnea recta. Los adolescentes inician el paseo en la plaza y terminan de pasear si llegan a la 1er cuadra o si llegan a la 6ta Universidad Nacional de Salta Facultad de Ciencias Exactas Ctedra: Programacin Ao 2014 cuadra. Para elegir cual lado tomar (derecha izquierda) tiran la moneda con una probabilidad de 2/3 de ir a la derecha (cara) y con una probabilidad de 1/3 de ir a la izquierda (seca). 1er cuadra Plaza 6ta cuadra
Implementar un programa que dado un nmero de simulaciones y la cuadra de comienzo (la plaza) calcule el porcentaje de veces que acaba en la 1er cuadra y el nmero medio de manzanas que recorre en cada viaje. Contestar las preguntas generales.