Capítulo 02: Memória, Declaração de Variáveis e Tipos de Dados

🎯 Objetivo da Aula

Em qualquer sistema de gestão ou controle de frota, precisamos armazenar dados dinâmicos na memória: o nome do motorista, a quilometragem atual do caminhão, o peso da carga e o status da vistoria.

Nesta aula, você aprenderá a:

  1. Compreender o que é uma Variável e como a memória RAM armazena informações temporárias.
  2. Dominar a declaração e a inicialização dos Cinco Tipos de Dados do Portugol: inteiro, real, cadeia, caracter e logico.
  3. Aplicar as convenções de nomenclatura (CamelCase e snake_case) e regras de identificadores.
  4. Diferenciar com precisão strings (cadeia com aspas duplas) de caracteres isolados (caracter com aspas simples).

📥 Material de Apoio e Código-Fonte da Aula:


🏢 O Cenário Prático (Seu Desafio)

Situação: A FastLog acaba de adquirir novos caminhões pesados para a rota interestadual. A central de monitoramento precisa registrar no sistema:

  • O modelo do caminhão (ex: "Scania R450").
  • A categoria da CNH exigida (o caracter isolado 'E').
  • A quantidade de eixos do conjunto (ex: 9 eixos).
  • A capacidade máxima de tração (ex: 74.50 toneladas).
  • Se o rastreador satelital está ativo (ex: verdadeiro).

Missão: Construir um programa que reserve os espaços tipados corretos na memória RAM para cadastrar essa ficha técnica sem conflito de tipos.


🧠 Fundamentos: A Memória RAM e os Tipos de Dados

1. O que é uma Variável?

Uma Variável é um espaço reservado e etiquetado na memória RAM do computador capaz de guardar um valor por vez:

graph LR
    subgraph Memoria_RAM ["Memória RAM do Sistema"]
        V1["modelo (cadeia)<br/>'Scania R450'"]
        V2["categoriaCNH (caracter)<br/>'E'"]
        V3["qtdEixos (inteiro)<br/>9"]
        V4["pesoMaximo (real)<br/>74.50"]
        V5["rastreadorAtivo (logico)<br/>verdadeiro"]
    end
    
    style V1 fill:#2980b9,stroke:#fff,color:#fff
    style V2 fill:#e67e22,stroke:#fff,color:#fff
    style V3 fill:#27ae60,stroke:#fff,color:#fff
    style V4 fill:#8e44ad,stroke:#fff,color:#fff
    style V5 fill:#217346,stroke:#fff,color:#fff

2. Os Cinco Tipos de Dados do Portugol Studio

Tipo no PortugolO que armazena?ExemploSintaxe / DelimitadorEquivalente em C / Java
inteiroNúmeros inteiros sem casas decimais.12, -5, 0Sem delimitadorint
realNúmeros com casas decimais (ponto flutuante).3.14, 1500.50Ponto . decimalfloat / double
cadeiaTexto completo, palavras, frases e códigos."FastLog S.A."Aspas Duplas ""char[] / String
caracterUm único caractere alfanumérico ou símbolo.'E', 'M', '@'Aspas Simples ''char
logicoValores booleanos da Álgebra de Boole.verdadeiro / falsoPalavra reservadabool / boolean

Diferença Crucial: cadeia vs caracter:

  • cadeia placa = "BRA2E19" ➔ Aspas Duplas "" (texto com vários caracteres).
  • caracter turno = 'N' ➔ Aspas Simples '' (apenas uma única letra).

3. Regras de Nomenclatura de Identificadores

  1. Primeiro caractere: Deve ser obrigatoriamente uma letra (ex: peso, distancia1). Nunca comece com números (1peso gera erro).
  2. Sem espaços em branco: Use o padrão CamelCase (pesoBrutoCarga) ou snake_case (peso_bruto_carga).
  3. Sem caracteres especiais ou acentos: Não use ç, ~, ^, @, $.
  4. Case-Sensitive: O Portugol Studio diferencia maiúsculas de minúsculas (valorFrete é diferente de valorfrete).

4. Declarando Várias Variáveis do Mesmo Tipo de Uma Vez

Quando duas ou mais variáveis são do mesmo tipo, você pode declará-las juntas em uma única linha, separando os nomes por vírgula — com ou sem valor inicial já atribuído:

1
2
inteiro tentativas, contador = 0, limite = 10
real pesoKg = 520.0, volumeM3 = 6.5

Isso é apenas um atalho de escrita: equivale exatamente a declarar cada variável em sua própria linha. Você vai ver esse estilo compacto em vários gabaritos de código deste curso.


📖 Exemplo Guiado: Ficha Técnica de Frota

Código do Programa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
programa 
{
	funcao inicio() 
	{
		// 1. Declaração e Inicialização de Variáveis
		cadeia modeloVeiculo = "Scania R450 Bitrem"
		caracter categoriaCNH = 'E'
		inteiro qtdEixos = 9
		real capacidadeTracaoToneladas = 74.5
		logico rastreadorAtivo = verdadeiro

		// 2. Exibição Formatada no Console
		escreva("=== FICHA TÉCNICA DE VEÍCULO PESADO ===\n")
		escreva("Modelo do Cavalo Mecânico: ", modeloVeiculo, "\n")
		escreva("Categoria de CNH Exigida : ", categoriaCNH, "\n")
		escreva("Configuração de Rodagem  : ", qtdEixos, " eixos\n")
		escreva("Capacidade Máxima        : ", capacidadeTracaoToneladas, " toneladas\n")
		escreva("Rastreador Satelital     : ", rastreadorAtivo, "\n")
		escreva("=======================================\n")
	}
}

