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

ESCUELA DE INGENIERA

ASIGNATURA:

FUNDAMENTOS DE PROGRAMACIN
GUA DE PRCTICA 8 PROCEDIMIENTOS Y ARCHIVOS

Profesores Responsables: CHECA FERNNDEZ, ROCO (Coordinadora) GARCA VILCAPOMA, GLADYS SNCHEZ TENORIO, VIVIANA VILCA NEYRA, GUSTAVO

Este material de apoyo acadmico se hace para uso exclusivo de los alumnos de la universidad de lima y en concordancia con lo dispuesto por la legislacin sobre Los derechos de autor: decreto legislativo 822

NOVIEMBRE - 2010

GUA DE PRCTICA 8 PROCEDIMIENTOS Y ARCHIVOS OBJETIVOS:

Definir y utilizar Procedimientos en Visual Basic Conocer y diferenciar los pasos de parmetros por valor y por referencia Conocer el mbito de las variables: locales y globales Elaborar programas que utilicen funciones y/o procedimientos. Definir y utilizar archivos de acceso secuencial en Visual Basic Escribir y leer datos de un archivo de acceso secuencial.

CONCEPTOS: PROCEDIMIENTO Es un mecanismo similar a la funcin debido a tambin recibe como entrada un valor x o un grupo de valores x1,x2,..etc. La diferencia radica en que no produce un valor y de salida sino que realiza un proceso de transformacin con los valores de entrada x. Ejemplo1: Definicin del procedimiento Este procedimiento permite asignar valores a un vector A() de valores reales, y de tamao n y por referencia se asignan los valores al vector respectivo en la llamada al procedimiento. Sub LlenaVectorReal(ByRef A() As single, ByVal n As Integer) Dim i as Integer For i=1 to n A(i) = val(InputBox(Ing. Valor :)) Next End Sub Este procedimiento permite asignar mostrar un vector A() de valores reales, y de tamao n en una lista Sub MuestraVectorReal(ByRef A() As single, ByVal n As Integer) Dim i as Integer For i = 1 to n Lst.Items.Add( A(i) ) Next End Sub - Componentes del procedimiento: o Nombre: LlenaVectorReal o Parmetros A() y n. Llamada al procedimiento Consiste simplemente en el nombre del procedimiento y los valores (o variables) que en dicha llamada tendrn los parmetros. La llamada se har en el punto del programa donde se requiera la transformacin de los parmetros. Pesos() Dim Pesos(20) As Single, Tallas(20) As Single N = Val (InputBox (Ing. Numero de elementos:)) A()

.
Pesos() toma el lugar de A() en el punto de llamada

LlenaVectorReal (Pesos, N ) MostrarVectorReal (Pesos,N) LeeVectorReal( Tallas,N ) MostrarVectorReal (Tallas,N) Muestra el vector Tallas
Parmetros Formales

Muestra el vector Pesos

Sub LlenaVectorReal ( ByRef A( ) As Single , ByVal n As Integer ) Dim i As Integer For i=1 to n 2 A(i) = val(InputBox(Ing. Valor :)) Next End Sub
3 Cuando se hace la llamada al procedimiento LlenaVectorReal(), el valor N se asignan al parmetro n (paso por valor). Se ejecuta el procedimiento y se asignan valores al vector A(),, que viene a ser el alias del vector Pesos() en la llamada (Paso por Referencia). Por tanto todo lo que le suceda a A(), le sucede a Pesos().

Sub Button1_click ()
LlenaVectorReal(Pesos , N)

End Sub

Ejemplo2: Elaborar un procedimiento para ordenar de menor a mayor un vector de valores reales . sub OrdenaAscendente (ByRef A() As Single, ByVal n As Integer) Dim j, k As Integer Dim Aux as Single For k= 1 to n-1 For j = 1 to n-k If A(j) > A(j+1) then Aux = A(j) A(j) = A(j+1) A(j+1) = Aux End if next Next End Sub

Llamada al Procedimiento OrdenaAscendente(Pesos,N) OrdenaAscendente(Tallas,N)

