Lista de Desafios de Fixação e Gabaritos (20 Capítulos)

Esta lista reúne, em formato consolidado, o mesmo “🔥 Desafio de Fixação” que já está disponível ao final de cada capítulo — não é um exercício diferente. Serve como cola rápida de gabaritos para o professor conduzir a correção em sala, ou como atividade extra para alunos que concluem as atividades principais antes do tempo previsto. Para o enunciado completo e o passo a passo de cada desafio, consulte a seção “🔥 Desafio de Fixação” dentro do respectivo capítulo.


🟢 Módulo 1: Fundamentos da Computação (Cap 01 a 04)

Capítulo 01 - Organograma em Colunas com Tabulação (\t)

  • Desafio: Utilize o caractere de tabulação \t para criar uma tabela no console com 3 colunas: ID, SETOR e RESPONSÁVEL.
  • Gabarito:
1
2
3
4
5
6
7
8
9
programa {
	funcao inicio() {
		escreva("ID\tSETOR\t\tRESPONSÁVEL\n")
		escreva("------------------------------------\n")
		escreva("01\tExpedição\tMarcos Silva\n")
		escreva("02\tAlmoxarifado\tBeatriz Lima\n")
		escreva("03\tFrotas\t\tRoberto Firmino\n")
	}
}

Capítulo 02 - Apólice de Frete Marítimo

  • Desafio: Declare variáveis para representar um despacho portuário: portoOrigem, portoDestino, conteineres (inteiro), tarifaDolar (real), tipoFrete (caracter 'C' para Carga Geral) e alfandegaLiberada (logico).
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
programa {
	funcao inicio() {
		cadeia portoOrigem = "Santos - BR", portoDestino = "Rotterdam - NL"
		inteiro conteineres = 12
		real tarifaDolar = 28500.00
		caracter tipoFrete = 'C'
		logico alfandegaLiberada = verdadeiro

		escreva("Origem: ", portoOrigem, " -> Destino: ", portoDestino, "\n")
		escreva("Contêineres: ", conteineres, " [Tipo: ", tipoFrete, "]\n")
		escreva("Tarifa Assegurada: US$ ", tarifaDolar, "\n")
		escreva("Alfandega Liberada? ", alfandegaLiberada, "\n")
	}
}

Capítulo 03 - Conversor de Minutos para Horas e Minutos

  • Desafio: Receba a duração total de uma viagem em minutos (ex: 495 minutos) e converta para o formato X horas e Y minutos, utilizando divisão inteira e % 60.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
programa {
	funcao inicio() {
		inteiro minutosTotais = 495
		inteiro horas = minutosTotais / 60
		inteiro minutosRestantes = minutosTotais % 60

		escreva("Duração da Viagem : ", minutosTotais, " minutos\n")
		escreva("Tempo Formatado   : ", horas, "h ", minutosRestantes, "min\n")
	}
}

Capítulo 04 - Holerite com Cálculo de Horas Extras

  • Desafio: Receba o nome do motorista, o salário base e as horas extras trabalhadas. Calcule a hora extra com 50% de adicional e exiba o holerite com o salário líquido final.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
programa {
	inclua biblioteca Matematica --> mat

	funcao inicio() {
		cadeia nomeMotorista
		real salarioBase, horasExtras, valorHoraNormal, valorHoraExtra, salarioFinal

		escreva("Nome do Motorista: ") leia(nomeMotorista)
		escreva("Salário Base (R$): ") leia(salarioBase)
		escreva("Horas Extras Trabalhadas: ") leia(horasExtras)

		valorHoraNormal = salarioBase / 220.0 // Base de 220h mensais
		valorHoraExtra = valorHoraNormal * 1.50
		salarioFinal = mat.arredondar(salarioBase + (horasExtras * valorHoraExtra), 2)

		escreva("\n=== DEMONSTRATIVO DE PAGAMENTO ===\n")
		escreva("Colaborador: ", nomeMotorista, "\n")
		escreva("Valor da Hora Normal: R$ ", mat.arredondar(valorHoraNormal, 2), "\n")
		escreva("Valor da Hora Extra (50%): R$ ", mat.arredondar(valorHoraExtra, 2), "\n")
		escreva("SALÁRIO LÍQUIDO A RECEBER: R$ ", salarioFinal, "\n")
		escreva("==================================\n")
	}
}

