Seja Bem-Vindo. Este site tem recursos de leitura de texto, basta marcar o texto e clicar no ícone do alto-falante   Click to listen highlighted text! Seja Bem-Vindo. Este site tem recursos de leitura de texto, basta marcar o texto e clicar no ícone do alto-falante

Introdução à Linguagem de Programação – Aula 04

1. Introdução

  • Título da Página: Linguagem de Programação C – Aula 4
  • Autor: Carlos Fernandes
  • E-mail para contato: carlos.fernandes@afogados.ifpe.edu.br
  • Objetivo da Aula: Capacitar os alunos a compreenderem os fundamentos de algoritmos e lógica de programação, aplicando esses conceitos na linguagem C, com foco em exemplos voltados para a engenharia mecânica e a programação de Arduino.

Introdução aos Algoritmos e Programação em C para Engenharia Mecânica

1. O que são Algoritmos? Definição e Exemplos Práticos

Definição

Um algoritmo é uma sequência finita e ordenada de passos bem definidos para resolver um problema. Ele deve possuir as seguintes características:

  • Finitude: O algoritmo deve terminar após um número finito de passos.
  • Precisão: Cada etapa deve ser bem definida e não ambígua.
  • Entrada: Deve haver pelo menos uma entrada de dados.
  • Saída: Deve haver pelo menos uma saída, que representa a solução do problema.
  • Eficiência: Deve ser escrito da forma mais otimizada possível.

Na engenharia mecânica, algoritmos podem ser usados para resolver problemas de análise estrutural, controle de sistemas dinâmicos e automação industrial, entre outras aplicações.

Exemplos práticos

1. Cálculo da força resultante em um corpo mecânico

Imagine um corpo submetido a duas forças F1 e F2, formando um ângulo θ\theta entre si. A força resultante pode ser calculada com a equação:

    \[F_r = \sqrt{F_1^2 + F_2^2 + 2 F_1 F_2 \cos(\theta)}\]

O algoritmo para esse cálculo pode ser estruturado como segue:

  1. Solicitar ao usuário os valores de F1, F2 e θ.
  2. Aplicar a fórmula acima.
  3. Exibir o valor da força resultante Fr.

 

2. Controle de temperatura em um sistema de refrigeração usando Arduino

Neste exemplo, um sistema de refrigeração usa um sensor de temperatura para acionar um ventilador quando a temperatura ultrapassa um limite.

  1. Ler o valor do sensor de temperatura.
  2. Comparar com o limite estabelecido.
  3. Se a temperatura estiver acima do limite, acionar o ventilador.
  4. Se estiver abaixo, manter o ventilador desligado.

Atividade Prática

Criar um algoritmo para calcular a velocidade angular de um motor. A velocidade angular (ω) é calculada por:

    \[omega = \frac{2\pi N}{60}\]

Onde N é o número de rotações por minuto (RPM).


2. Fluxogramas e Pseudocódigo como Ferramentas de Modelagem

Fluxogramas

Os fluxogramas são representações gráficas de algoritmos, permitindo melhor compreensão e organização.

Principais símbolos:

  • Elipse: Indica início e fim do algoritmo.
  • Paralelogramo: Indica entrada ou saída de dados.
  • Retângulo: Indica um processo (cálculos, atribuições, etc.).
  • Losango: Indica uma decisão (estruturas condicionais).

Exemplo: Fluxograma para controle de um motor DC com sensor de temperatura (Arduino)

  1. Ler temperatura do sensor.
  2. Se a temperatura for superior a um limite, ativar o motor.
  3. Se a temperatura for inferior ao limite, manter o motor desligado.
  4. Repetir continuamente.

Pseudocódigo

O pseudocódigo é uma maneira textual estruturada de representar algoritmos, facilitando a transição para a linguagem C.

Exemplo:

Inicio
   Ler temperatura
   Se temperatura > 30 então
      Ligar motor
   Senão
      Desligar motor
   Fim Se
Fim

3. Desenvolvimento Estruturado de Algoritmos e Primeiros Programas com C

Estruturas Sequenciais

As estruturas sequenciais contêm comandos que são executados em ordem, um após o outro.

Exemplo em C: Cálculo do torque mecânico.

#include <stdio.h>
int main() {
    float torque, force, distance;
    printf("Digite a força (N): ");
    scanf("%f", &force);
    printf("Digite a distância (m): ");
    scanf("%f", &distance);
    torque = force * distance;
    printf("O torque é: %.2f Nm\n", torque);
    return 0;
}

Estruturas Condicionais

Permitem a tomada de decisão baseada em condições.

Exemplo: Controle de temperatura em um sistema de resfriamento

if (temperatura > 30) {
    ligar_ventilador();
} else {
    desligar_ventilador();
}

Estruturas de Repetição

Permitem a execução de um bloco de comandos várias vezes.

Exemplo: Medindo RPM de um motor usando um contador

int contador = 0;
while (tempo < 10) {
    contador++;
}
printf("RPM: %d\n", contador * 6);

