Algoritmos Fabrcio Costa Santana prof fabriciooutlook com http
Algoritmos Fabrício Costa Santana prof. fabricio@outlook. com http: //professorfabricio. org
Plano da Disciplina • EMENTA • • Declaração de variáveis e constantes Tipos de variáveis Instruções de entrada e saída Tipos de representações de algoritmos Operadores aritméticos e lógicos Comandos de decisão Estruturas de repetição Vetores e matrizes
Plano da Disciplina • OBJETIVO GERAL • Estudar as técnicas de programação, baseando-se no aprendizado de algoritmos computacionais. • OBJETIVOS ESPECÍFICOS (Competências/Habilidades – aprendizagens que serão consolidadas pelos estudantes) • Resolver problemas computacionais. • Desenvolver o raciocínio lógico voltado para criação de programas e permitir o domínio das principais técnicas para a produção de algoritmos
Avaliações • AVALIAÇÃO 1 • INSTRUMENTO • Atividade em grupo NOTA Peso 20 • AVALIAÇÃO 2 • INSTRUMENTO • Prova Individual NOTA Peso 40 • AVALIAÇÃO 3 • INSTRUMENTO • Prova Individual NOTA Peso 40 • PROVA FINAL • INSTRUMENTO • Prova Individual (Para discentes que obtiverem nota final abaixo de 70 e maior ou igual a 40)
Referências Básicas • MANZANO & OLIVEIRA. Algoritmos: Lógica para Desenvolvimento de Programação de Computadores • FORBELONE & EBERSPACHER. Lógica de Programação • GUIMARÃES & LAGES. Algoritmos e Estruturas de Dados • PEREIRA, S. L. Estruturas de Dados Fundamentais
Introdução à lógica • O que é lógica? • Sequência coerente de pensamentos.
Introdução à lógica É possível trocar uma lâmpada obedecendo a sequência de ações abaixo? 1)Pegar uma escada; 2)Posicionar a escada embaixo da lâmpada; 3)Buscar uma lâmpada nova; 4)Colocar a lâmpada nova; 5)Retirar a lâmpada velha; 6)Subir na escada. 1)Pegar uma escada; 2)Posicionar a escada embaixo da lâmpada; 3)Buscar uma lâmpada nova; 4)Subir na escada; 5)Retirar a lâmpada velha; 6)Colocar a lâmpada nova.
Introdução • O raciocínio lógico na tecnologia da informação: Um esquema sistemático que define as interações de sinais no equipamento automático do processamento de dados, ou o computador científico com o critério e princípios formais de raciocínio e pensamento • Segundo Venancio (1997) lógica pode ser definida como sendo o estudo das leis do raciocínio e do modo de aplicá-las corretamente na demonstração da verdade. A utilização da lógica na vida do indivíduo é constante, visto que é ela quem possibilita a ordenação do pensamento humano (Forbellone, 1993).
Lógica de Programação • Conceito • O que é um programa? • Sequência lógica de instruções, com as ações para a resolução de problemas em computadores. • Linguagem de Programação • Conjunto de regras e comandos para a criação de programas de computador. • Gera-se o código-fonte com a sequência de instruções com as regras determinadas pela linguagem de programação. • Usa-se um programa chamado compilador para converter o código-fonte em uma linguagem compreensível pelo computador (linguagem de máquina), Existem programas chamados interpretadores que executam os comandos do código-fonte em sequência à medida em que são lidos.
Resolução de Problemas • Análise e Síntese • Modelagem
Modelagem de Problemas • Compraram-se 30 canetas iguais, que foram pagas com uma nota de R$ 100, obtendo-se R$ 67, 00 como troco. Quanto custou cada caneta?
Resolução de Problemas • Diante de um novo problema, pense no seguinte: • O que se deve descobrir ou calcular? • Quais são os dados disponíveis? São suficientes? • Quais as condições necessárias e suficientes para resolver o problema? • Faça um esboço informal. • Se possível modele matematicamente o problema.
O Problema das Moedas
Introdução à lógica André e quatro amigos praticam esportes diferentes. Com base nas dicas determine o nome e sobrenome de cada homem e o esporte que pratica. a) João pratica pesca. Um sobrenome é Sr. Soares. b) O Sr. Saraiva não pratica ciclismo, ele pratica golfe. c) Nem Davi Silva nem o Sr. Rocha praticam natação. d) O esporte de Pedro (cujo sobrenome não é Bernardes) é canoagem. e) Nem o Sr. Bernardes nem Mauro praticam natação. Nome André João Davi Pedro Mauro Sobrenome Soares Bernardes Silva Rocha Saraiva Esporte Natação Pesca Ciclismo Canoagem Golfe
Exercícios
Exercício 1 • Sérgio, Paulo e Flávio trabalham em três emissoras de TV e desempenham funções diferentes. Com base nas dicas, descubra o nome de cada profissional, a função que exerce e a emissora onde trabalha. 1. 2. 3. 4. Paulo não trabalha na GLOBO nem na SBT. O diretor trabalha na SBT. Sérgio atua como câmera. Uma emissora é TVE, uma função é cenógrafo. Nome Emissora Função
Exercício 2 • Raquel, Júlia, Rita e Carolina, Fernando, Paulo, Gustavo e Antônio divertem-se em uma festa. Sabe-se que: • Essas pessoas formam quatro casais • Carolina não é esposa de Paulo • Em um dado momento, observa-se que a mulher de Fernando está dançando com o marido de Raquel, enquanto Fernando, Carolina, Antônio, Paulo e Rita estão sentados, conversando. • A esposa de Antônio é: a) b) c) d) Carolina Júlia Raquel Rita
Exercício 3 • Cinco carros de cores diferentes partiram um após o outro da cidade de Itabuna para a cidade de Ilhéus. Com base nas dicas, descubra o nome de cada motorista, a cor do carro que dirigiu, a ordem em que partiu de Itabuna e a ordem em que chegou a Ilhéus. 1. O carro marrom, cujo motorista era um homem, foi o último a sair de Itabuna e o último a chegar em Ilhéus. 2. Laura, que não dirigia o carro cinza, foi a primeira a sair de Itabuna, mas foi a quarta a chegar em Ilhéus. 3. A mulher que dirigia o carro azul, que não era Nara, não saiu de Itabuna em primeiro lugar nem chegou primeiro em Ilhéus. 4. Um homem dirigiu o carro branco. 5. Nara não foi a segunda nem a quarta a sair de Itabuna. 6. Bruno não dirigiu o carro marrom. Ele chegou a Ilhéus imediatamente depois de Paula, que saiu de Itabuna e chegou em Ilhéus na mesma ordem. 7. Um carro é vermelho e um homem chama Mauro. Motorista Cor Partida Chegada
Respostas dos Exercícios Nome Emissora Função Sérgio Globo Câmera Paulo TVE Cenógrafo Flávio SBT Diretor Carolina Motorista Cor Partida Chegada Mauro Marrom 5º 5º Nara Cinza 3º 1º Laura Vermelho 1º 4º Bruno Branco 4º 3º Paula Azul 2º 2º
O problema do bolo
A receita Ingredientes: • 1 Lata de leite condensado • 1 Lata de milho sem a água • 1 colher (de sopa) de manteiga • 1 pacote de coco ralado • 3 ovos • 1 colher (de sopa) de fermento em pó Modo de preparo: • Bata no liquidificador, o milho, o leite condensado, a manteiga, o coco e os ovos. • Despeje a mistura acima em uma tigela. • Peneire o fermento e adicione-o à mistura. • Mexa delicadamente a mistura. • Em uma fôrma média de bolo, untada e polvilhada com fubá, despeje a massa. • leve ao forno médio pré-aquecido, por 35 min.
O problema da média • O problema: exibir a média das notas de um aluno de matemática do ensino médio, sabendo que o aluno recebe uma nota em cada unidade e o ano letivo possui 4 unidades. • Entradas • Processamento • Saída
Algoritmo Compreender o problema Identificar os dados de entrada Identificar os dados de saída Determinar o que é preciso para transformar dados de entrada em dados de saída: • • usar a estratégia do dividir-para-conquistar observar regras e limitações identificar todas as ações a realizar eliminar ambiguidades Construir o algoritmo Testar o algoritmo Executar o algoritmo
Dividir-para-conquistar É conhecido por método descendente (top-down method) ou método de refinamento passo-a-passo Consiste em dividir um problema em partes menores (ou subproblemas) de modo a que seja mais fácil a sua resolução. Exemplo: Fazer suco de laranja? • Lavar laranja; • Partir laranja ao meio; • Espremer laranja; • Filtrar o suco; • Servir o suco. Passo-a-passo, significa que cada passo é completado antes que o próximo comece. Exemplo: é impossível “ver novela” antes de executar por inteiro o passo anterior de “ligar a TV”
Características dos Algoritmos Um algoritmo tem cinco características importantes: • Finitude: deve sempre terminar após um número finito de passos. • Definição: cada passo de um algoritmo deve ser precisamente definido. As ações devem ser definidas rigorosamente e sem ambiguidades. • Entradas: deve ter zero ou mais entradas, isto é informações que são lhe são fornecidas antes do algoritmo iniciar. • Saídas: deve ter uma ou mais saídas, isto é quantidades que tem uma relação específica com as entradas. • Efetividade: deve ser efetivo. Isto significa que todas as operações devem ser suficientemente básicas de modo que possam ser em princípio executadas com precisão em um tempo finito por um humano usando papel e lápis.
Dicas para a criação de algoritmos 1. Procure conhecer e compreender, ao máximo, o problema a ser resolvido; 2. Identifique e defina os dados que, essencialmente, deverão ser informados para que o processamento seja realizado com sucesso (dados de entrada); 3. Descreva, detalhadamente, o processamento ou a transformação a ser executada sobre os dados de entrada, em busca dos resultados desejados (como chegar no objetivo); 4. Identifique e defina quais serão os dados resultantes do processamento ou transformação (dados de saída); 5. Construa o algoritmo que represente a solução encontrada com o detalhamento necessário para o seu entendimento; 6. Teste o algoritmo por meio de simulações e efetue as devidas correções que possam vir a ser necessárias na lógica proposta.
Como representar um algoritmo • A descrição narrativa • O fluxograma: Ex. : diagrama de blocos, diagrama de Chapin • Linguagem algorítmica (também chamada de pseudocódigo). Ex. : Português Estruturado
Como representar um algoritmo • • • Linear Estruturada Modular Diagrama de Chapin Português Estruturado
Estruturada Linear
Modular
Diagrama de Chapin
Português Estruturado algoritmo "media" var n 1, n 2, n 3, n 4, soma, media: real inicio leia(n 1) leia(n 2) leia(n 3) leia(n 4) soma <- n 1 + n 2 + n 3 + n 4 media <- soma / 4 escreva("Media: ", media) fimalgoritmo
Linguagem de Programação C #include <stdio. h> #include <stdlib. h> int main() { float n 1, n 2, n 3, n 4, soma, media; scanf("%f", &n 1); scanf("%f", &n 2); scanf("%f", &n 3); scanf("%f", &n 4); soma=n 1+n 2+n 3+n 4; media=soma/4; printf("A media final eh: %f n", media); }
Tipos de Dados 1. Dados Numéricos: Tipo Inteiro: São usados para armazenar números positivos e negativos, incluindo o zero. exemplos: 35 0 -12 Tipo Real: Também chamados de ponto flutuante, são usados para armazenar números nos positivos, negativos e fracionários. exemplos: 9 -12 4. 6 -89. 726
Tipos de Dados 2. Dados Literais : São valores contendo letras, números e símbolos especiais. Deve ser indicado entre aspas (“”). Tipo Caractere: São usados para armazenar um único caractere, que pode ser uma letra ou um símbolo. Exemplo: para identificar o turno de uma turma da faculdade, podemos armazenar apenas o caractere “M”, “V” ou “N” (Matutino, Vespertino ou Noturno) Tipo Cadeia: Também chamado de alfanumérico ou string, são usados para armazenar cadeia de caracteres: Exemplos: “Rua Alfa, 52”, “Fone: 3211 -3456”
Tipos de Dados 3. Dados Lógicos: Tipo Logico: Também chamado de booleano. Pode representar apenas dois valores: verdadeiro e falso
Tipos de Dados Exercício: Identifique os tipos de dados presentes na frase abaixo: Ela tem 8 filhos, pesa 48, 3 kg, seu exame de gravidez deu positivo e pintou numa placa: “Precisa-se de Babás. Urgente!”
Variáveis • É um dado que será armazenado no computador e que assumirá valores diferentes à medida que for utilizado e manipulado. • Regras de representação • O primeiro caractere do nome de uma variável não poderá ser, em hipótese alguma, um número; sempre deverá ser uma letra; • O nome de uma variável não poderá possuir espaços em branco; • O nome de uma variável não poderá ser uma palavra reservada (uma instrução ou comando); • Não poderão ser utilizados outros caracteres a não ser letras, números e sublinhado (underscore).
Variáveis • Exemplo: NOMEALUNO (Pedro, Afonso, Ana) NOTAALUNO (7, 23 10 2, 8) Deve ser identificado por um nome e pelo seu tipo. Exemplo: NOMEALUNO : caractere NOTAALUNO : real
Constantes • • Área da Circunferência = 3. 14159 * Raio ^ 2 Kelvin = Celcius + 273 Celcius / 5 = (Fahrenheit – 32) / 9 (Kelvin – 273) / 5 = (Fahrenheit – 32) / 9
Operadores Matemáticos Operador Operação Prioridade + Manutenção de sinal 1 Inversão de sinal 1 ^ ou ** Exponenciação 2 Divisão inteira 3 Mod Resto da divisão 3 / Divisão 3 * Multiplicação 3 + Adição 4 Subtração 4 ( ) Prioridade 1 Tipo Unário Binário Binário Resultado Positivo Negativo Real Inteiro ou Real Inteiro ou Real
Expressões Aritméticas • AREA <- ( BASE * ALTURA ) / 2 • X = { 43. [ 55 : ( 30 + 2 ) ] } • X <- ( 43 * ( 55 / ( 30 + 2 ) ) ) • X <- 2 * 5 + 4 • X <- 2 * ( 5 + 4 )
Expressões Aritméticas • a*x^2+b*x+c
Exercício 2
1 - Escreva as expressões abaixo na forma da sintaxe do Português Estruturado:
2 - Classifique os conteúdos das variáveis a seguir de acordo com seu tipo, assinalando com I para inteiros, R para reais, L para lógicos e C para caractere: a) ( b) ( c) ( d) ( e) ( f) ( )0 ). Verdadeiro. ) "Falso" ) 5. 7 ) 45. 8976 ) – 678 g) ( h) ( i) ( j) ( k) ( l) ( ) "cinco" ) "44. 3" ). Falso. ) "0" ) "Falso" ) 34
3 - Assinale com um X os nomes de variáveis válidos: a) ( b) ( c) ( d) ( e) ( f) ( g) ( h) ( ) abc ) (nome) ) 21 brasil ) guarda-chuva ) etc. ) zero ) guarda_chuva ) NUMERO i) ( ) nome*usuario j) ( ) #fone k) ( ) Casa 8 l) ( ) endereco m) ( ) "cinco" n) ( ) f o) ( ) casa 8
Respostas Exercício 2 1– a) 2 ^ x +1 / 2 - y b) z <- (1 + x) * (2 + y ^ 2) + 5 c) delta <- b ^ 2 - 4 * a * c d) (8 / x + 6 / y ) * (3 ^ x / 2) e) (1 / 2 - 5 ) + 2 ^ 3 * (5 + 3 / 2) f) x <- 5 + 10 + (1 / 2) ^ 3 g) (125 + 2 * 1 / 5) + 5 ^ 3 + (1/2*(5 / 2 + 8 + 1 / 3)) ^ 2
2 - Classifique os conteúdos das variáveis a seguir de acordo com seu tipo, assinalando com I para inteiros, R para reais, L para lógicos e C para caractere: a) ( I ) 0 b) ( L ). Verdadeiro. c) ( C ) "Falso" d) ( R ) 5. 7 e) ( R ) 45. 8976 f) ( I ) – 678 g) ( C ) "cinco" h) ( C ) "44. 3" i) ( L ). Falso. j) ( C ) "0" k) ( C ) "Falso" l) ( I ) 34
3 - Assinale com um X os nomes de variáveis válidos: a) ( X ) abc b) ( ) (nome) c) ( ) 21 brasil d) ( ) guarda-chuva e) ( ) etc. f) ( X ) zero g) ( X ) guarda_chuva h) ( X ) NUMERO i) ( ) nome*usuario j) ( ) #fone k) ( ) Casa 8 l) ( X ) endereco m) ( ) "cinco" n) ( X ) f o) ( X ) casa 8
O Visualg
Diagrama de Blocos
Diagrama de Blocos • Os diagramas devem ser feitos e quebrados em vários níveis. Os primeiros devem conter apenas as ideias gerais e detalhando-os posteriormente. • Deve ser desenvolvido preferencialmente de cima para baixo e da esquerda para a direita. • As linhas de fluxo de dados nunca devem se cruzar.
Diagrama de Blocos
Diagrama de Blocos Terminal Seta de Fluxo de Dados Processamento Entrada de Dados ou Operação Manual Entrada e Saída de Dados em Vídeo
Diagrama de Blocos Saída de Dados em Impressora Decisão Conector Entrada de Dados por Teclado Armazenamento em Disco Magnético
Diagrama de Blocos Sub-rotina
Diagrama de Blocos
Diagrama de Blocos
Algoritmos Simples – Soma de dois números Português Estruturado C algoritmo "soma_numeros" var X , A , B: inteiro inicio leia(A) leia(B) X <- A + B escreva(X) fimalgoritmo #include <stdio. h> #include <stdlib. h> main() { int X , A , B; scanf("%d“ , &A); scanf("%d“ , &B); X = A + B; printf("%d n", X); }
Algoritmos Simples – Cálculo da área de um círculo Português Estruturado C algoritmo "area_circulo" var A , R: real inicio leia(R) A <- 3. 14*R^2 escreva(A) fimalgoritmo #include <stdio. h> #include <stdlib. h> main() { float R , A; scanf("%f", &R); A = 3. 14 * R; printf("%f n", A); }
Estruturas de Controle – A Tomada de Decisões • Desvio Condicional Simples • Desvio Condicional Composto • Desvios Condicionais Encadeados
Operadores Relacionais Símbolo = <> > < >= <= Significado igual a diferente maior que menor que maior ou igual a menor ou igual a
Desvio Condicional Simples Portuquês Estruturado se (<condição>) então <instruções para condição verdadeira> fimse C If (condição) { <instruções para condição verdadeira> }
Desvio Condicional Simples (Português Estruturado) algoritmo "Soma_numeros" var X, A, B: inteiro inicio leia(A) leia(B) X <- A + B se (X>10) entao escreva (X) fimse fimalgoritmo
Desvio Condicional Simples (C) #include <stdio. h> #include <stdlib. h> main() { int X, A, B; scanf("%d", &A); scanf("%d", &B); X=A+B; if (X>10) { printf("X = %d n", X); } }
Desvio Condicional Composto se <(condição)> entao <instrução para condição verdadeira> senao <instrução para condição falsa> fimse
Desvio Condicional Composto algoritmo "Soma_Numeros" var X, A, B, R: inteiro inicio leia(A, B) X <- A + B se (X >= 10) entao R <- X + 5 senao R <- X - 7 fimse escreva(R) fimalgoritmo
Desvio Condicional Composto (C) #include <stdio. h> #include <stdlib. h> main() { int X, A, B; scanf("%d", &A); scanf("%d", &B); X=A+B; if (X>10) { R = X + 5 } else { R = X - 7 } printf(“R = %d n", R); }
Operadores Lógicos • Português Estruturado • Operador: E • Operador: OU • Operador: NÃO • C • Operador E: && • Operador OU: || • Operador NÃO: !
Operador Lógico: E Condição 1 FALSO VERDADEIRO Condição 2 FALSO VERDADEIRO Resultado FALSO VERDADEIRO O operador do tipo E é utilizado quando dois ou mais relacionamentos lógicos de uma determinada condição necessitam ser verdadeiros.
Operador Lógico: E algoritmo “TESTA_LOGICA_E” var NUMERO: inteiro inicio leia (NUMERO ) se (NUMERO >= 20) e (NUMERO <=90) entao escreva (“Esta na faixa de 20 a 90") senao escreva (“Esta FORA da faixa de 20 a 90") fimse fimalgoritmo
Operador Lógico: OU Condição 1 FALSO VERDADEIRO Condição 2 FALSO VERDADEIRO Resultado FALSO VERDADEIRO O operador do tipo OU é utilizado quando pelo menos um dos relacionamentos lógicos de uma condição necessita ser verdadeiro.
Operador Lógico: OU algoritmo “MEDIA_FALTAS_SITUACAO” var N 1, N 2, N 3, N 4, MEDIA: real FALTAS: inteiro inicio leia (N 1) leia (N 2) leia (N 3) leia (N 4) leia (FALTAS) MEDIA <- (N 1+N 2+N 3+N 4)/4 escreva (“A média é: ”, MEDIA) se (MEDIA < 7) ou (FALTAS > 20) entao escreva (“Reprovado”) senao escreva (“Aprovado”) fimse fimalgoritmo
Operador Lógico: NÃO Condição VERDADEIRO FALSO Resultado FALSO VERDADEIRO O operador do tipo NAO é utilizado quando se necessita estabelecer que uma determinada condição deve não ser verdadeira ou deve não ser falsa. O operador NAO se caracteriza por inverter o estado lógico de uma condição.
Operador Lógico: NÃO algoritmo "Testa_Logica_NAO" var A, B, C, X: inteiro inicio leia (A, B, X) se nao(X>5) entao C <- (A + B) * X senao C <- (A - B) * X fimse escreva (C) fimalgoritmo
TABELA VERDADE A F F V V B F V NÃO A NÃO B A OU B V V F V F V V F F V AEB F F F V
Considere os seguintes valores a = 5, b = 8 e c = 3 I. III. IV. (a < 8). ou. (b > 7) não (2 < c). e. (c < b) (b >= 6). ou. (6 < c). ou. não (a + 5 - c > 8) nao(a < 3). e. nao(b <= 7) Resolvendo as expressões lógicas acima, são verdadeiras as expressões: a) b) c) d) e) I, II e IV I e II I, III e IV II e III I, II e III
Desvio Condicional Encadeado se (<condição 1>) entao <instruções para condição 1 verdadeira> senao se (<condição 2>) entao <instruções para condição 2 verdadeira, porém condição 1 falsa> senao <instruções para condição 1 e condição 2 falsa> fimse
Desvio Condicional Encadeado
Desvio Condicional Encadeado Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste será de 10%; caso seja maior que 1000, o reajuste deverá ser de 5% Salário < 500, reajuste será de 15% Salário >= 500, mas <= 1000, reajuste será de 10% Salário > 1000, reajusto será de 5%
Desvio Condicional Encadeado
Desvio Condicional Encadeado (Português Estruturado) algoritmo "Reajusta_Salario" var novo_salario: real inicio leia (salario) se (salario < 500) entao novo_salario <- salario * 1. 15 senao se (salario <= 1000) entao novo_salario <- salario * 1. 10 senao novo_salario <- salario * 1. 05 fimse escreva (novo_salario) fimalgoritmo
Desvio Condicional Encadeado (C) #include <stdio. h> #include <stdlib. h> main() { float novo_salario, salario; scanf("%f", &salario); if (salario < 500) { novo_salario = salario * 1. 15; } else { if (salario <= 1000) { novo_salario = salario * 1. 10; } else { novo_salario = salario * 1. 05; } } printf ("Novo salario = %f n", novo_salario); }
Algoritmo Triângulo Problema: Precisa-se de um programa capaz de ler três valores para os lados de um triângulo e verificar se os lados fornecidos formam realmente um triângulo. Se esta condição for verdadeira, deve ser indicado qual tipo de triângulo foi formado: isósceles, escaleno ou equilátero.
S N N S
Algoritmo Triângulo algoritmo "Triangulo" var a, b, c: real inicio leia (a, b, c) se (a < b + c) e (b < a + c) e (c < a + b) entao se (a=b) e (b=c) entao escreva ("Triangulo Equilatero") senao se (a=b) ou (a=c) ou (c=b) entao escreva ("Triangulo Isosceles") senao escreva ("Triangulo Escaleno") fimse senao escreva ("As medidas nao formam um triangulo") fimse fimalgoritmo
Exercício 3 1. Escreva um algoritmo que leia dois números e mostre o produto desses números. 2. Faça um algoritmo que leia o nome e as idades de duas pessoas e mostre a soma das idades. 3. Escreva um algoritmo que deve ler uma temperatura em graus Celsius e apresentá-la convertida em graus Fahrenheit. A fórmula de conversão é F <- (9 * C + 160) / 5, sendo F a temperatura em Fahrenheit e C a temperatura em Celsius. 4. Maria quer saber quantos litros de gasolina precisa colocar em seu carro e quanto vai gastar para fazer uma viagem até a casa de sua irmã. • Dados extras: • Distância da casa de Maria até sua irmã : 520 km • Consumo do carro: 12 Km / l • Preço da gasolina: R$ 2, 00
Exercício 3 5. Escreva um algoritmo que leia dois números que deverão ser colocados, respectivamente, nas variáveis VA e VB. O algoritmo deve, então, trocar os valores de VA por VB e vice -versa e mostrar o conteúdo destas variáveis. 6. Elaborar um programa que efetue a leitura de três valores (A, B e C) e apresente como resultado final a soma dos quadrados três valores lidos. 7. Resolva as expressões lógicas, determinando se a expressão é verdadeira ou falsa: a) b) c) d) 2>3= (6<8)ou(3>7)= não (2<3)= (5>=6 ou 6<7 ou não(a+5 -6=8) {onde a = 5}
Exercício 3 8. Efetuar a leitura de um valor inteiro positivo ou negativo e apresentar o número lido como sendo um valor positivo, ou seja, o programa deverá apresentar o módulo de um número fornecido. Lembre-se de verificar se o número fornecido é menor que zero; sendo, multiplique-o por -1. 9. Elaborar um programa que efetue a leitura de um valor que esteja entre a faixa de 1 a 9. Após a leitura do valor fornecido pelo usuário, o programa deverá indicar uma de duas mensagens: "O valor está na faixa permitida", caso o usuário forneça o valor nesta faixa, ou a mensagem "O valor está fora da faixa permitida", caso o usuário forneça valores fora desta faixa numérica.
Exercício 3 10. Ler quatro valores referentes a quatro notas escolares de um aluno e imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da média escolar for maior ou igual a 7. Se o valor da média for menor que 7, solicitar a nota de exame, somar com o valor da média e obter nova média. Se a nova média for maior ou igual a 5, apresentar uma mensagem dizendo que o aluno foi aprovado em exame. Se o aluno não foi aprovado, indicar uma mensagem informando esta condição. Apresentar com as mensagens o valor da média do aluno, para qualquer condição.
Exercício 4 1. 2. 3. Escreva um algoritmo em português estruturado que seja capaz de ler uma temperatura em graus Fahrenheit e apresentá-la convertida em graus Celsius. A fórmula de conversão é: C <- (F - 32) * (5/9), sendo F a temperatura em fahrenheit e C a temperatura em Celsius. Escreva um algoritmo em português estruturado que seja capaz de calcular e apresentar o valor do volume de uma lata de óleo utilizando a fórmula: VOLUME <- 3. 14159 * RAIO ^ 2 * ALTURA Escreva um algoritmo em português estruturado que seja capaz de efetuar o cálculo da quantidade de litros de combustível gasta em uma viagem, utilizando um automóvel que faz 12 Km por litro. Para obter o cálculo, o usuário deve fornecer o tempo gasto (TEMPO) e a velocidade média (VELOCIDADE) durante a viagem. Desta forma, será possível obter a distância percorrida com a fórmula DISTANCIA <TEMPO * VELOCIDADE. Possuindo o valor da distância, basta calcular a quantidade de litros de combustível utilizada na viagem com a fórmula LITROS_USADOS <- DISTANCIA / 12. Ao final, o programa deve apresentar os valores da velocidade média (VELOCIDADE), tempo gasto na viagem (TEMPO), a distancia percorrida (DISTANCIA) e a quantidade de litros (LITROS_USADOS) utilizada na viagem.
Exercício 4 4. 5. 6. 7. 8. Elaborar um programa que efetue a leitura de um número inteiro e apresentar uma mensagem informando se o número é par ou ímpar. Dica: use o operador mod que retorna o resto da divisão de um número por outro. Ex. : 4 mod 2 = 0 Elaborar um programa que efetue a leitura de um valor que esteja entre a faixa de 50 a 100. Após aleitura do valor fornecido pelo usuário, o programa deverá indicar uma de duas mensagens: "O valor está na faixa permitida", caso o usuário forneça o valor nesta faixa, ou a mensagem "O valor está fora da faixa permitida", caso o usuário forneça valores menores que 50 ou maiores que 100. Efetuar a leitura de quatro números inteiros e apresentar os números que são divisíveis por 2 e 3. Caso o número seja divisível por 2 e 3, deverá ser exibida uma mensagem indicando esta condição. Dica: use o operador Mod que retorna o resto da divisão de um número por outro. Ex. : 4 Mod 2 = 0 Elaborar um programa que efetue a leitura de um determinado valor inteiro, e efetue a sua apresentação, caso o valor não seja maior que três. Crie um programa que leia dois valores numéricos, efetue a adição. Caso o valor somado seja maior ou igual a 10, apresentar somando a ele mais 5; caso contrário, apresentar subtraindo dele 7
Exercício 4 9. Coloque verdadeiro ou falso, para o resultado lógico das expressões abaixo. Considere para as respostas os valores: X = 1, A = 3, B = 5, C = 8 e D = 7 a). não. (X > 3) b) (X < 1). e. . não. (B > D) c). não. (D < 0). e. (C > 5) d). não. (C > 3). ou. (C < 7) e) (A > B). ou. (C > B) f) (X >=2) g) (X < 1). e. (B >=D) h) (D < 0). ou. (C > 5) i). não. (D > 3). ou. . não. (B < 7) j) (A > B). ou. . não. (C > B)
Exercício 4 10. Elaborar um programa que efetue a leitura de dois valores numéricos e apresente a mensagem “Números Iguais” caso os valores sejam iguais. Se os valores forem diferentes deverá ser exibido o resultado da diferença do maior pelo menor. Faça também diagrama de blocos. 11. Faça um algoritmo para efetuar a leitura de um valor inteiro positivo ou negativo e apresentar o número lido como sendo um valor positivo, ou seja, o programa deverá apresentar o módulo de um número fornecido. Lembre-se de verificar se o número fornecido é menor que zero; sendo, multiplique-o por -1. 12. Faça um algoritmo para efetuar a leitura de três valores (variáveis A, B e C) e efetuar o cálculo da equação completa de segundo grau (AX 2 + BX + C), apresentando as duas raízes, se para os valores informados for possível efetuar o referido cálculo. Lembre-se de que a variável A deve ser diferente de zero. • Formulas: • DELTA <- B ^ 2 - (4 * A * C) • X 1 <- (-B + sqrt(DELTA)) / 2 * A • X 2 <- (-B - sqrt(DELTA)) / 2 * A 13. Efetuar a leitura de três números inteiros e identificar o maior e o menor valores.
Laços de Repetição • Conceito • Exemplo: • Fatorial de 5! • 5! = 5 x 4 x 3 x 2 x 1 • Fatorial de 8450 • 8450! = 8450 x 8449 x 8448 x 8447 x 8446 x. . . X 3 x 2 x 1 • Probabilidade • n = Total de números possíveis a se escolher. • k = Quantidade de escolhas dentre o universo de números disponíveis.
Tipos de Laços de Repetição • Laço de Repetição com Teste Lógico no Início do Looping • Laço de Repetição com Teste Lógico no Fim do Looping • Laço de Repetição com Variável de Controle
Laço de Repetição com Teste Lógico no Início do Looping algoritmo "Pede_Numero" var X: inteiro R: inteiro inicio leia (X) R <- X * 3 escreva (R) leia (X) R <- X * 3 escreva (R) fimalgoritmo
Laço de Repetição com Teste Lógico no Início do Looping enquanto (condição) faca instruções executadas enquanto a condição for verdadeira fimenquanto
Laço de Repetição com Teste Lógico no Início do Looping
Laço de Repetição com Teste Lógico no Início do Looping algoritmo “Looping_1 A” var X, R, CONT: inteiro inicio CONT <- 1 enquanto (CONT <= 5) faca leia (X ) R <- X * 3 escreval (R) CONT <- CONT + 1 fimenquanto fimalgoritmo
Laço de Repetição com Teste Lógico no Início do Looping algoritmo “FATORIAL _ENQUANTO” var CONT, FAT : inteiro inicio //isto é um contador CONT 1 //isto é um acumulador FAT 1 enquanto (CONT <= 5) faca FAT * CONT + 1 fimenquanto escreval (“Fatorial de 5 é = ”, FAT) fimalgoritmo
Laço de Repetição com Teste Lógico no Início do Looping • Contador: Variável que controla a contagem do número de vezes que o trecho de programa deverá ser executado. • Acumulador: Variável usada para acumular valores. Deve ser inicializada sempre com um valor que é elemento nulo na operação a ser acumulada (se a operação for de multiplicação deve iniciada com valor=1 se for soma deve ser iniciada com valor=0)
Exercícios 1. Elabore um algoritmo que solicite ao usuário um número e apresente os resultados da tabuada de multiplicar deste número, a qual deverá ser impressa no seguinte formato (considerando o fornecimento do número 2): 2 x 1=2 2 x 2=4 2 x 3= 6 2 x 4= 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 2 x 10 = 20
Exercícios 2. Apresentar o total da soma obtida dos cem primeiros números inteiros (1+2+3+4+. . . +98+99+100). 3. Elaborar um programa que apresente no final o somatório dos valores inteiros pares existentes na faixa de 1 até 50. 4. Elaborar um programa que apresente os valores de conversão de graus Celsius em Fahrenheit, de 10 em 10 graus, iniciando a contagem em 10 graus Celsius e finalizando em 100 graus Celsius. O programa deve apresentar os valores das duas temperaturas. A fórmula de conversão F <- (9 * C + 160) / 5 5. Elaborar um programa que efetue a leitura de valores positivos inteiros até que um valor negativo seja informado. Ao final devem ser apresentados o maior e o menor valores informados pelo usuário.
Resposta – 1º algoritmo “TABUADA” var CONT, NUMERO: inteiro inicio escreva ("Digite um número: “) leia (NUMERO) CONT <- 1 enquanto (CONT <= 10) faca escreva (NUMERO, " X", CONT, " =", NUMERO*CONT) CONT <- CONT + 1 fimenquanto fimalgoritmo
Resposta – 2º algoritmo “ACUMULADOR” var CONTADOR, ACUMULADOR: inteiro inicio CONTADOR <-1 ACUMULADOR <-0 enquanto (CONTADOR<=100) faca ACUMULADOR <- ACUMULADOR + CONTADOR <- CONTADOR + 1 fimenquanto escreva (ACUMULADOR) fimalgoritmo
Resposta – 3º algoritmo “SOMA_PARES_DE_1_A_50” var CONTADOR, ACUMULADOR: inteiro inicio CONTADOR <- 1 ACUMULADOR <- 0 enquanto (CONTADOR <= 50) faca se (CONTADOR mod 2 = 0) entao ACUMULADOR <- ACUMULADOR + CONTADOR fimse CONTADOR <- CONTADOR + 1 fimenquanto escreva (ACUMULADOR) fimalgoritmo
Resposta – 4º algoritmo “TABELA_CELCIUS_FAHRENHEIT_10_A_10” var C, F: real inicio C <- 10 enquanto (C <= 100) faca F <- (9 * C + 160) / 5 escreva (C, "ºC", " são", F, "ºF“) C <- C + 10 fimenquanto fimalgoritmo
Resposta – 5º algoritmo “MAIOR_MENOR” var NUMERO, MAIOR, MENOR: inteiro inicio leia (NUMERO) MAIOR <- NUMERO MENOR <- NUMERO enquanto (NUMERO >= 0) faca se (NUMERO > MAIOR) entao MAIOR <- NUMERO fimse se (NUMERO < MENOR) entao MENOR <- NUMERO fimse leia NUMERO fimenquanto escreva ("Maior: ", MAIOR) escreva ("Menor: ", MENOR) fimalgoritmo
Laço de Repetição com Teste Lógico no Fim do Looping algoritmo "Pede_Numero" var X: inteiro R: inteiro inicio leia (X) R <- X * 3 escreva (R) leia (X) R <- X * 3 escreva (R) fimalgoritmo
Laço de Repetição com Teste Lógico no Fim do Looping repita instruções executadas até que a condição se torne verdadeira ate (Condição)
Laço de Repetição com Teste Lógico no Fim do Looping algoritmo “LOOPING_2 A” var X, R, CONT: inteiro inicio CONT <- 0 repita CONT <- CONT + 1 leia (X) R <- X * 3 escreva (R) ate (CONT >= 5) fimalgoritmo
Exemplo 1. Iniciar o programa e o modo de laço repita; 2. Ler um valor para a variável X ; 3. Efetuar a multiplicação do valor de X por 3, implicando o resultado em R; 4. Apresentar o valor calculado contido na variável R; 5. Solicitar do usuário se este deseja ou não continuar o programa; 6. Repetir os passos 2, 3, 4 e 5 até que a resposta do usuário seja diferente de sim.
Exemplo algoritmo “LOOPING_2 B” var X, R: inteiro RESP: caracter inicio RESP <- "sim" repita leia (X) R <- X * 3 escreva (R) escreva ("Deseja continuar? ") leia (RESP) ate (RESP <> "sim") fimalgoritmo
Laço de Repetição com Variável de Controle Conceito: Laço de repetição usado quando se sabe exatamente quantas repetições serão necessária para a execução de um programa. Português Estruturado para <variável> de <início> ate <fim> passo <incremento> faca <instruções> fimpara
Laço de Repetição com Variável de Controle • Diagrama de Blocos
Laço de Repetição com Variável de Controle algoritmo "Pede_Numero" var X: inteiro R: inteiro inicio leia (X) R <- X * 3 escreva (R) leia (X) R <- X * 3 escreva (R) fimalgoritmo
Laço de Repetição com Variável de Controle Algoritmo “LOOPING_PARA “ var R, X, CONT : inteiro inicio para CONT de 1 ate 5 passo 1 faca leia (X) R X*3 escreva (R) fimpara fimalgoritmo
Laço de Repetição com Variável de Controle Exemplo de algoritmo que não pode ser resolvido usando o laço de repetição com variável de controle: • Faça um algoritmo que leia vários números e que informe quantos desses números entre 100 e 200 foram digitados. Quando o valor 0 (zero) for lido o algoritmo deverá cessar sua execução.
Estrutura de dados - Vetores A variável simples armazena somente um valor de cada vez. As matrizes são variáveis que armazenam vários valores ao mesmo tempo, que possuem os mesmos tipos de dados, sendo chamadas de estruturas de dados homogêneas. A matrizes também são chamadas de: tabelas, arrays, variáveis indexadas, variáveis compostas, variáveis subscritas ou arranjos. A Matriz unidimensional é chamada de Vetor.
Estrutura de dados - vetores Matriz: Linha 1 2 3 4 Coluna 1 2 3 4 5
Estrutura de dados - vetores Vetor: Coluna 1 2 Linha 1 3 4 5
Estrutura de dados - vetores Exemplo 1: Crie um programa que calcule e apresente a média geral de uma turma de 5 alunos. Nº Nome Aluno Média 1 Alvaro 4. 5 2 Carla 6. 5 3 Felipe 8. 0 4 Marcos 3. 5 5 Sandra 6. 0
Estrutura de dados - vetores 1 2 3 4 5 MEDIA = 4. 5 6. 5 8. 0 3. 5 6. 0 var MEDIA : vetor [1. . 5] de real; Então: MEDIA [1] = 4. 5 MEDIA [2] = 6. 5 MEDIA [3] = 8. 0 MEDIA [4] = 3. 5 MEDIA [5] = 6. 0
Estrutura de dados - vetores Algoritmo: 1 - Criar a variável I para servir de contador, o vetor MEDIA com 5 posições, e as variáveis SOMA e MEDTUR; 2 - Ler o valor da MEDIA [ I ]; 5 X 3 - Somar MEDIA [ I ] à variável SOMA; 4 - Repetir os passos 2 e 3 até que o valor de I seja maior que 5; 5 - Calcular a MEDTUR; 6 - Mostrar o valor de MEDTUR.
Estrutura de dados - vetores algoritmo "MEDIA_TURMA" var I : inteiro SOMA, MEDTUR : real MEDIA : vetor [1. . 5] de real inicio SOMA <- 0 escreval ("Digite 5 médias") para I de 1 ate 5 passo 1 faca leia (MEDIA [ I ]) SOMA <- SOMA + MEDIA [ I ] fimpara MEDTUR <- SOMA / 5 escreval ("Média da Turma =", MEDTUR) fimalgoritmo
Estrutura de dados - vetores Exemplo 2: Crie um programa que leia dez elementos de um vetor A. Construir um vetor B de mesmo tipo, da seguinte forma: se o índice for par, o valor deverá ser multiplicado por 5, sendo ímpar, deverá ser somado com 5. Ao final mostrar o conteúdo do vetor B. Algoritmo: 1 - Criar a variável I para servir de contador, e os vetores A e B com 10 posições; 2 - Ler os 10 valores, e armazená-los em A; 3 - Se o índice é par, multiplicar o elemento de A por 5 e armazená-lo em B; senão somar o elemento de A com 5 e armazená-lo em B; 4 - Mostrar o vetor B;
Estrutura de dados - vetores algoritmo "TRATA_INDICE" var I : inteiro A, B : vetor [1. . 10] de inteiro inicio escreval ("Digite 10 valores") para I de 1 ate 10 passo 1 faca leia (A [ I ]) fimpara I de 1 ate 10 passo 1 faca se ( I mod 2 = 0 ) entao B [ I ] <- A [ I ] * 5 senao B [ I ] <- A [ I ] + 5 fimse escreval ( "B [“ , I , " ] =“ , B[I]) fimpara fimalgoritmo
Estrutura de dados - vetores Exemplo 3: Crie um programa que leia cinco elementos de um vetor A. Calcule e imprima o total da soma de todos os elementos que sejam ímpares. Algoritmo: 1 - Criar a variável I para servir de contador, a variável SOMA e o vetor A com 5 posições; 2 - Ler os 5 valores, e armazená-los em A; 3 - Se o elemento de A é ímpar, somá-lo à variável SOMA; 4 - Mostrar SOMA.
Estrutura de dados - vetores algoritmo "TRATA_ELEMENTO" var I , SOMA : inteiro A : vetor [1. . 5] de inteiro inicio SOMA <- 0 escreval ("Digite 5 valores") para I de 1 ate 5 passo 1 faca leia (A [ I ]) se ( A [ I ] mod 2 <> 0 ) entao SOMA <- SOMA + A [ I ] fimse fimpara escreva ("Soma =", SOMA) fimalgoritmo
Exercício 1 – Ler 10 elementos de uma matriz tipo vetor e apresentá-los 2 – Ler 8 elementos em uma matriz A tipo vetor. Construir uma matriz B de mesma dimensão com os elementos da matriz A multiplicados por 3. O elemento B[1] deverá ser implicado pelo elemento A[1] * 3, o elemento B[2] implicado pelo elemento A[2]*3 e assim por diante, até 8. Apresentar a matriz B. 3 – Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C, onde cada elemento de C é a subtração do elemento correspondente de A com B. Apresentar a matriz C.
Exercício 1– algoritmo “VETOR_LE_MOSTRA” var I : inteiro VET_A : vetor [1. . 10] de inteiro inicio escreva (“Digite 10 valores para o vetor”) para I de 1 ate 10 passo 1 faca leia (VET_A [ I ]) fimpara I de 1 ate 10 passo 1 faca escreva (“VET [” , I, “] =”, VET [ I ]) fimpara fimalgoritmo
Exercício 2– algoritmo “VEZES 3” var I : inteiro A, B : vetor [1. . 8] de inteiro inicio escreva (“Digite 8 valores para A”) para I de 1 ate 8 passo 1 faca leia ( A [ I ] ) B[I] A[I]*3 fimpara I de 1 ate 8 passo 1 faca escreva ( “B [” , I, “] =”, B [ I ] ) fimpara fimalgoritmo
Exercício 3 – algoritmo SUBTRAI var I : inteiro A, B, C : vetor [1. . 20] de inteiro inicio para I de 1 ate 20 passo 1 faca escreva (I) escreva (“Digite um valor para A”) leia A [ I ] escreva (“Digite um valor para B”) leia B [ I ] C[I] A[I]–B[I] fimpara I de 1 ate 20 passo 1 faca escreva (“C [” , I, “] =”, C [ I ]) fimpara fimalgoritmo
ARDUINO
Referências • HACHOUCHE, Anwar S - Apostila Arduino Básico V 1. 0 Eletrogate Componentes Eletrônicos - Acessado em 14/03/2016 <http: //apostilas. eletrogate. com> • MCROBERTS, Michael - Arduino básico; [tradução Rafael Zanolli]. - São Paulo : Novatec Editora, 2011. • ROBOCORE, Apostila Kit Iniciante V 7. 2 para Arduino
Arduino • Conceito: É uma plataforma de prototipagem em eletrônica, elaborado por Massimo Banzi e David Cuartielles em 2005 na Itália, e tem como objetivo facilitar o desenvolvimento de projetos, desde os mais simples aos mais complexos. Com esta plataforma é possível controlar diversos sensores, motores, leds, dentre vários outros componentes eletrônicos. • O Projeto Arduino une Hardware e Software, e resulta em uma plataforma de fácil desenvolvimento utilizando um microcontrolador.
Programa de Aprendizado • • Conhecendo o microcontrolador Arduino; Eletrônica básica; Componentes e sensores mais comuns; Fundamentos da programação para Arduino;
O Arduino Uno
Características • • Microcontrolador: ATmega 328 Portas Digitais: 14 Portas Analógicas: 6 Memória Flash: 32 KB (0, 5 KB usado no bootloader²) SRAM: 2 KB EEPROM: 1 KB Velocidade do Clock: 16 MHz Alimentação: • 5 V na USB do computador; • ou dentre 7. 5 V e 12 V contínua com um plug P 4; • ou pode ser ligada diretamente na placa utilizando os pinos Vin e Gnd.
Alimentação 1 3 2 1. 2. 3. 5 V na USB do computador; ou dentre 7. 5 V e 12 V contínua com um plug P 4; ou pode ser ligada diretamente na placa utilizando os pinos Vin e Gnd.
A Protoboard
Como funciona a Protoboard
Como funciona a Protoboard
Como funciona a Protoboard
Conteúdo do Kit Arduino • • • 1 × Arduino Uno R 3 1 × Cabo USB - AB 1 × Protoboard 1 × Display LCD 2 x 16 com conector soldado 1 × Motor CC 6 V com jumpers soldados 1 × Sensor de temperatura (termistor ntc 1 k) 1 × Sensor de luminosidade (LDR 5 mm) 1 × Jumpers premium - macho - conjunto com 20 1 × Potenciômetro 10 K Ohm 2 × Chave momentânea (botão) • • • 5 × LED difuso amarelo 5 mm 5 × LED difuso verde 5 mm 5 × LED difuso vermelho 5 mm 1 × LED de alto brilho (a cor pode variar) 15 × resistor de 330 Ohms 5 × resistor de 1 K Ohms 5 × resistor de 10 K Ohms 1 × resistor de 15 Ohms 1 × sensor/atuador piezoelétrico 1 × Relê de uso geral - bobina de 5 V - 40 m. A 1 x sensor de umidade do solo 6 x botões táteis coloridos
Kit Arduino
Componentes adicionais
Ambiente de Programação
Botões
ATIVIDADE 1 – PISCAR LED
Material Necessário
Diagrama
Código int led = 13; void setup() { pin. Mode(led, OUTPUT); } void loop() { digital. Write(led, HIGH); delay(1000); digital. Write(led, LOW); delay(1000); }
Código Comentado // Estabeleca um nome para o pino 13: int led = 13; // Se executa cada vez que o Arduino inicia: void setup() { pin. Mode(led, OUTPUT); // Inicializa o pino digital como saída. } /* A funcao loop() continua executando enquanto o Arduino estiver alimentado, ou ate que o botao reset seja acionado. */ void loop() { digital. Write(led, HIGH); // Acende o LED delay(1000); // Aguarda um segundo (1 s = 1000 ms) digital. Write(led, LOW); // Apaga o LED delay(1000); // Aguarda um segundo (1 s = 1000 ms) }
ATIVIDADE 2 – BOTÃO ACENDE LED
Material Necessário
Diagrama
Código const int button. Pin = 2; const int led. Pin = 13; int button. State = 0; void setup() { pin. Mode(led. Pin, OUTPUT); pin. Mode(button. Pin, INPUT); } void loop(){ button. State = digital. Read(button. Pin); if (button. State == HIGH) { digital. Write(led. Pin, HIGH); } else { digital. Write(led. Pin, LOW); } }
Código Comentado – Parte 1 /* Botao Liga e desliga um LED conectado ao pino digital 13 quando pressionado um botao conectado ao pino 2. O Circuito: */ // constantes nao sao alteradas. // Sao usadas aqui para definir os numeros dos pinos: const int button. Pin = 2; // o numero do pino do botão const int led. Pin = 13; // o numero do pino do LED // variaveis que devem mudar: int button. State = 0; // variavel para ler o estado do botao void setup() { // inicializa o pino do LED como saida: pin. Mode(led. Pin, OUTPUT); // inicializa o pino do botao como entrada: pin. Mode(button. Pin, INPUT); }
Código Comentado – Parte 2 void loop(){ // faz a leitura do valor do botao: button. State = digital. Read(button. Pin); // verifica se o botao esta pressionado. // em caso positivo, button. State e HIGH: if (button. State == HIGH) { // liga o LED: digital. Write(led. Pin, HIGH); } else { // desliga o LED: digital. Write(led. Pin, LOW); } }
Programando o Arduino • A linguagem de programação usada no Arduino foi baseada numa linguagem chamada Wiring e se assemelha muito ao C/C++ e geralmente temos os seguintes componentes para elaborar o algoritmo: • • Variáveis e constantes; Operadores booleanos, de comparação e aritméticos; Estrutura de controle; Funções digitais e analógicas.
Estrutura básica de um código /* Blink Acende e apaga um LED com intevalos de 1 segundo repetidamente. Este código de exeplo é de domínio público. */ // O pino 13 tem um LED já conectado na maioria das placas Arduino. // Você pode ou não conectar um diretamente na placa como na imagem. int led = 13; // cria uma variável do tipo inteiro com o nome led e valor 13 // a função setup roda uma única vez quando a placa é alimentada // ou quando o botão de reset é pressionado void setup() { // inicializa o pino digital como uma saída. pin. Mode(led, OUTPUT); } // a função loop roda indefinidamente: void loop() { digital. Write(led, HIGH); // acende o LED (HIGH é o nível de voltagem da placa) delay(1000); // espera de 1 segundo digital. Write(led, LOW); // apaga o LED delay(1000); // espera de 1 segundo }
Estrutura básica de um código • A função setup() é chamada quando um programa começa a rodar. Use esta função para inicializar as sua variáveis, os modos pinos, declarar o uso de livrarias, etc. Esta função será executada apenas uma vez após a placa Arduino ser ligada ou resetada. • Após criar uma fução setup() que declara os valores iniciais, a função loop() faz exatamente o que seu nome sugere, entra em looping (executa sempre o mesmo bloco de código), permitindo ao seu programa fazer mudanças e responder. Use esta função para controlar ativamente a placa Arduino.
Tipos de variáveis • • • boolean: valor verdadeiro (true) ou falso (false) char: um caractere byte: um byte, ou sequência de 8 bits int: número inteiro de 16 bits com sinal (-32768 a 32767) unsigned int: número inteiro de 16 bits sem sinal (0 a 65535) long: número inteiro de 16 bits com sinal (-2147483648 a 2147483647) unsigned long: número inteiro de 16 bits sem sinal (0 a 4294967295) float: número real de precisão simples (ponto flutuante) double: número real de precisão dupla (ponto flutuante) string: sequência de caracteres void: tipo vazio (não tem tipo)
Operadores aritméticos = (igualdade) + (adição) - (subtração) * (multiplicação) / (divisão) % (resto da divisão)
Operadores relacionais == (igual a) != (diferente de) < (menor que) > (maior que) <= (menor ou igual a) >= (maior ou igual a)
Operadores lógicos && (e) || (ou) ! (não)
Desvio Condicional Simples • if, que é usado juntamente com um operador de comparação, verifica quando uma condição é satisfeita, como por exemplo um input acima de um determinado valor. O formato para uma verificação if é: if (alguma. Variavel > 50) { // faça alguma coisa }
Desvio Condicional Composto • if/else permite um controle maior sobre o fluxo de código do que a sentença if básica, tornando possível que múltiplos testes sejam agrupados. Por exemplo, uma entrada analógica poderia ser verificada e uma ação específica seria tomada se o valor de input fosse menor que 500 e outra ação seria tomada se o input fosse 500 ou mais. O código seria assim: if (pin. Five. Input < 500) { // ação A } Else { // ação B }
Laço de repetição com teste lógico no início do looping • while fará com que o bloco de código entre chaves se repita continua e indefinidamente até que a expressão entre parênteses() se torne falsa. Algo tem que provocar uma mudança no valor da variável que está sendo verificada ou o código vai sempre ficar dando voltas dentro do while. Isto poderia ser o incremento de uma variável ou uma condição externa como o teste de um sensor. while(expressão) { // código }
Laço de repetição com teste lógico no fim do looping • O do funciona da mesma maneira que o while loop, com a exceção de que a condição é testada no final do bloco de código. Enquanto no while, se a condição for falsa, o bloco de código não será executado, no do ele sempre será executado pelo menos uma vez. do { // bloco de código } while (condição);
Laço de repetição com variável de controle • A sentença for é utilizada para repetir um bloco de código delimitado por um contador com incremento que é usado para controlar e finalizar o loop. • Há três partes no cabeçalho do for: for (inicialização; condição; incremento) { //sentença(s); } Ex: for (int i=0; i <= 255; i++) { analog. Write(PWMpin, i); delay(10); }
Funções - Entrada e saída digital • pin. Mode (pin, mode) • Configura o pino especificado para que se comporte ou como uma entrada (input) ou uma saída (output). Veja a descrição de pinos digitais para mais detalhes. • Sintaxe: pin. Mode(pin, mode) • pin: o número do pin o qual você deseja predeterminar. • mode: pode ser INPUT ou OUTPUT • digital. Write (pin, value) • Escreve um valor HIGH ou um LOW em um pino digital. • Se o pino foi configurado como uma saída (output) com o pin. Mode(), sua voltagem será determinada ao valor correspondente: 5 V para HIGH, 0 V (terra) para LOW. • Se o pino está configurado como uma entrada (input) escrever um HIGH levantará o resistor interno de 10 ou 20 KΩ Escrever um LOW rebaixará o resistor. • Sintaxe: digital. Write(pin, valor) • pin: o número do pin • valor: HIGH ou LOW • int digital. Read (pin) • Lê o valor de um pino digital especificado, HIGH ou LOW. • Sintaxe: digital. Read(pin) • pin: o número do pin digital que você quer ler ( int)
int led. Pin = 13; // LED conectado ao pino digital 13 int in. Pin = 7; // botão conectado ao pino digital 7 int val = 0; // variável para armazenar o valor lido void setup() { pin. Mode(led. Pin, OUTPUT); // pré-determina o pino digital 13 como uma saída pin. Mode(in. Pin, INPUT); // pré-determina o pino dgital 7 como uma entrada } void loop() { val = digital. Read(in. Pin); // lê o pino de entrada digital. Write(led. Pin, val); // acende ou apaga o LED de acordo com o pino de entrada }
Funções - Entrada e saída analógica • int analog. Read (pin) • Lê o valor de um pino analógico especificado. A placa Arduino contém um conversor analógico-digital de 10 bits com 6 canais (8 canais no Mini e no Nano). Com isto ele pode mapear voltagens de entrada entre 0 e 5 volts para valores inteiros entre 0 e 1023. • Sintaxe: analog. Read(pin) • pin: o número do pino analógico que se deseja ler (0 a 5 na maioria das placas, 0 ta 7 no Mini e no Nano) • Retorno: int (0 a 1023) • analog. Write (pin, value) – PWM • Escreve um valor analógico (onda PWM) em um pino. Pode ser usado para acender um LED variando o brilho ou girar um motor a velocidade variável. Nas novas placas Arduino (incluindo o Mini e o BT) com o chip ATmega 168 esta função é eficiente nos pinos 3, 5, 6, 9, 10 e 11. Placas Arduino mais antigas com um ATmega 8 suportam o analog. Write() apenas nos pinos 9, 10 e 11. • Sintaxe: analog. Write(pin, valor) • pin: o pino no qual se deseja escrever • valor: o rendimento do ciclo: entre 0 (sempre desligado) e 255 (sempre ligado).
ATIVIDADE 3 – POTENCIÔMETRO PISCA LED
Material Necessário
Diagrama
Código const int Pino. Potenciometro = A 0; const int Led = 13; int Valor. Pot = 0; int pwm = 0; void setup() { pin. Mode(Led, OUTPUT); } void loop() { Valor. Pot = analog. Read(Pino. Potenciometro); digital. Write(Led, HIGH); delay(Valor. Pot); digital. Write(Led, LOW); delay(Valor. Pot); }
Projeto 1 Medidor de umidade de solo - ler o sensor de umidade de solo e indicar o nível de umidade através de 3 leds (vermelho representa um solo seco, amarelo representa média humidade e verde muito húmido). Dica: use um como com areia para simular o solo. Projeto 2 Medidor de luminosidade - ler o sensor de lumnosidade e indicar o nível de luminosidade através de 3 leds (vermelho representa pouca luminosidade, amarelo representa média luminosidade e verde muita luminosidade). Projeto 3 Semáforo - Uma simulação de um semáforo real de trânsito com dois conjuntos de leds verde, amarelo e vermelho. Projeto 4 Dimmer - Um led de alto brilho (led transparente) que altera a intensidade de sua luminosidade de acordo com o giro de um potenciômetro.
Projeto 5 Iluminação Automatizada - Um Led Alto Brilho que altera a intensidade de sua luminosidade de acordo com a luminosidade do ambiente (use um sensor de luminosidade). Se a iluminação ambiente, por qualquer motivo, diminuir ou apagar completamente, um led de alto brilho acende gradativamente. Projeto 6 Piano com 3 teclas - Cada um dos três botões quando pressionados produzem um som diferente. Dica: usando o sensor piezoelétrico como elemento de saída, ele pode se tornar uma sirene (buzzer). Projeto 7 Termômetro - ler o sensor de temperatura (termistor) e indicar a temperatura através de 2 leds (verde representa temperatura até 25ºC e vermelho acima de 25ºC). Projeto 8 Motor acionado por botão - Ao pressionar o botão uma vez, o motor é acionado. Ao pressionar o botão novamente, o motor é desligado.
- Slides: 187