🟡 Módulo 2: Estruturas de Decisão (Cap 05 a 08)

Capítulo 05 - Desconto Comercial de Frete

  • Desafio: Receba o valor de um frete. Se for superior a R$ 5.000,00, conceda 8% de desconto comercial e exiba o novo valor a pagar.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
programa {
	funcao inicio() {
		real valorOriginal, desconto, valorFinal

		escreva("Valor do Frete (R$): ")
		leia(valorOriginal)

		valorFinal = valorOriginal

		se (valorOriginal > 5000.00) {
			desconto = valorOriginal * 0.08
			valorFinal = valorOriginal - desconto
			escreva("Desconto Comercial (8%): R$ ", desconto, "\n")
		}

		escreva("Valor a Pagar: R$ ", valorFinal, "\n")
	}
}

Capítulo 06 - Calculadora de Categoria de CNH

  • Desafio: Receba o peso bruto do caminhão em toneladas e a quantidade de passageiros, e informe qual categoria mínima de CNH é exigida: acima de 6 toneladas → Categoria C; acima de 8 passageiros → Categoria D; com reboque/carreta acoplada → Categoria E; outros veículos leves → Categoria B.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
programa {
	funcao inicio() {
		real pesoToneladas
		inteiro passageiros
		logico temCarreta

		escreva("Peso Bruto do Veículo (toneladas): ") leia(pesoToneladas)
		escreva("Capacidade de Passageiros: ") leia(passageiros)
		escreva("Possui carreta/reboque acoplado? (verdadeiro/falso): ") leia(temCarreta)

		se (temCarreta) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA E\n")
		} senao se (passageiros > 8) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA D\n")
		} senao se (pesoToneladas > 6.0) {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA C\n")
		} senao {
			escreva("CNH MÍNIMA EXIGIDA: CATEGORIA B\n")
		}
	}
}

Capítulo 07 - Validador de Triângulos

  • Desafio: Receba os 3 lados de um triângulo e verifique se as medidas formam um triângulo válido (a soma de dois lados deve ser sempre maior que o terceiro). Se válido, classifique em Equilátero, Isósceles ou Escaleno.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
programa {
	funcao inicio() {
		real a, b, c
		logico ehTriangulo

		escreva("Lado A: ") leia(a)
		escreva("Lado B: ") leia(b)
		escreva("Lado C: ") leia(c)

		ehTriangulo = (a + b > c) e (a + c > b) e (b + c > a)

		se (ehTriangulo) {
			se (a == b e b == c) {
				escreva("Triângulo Válido: EQUILÁTERO (3 lados iguais)\n")
			} senao se (a == b ou a == c ou b == c) {
				escreva("Triângulo Válido: ISÓSCELES (2 lados iguais)\n")
			} senao {
				escreva("Triângulo Válido: ESCALENO (3 lados diferentes)\n")
			}
		} senao {
			escreva("As medidas informadas NÃO formam um triângulo válido.\n")
		}
	}
}

Capítulo 08 - Calculadora de Descontos por Categoria VIP

  • Desafio: Com escolha-caso, receba o valor da compra e a categoria do cliente: 1 (Bronze) 5%, 2 (Prata) 10%, 3 (Ouro) 15%, 4 (Diamante VIP) 20%, caso contrario sem desconto.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