Exemplos Resolvidos

Problema:

Leia um número indeterminado de linhas contendo cada uma a idade de um indivíduo. A última linha, que não entrará nos cálculos, contem o valor da idade igual a zero. Calcule e escreva a idade media deste grupo de indivíduos.

Solução:

#include 

int main() {
    int idade, soma = 0, contador = 0; // Variáveis para armazenar idade, soma das idades e quantidade de entradas
    float media; // Variável para armazenar a média das idades
    
    printf("Digite as idades (digite 0 para encerrar):\n");
    
    while (1) { // Loop infinito, será interrompido com 'break'
        scanf("%d", &idade); // Lê a idade do usuário
        
        if (idade == 0) { // Condição de parada
            break; // Encerra o loop
        }
        
        soma += idade; // Acumula a soma das idades
        contador++; // Contabiliza a quantidade de idades inseridas
    }
    
    // Verifica se alguma idade válida foi inserida para evitar divisão por zero
    if (contador > 0) {
        media = (float)soma / contador; // Cálculo da média, com conversão explícita para float
        printf("A idade média do grupo é: %.2f anos\n", media); // Exibe a média com duas casas decimais
    } else {
        printf("Nenhuma idade válida foi inserida.\n"); // Caso o usuário digite 0 logo no início
    }
    
    return 0; // Indica que o programa foi finalizado com sucesso
}

Aqui está a implementação do problema em linguagem C, com comentários detalhados para facilitar o entendimento:

Explicação do Código:

  1. Declaração de Variáveis:

    • idade: Armazena a idade inserida pelo usuário.
    • soma: Soma total das idades.
    • contador: Conta o número de idades inseridas (excluindo o 0).
    • media: Armazena a média das idades.
  2. Entrada de Dados e Loop while:

    • Um while (1) cria um loop infinito, garantindo que o programa continue até o usuário inserir 0.
    • O scanf("%d", &idade); lê a entrada do usuário.
    • Se idade == 0, o break; encerra o loop.
    • Caso contrário, a idade é somada e o contador é incrementado.
  3. Cálculo e Exibição da Média:

    • Verificamos se contador > 0 para evitar divisão por zero.
    • A média é calculada como (float)soma / contador, garantindo um resultado com casas decimais.
    • A saída é formatada com printf("A idade média do grupo é: %.2f anos\n", media);.
  4. Caso Especial:

    • Se nenhuma idade válida for inserida, exibimos Nenhuma idade válida foi inserida..

Essa solução é eficiente e robusta, garantindo que o programa lide corretamente com qualquer entrada do usuário.

Problema:

Tem-se um conjunto de dados contendo a altura e o sexo (masculino, feminino) de 50 pessoas. Fazer um algoritmo que calcule e escreva:

  • a maior e a menor altura do grupo
  • a média de altura das mulheres
  • numero de homens

Solução:

#include 

int main() {
    // Declaração das variáveis
    float maior = 0, menor = 10, altura, somaAlturaMulheres = 0;
    int homens = 0, mulheres = 0;
    char sexo;
    
    // Loop para coletar dados de 50 pessoas
    for (int i = 0; i < 50; i++) {
        printf("Informe a altura da pessoa %d: ", i + 1);
        scanf("%f", &altura);
        
        printf("Informe o sexo da pessoa %d (M/F): ", i + 1);
        scanf(" %c", &sexo);  // Espaço antes de %c para consumir o newline do scanf anterior
        
        // Verifica a maior altura
        if (altura > maior) {
            maior = altura;
        }
        
        // Verifica a menor altura
        if (altura < menor) {
            menor = altura;
        }
        
        // Contabiliza o número de homens e soma as alturas das mulheres
        if (sexo == 'M' || sexo == 'm') {
            homens++;
        } else if (sexo == 'F' || sexo == 'f') {
            mulheres++;
            somaAlturaMulheres += altura;
        } else {
            printf("Sexo inválido! Considere inserir apenas 'M' ou 'F'.\n");
            i--; // Repetir a iteração para não contar entrada inválida
        }
    }
    
    // Calcula a média da altura das mulheres
    float mediaMulheres = (mulheres > 0) ? somaAlturaMulheres / mulheres : 0;
    
    // Exibe os resultados
    printf("\nA maior altura do grupo: %.2f metros\n", maior);
    printf("A menor altura do grupo: %.2f metros\n", menor);
    printf("A altura média das mulheres: %.2f metros\n", mediaMulheres);
    printf("O número de homens no grupo: %d\n", homens);
    
    return 0;
}

