Вы находитесь на странице: 1из 20

TRABAJO DE INTRODUCCION A LA PROGRAMACION

ANDRES CAMILO GAMBOA CUBILLOS


CODIGO: 1122119121
DIANA MARCELA SALCEDO VALENCIA
CODIGO: 40306267

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
INGENIERIA DE SISTEMAS
TERCER SEMESTRE
ACACIAS, META
2007
TRABAJO DE INTRODUCCION A LA PROGRAMACION

ANDRES CAMILO GAMBOA CUBILLOS


CODIGO: 1122119121
DIANA MARCELA SALCEDO VALENCIA
CODIGO: 40306267

TUTORA:

DIANA MARCELA CARDONA ROMÁN


INGENIERA DE SISTEMAS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICA TECNOLOGIA E INGENIERIA
INGENIERIA DE SISTEMAS
TERCER SEMESTRE
ACACIAS, META
2007
INTRODUCCION

En esta segunda actividad observaremos todo lo referente a funciones, estructuras


de programas, y demás aplicaciones las cuales se observaran durante el
desarrollo del trabajo.
OBJETIVOS

 Conocer mas a fondo las funciones básicas del programa C++

 Tener en cuenta sus conceptos y funciones en la cual se presenta.


ACTIVIDAD 2

TEMAS DE LA ACTIVIDAD
FUNCIONES & APUNTADORES
1.4 FUNCIONES
1.4.1 PROTOTIPOS
1.4.1.1 La Definición De Una Función
1.4.1.2 Paso De Parámetros Por Valor
1.4.1.3 Paso De Parámetros Por Referencia
1.4.2 VARIABLES LOCALES Y GLOBALES
1.4.3 RECURSIVIDAD
1.5 PUNTEROS

En esta actividad se manejara los conceptos de funciones, prototipos,


recursividad, parámetros y punteros. La importancia de manejar correctamente
estos conceptos se refleja en la construcción de funciones y programas más útiles
y versátiles. Aquí se debe poner mucho empeño en la comprensión del
procedimiento del algoritmo, realizar muchos ejemplos prácticos y pruebas en el
compilador.

1. Defina Función, las características de dichas funciones y formule un


ejemplo.

2. Defina la función main()

3. Defina Prototipo, como es su declaración y muestre un ejemplo de las dos


maneras diferentes de declarar prototipos.

4. Cuales de los siguientes prototipos son validos


a) int cambio(int *b)
Sí ___ No ____
b) Calcular(int, int, char r);
Sí ___ No ____
c) void Invertir(int, unsigned char)
Sí ___ No ____
d) void sumar(float valor);
Sí ___ No ____
e) float suma(float int);
Sí ___ No ____
f) int mayor(int, int, int);
Sí ___ No ____
g) char Menu(int opciones);
Sí ___ No ____

5. Defina parámetros y como se realiza el paso de parámetros por valor,


realice un ejemplo.
6. Que es return y como debe ser utilizado.

7. Las calculadoras, se convierten en un elemento esencial en la vida


cotidiana, por consiguiente y mediante el uso de funciones, se debe
desarrollar una calculadora estándar, con todas las funciones incorporadas,
(suma, resta, multiplicación, división, porcentaje, raiz cuadrada), para los
cual se sugiere consulte la ayuda que brinda el entorno C++

8. Cómo se realiza el paso de parámetros por referencia, muestre un ejemplo.

9. ¿A que tipo de variables se les llama locales y a que tipo se les llama
globales?, dé un ejemplo de la utilización de cada una de ellas.

10. ¿Qué significa que una función sea recursiva?

11. ¿Una función recursiva necesita de una condición para terminar el proceso
en el momento específico?, ¿Por qué?

12. ¿Qué significa para usted apuntador?, busque la definición y haga una
comparación entre su definición y la definición encontrada.

13. Escriba un ejemplo del uso del operador * y del operador de dirección (&)

14. a) Investigue porque un puntero ocupa 2 bytes?


b) Donde radica la importancia de la utilización de punteros
c) Cuales son las restricciones del uso de los punteros

