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:
O algoritmo para esse cálculo pode ser estruturado como segue:
Solicitar ao usuário os valores de F1, F2 e θ.
Aplicar a fórmula acima.
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.
- Ler o valor do sensor de temperatura.
- Comparar com o limite estabelecido.
- Se a temperatura estiver acima do limite, acionar o ventilador.
- 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:
![Rendered by QuickLaTeX.com \[omega = \frac{2\pi N}{60}\]](https://cecead.com/wp-content/ql-cache/quicklatex.com-c122a1ab2f98e0957c25d14c4ba4b086_l3.png)
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)
- Ler temperatura do sensor.
- Se a temperatura for superior a um limite, ativar o motor.
- Se a temperatura for inferior ao limite, manter o motor desligado.
- 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:
-
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.
-
Entrada de Dados e Loop
while
:- Um
while (1)
cria um loop infinito, garantindo que o programa continue até o usuário inserir0
. - O
scanf("%d", &idade);
lê a entrada do usuário. - Se
idade == 0
, obreak;
encerra o loop. - Caso contrário, a idade é somada e o contador é incrementado.
- Um
-
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);
.
- Verificamos se
-
Caso Especial:
- Se nenhuma idade válida for inserida, exibimos
Nenhuma idade válida foi inserida.
.
- Se nenhuma idade válida for inserida, exibimos
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:
-
Declaração de Variáveis:
maior
emenor
: 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
emulheres
: contadores para o número de homens e mulheres.sexo
: armazena o sexo do indivíduo.
-
Loop
for
para 50 pessoas:- Solicita a altura e o sexo.
- Atualiza
maior
emenor
conforme a altura informada. - Se for um homem (
M
oum
), incrementa o contadorhomens
. - Se for uma mulher (
F
ouf
), incrementa o contadormulheres
e acumula a altura emsomaAlturaMulheres
. - Se for um sexo inválido, exibe um erro e repete a iteração.
-
Cálculo da Média das Mulheres:
- Se houver mulheres no grupo (
mulheres > 0
), calcula-se a média, senão, define-se0
para evitar divisão por zero.
- Se houver mulheres no grupo (
-
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
- “C Programming: A Modern Approach” – K. N. King.
- “The C Programming Language” – Brian W. Kernighan, Dennis M. Ritchie.
- “Introdução à Programação com C” – José Augusto N. G. Manzano.
Cursos Gratuitos
- Curso de C – Curso em Vídeo (YouTube).
- Arduino e C – Fundamentos no Coursera.
Sites e Apostilas
- W3Schools C (https://www.w3schools.com/c/)
- Learn-C.org (https://www.learn-c.org/)
- Documentação do Arduino (https://www.arduino.cc/)
Vídeos
- “C Programming Full Course” – freeCodeCamp (YouTube).
- “Arduino Programming for Beginners” – Programming Electronics Academy.
Fim da aula 04