Professional Documents
Culture Documents
Lenguaje de programación I
Autor:
Jhonatan González
C.I: 25891373
La función puede invocarse, o llamarse, desde cualquier número de partes del programa.
Los valores que se pasan a la función son los argumentos, cuyos tipos deben ser
compatibles con los tipos de parámetro de la definición de función.
int main()
{
int i = sum(10, 32);
int j = sum(i, 66);
cout << "The value of j is" << j << endl; // 108
}
Si quisieramos que una función trabaje con la variable original y no con una copia
podríamos indicarle a la función que reciba el parametro como una referencia, veamos un
ejemplo:
//Paso por referencia
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void elevarCuadrado (int &); //prototipo de funcion que recibe una referencia a un int
int main()
{
int x = 0; //Declaracio e inicializacion en 0.
cout << "Ingrese x para elevarlo al cuadrado" << endl;
cin >> x;
cout << "antes de elevarse es " << x <<endl;
elevarCuadrado(x); //Notar que la llamada no es diferente a un paso por valor.
cout << "x despues de elevarse es " << x << endl;//muestra el valor modificado por la
funcion
return 0;
}
void elevarCuadrado (int &y ) //funcion que no devuelve nada (void) y recibe una
referencia a un int en este caso (x)
{
y = y*y; //La funcion no devuelve ningun valor, pero modifica el argumento original (x)
//ya que estamos trabajando con una referencia.
}
Paso de parámetros
En C++ todos los parámetros se pasan por valor, es decir, se hace una copia de los
parámetros cuando llamamos a la función. En la llamada, antes de hacer la copia, se
chequea que los parámetros actuales (los valores o variables especificados en la llamada)
son del mismo tipo que los parámetros formales (los que declaramos en la lista de
parámetros de la declaración de la función). Si los tipos son iguales o existe una conversión
implícita la llamada puede realizarse, si no son iguales deberemos realizar conversiones
explícitas.
#include <iostream.h>
void f (int val, int& ref) {
val++;
ref++;
}
main (){
int i=1;
int j=1;
f(i.j);
cout << "i vale " << i << " y j " << j << endl;
}
El resultado de ejecutar el programa será i vale 1 y j vale 2. Esto se debe a que cuando
pasamos el parámetro val, esperamos un entero y lo que recibe la función es una copia del
valor de i (1), al incrementar val en 1 modificamos la copia y la i queda igual. Sin embargo,
el segundo parámetro es una referencia (la dirección de una variable entera), y al llamar a la
función con j lo que se copia es su dirección, luego las modificaciones de ref se producen
en la posición en la que se encuentra j. Como se ve, podemos considerar que al poner un
parámetro de tipo referencia estamos realmente pasando el parámetro por referencia.
Punteros en C/C++
Un puntero es una variable que contiene la dirección de memoria de otra variable. Los
punteros permiten código más compacto y eficiente; utilizándolos en forma ordenada dan
gran flexibilidad a la programación.
La dirección de memoria de una variable se obtiene con el operador unario &. El operador
unario * permite la des referencia de un variable puntero; es decir, permite el acceso a lo
apuntado por un puntero.
Dado el ejemplo
int x = 1, y = 2;
int *ip; /* ip es un puntero a int */
ip = &x; /* ip apunta a x */
y = *ip; /* a y se le asigna lo apuntado por ip */
*ip = *ip + 3; /* incrementa lo apuntado por ip, x */
ip = NULL; /* ip apunta a direcc. especial (nada) */
Los arrays son usados extensamente por los programadores para contener listas de datos en
la memoria, por ejemplo, los datos almacenados en un disco suelen leerse y ponerse dentro
de un array con el objetivo de facilitar la manipulación de dichos datos, ya que los datos en
memoria pueden ser modificados, clasificados, marcados para su eliminación, etc. para
luego ser reescritos al disco. Otro ejemplo podría ser el de un menú de opciones que se
desplegarán dentro de una ventana para que el usuario pueda elegir una de éstas, en tales
casos y cuando las opciones son numerosas, solamente se ponen unas cuantas de ellas
dentro de la ventana pero se le da al usuario la oportunidad de poder subir y bajar a su
antojo para ver el resto de opciones que, aunque no se vean en la ventana, forman parte del
menú o array de opciones.
Array:
Un Array es un conjunto de datos del mismo tipo ordenados de forma lineal uno después de
otro. Los componentes de un Array se han de referenciar por medio del nombre del Array y
un índice de desplazamiento para indicar el componente deseado.
donde,
tipo se refiere al tipo de datos que contendrá el array. El tipo puede ser cualquiera
de los tipos estándar (char, int, float, etc.) o un tipo definido por el usuario. Es más,
el tipo del array puede ser de una estructura creada con: struct, union y class.
identificador se refiere al nombre que le daremos al array.
tamaño es opcional e indica el número de elementos que contendrá el array. Si un
array se declara sin tamaño, el mismo no podrá contener elemento alguno a menos
que en la declaración se emplee una lista de inicialización.
lista de inicialización es opcional y se usa para establecer valores para cada uno de
los componentes del array. Si el array es declarado con un tamaño específico, el
número de valores inicializados no podrá ser mayor a dicho tamaño.
Ejemplos:
int intA[5];
long longA[5] = { 1, 2, 3, 4, 5 };
char charA[3] = { 'a', 'b', 'c' };
Una estructura es un tipo de dato compuesto que permite almacenar un conjunto de datos
de diferente tipo. Los datos que contiene una estructura pueden ser de tipo simple
(caracteres, números enteros o de coma flotante etc.) o a su vez de tipo compuesto
(vectores,estructuras,listas,etc.).
A cada uno de los datos o elementos almacenados dentro de una estructura se les
denomina miembros
de esa estructura y éstos pertenecerán a un tipo de dato determinado.
Recordemos que una estructura define un tipo de dato, no una variable, lo que significa que
no existe reserva de memoria cuando el compilador está analizando la estructura.
Posteriormente habrá que declarar variables del tipo definido por la estructura para poder
almacenar y manipular datos.
struct {
long_int num_tarjeta;
char tipo_cuenta;
char nombre [80];
float saldo;
} cliente1, cliente2;