Leia o nome completo de uma pessoa. Depois apresente o último sobrenome e a primeira letra do nome dela. Use repetição.

Passo 1

O que o enunciado pede: ler o nome completo de uma pessoa e, usando repetição, apresentar duas coisas: o último sobrenome e a primeira letra do nome dela.
Informações dadas (assumidas): o nome completo é uma sequência de caracteres (string) contendo pelo menos um nome; as palavras (nome e sobrenomes) são separadas por espaços; pode haver espaços extras no início/fim ou múltiplos espaços entre palavras.
O que devemos produzir: duas saídas — (1) o último sobrenome (a última palavra não vazia da string) e (2) a primeira letra do primeiro nome (primeira letra da primeira palavra não vazia).

Passo 2

Ideia geral (sem resolver ainda): vamos percorrer a string caractere a caractere (repetição), identificar onde começam e terminam as palavras, guardar a primeira letra da primeira palavra que encontramos e também detectar qual é a última palavra encontrada até o fim da string. No final, retornamos o último sobrenome e a primeira letra do primeiro nome.

Passo 3

Conceitos básicos que vamos usar (explicadinho, devagar e amigo):
  • String: é uma sequência de caracteres, por exemplo a cadeia “Maria Silva”. Pense nela como uma fila de letras e espaços, cada letra tem uma posição.
  • Índice: posição de um caractere na string. Vamos numerar posições de 0 até n-1, onde n é o comprimento da string.
  • Repetição (loop): vamos usar um laço que visita todos os índices i de 0 até n-1. Em cada passo do laço olhamos o caractere atual e decidimos o que fazer.
  • Estado durante o loop: guardamos três coisas (variáveis): first\_letter (primeira letra já encontrada do primeiro nome), last\_start (índice onde começou a última palavra detectada), e in\_word (booleano que diz se estamos atualmente dentro de uma palavra). Essas variáveis vão sendo atualizadas à medida que percorremos a string.

Passo 4

Descrição detalhada do algoritmo (passo a passo lógico):
  1. Remova espaços extras nas pontas? Não é necessário se usarmos o loop corretamente, mas podemos ignorar espaços iniciais até achar a primeira letra.
  2. Inicialize: first\_letter = \text{nulo}, last\_start = -1, in\_word = \text{falso}.
  3. Para cada índice i de 0 até n-1:
    • Seja c o caractere na posição i.
    • Se c não for espaço (ou seja, é uma letra):
      • Se in\_word é falso, então começamos uma nova palavra aqui: coloque in\_word = \text{verdadeiro} e last\_start = i.
      • Se first\_letter ainda é nulo, então first\_letter = c (aqui armazenamos a primeira letra do primeiro nome).
    • Se c for espaço: coloque in\_word = \text{falso} (terminamos uma palavra se estávamos dentro).
  4. Ao final do loop, a última palavra começa em last\_start. Para extrair o último sobrenome, colhemos os caracteres desde last\_start até o fim da palavra (ou seja, até o próximo espaço ou até o fim da string). Como fizemos o loop até o fim, o último sobrenome é a substring da string original começando em last\_start até o final da última palavra.
  5. Formate a saída: apresente o último sobrenome e a primeira letra (em maiúscula se desejar). Se first\_letter ainda for nulo no fim, a string tinha só espaços — trate como caso inválido (mostrar vazio ou mensagem).

Passo 5

Explicando com um exemplo concreto (para você visualizar cada atualização das variáveis): nome = " Maria Aparecida Souza "
  • Começamos com first\_letter = nulo, last\_start=-1, in\_word= falso.
  • Percorremos os dois primeiros caracteres que são espaços: nada muda.
  • Ao achar ‘M’ em alguma posição i: in\_word passa a verdadeiro, last\_start = i, e como first\_letter é nulo, definimos first\_letter = ‘M’. Continuamos até o próximo espaço; ao ver o espaço, colocamos in\_word= falso.
  • Pulamos espaços múltiplos e, ao achar ‘A’ de “Aparecida”, novo início de palavra: last\_start atualiza para essa nova posição; first\_letter já não é nulo, então não mudamos.
  • Finalmente, ao achar ‘S’ de “Souza”, last\_start atualiza para posição de ‘S’. No fim do loop, o último sobrenome é a substring começando em last\_start — ou seja “Souza”. A first\_letter continua ‘M’. Resultado: último sobrenome = “Souza”, primeira letra do nome = ‘M’.

