El for es la única estructura repetitiva que nos provee el lenguaje Go, pero ya hemos visto dos variantes en los conceptos anteriores.
Ahora veremos una tercer variante del for en la que dejamos vacía la sección de inicio del contador, la condición y la de incremento o decremento del contador.
for { [instrucciones] }
Cuando no disponemos condición en un for siempre se verifica verdadero, esto significa que el bloque de instrucciones se ejecutaría en forma infinita, pero disponemos de un comando llamado break que finaliza el for.
Mediante ejemplos veremos como utilizar un for sin argumentos.
Confeccionar un programa que permita ingresar valores enteros por teclado y los sume. Se finaliza la carga de valores al ingresar el cero.
package main import "fmt" func main() { var valor int suma := 0 for { fmt.Print("Ingrese un valor (0 para finalizar):") fmt.Scan(&valor) if valor == 0 { break; } suma = suma + valor } fmt.Print("La suma de todos los valores ingresados es:", suma) }
Hemos dispuesto un for sin argumentos:
for {
Dentro del for se ingresa un valor entero y mediante un if verificamos si es el cero para romper la ejecución del for mediante la palabra clave break (el break continua con la ejecución de la línea siguiente a la llave de finalización del for):
fmt.Print("Ingrese un valor (0 para finalizar):") fmt.Scan(&valor) if valor == 0 { break; }
Todas las veces dentro del for acumulamos el valor ingresado:
suma = suma + valor
Fuera del for recién mostramos la suma de todos los valores ingresados:
fmt.Print("La suma de todos los valores ingresados es:", suma)
Realizar la carga de los sueldos de operarios de una empresa. Mostrar el promedio de los mismos.
No se sabe de antemano cuantos sueldos se procesarán. Cuando se ingrese un sueldo con el valor cero se debe mostrar recién el promedio.
package main import "fmt" func main() { var sueldo float64 cantidad := 0 suma := 0.0 for { fmt.Print("Ingrese el sueldo del operario(0 para finalizar la carga):") fmt.Scan(&sueldo) if sueldo == 0 { break; } cantidad++ suma = suma + sueldo } promedio := suma / float64(cantidad) fmt.Print("El promedio de sueldos es:", promedio) }
Introducimos otro tipo de dato primitivo para almacenar valores con coma: float64. Variables de este tipo pueden almacenar un valor con coma con mayor precisión.
Los dos tipos de datos para almacenar valores con coma son:
float32 float64
Definimos por inferencia un contador para contar la cantidad de empleados que se cargan:
cantidad := 0
También definimos un acumulador llamado suma y si queremos definir por inferencia para permitir almacenar valores reales lo hacemos asignando el valor 0.0 (con esto se define una variable de tipo float64):
suma := 0.0
Recordemos que esta línea la podemos sustituir por la sintaxis:
var suma float64
Automáticamente se almacena un cero en la variable suma.
El for no tiene argumentos por lo que se cortará al ingresar en la variable sueldo un valor cero:
for { fmt.Print("Ingrese el sueldo del operario(0 para finalizar la carga):") fmt.Scan(&sueldo) if sueldo == 0 { break; } cantidad++ suma = suma + sueldo }
Es importante notar que cuando se ingresa un valor cero en la variable sueldo no se ejecutan las líneas:
cantidad++ suma = suma + sueldo
Fuera de la estructura repetitiva calculamos el promedio de los sueldos y lo mostramos:
promedio := suma / float64(cantidad) fmt.Print("El promedio de sueldos es:", promedio)
Estado de la cuenta 'Acreedor' si el saldo es >0. 'Deudor' si el saldo es <0. 'Nulo' si el saldo es =0.b) La suma total de los saldos acreedores.
ejercicio057.go package main import "fmt" func main() { var valor int suma := 0 for { fmt.Print("Ingrese un valor (9999 para finalizar):") fmt.Scan(&valor) if valor == 9999 { break } suma = suma + valor } fmt.Println("El valor acumulado es ", suma) if suma == 0 { fmt.Print("El valor acumulado es cero.") } else { if suma > 0 { fmt.Print("El valor acumulado es positivo.") } else { fmt.Print("El valor acumulado es negativo") } } } ejercicio058.go package main import "fmt" func main() { var cuenta int var saldo float64 var suma float64 for { fmt.Print("Ingrese numero de cuenta:") fmt.Scan(&cuenta) if cuenta < 0 { break } fmt.Print("Ingrese saldo:") fmt.Scan(&saldo) if saldo > 0 { fmt.Println("Saldo Acreedor.") suma = suma + saldo } else { if saldo < 0 { fmt.Println("Saldo Deudor.") } else { fmt.Println("Saldo Nulo.") } } } fmt.Println("Total de saldos Acreedores:", suma) }