programa {
	funcao inicio() {
		real valorBruto, taxaDesconto = 0.0, valorDesconto, valorLiquido
		inteiro categoria

		escreva("Valor Total da Compra (R$): ") leia(valorBruto)
		escreva("Categoria (1-Bronze | 2-Prata | 3-Ouro | 4-Diamante): ") leia(categoria)

		escolha (categoria) {
			caso 1:
				taxaDesconto = 0.05
				pare
			caso 2:
				taxaDesconto = 0.10
				pare
			caso 3:
				taxaDesconto = 0.15
				pare
			caso 4:
				taxaDesconto = 0.20
				pare
			caso contrario:
				taxaDesconto = 0.0
		}

		valorDesconto = valorBruto * taxaDesconto
		valorLiquido = valorBruto - valorDesconto

		escreva("\nDesconto Comercial: R$ ", valorDesconto, " (", taxaDesconto * 100, "%)\n")
		escreva("VALOR LÍQUIDO A FATURAR: R$ ", valorLiquido, "\n")
	}
}

🟠 Módulo 3: Laços de Repetição (Cap 09 a 12)

Capítulo 09 - Simulador de Financiamento de Frota

  • Desafio: Receba o saldo devedor de um caminhão e o valor da parcela mensal. Use um laço enquanto para abater a dívida mês a mês e exibir quantos meses foram necessários para quitar o veículo.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
programa {
	funcao inicio() {
		real saldoDevedor, valorParcela
		inteiro meses = 0

		escreva("Saldo Devedor do Veículo (R$): ") leia(saldoDevedor)
		escreva("Valor da Parcela Mensal (R$): ") leia(valorParcela)

		enquanto (saldoDevedor > 0.0) {
			meses++
			saldoDevedor -= valorParcela
			se (saldoDevedor < 0.0) { saldoDevedor = 0.0 }
			escreva("Mês ", meses, " | Parcela: R$ ", valorParcela, " | Saldo: R$ ", saldoDevedor, "\n")
		}

		escreva("\n>>> VEÍCULO 100% QUITADO EM ", meses, " MESES!\n")
	}
}

Capítulo 10 - Caixa Rápido de Abastecimento

  • Desafio: Com faca-enquanto, simule a bomba de abastecimento do pátio: menu 1 - Abastecer 50L (R$ 290.00), 2 - Abastecer 100L (R$ 580.00), 0 - Fechar Conta. O programa acumula os abastecimentos e exibe o comprovante final ao sair.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
programa {
	funcao inicio() {
		inteiro opcao, totalLitros = 0
		real totalPagar = 0.0

		faca {
			escreva("\n=== POSTO INTERNO FASTLOG ===\n")
			escreva(" [1] Abastecer 50 Litros (R$ 290.00)\n")
			escreva(" [2] Abastecer 100 Litros (R$ 580.00)\n")
			escreva(" [0] Finalizar Abastecimento\n")
			escreva("Opção: ")
			leia(opcao)

			escolha (opcao) {
				caso 1:
					totalLitros += 50
					totalPagar += 290.00
					escreva(">> 50L adicionados ao tanque.\n")
					pare
				caso 2:
					totalLitros += 100
					totalPagar += 580.00
					escreva(">> 100L adicionados ao tanque.\n")
					pare
				caso 0:
					escreva(">> Processando fechamento...\n")
					pare
			}
		} enquanto (opcao != 0)

		escreva("\n=== COMPROVANTE DE ABASTECIMENTO ===\n")
		escreva("Volume Total Abastecido : ", totalLitros, " Litros\n")
		escreva("TOTAL A DEBITAR NA FROTA: R$ ", totalPagar, "\n")
	}
}

Capítulo 11 - Simulador de Juros Compostos

  • Desafio: Receba um investimento inicial (R$ 10.000,00) e uma taxa de 1% ao mês. Use um laço para de 1 até 12 para calcular e exibir a evolução do patrimônio mês a mês durante 1 ano.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