PROBLEMAS DESARROLLADOS EN EL AULA Problema 1: Elaborar un programa que permita registrar lo datos (nombre y nota) de N alumnos (mximo 20) en dos vectores paralelos, para luego ordenarlos segn la nota descendentemente. Finalmente mostrar todos los datos. Usar procedimientos. Versin 1 '1. Asignar el # de alumnos a la variable N (mximo 20) '2. LLamar al procedimiento INGRESAR '3. LLamar al procedimiento ORDENAR '4. LLamar al procedimientos LISTAR Versin 2 Public Class Form1
Private Sub btnEjecutar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEjecutar.Click

Dim N, NOTAS(20) As Integer Dim Nombres(20) As String '1. Asignar el # de alumnos a la variable N (Mximo 20) Do N = Val(InputBox("# de alumnos", "Proceso de notas")) Loop Until N >= 1 And N <= 20 '2. LLamar al procedimiento INGRESAR INGRESAR(Nombres, NOTAS, N) '3. LLamar al procedimiento ORDENAR ORDENAR(Nombres, NOTAS, N) '4. LLamar al procedimientos LISTAR LISTAR(Nombres, NOTAS, N) End Sub Sub INGRESAR(ByRef Vector1() As String, ByRef Vector2() As Integer, ByVal num As Integer) Dim i As Integer For i = 1 To num Vector1(i) = InputBox("Ingrese Nombres: ", "Alumno " & i) Vector2(i) = Val(InputBox("Ingrese Nota Final del curso: ", "Alumno " & i)) Next End Sub Sub ORDENAR(ByRef Vector1() As String, ByRef Vector2() As Integer, ByVal num As Integer) Dim i, j, auxvector2 As Integer Puede usar tambin el algoritmo de la burbuja Dim sw As Boolean mostrado en la guia 8 Dim auxVector1 As String i = num - 1 Do sw = True For j = 1 To i If Vector2(j) < Vector2(j + 1) Then 'intercambio vector 2 auxvector2 = Vector2(j) Vector2(j) = Vector2(j + 1) Vector2(j + 1) = auxvector2 'intercambio vector 1 auxVector1 = Vector1(j) Vector1(j) = Vector1(j + 1) Vector1(j + 1) = auxVector1 sw = False End If Next i=i-1 Loop Until sw = True End Sub

Sub LISTAR(ByRef Vector1() As String, ByRef Vector2() As Integer, ByVal num As Integer) Dim i As Integer For i = 1 To num ListBox1.Items.Add(Vector1(i)) ListBox2.Items.Add(Vector2(i)) Next End Sub End Class

Problema 2: Trabajar una matriz de orden mximo 10. Realizar las siguientes operaciones: a) Asignar valores a la matriz b) Calcular y mostrar la suma de los elementos de la diagonal principal. c) Calcular y mostrar la suma de los elementos pares de la matriz d) Determinar y mostrar si la matriz es triangular superior o no. e) Mostrar los valores de la matriz Usar procedimientos y funciones segn convenga. Versin1 '1. Asignar a N el orden de la matriz '2. Ingresar los datos enteros a la matriz (proc) '3. Calcular y mostrar la suma de los elementos de la diagonal principal(func) '4. Calcular y mostrar la suma de los elementos pares de la matriz(func) '5. Determinar y mostrar si la matriz es triangular superior o no(func) '6. Mostrar los valores de la matriz (proc) Public Class Form1
Private Sub btnEjecutar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEjecutar.Click

Dim N, M(10, 10) As Integer Dim r1, r2 As Integer Dim r3 As Boolean '1. Asignar a N el orden de la matriz Do N = Val(InputBox("Orden de la matriz cuadrada:", "2-10")) Loop Until N >= 2 And N <= 10 '2. Ingresar los datos enteros a la matriz (proc) LlenaMatriz(M, N) '3. Calcular y mostrar la suma de los elementos de la diagonal principal(func) r1 = sumaDiagonal(M, N) MessageBox.Show("Suma de la diagonal es:" & r1) '4. Calcular y mostrar la suma de los elementos pares de la matriz(func) r2 = sumaPares(M, N) MessageBox.Show("Suma de las casillas pares:" & r2) '5. Determinar y mostrar si la matriz es triangular superior o no(func) r3 = TriangularSuperior(M, N) MessageBox.Show("Triangular superior ?: " & r3) '6. Mostrar los valores de la matriz (proc) MuestraMatriz(M, N) End Sub Sub LlenaMatriz(ByRef A(,) As Integer, ByVal n As Integer) Dim i, j As Integer For i = 1 To n For j = 1 To n A(i, j) = Val(InputBox("Ingrese valor entero", "Posicion " & i & "," & j)) Next Next End Sub