15. Averigüe el significado de una función sobrecargada y de 1 ejemplo en


código C/C++.

16. Realizar el prototipo y la función de un proceso que tome por parámetros


como valor dos números a y b, obtenga la potencia c=ab y retorne c. En
C/C++.

Acompañamiento interactivo
Enviar vía e-mail, todas las inquietudes que se tengan o comunicarse conmigo vía
celular.

e-mail: marcela.cardona@gmail.com o ing_dmcardona@yahoo.com


Messenger: marcela.cardona@gmail.com

NOTA: Las actividades y trabajos que se propongan, serán realizados y


guardados en el portafolio, para poder hacer el seguimiento respectivo. Respecto
a las Auto evaluaciones, Coevaluaciones y Heteroevaluaciones serán también
guardadas en el portafolio.
ACTIVIDAD 2
SOLUCION

1. FUNCIONES
Una de las herramientas fundamentales a lo largo de la historia de la
programación, ha sido la inclusión de funciones, que se comportan como
miniprogramas dentro de otro programa, permitiendo la reducción de espacio, la
agrupación de muchas sentencias repetitivas bajo un mismos nombre, permiten
que los programas sean legibles, estructurados y comprensibles, logrando con
esto poder actualizar y/o corregir los programas de una manera rápida, sin tener
que afectar la integridad de todo el programa. Podemos definir a las funciones
como:

 “Una función es simplemente un algoritmo el cual devuelve un único valor al


sitio del programa en que fue invocada o llamada”

 Una función es una sección de código independiente, con nombre, que ejecuta
una tarea específica y opcionalmente devuelve un valor al programa que la
llamó,

De acuerdo a las definiciones dadas, podemos decir lo siguiente:

 Una función tiene un único nombre, al utilizar éste nombre en otras partes del
programa se pueden ejecutar los enunciados contenidos en la función. A esto
se le conoce como llamar o llamado a la función, e inclusive se puede llamar
desde otras funciones

 Una función es independiente, es decir pude ejecutar sus tareas sin


interferencia ó interferir en otras partes del programa.

 Una tarea es un trabajo discreto que un programa debe ejecutar como parte de
su desempeño general, por ejemplo mandar una línea de texto a centrar,
realizar ordenamientos, realizar cálculos matemáticos.

 Una función opcionalmente devuelve un valor al programa que la llamó.


Cuando un programa llama a una función se ejecutan los enunciados
contenidos en ésta, si el programa lo requiere, éstos enunciados pueden
devolver un valor al programa que llamó a la función mediante la orden return,

Otras características importantes de las funciones y/o profundización a las


anteriores:

 Las funciones se comportan como si fuesen variables


 Se pueden definir funciones como "extern" o "static", por defecto están
definidas como extern, es decir afectan todo el programa

 Las funciones están concebidas para devolver valores, por defecto el valor es
int, de querer que la función no retorne valor, se le antecede al instrucción
“void” o puede tomar cualquier valor como si fuese una variable

 Las funciones deben tener nombres y se aconseja que este nombre


identifique claramente lo que hace la función, si se necesita varias palabras
para el nombre, se recomienda separarlo con un guión “_” o iniciando con
mayúscula la primera letra de la palabra , un ejemplo pude ser “centrar _
palabra”, “CentrarPalabra”,

 Los parámetros de una función van entre paréntesis y representa los valores
de salida, y podemos afirmar que cada parámetro es una variable, en caso de
no realizar paso de parámetros, simplemente se escribe el nombre de la
función y los paréntesis “llamado()”

 Las funciones se comportan exactamente como programas, por lo tanto


deben tener un inicio y un fin { }

 C++ esta soportado mediante funciones, de hecho el programa principal es una


función main ()

2. Definición de la Función main ()


Normalmente la función main no hace nada, es decir, en ella no se codifica la
solución del problema. Sólo se encarga de llamar a las funciones que implementan
la solución del problema, Es una función que siempre debe llevar todo programa