Explicação do Código:

  1. Declaração de Variáveis:

    • maior e menor: armazenam a maior e menor altura do grupo.
    • altura: recebe a altura informada pelo usuário.
    • somaAlturaMulheres: armazena a soma das alturas das mulheres para calcular a média posteriormente.
    • homens e mulheres: contadores para o número de homens e mulheres.
    • sexo: armazena o sexo do indivíduo.
  2. Loop for para 50 pessoas:

    • Solicita a altura e o sexo.
    • Atualiza maior e menor conforme a altura informada.
    • Se for um homem (M ou m), incrementa o contador homens.
    • Se for uma mulher (F ou f), incrementa o contador mulheres e acumula a altura em somaAlturaMulheres.
    • Se for um sexo inválido, exibe um erro e repete a iteração.
  3. Cálculo da Média das Mulheres:

    • Se houver mulheres no grupo (mulheres > 0), calcula-se a média, senão, define-se 0 para evitar divisão por zero.
  4. Exibição dos Resultados:

    • Maior e menor altura do grupo.
    • Média das alturas das mulheres.
    • Quantidade de homens.

Esse código garante robustez ao lidar com entradas inválidas e evita divisões por zero.

Problema:

Supondo que a população de um pais A seja da ordem de 90.000.000 de habitantes com uma taxa anual de crescimento de 3% e que a população de um pais B seja,aproximadamente, de 200.000.000 de habitantes com uma taxa anual de crescimento de 1,5%, fazer um algoritmo que calcule e escreva o numero de anos necessários para que a população do pais A ultrapasse ou iguale a população do pais B, mantidas essas taxas de crescimento

Solução:


#include 

int main() {
    // Declaração das variáveis
    int anos = 0; // Contador de anos
    double populacaoA = 90000000; // População inicial do país A
    double populacaoB = 200000000; // População inicial do país B
    double taxaCrescimentoA = 0.03; // Taxa de crescimento anual do país A (3%)
    double taxaCrescimentoB = 0.015; // Taxa de crescimento anual do país B (1.5%)

    // Loop enquanto a população de A for menor que a de B
    while (populacaoA < populacaoB) {
        // Atualiza as populações com base nas taxas de crescimento
        populacaoA *= (1 + taxaCrescimentoA); // Crescimento de A
        populacaoB *= (1 + taxaCrescimentoB); // Crescimento de B
        anos++; // Incrementa o contador de anos
    }

    // Exibe o resultado
    printf("Serao necessarios %d anos para a populacao do pais A ultrapassar ou igualar a do pais B.\n", anos);
    printf("Populacao final de A: %.0f\n", populacaoA);
    printf("Populacao final de B: %.0f\n", populacaoB);

    return 0; // Fim do programa
}

Explicação do Código:

1. Inclusão da Biblioteca stdio.h:

#include <stdio.h>

A biblioteca stdio.h é necessária para usar funções de entrada e saída, como printf.

2. Função main:

int main() {

Todo programa em C começa pela função main, que é o ponto de entrada do programa.

3. Declaração das Variáveis:

int anos = 0;
double populacaoA = 90000000;
double populacaoB = 200000000;
double taxaCrescimentoA = 0.03;
double taxaCrescimentoB = 0.015;

anos: Contador para armazenar o número de anos necessários.
populacaoA e populacaoB: Armazenam as populações iniciais dos países A e B, respectivamente.
taxaCrescimentoA e taxaCrescimentoB: Armazenam as taxas de crescimento anual dos países A e B, respectivamente.

4. Loop while:

while (populacaoA < populacaoB) {

O loop continua enquanto a população do país A for menor que a do país B.

5. Atualização das Populações:

populacaoA *= (1 + taxaCrescimentoA);
populacaoB *= (1 + taxaCrescimentoB);

A população de cada país é atualizada multiplicando pelo fator de crescimento (1 + taxa).
Por exemplo, populacaoA *= (1 + 0.03) aumenta a população de A em 3%.

6. Incremento do Contador de Anos:

anos++;

A cada iteração do loop, o contador de anos é incrementado em 1.

7. Exibição do Resultado:

printf("Serao necessarios %d anos para a populacao do pais A ultrapassar ou igualar a do pais B.\n", anos);
printf("Populacao final de A: %.0f\n", populacaoA);
printf("Populacao final de B: %.0f\n", populacaoB);

Após o loop, o programa exibe o número de anos necessários e as populações finais dos países A e B.

8. Fim do Programa:

return 0;

Indica que o programa foi executado com sucesso.

4. Recursos Recomendados

Livros

  1. “C Programming: A Modern Approach” – K. N. King.
  2. “The C Programming Language” – Brian W. Kernighan, Dennis M. Ritchie.
  3. “Introdução à Programação com C” – José Augusto N. G. Manzano.

Cursos Gratuitos

  1. Curso de C – Curso em Vídeo (YouTube).
  2. Arduino e C – Fundamentos no Coursera.

Sites e Apostilas

  1. W3Schools C (https://www.w3schools.com/c/)
  2. Learn-C.org (https://www.learn-c.org/)
  3. Documentação do Arduino (https://www.arduino.cc/)

Vídeos

  1. “C Programming Full Course” – freeCodeCamp (YouTube).
  2. “Arduino Programming for Beginners” – Programming Electronics Academy.

Fim da aula 04

Click to listen highlighted text!