Hemos empleado variables para almacenar números enteros, reales y cadenas de caracteres:
int float32 float64 string
En este concepto veremos otros tipos de variables que permiten almacenar un conjunto de datos en una única variable.
Un arreglo o vector en el lenguaje Go es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo.
Con un único nombre se define un arreglo y por medio de un subíndice hacemos referencia a cada elemento del mismo (componente)
El tamaño del arreglo debe definirse en forma explícita y no puede variar durante su ejecución.
Se desea guardar los sueldos de 5 operarios.
Según lo conocido deberíamos definir 5 variables si queremos tener en un cierto momento los 5 sueldos almacenados en memoria.
Empleando un arreglo solo se requiere definir un único nombre y accedemos a cada elemento por medio del subíndice.
package main import "fmt" func main() { var sueldos [5]int for f := 0; f < 5; f++ { fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[f]) } fmt.Println("Listado de sueldos.") fmt.Println(sueldos) }
Para la declaración del array le agregamos corchetes abiertos y cerrados con un valor que indica la cantidad de sueldos que podrá almacenar (en este ejemplo reservamos espacio para cinco sueldos):
var sueldos [5]int
Para cargar cada componente del arreglo debemos indicar entre corchetes que elemento estamos accediendo:
for f := 0; f < 5; f++ { fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[f]) }
La estructura de programación que más se adapta para cargar en forma completa las componentes de un arreglo es un for, ya que sabemos de antemano la cantidad de valores a cargar, de todos modos no es obligatorio tener que utilizar un for.
Cuando f vale cero estamos accediendo a la primer componente del arreglo (en nuestro caso sería):
fmt.Scan(&sueldos[0])
Lo mas común es utilizar una estructura repetitiva for para recorrer cada componente del arreglo.
Utilizar el for nos reduce la cantidad de código, si no utilizo un for debería en forma secuencial implementar el siguiente código:
fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[0]) fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[1]) fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[2]) fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[3]) fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[4])
La impresión en la consola de nuestra pantalla podemos hacerla en forma directa llamando a la función Print o Println del paquete fmt.:
fmt.Println(sueldos)
Pero en otras situaciones tendremos que acceder elementos a elemento para procesarlo al vector, imaginemos si se necesita mostrar las componentes del arreglo sueldo uno en cada línea de la pantalla, el código para la impresión será:
package main import "fmt" func main() { var sueldos [5]int for f:=0; f<5; f++ { fmt.Print("Ingrese valor del sueldo:") fmt.Scan(&sueldos[f]) } fmt.Println("Listado de sueldos.") //fmt.Println(sueldos) for f := 0; f < 5; f++ { fmt.Println(sueldos[f]) } }
Tener en cuenta que la línea:
//fmt.Println(sueldos)
Transforma en comentario dicha instrucción y el compilador no la tiene en cuenta (no existe para el compilador y nos sirva a los programadores para disponer comentarios en nuestro programa)
Ahora para resolver el programa mediante un ciclo for accedemos elemento a elemento y lo mostramos uno por línea por pantalla.
Definir un arreglo de 5 componentes de tipo float32 que representen las alturas de 5 personas.
Obtener el promedio de las mismas. Contar cuántas personas son más altas que el promedio y cuántas más bajas.
package main import "fmt" func main() { var alturas [5]float32 var suma float32 for f := 0; f < 5; f++ { fmt.Print("Ingrese la altura de la persona:") fmt.Scan(&alturas[f]) suma = suma + alturas[f] } promedio := suma / 5 fmt.Println("Promedio de las alturas:", promedio) may := 0 men := 0 for f := 0; f < 5; f++ { if alturas[f] > promedio { may++ } else { if alturas[f] < promedio { men++ } } } fmt.Println("Cantidad de personas mayores al promedio:", may) fmt.Println("Cantidad de personas menores al promedio:", men) }
Si ejecutamos el programa tenemos un resultado similar a esto:
Definimos un arreglo donde almacenaremos las cinco alturas con valores reales (con parte decimal):
var alturas [5]float32
En la primer parte del algoritmo procedemos a ingresar por teclado las 5 alturas de personas y acumular sus valores:
for f := 0; f < 5; f++ { fmt.Print("Ingrese la altura de la persona:") fmt.Scan(&alturas[f]) suma = suma + alturas[f] }
Calculamos y mostramos el promedio de las alturas:
promedio := suma / 5 fmt.Println("Promedio de las alturas:", promedio)
Por último comparamos cada componente del arreglo con la variable promedio, si el valor almacenado supera al promedio incrementamos un contador en caso que sea menor al promedio incrementamos otro contador:
may := 0 men := 0 for f := 0; f < 5; f++ { if alturas[f] > promedio { may++ } else { if alturas[f] < promedio { men++ } } } fmt.Println("Cantidad de personas mayores al promedio:", may) fmt.Println("Cantidad de personas menores al promedio:", men)
En este problema podemos observar una ventaja de tener almacenadas todas las alturas de las personas. Si no conociéramos los arreglos tenemos que cargar otra vez las alturas por teclado para compararlas con el promedio.
Mientras el programa está en ejecución tenemos el arreglo alturas a nuestra disposición. Es importante tener en cuenta que cuando finaliza la ejecución del programa se pierde el contenido de todas las variables (simples y de tipo arreglo)
Una empresa tiene dos turnos (mañana y tarde) en los que trabajan 8 empleados (4 por la mañana y 4 por la tarde)
Confeccionar un programa que permita almacenar los sueldos de los empleados agrupados por turno (definir los dos vectores con componentes de tipo float)
Imprimir los gastos en sueldos de cada turno.
package main import "fmt" func main() { var turnoMan [4]float32 var turnoTar [4]float32 var total1 float32 var total2 float32 fmt.Println("Sueldos de empleados del turno de la mañana.") for f := 0; f < len(turnoMan); f++ { fmt.Print("Ingrese sueldo:") fmt.Scan(&turnoMan[f]) total1 = total1 + turnoMan[f] } fmt.Println("Sueldos de empleados del turno de la tarde.") for f := 0; f < len(turnoTar); f++ { fmt.Print("Ingrese sueldo:") fmt.Scan(&turnoTar[f]) total2 = total2 + turnoTar[f] } fmt.Println("Total de gastos del turno de la mañana:", total1) fmt.Println("Total de gastos del turno de la tarde:", total2) }
Definimos dos variables de tipo arreglo donde almacenaremos los sueldos de los empleados de cada turno:
var turnoMan [4]float32 var turnoTar [4]float32
Hay un comando en el lenguaje Go que nos retorna el tamaño del arreglo: len
Si tenemos que variar el tamaño del arreglo solo deberemos hacer un cambio donde se lo define al arreglo ya que en el resto podemos acceder al valor devuelto por len.
Mediante dos estructuras repetitivas procedemos a cargar cada arreglo y acumular los respectivos sueldos por turno:
fmt.Println("Sueldos de empleados del turno de la mañana.") for f := 0; f < len(turnoMan); f++ { fmt.Print("Ingrese sueldo:") fmt.Scan(&turnoMan[f]) total1 = total1 + turnoMan[f] } fmt.Println("Sueldos de empleados del turno de la tarde.") for f := 0; f < len(turnoTar); f++ { fmt.Print("Ingrese sueldo:") fmt.Scan(&turnoTar[f]) total2 = total2 + turnoTar[f] }
Mostramos los valores acumulados:
fmt.Println("Total de gastos del turno de la mañana:", total1) fmt.Println("Total de gastos del turno de la tarde:", total2)
ejercicio068.go package main import "fmt" func main() { var vec [8]int sumaTotal := 0 sumaMayor36 := 0 cant := 0 for f := 0; f < len(vec); f++ { fmt.Print("Ingrese elemento:") fmt.Scan(&vec[f]) sumaTotal = sumaTotal + vec[f] if vec[f] > 50 { cant++ } if vec[f] > 36 { sumaMayor36 = sumaMayor36 + vec[f] } } fmt.Println("La suma de los 8 elementos es:", sumaTotal) fmt.Println("La suma de los elementos mayores a 36:", sumaTotal) fmt.Println("La cantidad de valores mayores a 50 es:", cant) } ejercicio069.go package main import "fmt" func main() { var vec1 [4]int var vec2 [4]int var vecSuma[4]int fmt.Println("Carga del primer vector.") for f := 0; f < len(vec1); f++ { fmt.Print("Ingrese elemento:") fmt.Scan(&vec1[f]) } fmt.Println("Carga del segundo vector.") for f := 0; f < len(vec2); f++ { fmt.Print("Ingrese elemento:") fmt.Scan(&vec2[f]) } for f := 0; f < len(vecSuma); f++ { vecSuma[f] = vec1[f] + vec2[f] } fmt.Println("Vector resultante") fmt.Println(vecSuma) } ejercicio070.go package main import "fmt" func main() { var cursoa [5]int var cursob [5]int suma1 := 0 fmt.Println("Carga de notas del curso A") for f := 0; f < len(cursoa); f++ { fmt.Print("Ingrese nota:") fmt.Scan(&cursoa[f]) suma1 = suma1 + cursoa[f] } suma2 := 0 fmt.Println("Carga de notas del curso B") for f := 0; f < len(cursob); f++ { fmt.Print("Ingrese nota:") fmt.Scan(&cursob[f]) suma2 = suma2 + cursob[f] } promedioa := suma1 / 5 promediob := suma2 / 5 fmt.Println("Promedio curso A:", promedioa) fmt.Println("Promedio curso B:", promediob) if promedioa>promediob { fmt.Println("El curso A tiene un promedio mayor.") } else { fmt.Println("El curso B tiene un promedio mayor.") } } ejercicio071.go package main import "fmt" func main() { var vec [10]int for f := 0; f < len(vec); f++ { fmt.Print("Ingrese elemento:") fmt.Scan(&vec[f]) } orden := 1 for f := 0; f < len(vec) - 1; f++ { if vec[f+1] < vec[f] { orden=0; } } if orden==1 { fmt.Print("Esta ordenado de menor a mayor") } else { fmt.Print("No esta ordenado de menor a mayor") } }