3. PROTOTIPOS
Para utilizar una función en un programa se requiere en primer lugar declararla y
después definirla. La declaración de la función le indica al compilador el nombre, el
tipo de dato devuelto por la función y los parámetros pasados a la función. A la
declaración de una función se le llama también el prototipo.
Un prototipo es una declaración de una función. Consistente simplemente en el
encabezado de la función, terminado con punto y coma (;)lo que hace es avisar al
compilador, como se va a llamar la función y si recibe y devuelve información.
La estructura de un prototipo es: <tipo> func (<lista de declaración de
parámetros>);

Ejemplo:
int Mayor (int a, int b);// es un prototipo de función que devuelve un entero y recibe
dos parámetros enteros aunque C++ permite realizar el prototipo de la siguiente
manera int Mayor(int,int); sin necesidad de escribir el nombre de las variables.
Entonces La estructura de un programa en C++ quedaría así:
[directivas del pre-procesador: includes y defines]
[declaración de variables y constantes globales]
[definiciones de clases]
[prototipos de funciones]
[declaraciones de clases]
[definiciones de funciones]//definidas en los prototipos
función main ()

3.1. La Definición De Una Función


Es en sí la función misma, está compuesta en su primer línea de código por el
encabezado que debe ser idéntico al prototipo de la función pero en éste caso no
se utiliza el punto y coma al final y además, al contrario del prototipo, donde es
opcional incluir el nombre de las variables utilizadas como argumentos como lo
vimos antes, en el encabezado de la función si se debe incluir el nombre de las
variables. Enseguida del encabezado está el cuerpo de la función que contiene,
encerrados entre llaves, procesos propios que debe realizar la función. Si la
función devuelve algún valor, éste se debe especificar al final del cuerpo de la
función, mediante la instrucción return (variable)

4. Cuales de los siguientes prototipos son validos

a) int cambio (int *b)


Sí X No ____

b) Calcular (int, int, char r);


Sí ___ No __x__

c) void Invertir (int, unsigned char)


Sí X No ___

d) void sumar (float valor);


Sí _x__ No ____

e) float suma (float int);


Sí ___ No _x___

f) int mayor (int, int, int);


Sí _x__ No ____

g) char Menu (int opciones);


Sí X No ____
5. Defina parámetros y como se realiza el paso de parámetros por valor, realice un
ejemplo.

Un parámetro de una función va entre paréntesis y representa los valores de


salida, y se puede afirmar que cada parámetro es una variable, en caso de no
llegar a realizar pasos de parámetros, simplemente se escribe el nombre de la
función y los paréntesis

Ej. “llamado ()”

5.1. Paso De Parámetros Por Valor


El valor de la variable que se esté pasando, es asignado a la variable local que es
declarada al definir la función. Tanto la variable que se utilice al efectuar la
invocación como la que la recibe "por valor" deben ser del mismo tipo, en caso
contrario se presentará un error.

Ejemplo

# include <stdio.h>

main ()
{

int i1,i2;
i1=5; i2=105;

printf(''En main1: valor i1,i2:%d,%dnn'',i1,i2);


proc(i1,&i2);
printf(''En main2: valor i1,i2:%d,%dnn'',i1,i2);
}

proc(p1,p2)
int p1;
int *p2;
{

printf(''Dentro proc1; valor i1,i2:%d,%dnn'',p1,*p2);


*p2 = *p2+p1;
p1 = p1*2;
printf(''Dentro proc2; valor i1,i2:%d,%dnn'',p1,*p2);
printf(''Dentro proce; dar valores i1,i2:'');
scanf(''%d%d'',&p1,&*p2);
printf(''Dentro proc3; valor i1,i2:%d,%dnn'',p1,*p2);
}
6. ¿Que es return y como debe ser utilizado?

Es quien regresa un y solo un dato a la parte del programa que la este llamando o
invocando, sin embargo es de considerar que return puede regresar un dato, una
variable o una expresión algebraica (no ecuación o formula) como lo muestran los
siguientes ejemplos;
a) Return 3.1416;
b) Return area;

7. Las calculadoras, se convierten en un elemento esencial en la vida cotidiana,


