Atividade Pratica 1 (2026.1) – Python Básico aplicado à Construção Civil#

Responder a questão incluindo narrativa, enunciado completo, fluxograma (descrição), pseudocódigo e solução comentada. A atividade deverá ser enviada o código via plataforma do Teams e apresentada na próxima aula ao professor. A entrega deve ser feita usando o modelo latex, anexando o pdf, link do overleaf e o código latex.

Questão 1 – Dosagem de concreto#

Um técnico precisa calcular a quantidade de sacos de cimento necessários para uma concretagem.

Dados:

  • Volume: 2,5 m³

  • Consumo: 320 kg/m³

  • Cada saco: 50 kg

Solicita-se:

  • Descrever o fluxograma

  • Escrever o pseudocódigo

  • Criar a função calcula_sacos(volume)

  • Calcular a massa total

  • Arredondar o número de sacos para cima usando math.ceil

  • Exibir o resultado

Fluxo: Entrada → validação → cálculo → saída

Pseudocódigo: se volume <= 0: erro massa = volume * 320 sacos = ceil(massa/50)

import math

def calcula_sacos(volume):
    # Validação do dado de entrada
    if volume <= 0:
        return "Volume inválido"
    
    # Cálculo da massa total de cimento
    massa = volume * 320
    
    # Arredondamento para cima do número de sacos
    sacos = math.ceil(massa / 50)
    
    return sacos

print(calcula_sacos(2.5))
16

Questão 2 – Controle de estoque#

O almoxarifado simula movimentações aleatórias de materiais.

Dados:

  • Estoque inicial: 100

  • Limite mínimo: 40

Solicita-se:

  • Criar fluxograma com laço

  • Escrever pseudocódigo

  • Implementar simula_estoque(estoque)

  • Gerar 5 movimentações aleatórias entre -30 e +20

  • Impedir estoque abaixo do mínimo

  • Exibir estoque final

Fluxo: loop → gerar movimento → validar → atualizar

Pseudocódigo: para 5 vezes: mov = aleatório se estoque+mov >= mínimo: atualizar

import random

def simula_estoque(estoque):
    minimo = 40
    
    # Loop de simulação
    for _ in range(5):
        mov = random.randint(-30, 20)
        
        # Só atualiza se não violar o limite mínimo
        if estoque + mov >= minimo:
            estoque += mov
    
    return estoque

print(simula_estoque(100))
81

Questão 3 – Área de setor circular (com conversão de graus)#

Em uma obra, um engenheiro precisa calcular a área de um setor circular (fatia de um círculo) para projetar a base de um pilar curvo.

Solicita-se:

  • Ler os dados de entrada (raio e ângulo em graus)

  • Converter graus para radianos

  • Calcular a área do setor

  • Exibir o resultado

Fórmula: A = (r² * θ) / 2

Fluxo: Entrada → conversão → cálculo → saída

Pseudocódigo: ler raio ler angulo_graus angulo_rad = converter_para_radianos(angulo_graus) area = (raio^2 * angulo_rad) / 2 exibir area

import math

# Função para calcular área do setor circular
def area_setor(raio, angulo_graus):
    if raio <= 0:
        return "Raio inválido"
    
    angulo_rad = math.radians(angulo_graus)
    area = (raio**2 * angulo_rad) / 2
    
    return area

# Entrada de dados
raio = float(input("Digite o raio (m): "))
angulo = float(input("Digite o ângulo (graus): "))

# Saída
resultado = area_setor(raio, angulo)
print("Área do setor:", resultado)
Área do setor: 17.453292519943293

Questão 4 – Nível de água#

Sistema monitora continuamente o nível da caixa d’água.

Dados:

  • Leituras: 25, 50, 80

Regras:

  • < 30 → Crítico

  • 30 a 70 → Adequado

  • 70 → Cheio

Solicita-se:

  • Fluxograma com laço

  • Pseudocódigo

  • Função classifica_nivel(nivel)

  • Classificar cada leitura

  • Exibir resultados

Fluxo: loop → decisão → saída

Pseudocódigo: se <30: crítico elif <=70: adequado else: cheio

def classifica_nivel(nivel):
    if nivel < 30:
        return "Crítico"
    elif nivel <= 70:
        return "Adequado"
    else:
        return "Cheio"

leituras = [25, 50, 80]

for n in leituras:
    print(n, "->", classifica_nivel(n))
25 -> Crítico
50 -> Adequado
80 -> Cheio

Questão 5 – Temperatura do concreto#

Análise térmica do concreto durante a cura.

Dados:

  • Temperaturas: 20, 22, 25, 27, 29

Solicita-se:

  • Fluxograma

  • Pseudocódigo

  • Função analise_temp(lista)

  • Calcular média (1 casa decimal)

  • Verificar faixa ideal (20–30 °C)

  • Exibir média e status

Fluxo: soma → média → decisão

Pseudocódigo: média = soma/quantidade se entre 20 e 30: ideal

def analise_temp(lista):
    # Cálculo da média
    media = round(sum(lista)/len(lista), 1)
    
    # Verificação da faixa ideal
    if 20 <= media <= 30:
        status = "Ideal"
    else:
        status = "Fora"
    
    return media, status

print(analise_temp([20,22,25,27,29]))
(24.6, 'Ideal')

Questão 6 – Custo de mão de obra#

Cálculo do custo semanal de um trabalhador.

Dados:

  • Horas: [8, 9, 10, 8, 7]

  • Valor hora: R$ 30

  • Extra: +50% acima de 8h

Solicita-se:

  • Fluxograma com laço

  • Pseudocódigo

  • Função custo_semanal

  • Calcular custo total

  • Exibir resultado

Fluxo: loop → decisão → soma

Pseudocódigo: se >8h: calcula extra

def custo_semanal(horas, valor):
    total = 0
    
    for h in horas:
        if h > 8:
            total += 8*valor + (h-8)*valor*1.5
        else:
            total += h*valor
    
    return total

print(custo_semanal([8,9,10,8,7], 30))
1305.0

Questão 7 – Orçamento#

Narrativa: O preço do concreto varia conforme fornecedor.

Dados:

  • Volume: 3 m³

  • Preço base: R$ 250

Solicita-se:

  • Fluxograma

  • Pseudocódigo

  • Função orcamento

  • Gerar variação aleatória ±10%

  • Calcular custo

  • Verificar se está abaixo de R$ 900

  • Exibir resultado

Fluxo: gerar variação → cálculo → decisão

Pseudocódigo: preço = base*(1±10%) se custo < 900: aprovado

import random

def orcamento(volume, preco):
    # Geração de variação aleatória
    variacao = random.uniform(-0.1, 0.1)
    
    preco_final = preco * (1 + variacao)
    custo = volume * preco_final
    
    if custo < 900:
        status = "Aprovado"
    else:
        status = "Revisar"
    
    return custo, status

print(orcamento(3,250))
(788.380448464752, 'Aprovado')