Passo 6

Pseudocódigo bem mastigado (você poderia escrever isso num caderno durante a prova):
\begin{aligned} &\text{ler } nome \quad(\text{a string completa})\\\ &first\_letter \leftarrow \text{nulo}\\\ &last\_start \leftarrow -1\\\ &in\_word \leftarrow \text{falso}\\\ &n \leftarrow \text{comprimento de } nome\\\ &\text{para } i \text{ de } 0 \text{ até } n-1 \text{ faça:}\\\ &\quad c \leftarrow nome[i]\\\ &\quad \text{se } c \neq \text{ ' ' } \text{ então:}\\\ &\quad\quad \text{se } in\_word = \text{falso} \text{ então:}\\\ &\quad\quad\quad in\_word \leftarrow \text{verdadeiro}\\\ &\quad\quad\quad last\_start \leftarrow i\\\ &\quad\quad \text{fim se}\\\ &\quad\quad \text{se } first\_letter \text{ é nulo } \text{ então } first\_letter \leftarrow c\\\ &\quad \text{senao}\\\ &\quad\quad in\_word \leftarrow \text{falso}\\\ &\quad \text{fim se}\\\ &\text{fim para}\\\ &\text{se } last\_start = -1 \text{ então não há palavra válida}\\\ &\text{senão último\_sobrenome } \leftarrow \text{substring}(nome, last\_start, \text{até o fim da palavra})\\\ &\text{imprimir último\_sobrenome, first\_letter} \end{aligned}éçããéãããááãúéú

Passo 7

Implementação prática em Python (usa repetição explicitamente). Cole no seu editor e testa com qualquer nome. O código abaixo trata espaços múltiplos e espaços nas pontas:
def ultimo_sobrenome_e_primeira_letra(nome):
    n = len(nome)
    first_letter = None
    last_start = -1
    in_word = False

    for i in range(n):
        c = nome[i]
        if c != ' ':
            if not in_word:
                in_word = True
                last_start = i
            if first_letter is None:
                first_letter = c
        else:
            in_word = False

    if last_start == -1:
        return "", ""  # string vazia ou só espaços

    # extrair a última palavra: ir de last_start até encontrar um espaço ou fim
    j = last_start
    sobrenome_chars = []
    while j < n and nome[j] != ' ':
        sobrenome_chars.append(nome[j])
        j += 1
    ultimo_sobrenome = ''.join(sobrenome_chars)

    return ultimo_sobrenome, first_letter
Exemplo de uso:
nome = "  Maria   Aparecida Souza  "
sobrenome, primeira = ultimo_sobrenome_e_primeira_letra(nome)
print(sobrenome)  # Souza
print(primeira)   # M

Passo 8

Casos especiais e dicas rápidas (o que levar para a prova):
  • Se houver só um nome, o último sobrenome será esse mesmo nome e a primeira letra é a primeira letra dele.
  • Se quiser normalizar (maiuscula/minuscula), aplique .strip() ou .title() depois de extrair.
  • Sempre use repetição (for ou while) para satisfazer a exigência do enunciado; não use apenas funções prontas como split() se a instrução pedir explicitamente “use repetição”.
  • No caderno, explique rapidamente que você percorre a string e marca início de palavras — isso convence o corretor que você usou repetição.

Resposta

def ultimo_sobrenome_e_primeira_letra(nome):
    n = len(nome)
    first_letter = None
    last_start = -1
    in_word = False

    for i in range(n):
        c = nome[i]
        if c != ' ':
            if not in_word:
                in_word = True
                last_start = i
            if first_letter is None:
                first_letter = c
        else:
            in_word = False

    if last_start == -1:
        return "", ""

    j = last_start
    sobrenome_chars = []
    while j < n and nome[j] != ' ':
        sobrenome_chars.append(nome[j])
        j += 1
    ultimo_sobrenome = ''.join(sobrenome_chars)

    return ultimo_sobrenome, first_letter

Exercícios relacionados