por consiguiente y mediante el uso de funciones, se debe desarrollar una
calculadora estándar, con todas las funciones incorporadas, (suma, resta,
multiplicación, división, porcentaje, raíz cuadrada), para los cual se sugiere
consulte la ayuda que brinda el entorno C++

#include <iostream.h>
#include <conio.h>
#include “math.h”

void divide (int x, int y);


int multiplica (int, int);
float raiz(int valorx) ;

// Función principal
int main()
{
int x, y,r;
float r2;
cout << "Introduzca dos numeros" << endl;
cin >> x
cin >> y;
divide(x, y); // llama a la función "Divide"
divide(y, x);
r = multiplica(x, y);
cout << "La multiplicación de X y Y es = a: "<< r << endl;

r2=raiz(x);
int raiz;
getch() ;
return 0;
}

// Función divide
void divide (int valorx, int valory)
{
int respuesta; // variable local
respuesta= (valorx / valory;);
cout << "La división de los dos valores es: " << resultado << endl;
}

// Función multiplica
int multiplica(int valorx, int valory)
{
int mult; // variable local
mult = valor1 * valor2;
return mult;// retorna el valor del proceso
}

// Funcion raiz cuadrada


float raiz (int valorx)
{ float raiz ;// variable local
raiz= sqrt(valorx);
return raiz// retorna el valor del proceso
}

8. Cómo se realiza el paso de parámetros por referencia, muestre un ejemplo.

Parámetros Por Referencia


En el cual cada variable pasada como parámetro, puede ser modificada por las
instrucciones contenidas en el ámbito de la función. En la invocación se pasa la
variable de igual forma que se hace por valor, esto es una "desventaja" ya que al
ver la instrucción no nos daríamos cuenta si se está pasando por referencia o
valor, la costumbre nos haría pensar que es por valor, pero para estar seguros
debemos ver la definición de la función; al identificador que recibe, en la definición
de la función, se le antepondrá el operador de dirección, &; de esta forma, en la
memoria RAM tomará la misma dirección del parámetro de invocación”. No nos
inquietemos, en el siguiente capitulo se estudiará lo referente a punteros, esto nos
permitirá una mayor claridad, sin embargo es bueno que el estudiante vaya
indagando acerca de este apasionante tema.

Ejemplo:
//Paso de parámetros por referencia //
#include <stdio.h>
#include <iostream.h>
void intercambio(int *, int *); // prototipo de la función
main()
{
int a = 20, b = 30;
intercambio(&a, &b); // a y b son pasados por referencia
cout<<"a es "<<a;
cout <<" b es " <<b;
}
void intercambio(int *x, int *y)
{
int z = *x; // z toma el contenido de la dirección x
*x = *y; // x toma el contenido de y
*y = z; // contenido de y = z
}

9. ¿A que tipo de variables se les llama locales y a que tipo se les llama
globales?, dé un ejemplo de la utilización de cada una de ellas.

- Variable Local: Es un tipo de variables a la cual se les llama locales ya que sólo
son útiles dentro del cuerpo de la función. Los parámetros utilizados en una
función se consideran como variables de tipo local y se utilizan exactamente de la
misma manera, como lo demuestra en el siguiente código:

int suma (int valor1, int valor2)


{
int local; // variable local
local = valor1 + valor2;
return local;
}

- Variable Global: A las variables que declaramos fuera del cuerpo de cualquier
función se dice que tienen alcance global y por lo tanto estas funciones están
disponibles para cualquier función del programa, incluye main (). Las variables
globales no cambian el valor de las globales, sin embargo una variable local con el
mismo nombre que una variable global oculta a la variable global. Los conceptos
discutidos hasta este momento quedan demostrados en el siguiente programa:

#include <iostream.h>
int global; // variable global
void funcion1 (int parámetro);
int main ()
{
int local1, i, global=30;
cout << local1 << endl << endl;
cout << "Introduzca un numero:" << endl;
cin >> local1;
cout << "Su numero es: " << local1 << endl;
cout << endl;
for (i=0; i<5; i++)
{
int local2; // válida solo dentro del bucle
local2 = i;
cout << local1 << "\t";
cout << local2 << endl;
}
funcion1(local1);
cout << "La variable \"global\" local vale: "
<< global << endl;
cout << "La variable \"global\" global vale: "
<< ::global << endl;
global=45;
cout << "La variable \"global\" local ahora vale: "
<< global << endl;
cout << "La variable \"global\" global vale: "
<< ::global << endl;
//cout << local2 << endl;
return 0;
}
void funcion1(int parametro)
{
global = global + parámetro;
}

