> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud2-solucions/bucles/exercicios-de-contadores-acumuladores-e-flags.md).

# Exercicios de contadores, acumuladores e flags

1. Escribe un programa que calcule a cantidade de numeros introducidos por pantalla. Se o numero introducido é 0 o programa finalizara e mostrara a cantidade. Razoa por que é necesario utilizar un contador, un acumulador ou un flag e por que utilizas o tipo de bucle.

É necesario un contador para levar a conta dos números. O bucle mais axeitado e do - while por que a iteración vaise producir alomenos unha vez.

```java
import java.util.Scanner;

public class ContadorNumeros {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int contador = 0;
        int numero;
        
        System.out.println("Introduce números (0 para finalizar):");
        
        do {
            System.out.print("Número: ");
            numero = scanner.nextInt();
            if (numero != 0) {
                contador++;
            }
        } while (numero != 0);
        
        System.out.println("Cantidade de números introducidos: " + contador);
        scanner.close();
    }
}
```

2. Escribe un programa pida numeros enteiros por pantalla ata que a suma de todos sexa maior que 100. Razoa por que é necesario utilizar un contador, un acumulador ou un flag e por que utilizas o tipo de bucle.

Podese empregar un while ou un do while, un for non por que non coñecemos o numero de iteracións. Utilizamos acumulador para controlar o while e gardar a suma:

```java
import java.util.Scanner;

public class SumaHastaCien {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int acumulador = 0;
        int numero;
        
        System.out.println("Introduce números ata que a suma supere 100:");
        
        while (acumulador <= 100) {
            System.out.print("Número (suma actual: " + acumulador + "): ");
            numero = scanner.nextInt();
            acumulador += numero;
        }
        
        System.out.println("Suma final: " + acumulador);
        scanner.close();
    }
}
```

3. Escribe un programa que lea por pantalla un numero enteiro positivo e determine o número de díxitos que ten. O programa deberá controlar que o numero sexa positivo (se non non fai nada). Non está permitido o uso de Strings na resolución de este exercicio. Razoa por que é necesario utilizar un contador, un acumulador ou un flag e por que utilizas o tipo de bucle.

Empregamos un bucle while por que non coñecemos o numero de iteracións, empregamos un contador para almacenar o número de cifras

```java
import java.util.Scanner;

public class ContadorDigitos {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int contador = 0; 
        System.out.print("Introduce un número enteiro positivo: ");
        int numero = scanner.nextInt();
             
        while (numero > 0) {
            numero = numero / 10;
            contador++;
        }
            
        System.out.println("O número ten " + contador + " díxitos");
        scanner.close();
    }
}
```

4. Escribe un programa que pida un numero enteiro por pantalla. O programa vai pedir tantos números como os indicados anteriormente, e vai indicar cal é o menor, cal é o maior e cantas veces aparece o maior. Exemplo
   1. Entrada: n=7 Valores = 1, 5, 6, 6, 1, 1, 3
   2. Saída: Máximo = 6, repeticións=2. Mínimo = 1, repeticións = 3.

Razoa por que é necesario utilizar un contador, un acumulador ou un flag

Utilizamos un bucle for por que o número de iteracións e coñecido, e contadores para contar o numero de repeticións do máximo e do mínimo.

```java
import java.util.Scanner;

public class EstadisticasNumeros {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("Cantos números vas introducir? ");
        int n = scanner.nextInt();
        
        int maximo = Integer.MIN_VALUE;
        int minimo = Integer.MAX_VALUE;
        int contadorMaximo = 0;
        int contadorMinimo = 0;
        
        System.out.println("Introduce " + n + " números:");
        
        for (int i = 0; i < n; i++) {
            System.out.print("Número " + (i + 1) + ": ");
            int numero = scanner.nextInt();
            
            // Actualizar máximo
            if (numero > maximo) {
                maximo = numero;
                contadorMaximo = 1;
            } else if (numero == maximo) {
                contadorMaximo++;
            }
            
            // Actualizar mínimo
            if (numero < minimo) {
                minimo = numero;
                contadorMinimo = 1;
            } else if (numero == minimo) {
                contadorMinimo++;
            }
        }
        
        System.out.println("Máximo = " + maximo + ", repeticións = " + contadorMaximo);
        System.out.println("Mínimo = " + minimo + ", repeticións = " + contadorMinimo);
        
        scanner.close();
    }
}
```

5. Escribe un sistema de login simple para autenticación de usuarios. O sistema deberá almacenar o nome do usuario, o seu contrasinal, o numero máximo de intentos como valores que non se poden modificar, e utilizará unha variable para determinar o número máximo de intentos de login e outra para determinar se está logueado. O programa pedira ata tres veces o nome de usuario e o contrasinal, devolvendo a mensaxe correspondente. En caso de chegar a tres veces e non autenticar, mostrará a mensaxe de "Usuario bloqueado. Numero de intentos superado". Razoa por que é necesario utilizar un contador, un acumulador ou un flag

Utilizamos un bucle while por que temos duas condicións de saida: un flags para o login correcto e un contador para o máximo de intentos

```java
import java.util.Scanner;

public class SistemaLogin {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Valores fixos (non modificables)
        final String USUARIO_CORRECTO = "admin";
        final String CONTRASINAL_CORRECTO = "1234";
        final int MAX_INTENTOS = 3;
        
        // Variables de control
        int intentos = 0;
        boolean autenticado = false;
        
        System.out.println("=== SISTEMA DE LOGIN ===");
        
        while (intentos < MAX_INTENTOS && !autenticado) {
            System.out.print("Usuario: ");
            String usuario = scanner.nextLine();
            
            System.out.print("Contrasinal: ");
            String contrasinal = scanner.nextLine();
            
            if (usuario.equals(USUARIO_CORRECTO) && contrasinal.equals(CONTRASINAL_CORRECTO)) {
                autenticado = true;
                System.out.println("¡Acceso concedido! Benvido " + usuario);
            } else {
                intentos++;
                System.out.println("Credenciais incorrectas. Intentos: " + intentos + "/" + MAX_INTENTOS);
            }
        }
        
        if (!autenticado) {
            System.out.println("Usuario bloqueado. Número de intentos superado");
        }
        
        scanner.close();
    }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud2-solucions/bucles/exercicios-de-contadores-acumuladores-e-flags.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