programa {
	inclua biblioteca Matematica --> mat

	funcao inicio() {
		real saldo = 10000.00
		real taxa = 0.01 // 1% ao mês

		escreva("=== EVOLUÇÃO PATRIMONIAL (1 ANO) ===\n")
		escreva("Saldo Inicial: R$ ", saldo, "\n")
		escreva("------------------------------------\n")

		para (inteiro mes = 1; mes <= 12; mes++) {
			saldo = saldo * (1.0 + taxa)
			escreva("Mês ", mes, " | Saldo: R$ ", mat.arredondar(saldo, 2), "\n")
		}

		escreva("====================================\n")
		escreva("Saldo Final Consolidado: R$ ", mat.arredondar(saldo, 2), "\n")
	}
}

Capítulo 12 - Pirâmide de Paletização

  • Desafio: Use laços aninhados para desenhar uma pirâmide de caixas com asteriscos * (linha 1 com 1 asterisco, linha 2 com 2, até a linha 5 com 5).
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
programa {
	funcao inicio() {
		escreva("=== PIRÂMIDE DE PALETIZAÇÃO ===\n")
		para (inteiro linha = 1; linha <= 5; linha++) {
			para (inteiro col = 1; col <= linha; col++) {
				escreva("* ")
			}
			escreva("\n")
		}
	}
}

🔴 Módulo 4: Vetores e Matrizes (Cap 13 a 16)

Capítulo 13 - Inversão de Ordem de Vetor

  • Desafio: Leia 5 números inteiros em um vetor e, em seguida, use um laço para (inteiro i = 4; i >= 0; i--) para exibir os elementos na ordem inversa daquela em que foram digitados.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
programa {
	funcao inicio() {
		inteiro numeros[5]

		escreva("Digite 5 números inteiros:\n")
		para (inteiro i = 0; i < 5; i++) {
			escreva("Elemento [", i, "]: ")
			leia(numeros[i])
		}

		escreva("\n--- EXIBIÇÃO NA ORDEM INVERSA ---\n")
		para (inteiro i = 4; i >= 0; i--) {
			escreva("Posição [", i, "] = ", numeros[i], "\n")
		}
	}
}

Capítulo 14 - Contador de Ocorrências em Vetor

  • Desafio: Leia 10 números em um vetor. Peça ao usuário um número e conte quantas vezes esse número se repete dentro do vetor.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
programa {
	funcao inicio() {
		inteiro numeros[10] = {5, 8, 2, 5, 9, 5, 1, 3, 5, 7}
		inteiro alvo, contagem = 0

		escreva("Digite um número para verificar repetições: ")
		leia(alvo)

		para (inteiro i = 0; i < 10; i++) {
			se (numeros[i] == alvo) {
				contagem++
			}
		}

		escreva("O número ", alvo, " apareceu ", contagem, " vezes no vetor.\n")
	}
}

Capítulo 15 - Somatório Total de Matriz

  • Desafio: Leia todos os valores de uma matriz $3 \times 3$ de números reais e calcule a Soma Total de todos os elementos armazenados na tabela.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
programa {
	funcao inicio() {
		real m[3][3], somaTotal = 0.0

		escreva("Digite os valores da matriz 3x3:\n")
		para (inteiro l = 0; l < 3; l++) {
			para (inteiro c = 0; c < 3; c++) {
				escreva("Posição [", l, "][", c, "]: ")
				leia(m[l][c])
				somaTotal += m[l][c]
			}
		}

		escreva("\n========================================\n")
		escreva("SOMA TOTAL DE TODOS OS ELEMENTOS: ", somaTotal, "\n")
		escreva("========================================\n")
	}
}

Capítulo 16 - Matriz Transposta

  • Desafio: Leia uma matriz $2 \times 3$ e gere a sua Matriz Transposta $3 \times 2$, onde as linhas viram colunas (transposta[c][l] = original[l][c]).
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
programa {
	funcao inicio() {
		inteiro original[2][3] = {
			{1, 2, 3},
			{4, 5, 6}
		}
		inteiro transposta[3][2]

		// Transposição
		para (inteiro l = 0; l < 2; l++) {
			para (inteiro c = 0; c < 3; c++) {
				transposta[c][l] = original[l][c]
			}
		}

		escreva("=== MATRIZ TRANSPOSTA 3x2 ===\n")
		para (inteiro l = 0; l < 3; l++) {
			para (inteiro c = 0; c < 2; c++) {
				escreva(transposta[l][c], "  ")
			}
			escreva("\n")
		}
	}
}