Sub MuestraMatriz(ByRef A(,) As Integer, ByVal n As Integer) Dim i, j As Integer Dim cadena As String For i = 1 To n cadena = "" For j = 1 To n cadena = cadena & A(i, j) & vbTab Next ListBox1.Items.Add(cadena) Next End Sub Function sumaDiagonal(ByRef A(,) As Integer, ByVal n As Integer) As Integer Dim i, j, sd As Integer For i = 1 To n For j = 1 To n If i = j Then sd = sd + A(i, j) End If Next Next Return sd End Function Function sumaPares(ByRef A(,) As Integer, ByVal n As Integer) As Integer Dim i, j, sp As Integer For i = 1 To n For j = 1 To n If A(i, j) Mod 2 = 0 Then sp = sp + A(i, j) End If Next Next Return sp End Function Function TriangularSuperior(ByRef A(,) As Integer, ByVal n As Integer) As Boolean Dim i, j As Integer Dim TS As Boolean TS = True For i = 1 To n For j = 1 To n If (i > j) And A(i, j) <> 0 Then TS = False End If Next Next Return TS End Function End Class

CONCEPTOS: ARCHIVO Los archivos almacenan permanentemente informacin dentro de un computador. Los datos una vez almacenados pueden ser repetidamente ledos sin alterar su contenido. Un archivo de datos normalmente tiene un tamao que depende de la cantidad de datos que almacene y tiene una ruta para acceder a este dentro del sistema operativo usado. Por ejemplo para acceder a un archivo de nombre datos.txt ubicado en la raz de la unidad C: la ruta completa ser C:\datos.txt. Los archivos tienen nombres y se ubican en directorios. El nombre de un archivo debe ser nico en ese directorio o carpeta. En otras palabras, no puede haber dos archivos con el mismo nombre en el mismo directorio. Los archivos de una computadora se pueden crear, mover, modificar, aumentar, reducir y borrar. Los archivos de acceso secuencial estn formados por cadenas de caracteres separadas unas de otras por cdigos o delimitadores. Un delimitador marca el final de algn elemento como un campo, un registro o una lnea. Para leer o escribir datos primero es necesario abrirlo. Luego de efectuar las operaciones de lectura y escritura se debe cerrar el mismo. Un archivo de acceso secuencial se puede abrir en tres modalidades: Entrada (Input), Salida (Output) y Aadir (Append). La diferencia entre Output y Append radica principalmente que mientras Output siempre sobrescribe el archivo anterior, Append aade datos al final del archivo existente. FUNCIONES Y PROCEDIMIENTOS RELACIONADOS
Sub FileOpen( Numero As Integer, Ruta As String, Modo As OpenMode )

Este procedimiento permite abrir un archivo ubicado en la ruta nombre con un nmero entero que lo identificar numero en la modalidad modo, que puede ser Append si se va a escribir en el archivo o input si se va a leer del archivo.
Sub FileClose( Numero As Integer )

Este procedimiento permite cerrar un archivo identificado con numero.


Sub WriteLine ( Numero As Integer, Dato(s) As Object())

Este procedimiento permite escribir un nico dato o un conjunto de datos en un archivo identificado con numero en una lnea usando como delimitador de datos la coma (,) y el salto de lnea.
Sub Input ( Numero As Integer, Dato As Object) Este procedimiento permite leer un nico dato desde un archivo identificado con numero y asignarlo a la variable dato. Function EOF(ByVal Numero As Integer) As Boolean Esta funcin determina si se ha llegado al final de un archivo identificado con numero. Function My.Computer.FileSystem.FileExists( nombre As String ) As Boolean Esta funcin determina si existe en el directorio el archivo nombre.