10. ¿Qué significa que una función sea recursiva?

Se denominan funciones recursivas a aquellas que se llaman a sí mismas. Un


ejemplo típico es el método de ordenación quick-sort, el juego denominado Torres
de Hanoi, etc.

Se va a iniciar por distinguir un método iterativo frente a un método recursivo


mediante el ejemplo del cálculo del factorial de un número n.
n!=n·(n-1)·(n-2)...2·1
El resultado del factorial de un número entero es un número entero mucho más
grande (long), que puede sobrepasar el rango de los enteros (int) si n es grande.

Método iterativo
long factorial(int n){
long resultado=1;
for(int i=1; i<=n; i++){
resultado*=i;
}
return resultado;
}

Método recursivo
long factorial(int n){
if(n==0) return 1;
return (n*factorial(n-1));
}

11. ¿Una función recursiva necesita de una condición para terminar el proceso en
el momento específico?, ¿Por qué?
Si; ya que si no existiera la función continuaría haciendo el proceso
indefinidamente.

12. ¿Qué significa para usted apuntador?, busque la definición y haga una
comparación entre su definición y la definición encontrada.

Podremos deducir por el nombre que un apuntador, es algo que apunta a algún
lado, en el caso de la programación de computadoras, los punteros apuntan a
direcciones de memoria, Los punteros son variables las cuales guardan
direcciones de memoria RAM. En memoria un puntero ocupa 2 bytes.

Para este caso tomaremos una dirección no real (1200), la verdadera dirección la
asigna el sistema operativo, a través del compilador. En memoria, la variable P
almacena un valor de 1200. La variable X se encuentra en la dirección de memoria
1200.La abstracción que se debe hacer es la de que P apunta o señala a X. Para
definir un puntero se inicia definiendo el tipo (int, flota, char…), luego se antepone
el * la nombre de la variable ejemplo int *X.

13. Escriba un ejemplo del uso del operador * y del operador de dirección (&)

Operador *: El operador * se utilizar para manejar la dirección a la que apunta un


puntero. Podríamos llamarlo el operador de acceso. Tanto el operador de acceso,
como el de indirección, funcionan en notación prefija

Ejemplo:

1 int *p_entero;
2 int entero1, entero2;
3 entero1 = 2;
4 entero2 = 5;
5 p_entero = &entero1;
6 entero1 = *p_entero + entero2;
Del mismo modo podemos asignar un valor a la variable a la que apunta el
puntero, de la forma:

1 int *p_entero;
2 int entero1, entero2;
3 entero1 = 2;
4 entero2 = 5;
5 p_entero = &entero1;
6 *p_entero = entero1 + entero2;

En este último código se ejecuta exactamente lo mismo que en el anterior. Pero


se debe tener en cuenta que no tiene sentido eliminar la línea 5, ya que se estaría
introduciendo el valor entero1 + entero2 en una dirección de memoria que no
conocemos, puesto que no le habríamos dado valor a p_entero.

Notación prefija: Es aquella que indica q el operador aparece antes q su


operando.
Ej. Contador+1

Operador de dirección (&):


El operador de indirección & se utiliza para referirse a la dirección de una variable,
así el código siguiente:
/* Reservamos 4 bytes para almacenar una dirección de memoria */
int *p_entero;

/* Reservamos 4 bytes para almacenar un entero */


int entero;

/* Escribimos en la variable p_entero la dirección de entero */


p_entero = &entero;

Es totalmente correcto ya que, aunque la variable entero no tenga ningún valor


asignado todavía, lo que estamos haciendo es escribir en la variable p_entero la
dirección de memoria donde se almacena la variable entero.

14. a) Investigue porque un puntero ocupa 2 bytes?