🔵 Módulo 5: Modularização e Projeto Final (Cap 17 a 20)

Capítulo 17 - Moldura com Caractere Customizável

  • Desafio: Crie uma função funcao vazio moldura_customizada(cadeia msg, caracter simbolo) que receba a mensagem e o símbolo de borda (ex: '#' ou '*'), desenhando uma caixa personalizada ao redor do texto.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
programa {
	funcao vazio moldura_customizada(cadeia msg, caracter simbolo) {
		escreva(simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, "\n")
		escreva(simbolo, " ", msg, "\n")
		escreva(simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, simbolo, "\n")
	}

	funcao inicio() {
		moldura_customizada("SISTEMA OK", '#')
		moldura_customizada("ALERTA DOCA", '*')
	}
}

Capítulo 18 - Conversor de Moeda Internacional

  • Desafio: Crie uma função funcao real converter_dolar(real valorUSD, real cotacao) que receba um valor em dólares e a cotação do dia, retornando o valor convertido em Reais (BRL).
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
programa {
	funcao real converter_dolar(real valorUSD, real cotacao) {
		retorne valorUSD * cotacao
	}

	funcao inicio() {
		real freteUSD, cotacaoHoje, freteBRL

		escreva("=== COTAÇÃO DE FRETE INTERNACIONAL ===\n")
		escreva("Valor do Frete Marítimo (US$): ") leia(freteUSD)
		escreva("Cotação Atual do Dólar (R$): ") leia(cotacaoHoje)

		freteBRL = converter_dolar(freteUSD, cotacaoHoje)

		escreva("\nValor Original em Dólares : US$ ", freteUSD, "\n")
		escreva("VALOR CONVERTIDO EM REAIS : R$  ", freteBRL, "\n")
	}
}

Capítulo 19 - Atualização de Saldo de Produto

  • Desafio: Crie a função funcao vazio atualizar_quantidade() que receba o nome do produto e permita alterar a quantidade em estoque caso ele exista.
  • Gabarito:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
programa {
	cadeia nomes[3] = {"Palete Madeira", "Fita Stretch", "Caixa Papelão"}
	inteiro quantidades[3] = {150, 400, 800}
	inteiro totalCadastrados = 3

	funcao vazio atualizar_quantidade() {
		cadeia busca
		inteiro novaQtd
		logico achou = falso

		escreva("Produto para atualizar saldo: ")
		leia(busca)

		para (inteiro i = 0; i < totalCadastrados; i++) {
			se (nomes[i] == busca) {
				escreva("Saldo Atual: ", quantidades[i], " un.\n")
				escreva("Digite o Novo Saldo: ")
				leia(novaQtd)
				quantidades[i] = novaQtd
				escreva(">> [SUCESSO] Saldo atualizado para ", novaQtd, " un!\n")
				achou = verdadeiro
				pare
			}
		}

		se (nao achou) {
			escreva(">> [ERRO] Produto inexistente!\n")
		}
	}

	funcao inicio() {
		atualizar_quantidade()
	}
}

Capítulo 20 - Projeto Integrador FastLog TMS Enterprise

Por ser o Projeto Integrador Final, o Capítulo 20 não tem um “Desafio de Fixação” separado — o próprio projeto (cadastro, relatório, auditoria e busca de frota) já é o desafio completo do módulo. Em vez de um exercício novo, a atividade de fechamento é o 🛠️ Roteiro de Testes e Validação descrito no capítulo: validar cada um dos 4 módulos do sistema (Cadastro, Relatório, Auditoria do Campeão e Localizador) rodando o programa completo no Portugol Studio.


📥 Download dos Códigos Fonte (.por)

Baixe os arquivos originais .por estruturados para cada aula, prontos para abrir no Portugol Studio: