![Page 1: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/1.jpg)
Paso de Vectores como Parámetros
Prof. Judith Barrios AlbornozDepartamento de Computación
Escuela de Ingeniería de SistemasFacultad de Ingeniería
Universidad de Los Andes
Semestre A_2013
Este material toma como base el curso original Prof. Narciso. Año 2000- 2006
![Page 2: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/2.jpg)
Paso de vectores como parámetrosUn vector completo se puede pasar como
parámetro actual a una función :
se especifica únicamente su nombre, sin corchetes ni subíndices
char caracteres[80] = “esta cadena es constante”;……F1(caracteres, longitud);……
El parámetro formal debe ser definido dentro de la función, se indicará con un par de corchetes vacíos, sin definir el tamaño del vector
void F1 (char string[], int lng)
![Page 3: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/3.jpg)
Paso de vectores como parámetrosEn C/C++ los arreglos en general son
pasados como parámetros por referenciaEsto es, el nombre del arreglo es la
dirección del primer elemento del arreglo
En C/C++ un elemento cualquiera de un arreglo puede ser pasado a una función por valor o por referencia, tal y como se hace con una variable simple
![Page 4: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/4.jpg)
Ejemplo 1 de paso de vectores como parámetros
float media (int a, float x[]) /* Definición de la función*/{ /* Note que se incluyen los corchetes
vacíos */…….
}void main () { int n;
float med;float lista[100];
………med = media(n, lista); /* Esta llamada pasa como parámetros*/ /* actuales la longitud del vector y el vector*/
/* No se incluyen los corchetes*/……………..
}
![Page 5: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/5.jpg)
Ejemplo 2 de paso de vectores como parámetros
void modificarTemp(int b[], int numEltos) /* Definición de la función*/
{ /* Se incluyen los corchetes vacíos*/…….
}void main (){ int tempDiaria[24];
………modificarTemp(tempDiaria, 24); /* Esta llamada pasa como */
/* parámetros actuales nombre del */ /* vector y su longitud*/………… /* No se incluyen los corchetes*/
}
![Page 6: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/6.jpg)
Ejemplo 3 de paso de vectores como parámetros
#include <ctype.h>#include <string.h>
void F1(char string[], int lng) { int i; for (i=0; i!=lng; i++)
string[i] = toupper(string[i]);}void main () { char caracteres[80] =
“Ejemplo”; int longitud =
strlen(caracteres);
puts(caracteres); F1(caracteres, longitud); puts(caracteres);}
Entrada = EjemploSalida = EJEMPLO
Main
F1 ( ) Strlen ( )
Toupper ( )
Puts ( )
Funciones de librería
Función definida por el
Programador
![Page 7: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/7.jpg)
Ejemplo 4 de paso de vectores como parámetros
/*Paso de vector y elementos individuales del vector como parámetros*/
# include <stdio.h>#define numeroEltos 5
void modificarVector(int [], int); /* Prototipo de la función*/
void modificarValor(int); /* Prototipo de la función */
void modificarReferencia(int &); /* Prototipo de la función */
void main() { int vector[numeroEltos] = {0, 1, 2, 3, 4}, j;
printf (“Los valores del vector original son: \n” ); for (j = 0; j < numeroEltos; j ++) printf (vector[j]); modificarVector(vector, numeroEltos); printf (“Los valores del vector modificado son:\n”); for (j = 0; j <= numeroEltos – 1; j ++) printf
(vector[j]);
Principal - Main
modificarReferenciamodificarValormodificarVector
![Page 8: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/8.jpg)
Ejemplo 4 de paso de vectores como parámetros - continuación
printf (“Efectos de pasar un elemento de un vector como parámetro por valor\n”);
modificarValor(vector[3]); printf (“El valor del cuarto elemento del vector es: %d\n”,
vector[3]);modificarReferencia(vector[3]);printf (“El valor del cuarto elemento del vector es: %d\n”, vector[3]);
} Principal - Main
modificarReferenciamodificarValormodificarVector
![Page 9: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/9.jpg)
Ejemplo 4 de paso de vectores como parámetros - continuación
void modificarVector (int b[], int num) { int k; for (k = 0; k <= num – 1; k ++) b[k] *= 2;}void modificarValor (int e) { e *= 2; printf (“Valor modificado del elemento = %d\n”, e);}
void modificarReferencia (int &e) { e *= 2; printf (“Valor modificado del elemento = %d\n”, e);}
Principal - Main
modificarReferenciamodificarValormodificarVector
![Page 10: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/10.jpg)
Diagrama de descomposición modular
Principal - Main
modificarReferenciamodificarValormodificarVector
![Page 11: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/11.jpg)
Ejemplo 5 de paso de vectores como parámetros
Diseñar un programa que calcule y escriba el área y la circunferencia de n círculos, los n radios se deben almacenar en el vector Radios
#include <stdio.h>#define n 100
void leerRadios(float radios[], int &numElementos)/*Parametros de salida: vector radios su numero de elementos
numElementos*/
{ int j;
printf (“¿ Cuantos radios seran introducidos ?\n”);scanf (&numElementos);for (j = 0; j < numElementos; j++) { printf (“radio %d =\n”, j+1); scanf (&radios[j]);}
}
![Page 12: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/12.jpg)
Ejemplo 5 de paso de vectores como parámetros
void AreaCirc (float radio, float &area, float &circulo)/* Parametros de entrada: radio*//* Parametros de salida: area y circulo */{ float pi = 3.14159;
area = pi * pow(radio, 2);circulo = 2 * pi * radio;
}void AreasCircs(float radios[], int numElementos, float
areas[], float cirs[]) /* Parametros de entrada: vector radios *//* Parametros de salida: vectores areas y cirs */
{ int I;
for (I = 0; I < numElementos; I++)AreaCirc(radios[I], areas[I], cirs[I]);
}
![Page 13: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/13.jpg)
Ejemplo 5 de paso de vectores como parámetros
void escribirAreasCircs (float radios[], int numElementos, float areas[],
float cirs[]) { int j;
for (j = 0; j < numElementos; j++) { printf (“Para la circunferencia de radio %d\n”, radios[j]); printf (“su area es: %d\n”, areas[j]); printf (“su circunferencia es: %d\n”, cirs[j]); }
}void main() { float R[n], A[n], C[n];
int nRadios;leerRadios(R, nRadios); AreasCircs(R, nRadios, A, C); escribirAreasCircs (R, nRadios, A, C);
}
![Page 14: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/14.jpg)
Diagrama de descomposición modular
Principal - Main
AreaCirc
escribirAreasCircsAreasCircsleerRadios
![Page 15: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/15.jpg)
Ejercicios1. Determinar la salida del siguiente programa si
el dato de entrada es el entero 4.
#include <stdio.h>
int A (int y){ y *= 2; return y;}
int B (int x){ x += 5; return x;}
void main (){ int x, x1; printf (“Introduzca un numero \n”); scanf (&x); x1 = B(x); printf (“%d\n”, x1); x1 = A(x); printf (“%d\n”, x1);}
![Page 16: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/16.jpg)
Ejercicios2. Determinar la salida del siguiente programa:
#include <stdio.h>
int reloj, num, temp;
void pascal (int num, int &suma) { int reloj; temp = 2 * num + suma; reloj = temp * suma; num++; suma += num; printf (“%d %f %d %d\n”, temp, reloj, num, suma);}
void main () { num = 1; reloj = 0; temp = 0; pascal (num, temp); printf (“%d %f %d\n”, num, reloj, temp) ; temp++; pascal (temp, num); printf (“%d %d %d\n”, num, reloj, temp);}
![Page 17: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/17.jpg)
Ejercicios 3) Diseñar un procedimiento con tres parámetros formales
reales (por referencia), a, b y c. El procedimiento debe girar los valores de los parámetros hacia
la derecha de manera que, después de la ejecución, el valor que originalmente estaba en a quede en b, el que estaba en b quede en c y el que estaba en c quede en a. Deben escribirse los números iniciales y su valor después de la rotación
Ejemplo de entrada:4.7 1.0003 7.5-12.5 6.5 2.005
Ejemplo de salida7.5 4.7 1.00032.005 -12.5 6.5
![Page 18: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/18.jpg)
Ejercicios
4) Los registros mensuales de visitantes al parque Chorros de Milla durante el año 2011 son los siguientes:
Mes Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic
#visitantes 180 300 120 150 210 250 330 510 380 230 160 320
Diseñar un programa, estructurado en funciones que realizan las siguientes tareas:
Leer y almacenar los datos en el vector VISITANTES (12) . Cada posición corresponde con un mes del año.
Calcular y escribir el promedio de visitantes durante el año 2011
Calcular y escribir los nombres de los meses con el mayor y el menor número de visitantes
![Page 19: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/19.jpg)
Paso de Arreglos bidimensionales como
Parámetros
![Page 20: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/20.jpg)
Paso de arreglos como parámetrosUn arreglo completo se puede pasar como
parámetro actual a una función :
se especifica únicamente su nombre, sin corchetes ni subíndices
int notas [40] [6]……F1(notas, filas, columnas);……
El parámetro formal debe ser definido dentro de la función, se indicará con un par de corchetes vacíos, sin definir el tamaño del vector
void F1 (int PR1[] [], int fila, int columna)
![Page 21: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/21.jpg)
Paso de vectores como parámetrosEn C los arreglos en general son pasados
como parámetros por referenciaEsto es, el nombre del arreglo es la
dirección del primer elemento del arreglo
En C un elemento cualquiera de un arreglo puede ser pasado a una función por valor o por referencia, tal y como se hace con una variable simple
![Page 22: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/22.jpg)
Ejemplo 1 de paso de Arreglos como parámetros
float PromParciales (int f, int c, int notas[] []) /* Definición de la función*/
{ /* Note que se incluyen los corchetes vacíos */…….
}void main () { int n, m;
float media;int listaPR1[40][3];
………media = PromParciales(n, m, listaPR1); /* Esta llamada pasa como parámetros actuales numero de filas y de columnas y el arreglo*/
/* No se incluyen los corchetes*/……………..
}
![Page 23: Vectores Paso de Vectores como Parámetros Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería](https://reader035.vdocumento.com/reader035/viewer/2022070416/5665b42a1a28abb57c8fb2fe/html5/thumbnails/23.jpg)
Ejercicio1. Definir una subprograma que permite leer un arreglo
bidimensional NotasParciales compuesto por las 4 notas parciales de los estudiantes de PR1 sección 01.
2. Definir una subprograma para crear un arreglo unidimensional con las NotasDefinitivas de los alumnos, las cuales son el promedio de los 4 parciales almacenados en el arreglo NotasParciales .
3. Definir una subprograma para ordenar el arreglo NotasDefinitivas en orden descendente, considerando que cada vez que cambia cambia de lugar un elemento del arreglo NotasDefinitivas, debe cambiar de lugar toda una fila del arreglo NotasParciales. Esto considerando que ambos arreglos son tratados como paralelos.
4. Definir una subprograma que permita crear un arreglo con los nombres de los estudiantes de PR1 – arreglo de caracteres, el cual se corresponde con las notas parciales y posteriormente con las notas definitivas. Este es igualmente un arreglo paralelo con NotasParciales y NotasDefinitivas.