Al definir variables o arrays hemos visto que el tipo (type) modifica la cantidad
de bytes que se usaran para almacenar tales elementos, asi un elemento de
tipo 'char' utiliza 1 byte, y un entero 2 o 4. No ocurre lo mismo con los punteros,
el tipo no influye en la cantidad de bytes asociados al puntero, pues todas las
direcciones de memoria se pueden expresar con solo 2 bytes (o 4 si es una
dirección de otro segmento)

b) Donde radica la importancia de la utilización de punteros


La importancia radica en que la programación de máquinas de Von Newmann
tal como las conocemos hoy, gira en torno al concepto de dirección de
memoria.
c) Cuales son las restricciones del uso de los punteros

En la siguiente tabla se muestran algunas restricciones

Declaraciones C C++
No permitido. Mensaje de error: "Objeto de
Objeto de tipo
sizeof desconocido."
void
Ej:
El compilador no esta en condiciones de determinar el monto de
void x;
memoria que requiere el objeto.
Retorno de un
función Significa que la función no retorna ningún valor
Ej:
void func () { ('tipo pseudodevuelto').
......................
Puntero a objeto de tipo
Puntero a void Un puntero a void es tratado
desconocido.
Ej: como un puntero a char.
Requiere conversion explicita a
void* p; Conversion implicita.
otro tipo antes de ser utilizado.

15. Averigüe el significado de una función sobrecargada y de 1 ejemplo en código


C/C++.

La sobrecarga de funciones, es un mecanismo C++ que permite asignar el


mismo nombre a funciones distintas. Para el compilador estas funciones no tienen
nada en común a excepción del identificador, por lo que se trata en realidad de un
recurso semántico del lenguaje que solo tiene sentido cuando se asigna el mismo
nombre a funciones que realizan tareas similares en objetos diferentes.

Ej:

#include <iostream>
using namespace std;

class Vector {
public: int x, y;
bool operator== (Vector& v) {
return ((v.x == x) && (v.y == y))? true: false;
}
bool operator!= (Vector& v) {
return !(*this == v);
}
bool operator> (Vector& v) {
return ((x * x + y * y) > (v.x * v.x + v.y * v.y))? true: false;
}
bool operator< (Vector& v) {
return ((x * x + y * y) < (v.x * v.x + v.y * v.y))? true: false;
}
bool operator>= (Vector& v) {
return ((x * x + y * y) >= (v.x * v.x + v.y * v.y))? true: false;
}
bool operator<= (Vector& v) {
return ((x * x + y * y) <= (v.x * v.x + v.y * v.y))? true: false;
}
};

void main() { // ===============


Vector v1 = {2, 1}, v2 = {3, 0};
if ( v1 == v2 ) cout << "Iguales" << endl;
if ( v1 != v2 ) cout << "Distintos" << endl;
if ( v1 > v2 ) cout << "v1 mayor que v2" << endl;
if ( v1 < v2 ) cout << "v1 menor que v2" << endl;
if ( v1 >= v2 ) cout << "v1 mayor o igual que v2" << endl;
if ( v1 <= v2 ) cout << "v1 menor o igual que v2" << endl;
}

16. Realizar el prototipo y la función de un proceso que tome por parámetros como
valor dos números a y b, obtenga la potencia c=ab y retorne c. En C/C++.

int potencia (int a, int b)


{int i; long c=1;
for (i=1; i<=b; i++)
{c=a*c;
}
return c;
}
CONCLUSION

En la elaboración de este trabajo se pudo llegar a concluir que lo primordial en el


momento de ejecutar programas, son las funciones ya que en ellas es donde se
estructura un programa.
BIBLIOGRAFIA

- LIBROS

1. Modulo Curso Introducción a la Programación. LOPEZ ORTIZ, Ivan Arturo.


2005. 114 Pág.

- SITIOS WEB
1. http://www.zator.com/Cpp/E_Ce.htm
2. http://es.geocities.com/jorge_hefty/index.html
3.http://www.sc.ehu.es/sbweb/fisica/cursoJava/numerico/recursivo/intro_recursivas
.htm

Вам также может понравиться