(1 ponto) Faça um programa que recebe números inteiros digitados pelo usuário até que \mathbf{s}, sem aspas, seja digitado e imprima o menor deles.
Proibido o uso das funções min, sorted, sort e de estruturas iteráveis (por enquanto aprendemos apenas lista e string).
EXEMPLO
Entrada Saída
1 -10
-1
-10
10
s

Passo 1

O que o problema pede e o que é fornecido:
  • O programa deve receber entradas do usuário uma por vez.
  • Cada entrada é ou um número inteiro (por exemplo 1, -10, 42) ou a letra s (literal, sem aspas).
  • A leitura termina quando o usuário digita s.
  • Depois de terminar, o programa deve imprimir o menor dos números inteiros que foram digitados.
  • Proibições: não usar as funções \text{min}, \text{sorted}, \text{sort} e não usar estruturas iteráveis além de lista e string (neste problema não precisamos de listas).
  • Considerar que o enunciado está bem-formulado (ou seja, haverá pelo menos uma linha com inteiro antes de s, mas o programa que eu vou propor lida também com o caso em que nenhum inteiro foi fornecido).

Passo 2

Ideia geral (explicada passo a passo, sem código ainda):
  • Não vamos armazenar todos os números; vamos guardar apenas o menor visto até agora. Isso economiza memória e é simples.
  • Precisamos de uma variável que represente “o menor até agora”. Antes de ler qualquer número essa variável não tem valor definido — podemos representá-la como “vazia” (usar \text{None} em Python) e, ao ler o primeiro inteiro, inicializá-la com esse inteiro.
  • Para cada número inteiro n lido, fazemos a comparação: se \text{menor} está vazia (primeiro número) ou se n < \text{menor}, então atualizamos \text{menor} \leftarrow n.
  • Quando o usuário digitar s, interrompemos a leitura e imprimimos o valor guardado em \text{menor}.
  • Este método evita funções proibidas e não usa estruturas iteráveis extras.

Passo 3

Detalhando as operações que o programa precisa fazer (controle de fluxo e conversão):
  • Repetição: usar um laço que repete até encontrar o sentinela s. Em Python usamos um laço infinito com while True: e break quando receber s.
  • Leitura: usar input() para obter a linha como string e strip() para remover espaços em branco.
  • Checagem do sentinela: comparar a string lida com 's'.
  • Conversão: se não for s, converter a string lida para inteiro com int(s). Assumimos entradas válidas (inteiros) conforme o enunciado.
  • Atualização do mínimo: comparar o inteiro lido com o valor atual de \text{menor} e atualizar quando necessário.
  • Impressão: depois do laço, imprimir \text{menor} (se existir).

Passo 4

Por que inicializar com \text{None} é uma boa escolha:
  • Alternativa 1 seria inicializar com um número muito grande (por exemplo 10^{18}), mas isso é frágil e dependente de limites.
  • Alternativa 2 (usar uma flag booleana primeiro = True) funciona também, mas usar \text{None} é mais idiomático e claro: significa “ainda não temos nenhum valor”.
  • Assim, a atualização fica simples: se \text{menor} é \text{None} ou se n < \text{menor}, então \text{menor} \leftarrow n.

Passo 5

Passo a passo do algoritmo aplicado ao exemplo dado (para fixar a ideia):
Entradas (cada linha): 1, -1, -10, 10, s.
  • Antes de começar: \text{menor} = \text{None}.
  • 1: como \text{menor} = \text{None}, faz \text{menor} \leftarrow 1. Agora \text{menor} = 1.
  • -1: verifica se -1 < 1. Verdadeiro, então \text{menor} \leftarrow -1. Agora \text{menor} = -1.
  • -10: verifica se -10 < -1. Verdadeiro, então \text{menor} \leftarrow -10. Agora \text{menor} = -10.
  • 10: verifica se 10 < -10. Falso, não atualiza. Continua \text{menor} = -10.
  • s: para o laço e imprime \text{menor}, que é -10. Isso coincide com o exemplo.

Passo 6

Observações finais e boas práticas:
  • O programa proposto lida com espaços em branco porque usamos strip() na entrada.
  • Caso nenhuma linha com inteiro seja fornecida (usuário digita s no começo), o programa não imprime nada — isso evita imprimir algum valor inválido. Como o enunciado foi considerado bem-formulado, normalmente haverá pelo menos um inteiro antes de s, mas esse comportamento é seguro.
  • Não usamos \text{min}, \text{sorted} nem \text{sort}, nem coleções extras: apenas variáveis simples e comparações.

Resposta

menor = None
while True:
    s = input().strip()
    if s == 's':
        break
    n = int(s)
    if menor is None or n < menor:
        menor = n
if menor is not None:
    print(menor)

Exercícios relacionados