✅ Resultado Esperado no Console (Shift + F6):

1
2
3
4
5
6
7
=== FICHA TÉCNICA DE VEÍCULO PESADO ===
Modelo do Cavalo Mecânico: Scania R450 Bitrem
Categoria de CNH Exigida : E
Configuração de Rodagem  : 9 eixos
Capacidade Máxima        : 74.5 toneladas
Rastreador Satelital     : verdadeiro
=======================================

🛠️ Prática Obrigatória 1: Ficha de Insumo de Estoque

Passo 1: O Desafio

Crie um programa ficha_estoque.por que declare e inicialize as seguintes variáveis:

  • codigoSKU (cadeia) ➔ "PALETE-PBR-01"
  • tipoMaterial (caracter) ➔ 'M' (Madeira)
  • quantidadeSaldo (inteiro) ➔ 850
  • custoUnitario (real) ➔ 42.80
  • emQuarentena (logico) ➔ falso

✅ Resultado Esperado (Prática 1):

1
2
3
4
5
6
7
=== INVENTÁRIO DE INSUMOS FASTLOG ===
SKU do Item     : PALETE-PBR-01
Tipo de Material: M
Saldo em Estoque: 850 unidades
Custo Unitário  : R$ 42.8
Bloqueio Fiscal?: falso
=====================================

🛠️ Prática Obrigatória 2: Dados do Motorista Titular

Crie o programa cadastro_motorista.por declarando:

  • nome (cadeia) ➔ "Roberto Firmino"
  • idade (inteiro) ➔ 38
  • salarioBase (real) ➔ 4250.00
  • turno (caracter) ➔ 'D' (Diurno)
  • exameEmDia (logico) ➔ verdadeiro

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_02_SeuNome_SeuSobrenome.por.
  2. No Portugol Studio, execute o código com Shift + F6 e verifique a ausência de avisos de erro.
  3. No Microsoft Teams, envie na tarefa “Portugol Cap 02 - Variáveis e Tipos”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aprender sobre Tipagem Estática e Alocação de Memória. Em linguagens como Java, C++ e C#, o compilador utiliza os tipos para reservar exatamente os bytes necessários na arquitetura do sistema (ex: 4 bytes para um inteiro, 8 bytes para um real).


🔥 Desafio de Fixação: Apólice de Frete Marítimo

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 de Código Completo

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
programa {
	funcao inicio() {
		cadeia codigoSKU = "PALETE-PBR-01"
		caracter tipoMaterial = 'M'
		inteiro quantidadeSaldo = 850
		real custoUnitario = 42.80
		logico emQuarentena = falso

		escreva("=== INVENTÁRIO DE INSUMOS FASTLOG ===\n")
		escreva("SKU do Item     : ", codigoSKU, "\n")
		escreva("Tipo de Material: ", tipoMaterial, "\n")
		escreva("Saldo em Estoque: ", quantidadeSaldo, " unidades\n")
		escreva("Custo Unitário  : R$ ", custoUnitario, "\n")
		escreva("Bloqueio Fiscal?: ", emQuarentena, "\n")
		escreva("=====================================\n")
	}
}

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
programa {
	funcao inicio() {
		cadeia nome = "Roberto Firmino"
		inteiro idade = 38
		real salarioBase = 4250.00
		caracter turno = 'D'
		logico exameEmDia = verdadeiro

		escreva("=== DADOS DO MOTORISTA ===\n")
		escreva("Nome do Colaborador: ", nome, "\n")
		escreva("Idade              : ", idade, " anos\n")
		escreva("Salário Base       : R$ ", salarioBase, "\n")
		escreva("Turno de Trabalho  : ", turno, "\n")
		escreva("Exame em Dia?      : ", exameEmDia, "\n")
		escreva("==========================\n")
	}
}

Desafio:

 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")
	}
}

📝 Atividade Extra: Questionário de Fixação (Caderno)

Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.

  1. O que é uma Variável, de acordo com a definição apresentada no capítulo?
  2. Quais são os cinco tipos de dados fundamentais do Portugol Studio apresentados na tabela de tipos?
  3. Qual delimitador é usado para declarar um valor do tipo cadeia, e qual é usado para o tipo caracter?
  4. Dê um exemplo de valor válido para os tipos logico e real, conforme a tabela do capítulo.
  5. Cite duas regras de nomenclatura de identificadores apresentadas no capítulo.
  6. O Portugol Studio diferencia maiúsculas de minúsculas nos nomes de variáveis? Como se chama essa característica?
  7. Na Prática Obrigatória 1 (Ficha de Insumo de Estoque), qual tipo de dado deve ser usado para armazenar a variável emQuarentena?
  8. Qual tipo de dado do Portugol equivale ao int da linguagem C/Java, segundo a tabela comparativa do capítulo?
  9. Segundo o Checkpoint de Lógica, o que o compilador faz com os tipos de dados em linguagens como Java, C++ e C#?
  10. Segundo o quadro de atenção (CAUTION) do capítulo, por que placa = "BRA2E19" usa aspas duplas enquanto turno = 'N' usa aspas simples?