Ejemplo 1: Lectura y escritura Este procedimiento permite escribir un nmero en un archivo si este no existe y leer un solo dato de un archivo si es que existe.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim numero As Integer Dim existe As Boolean 'Verificar si existe el archivo existe = My.Computer.FileSystem.FileExists("c:\ejemplo.txt") If existe Then 'Abrir archivo para lectura e identificarlo con el numero uno (1). FileOpen(1, "c:\ejemplo.txt", OpenMode.Input) 'Leer un numero del archivo identificado con uno (1). Input(1, numero) 'Mostrar el numero MessageBox.Show("El numero es " & numero) Else 'Abrir archivo para escritura e identificarlo con el numero uno (1). FileOpen(1, "c:\ejemplo.txt", OpenMode.Output) 'Preguntar un numero numero = Val(InputBox("Ingrese un un numero")) 'Escribir el numero en el archivo identificado con uno (1). WriteLine(1, numero) End If FileClose(1) End Sub

Nota: El contenido del archivo puede ser modificado para visualizar otro nmero. Ejemplo 2: Elaborar un proyecto que almacene los nombres y edades de un grupo de personas en un archivo. Adems debe permitir mostrar en listas los nombres y edades que se encuentran almacenados en el archivo. .
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Nombre As String = InputBox("Ingrese el nombre") Dim Edad As Integer = Val(InputBox("Ingrese la edad")) FileOpen(1, "c:\datos.txt", OpenMode.Append) WriteLine(1, Nombre) WriteLine(1, Edad) FileClose(1) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim Nombre As String = "", Edad As Integer ListBox1.Items.Clear() ListBox2.Items.Clear() If My.Computer.FileSystem.FileExists("c:\datos.txt") Then FileOpen(1, "c:\datos.txt", OpenMode.Input) Do Until EOF(1) Input(1, Nombre) ListBox1.Items.Add(Nombre) Input(1, Edad) ListBox2.Items.Add(Edad) Loop FileClose(1) End If End Sub End Class

Ejemplo 3: Escritura de un vector en un archivo Elaborar un proyecto que almacene un mximo N valores enteros en un vector (mximo 20). A continuacin deber grabarlos en un archivo. Adems debe permitir mostrar los valores que se encuentran almacenados en el archivo.
Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click Dim V(20), i, n As Integer 'ingresar la cantidad de enteros a cargar en el vector.Mximo 20 Do n = Val(InputBox("Cantidad de enteros", "Maximo 20")) If n < 1 Or n > 20 Then MessageBox.Show("Dato invalido", "Ingrese nuevamente", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Loop Until n >= 1 And n <= 20 'cargar el vector For i = 1 To n V(i) = Val(InputBox("Ingrese un entero", "Se almacenar en la variable V(" & i & ")")) Next 'abrir el archivo modo sobre escritura FileOpen(1, "C:\datos1.txt", OpenMode.Output) 'Grabar del vector al archivo For i = 1 To n WriteLine(1, V(i)) Next 'cerrar archivo FileClose(1) End Sub Private Sub btnLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLeer.Click 'declarar variables Dim numero As Integer ' Si el archivo existe entonces If My.Computer.FileSystem.FileExists("C:\datos1.txt") Then 'Abrir archivo para lectura e identificarlo con el numero uno (1). FileOpen(1, "C:\datos1.txt", OpenMode.Input) 'leer y mostrar hasta que sea fin de archivo Do Input(1, numero) lstnum.Items.Add(numero) Loop Until EOF(1) 'cerrar el archivo FileClose(1) End If End Sub

PROBLEMAS PROPUESTOS: Problema 1: Un cajero automtico tiene billetes de S/.100, S/.50, S/.20 y S/.10. Los clientes pueden retirar un mximo de S/.2000 y un mnimo de S/.10 por transaccin. Desarrolle una aplicacin que solicite al cliente el monto que desea retirar, y luego, usando un procedimiento, determine el nmero de cada tipo de billete que se debe entregar al cliente. Antes de invocar (llamar) al procedimiento, la aplicacin verificar que el monto del retiro cumpla con ser menor o igual que S/.2000, mayor o igual a S/.10 y mltiplo exacto de S/.10. El procedimiento deber considerar que se entregar el mayor nmero posible de billetes de mayor denominacin (ejemplo: si el monto es S/.1960, la respuesta debe ser 19 billetes de S/.100, 1 billete de S/.50, 0 billetes de S/.20 y un billete de S/.10). Problema 2: Elaborar los siguientes procedimientos y/o funciones para una matriz de valores reales (single) de m (mximo 30) filas y n columnas (mximo 40): Hacer un procedimiento que lea la matriz de m filas y n columnas. Hacer un procedimiento que muestre la matriz de m filas y n columnas en una lista. Hacer una funcin que calcule la suma de los elementos de la matriz. Hacer una funcin que calcule el mnimo y el mximo de la matriz. Problema 3: Desarrolle un programa que solicite la cantidad N (mximo 10) de valores enteros y que realice las siguientes tareas: a) Almacenar en un vector L los N valores enteros. Por ejemplo: Si N = 7 1 60 2 10 3 60 4 30 5 10 6 15 7 16 8 9 10 VECTOR L

b) Ordenar ascendentemente el vector L. Para esta tarea utilice el procedimiento OrdenarVector que reciba como parmetros el vector L, y el nmero de elementos a ordenar. 1 10 2 10 3 15 4 16 5 30 6 60 7 60 8 9 10 VECTOR L

c) Efectuado el ordenamiento, trasladar los valores del vector L al vector F, eliminado los valores repetidos. 1 10 2 15 3 16 4 30 5 60 6 7 8 9 10

VECTOR F d) Grabar los valores del vector F en el archivo c:\valores.txt.

Problema 04: Elaborar un proyecto que permita ingresar y grabar en un archivo de acceso secuencial el nombre y telfono contenidos en vectores paralelos de hasta 15 elementos. Luego al leer los datos del archivo deber copiarlos a los vectores y ordenar la lista telefnica en orden alfabtico y mostrar ambos en listas. Problema 05: Elabore un programa para llenar una matriz cuadrada de orden N (mximo 10) con secuencias numricas. Por ejemplo, para una matriz cuadrada de orden N = 7 el contenido sera el siguiente: Fila 1: 1 Fila 2: 1 2 Fila 3: 1 2 3 Fila 4: 1 2 3 4 Fila 5: 1 2 3 4 5 Fila 6: 1 2 3 4 5 6 Fila 7: 1 2 3 4 5 6 7 El programa deber realizar las siguientes tareas: a) Solicitar N (orden de la matriz cuadrada). b) Llenar la matriz cuadrada de orden N con las correspondientes, usando el procedimiento LLenarMatriz. secuencias numricas

c) Mostrar la matriz usando el procedimiento MostrarMatriz que tenga como parmetros la matriz y el orden de la matriz. d) Grabar en el archivo c:\examen.txt la suma de la primera columna de la matriz. e) Leer y mostrar el contenido de c:\examen.txt.

DEBE RECORDAR QUE: PASO DE PARMETROS POR VALOR Y POR REFERENCIA En la llamada con paso de parmetros por valor: - El valor de los argumentos se copian en los parmetros formales. Estos parmetros formales funcionan como variables locales. - Los argumentos pueden ser variables o valores. - La seccin del programa que llama comunica un valor a la funcin o procedimiento invocado En la llamada con paso de parmetros por referencia: - Se utiliza para que la funcin o procedimiento comunique valor a la seccin del programa que invoco. Por lo que tambin se le llama parmetro de salida o de entrada o salida - El valor de un parmetro por referencia puede ser ledo y modificado dentro de la funcin o procedimiento y esta modificacin queda reflejada en el argumento o parmetro actual. - El parmetro actual debe ser una variable, nunca una expresin. - El identificador del parmetro formal es el alias del identificador del argumento o parmetro actual. Ambos identificadores hacen referencia a la misma posicin de memoria. Por ello todos los cambios en el parmetro formal se reflejaran en el parmetro actual.

10

ACERCA DE LAS MATRICES: Una matriz cuadrada tiene el nmero de filas igual al nmero de columnas Los elementos a(1,1), a(2,2), a(3,3), ... a(n,n) de una matriz cuadrada constituyen su diagonal principal Una matriz cuadrada tal que: a(1,1) = a(2,2) = a(3,3) = .... = a(n,n) = 1 y todos los dems elementos son cero, es una matriz unidad. Una matriz diagonal es aquella en que los elementos que no estn en la diagonal principal son ceros. Una matriz cuyos elementos por encima o por debajo de la diagonal principal son todos ceros es matriz triangular. Si todos los ceros estn por encima de la diagonal principal entonces es una matriz inferior y si todos los ceros estn por debajo de la diagonal principal es una matriz superior. Una matriz cuadrada es simtrica si: aij = aji. Es decir si los elementos situados a igual distancia de su diagonal principal son iguales.

11

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