Sie sind auf Seite 1von 116

PROGRAMAO COM ARDUINO PARA AUTOMAO INDUSTRIAL

2014
Professor: Jordan Henrique de Souza Furno Curso: Tcnico em Automao Industrial Disciplina: Lgica de Programao
1

Sumrio
Captulo 1 - Introduo......................................................................................04 1.1.Pblico Alvo......................................................................................04 1.2.Requisitos de Hardware e Software.................................................04 Captulo 2 - Introduo Programao em C..................................................05 2.1. Fluxogramas Representativos.........................................................05 2.2. Tipos de Variveis e Dados.............................................................07 2.3 Exerccios.........................................................................................09 Captulo 3 - Operadores e Desvio Condicional.................................................10 3.1. Exerccios........................................................................................14 3.2. Laos de Repetio.........................................................................17 3.3. Exerccios........................................................................................19 3.4. Looping com varivel de controle....................................................20 3.5. Exerccios........................................................................................21 3.6. Um pouco de C...............................................................................22 3.7. Instalando o Dev C++ e Fazendo nosso Primeiro Programa!.........25 3.8. Exerccios........................................................................................35 Captulo 4 - Entrada e Sada de dados em C!..................................................36 4.1. Resumindo Nosso Conhecimento!..................................................38 4.2. Tipos de Dados, Operadores Matemticos, Lgicos e Relacionais.............................................................................................41 4.3. Exemplos.......................................................................................45 Captulo 5 - Condicionais IF, ELSE e SWITCH-CASE.....................................50 5.1. Compreendendo o IF e ELSE........................................................50 5.2. Lgica Comentada..........................................................................51 5.3. Exemplos........................................................................................55 5.4. Condicional SWITCH-CASE (Escolha-caso)..................................62 5.5. Exemplos........................................................................................62 5.6 Exerccios........................................................................................68 Captulo 6 - Tipo de Dado Char e Strings........................................................69
2

Captulo 7 - Laos de Repetio FOR, While e Do-While................................71 7.1. Exemplos.........................................................................................73 7.2. Exerccios........................................................................................83 Captulo 8 - Vetores, Matrizes e Strings...........................................................84 8.1. Vetores............................................................................................84 8.2. Cadeia de caracteres(String)...........................................................87 8.3. Matrizes...........................................................................................89 8.4. Exemplos.........................................................................................90 8.5. Exerccios........................................................................................94 Captulo 9 Funes........................................................................................95 9.1. Exerccios......................................................................................100 Captulo 10 Arduino.....................................................................................101 10.1. Configurando o Arduino para Programao................................102 10.2. Caractersticas do Arduino UNO.................................................104 10.3. Funes Setup e Loop e principais Comandos...........................105 10.4. Exemplos.....................................................................................106 10.5. Exerccios....................................................................................115 Referncias Bibliogrficas...............................................................................116

Captulo 1 Introduo
O Mundo da eletrnica, vem crescendo muito com o decorrer do tempo e se atualizando de forma constante. Atualmente vrios processos vem sendo automatizados de forma a proporcionar um melhor desempenho em suas finalidades, porm a utilizao da eletrnica analgica e digital de formas separadas vem sendo uma limitao para determinados casos. Ento com o passar dos anos uma rea que cresceu e continua se expandindo bastante a de programao de microcontroladores em combinao com circuitos analgicos e digitais e tambm circuitos de potncia.

1.1. Pblico Alvo


Esta apostila destina-se Engenheiros: Eltricos , Eletrnicos, Mecatrnicos e de Automao e Controle, Tambm Tcnicos em: Automao Industrial, Eletrotcnica, Eletrnica, Programao e Hobistas em Geral, onde sero abordados os seguintes temas: - Noes Bsicas de Eletrnica Analgica e Digital - Noes Bsicas de Programao em C - Ambiente de Desenvolvimento Arduino

1.2. Requisitos de Hardware e Software


Hardware: Microcomputador Pentium de 200MHz ou superior; 16 MB de memria RAM; 300 MB livres de HD;

Software: Sistema operacional XP ou superior, de preferncia Windows 7; Software de programao Arduino.

Captulo 2 Introduo a Programao em C


A Linguagem de programao em C, um tipo de linguagem que chamamos de Case-Sensitive, que significa sensvel ao tamanho ou seja o fato da linguagem C ser Case-Sensitive, faz com que nossos programas tenham limitaes tais como em declaraes de variveis onde palavras iguais porm com caracteres maisculos e minsculo iro fazer muita diferena. Por exemplo: Arduino diferente de arduino seus significados so o mesmo mas o fato de um ter o primeiro caractere maisculo e o outro ter minsculo, isso faz com que sejam palavras diferentes. Isto tambm ir influenciar na programao relacionada s palavras reservadas da linguagem C, que geralmente so comandos, anlises condicionais, laos de repetio e etc. Que so as palavras que j vem pr-definidas na nossa linguagem de programao.

2.1. Fluxogramas Representativos


Fluxogramas representativos so utilizados para a construo de algoritmos com a finalidade de solucionar um determinado problema, sendo ele composto por uma sequncia finita de passos at uma soluo final. Abaixo temos as figuras representativas de cada funo em um determinado fluxograma.

Figura 2.1

Fluxogramas representativos podem ser encontrados de diversas maneiras diferentes as figuras so utilizadas geralmente para que voc possa definir a seguncia de passos e interpret-las. Vejamos um exemplo de um fluxograma representativo para encontrar a mdia entre trs notas e retornar uma mensagem se media maior ou igual 7 aprovado seno reprovado.

Figura 2.2 Interpretando nosso fluxograma representativo, temos o terminal inicio que comea o programa uma entrada de dados que recebe quatro valores diferentes um processamento que calcula a mdia(soma todos e divide por quatro), uma analise condicional que mostra como sada aprovado se mdia maior ou igual a sete ou reprovado se mdia menor que sete, o conector une as duas setas de fluxo finais encerrando o fluxograma com o terminal fim. Este tipo de fluxograma apenas modo interpretativo, podendo ser elaborado de diversas formas diferente, isso ir variar de pessoa para pessoa a seguir o mesmo exemplo porm de uma forma um pouco diferente.

Figura 2.3 J o fluxograma acima, faz a mesma funo que o da figura 2.2, porm ele trabalha em cima do uso de variveis, onde N1, N2, N3 e N4, sero responsveis por guardar as quatro notas fornecida pelo usurio e M se encarregar de realizar o processamento(mdia) dessas notas que a soma das notas dividido pela quantidade de notas fornecida, na analise condicional a varivel M, analisada pois ela responsvel por guardar o resultado do processamento, por fim temos as sadas aprovado e reprovado o conector e o terminal fim.

2.2. Tipos de Variveis e Dados


Tipos Inteiros(Int): So tipos inteiros, os dados numricos positivos ou negativos, excluindo-se, destes qualquer fracionrio. Como exemplo deste tipo de dado, tm-se os valores : 35,0,-56; Tipos Reais(Float): So tipos reais, os dados numricos positivos, negativos e nmeros fracionrios. Ex. : 35,0,-56,1.2,-45.897 Tipos Caracteres(Char): So caracteres, indicados por aspas simples Ex.: a, Z, j. Os caracteres podem serletras, nmeros e smbolos especiais. Uma sequncia de caracteres deve ser indicada entre aspas(). Ex.: PROGRAMAO,Rua Alfa, ,98 e so chamadas de Strings, que nada mais so que um vetor de caracteres. Tipos Lgicos(Bool): So tipos lgicos ou boleanos, os dados com valores verdadeiro ou falso, e deve ser escrito entre pontos. Ex.: .Falso.,.Verdadeiro..

O nome de uma varivel utilizado para sua identificao e posterior uso dentro de um programa, sendo assim, necessrio estabelecer algumas regras de utilizao das mesmas: Nomes de variveis podero ser atribudos com um ou mais caracteres; O primeiro caractere do nome de uma varivel no poder ser em hiptese alguma, um nmero, sempre dever ser uma letra; O nome de uma varivel no poder possuir espaos em branco; No poder ser nome de uma varivel, uma instruode programa; No podero ser utilizados outros caracteres a no ser letras e nmeros. Obs.: o caracter _ Under-line ou sub-linha considerado uma letra. Tem-se como definio de constante tudo aquilo que fixo ou estvel. E existiro vrios momentos em que este conceito dever estar um uso. Por exemplo, o valor 1.23 da frmula a seguir uma constante: RESULTADO=ENTRADA*1.23. +: Realiza a operao de Soma -: Realiza a operao de Subtrao *: Realiza a operao de Multiplicao /: Realiza a operao de Diviso Na programao comum usar frmulas matemticas, mas para facilitar a escrita da programao as frmulas so escritas de uma forma diferenciada. Como exemplo a rea do crculo: 3.14*r*r Cada linguagem de programao usa um conjunto de palavras onde cada uma desenvolve uma ao. Estas palavras reservadas de cada linguagem so conhecidas como comandos ou instrues. Daqui para frente vamos utilizar instrues em portugus estruturado, tais como : inicio, fim, var , programa, enquanto, se, ento, seno, para, escreva, leia, faa, repita e at que, entre outrasque sero estudadas. Ler dois valores Efetuar a soma destes valores Apresentar o resultado

2.3. Exerccios
1 Indique o tipo de varivel que podero armazenar os valores abaixo. I : inteiro; R : real; S : String ou Literal ou Caractere; L : Lgico ou Booleano. ( )1000 ( ) 0 ( ) -900 ( ).Verdadeiro. ( )-456 ( )34 ( )Casa 8 ( )0 ( )-1.56 ( ).falso. ( )1.87 ( ).F. 2 Assinale com X os nomes vlidos de uma varivel ( )Endereco ( )21brasil ( )Fone$com ( )NomeUsuario ( )Nome_usuario ( )Nome*usuario ( )End-A ( )Cidade3 ( )#Cabec ( )23 ( )N23 3 Desenvolva a lgica de um programa que efetue o clculo da rea de uma circunferncia, apresentando a medida da rea calculada. Frmula : Area=Pi*Raio**2 4 Elaborar um algoritmo que calcule o salrio de um professor onde o usurio dever entrar com o nmero de aulas dadas, o valor da hora aula e o percentual de desconto do INSS. 5 Ler dois valores A e B, efetuar a troca dos valores de forma que a varivel A passe a possuir o valor da varivel B e que a varivel B passe a possuir o valor da varivel A. Apresentar os valores trocados 6 Ler dois valores A e B, efetuar as operaes deadio, subtrao, multiplicao e diviso de A por B, apresentando nofinal os quatro resultados obtidos. 7 Efetuar o clculo do valor de uma prestao em atraso, utilizando a frmula: PRESTAO:=VALOR+(VALOR*(TAXA/100)*TEMPO). 8 Indique o tipo de varivel que podero armazenar os valores abaixo. I : inteiro; R : real; S : String ou Literal ou Caractere; L : Lgico ou Booleano. ( )-900 ( )0 ( ) -900 ( ).Verdadeiro. ( )4.54 ( )34 ( ).falso. ( )Real 9 Assinale com X os nomes vlidos de uma varivel ( ) Dia 21 ( )7quedas ( )C/C ( )x*y ( )Senha_conta2 ( )Nome Cliente
9

Captulo 3 - Operadores e Desvio Condicional


Voc j aprendeu como trabalhar com entrada, processamento e sada. Apesar de j conseguir solucionar problemas e transform-los em programas, os recusrsos aqui estudados so limitados, pois haver momentos em que um determinado valor dentro de um programa necessitar ser tratado para se efetuar um processamento mais adequado. Para aprender-mos desvio condicional devemos conhecer os operadores utilizados para se estabelecer uma condio. So eles:

Figura 3.1

Figura 3.2

Figura 3.3

10

Imagine a seguinte situao: um programa que apresente a mdia escolar de um aluno. Baseado em sua mdia, se o aluno tiver nota maior ou igual a 7 devera apresentar uma mensagem parabenizando o aluno. Para solucionar o problema proposto ser necessrio trabalhar uma nova instruo: SE...ENTO...FIM_SE. Esta instruo tem por finalidade tomar uma deciso. Sendo a condio verdadeira, sero executadas todas as instrues que estejam entre a instruo se... ento e a instruo fim_se. Vejamos abaixo a Sintaxe: SE <Condio> ENTO <instrues para condio verdadeira> FIM_SE <instrues executadas se a condio for falsa ou aps a condio ser verdadeira> Exemplo: elaborar um programa que pea dois valores para as variveis A e B, efetue a soma das mesmas e apresente o resultado se a soma for maior que 10. Resoluo: Leia A e B Faa A + B e Guarde em C SE < C>10 > ENTO <Mostre o valor de C> FIM_SE Interpretao: Primeiro o nosso programa acima ir ler ou receber do usurio os valores de A e de B, em seguida ele vai fazer a soma de A com B e guardar na varivel C, ento aps isso ele faz a analise condicional: SE C for maior que 10 ele ir mostrar o valor de C, caso contrrio ele no faz nada. O desvio condicional composto utiliza a estrutura SE...ENTO...SENO...FIM_SE Vejamos a sintaxe do desvio condicional composto na prxima pgina.

11

SE <Condio> ENTO <instrues para condio verdadeira> SE <Condio> ENTO <instrues para condio verdadeira> SENO <instrues para condio falsa> FIM_SE SENO SE <Condio> ENTO <instrues para condio verdadeira> SENO <instrues para condio falsa> FIM_SE FIM_SE Exemplo : Ler 4 notas escolares de um aluno. Se a mdia do aluno for maior ou igual a 7 apresentar a mdia e uma mensagem dizendo que foi aprovado, senao, efetuar a leitura da nota do exame, somar mdia e dividir por dois, se a mdia for maior ou igual a 5 apresentar a mdia e uma mensagem dizendo que est aprovado, senao apresentar uma mensagem que est reprovado.

12

Resoluo: Leia n1, n2, n3, n4 Faa n1+n2+n3+n4 e guarde em media SE <media>=7> ENTO <Mostre Aprovado> SENO Leia n5 Faa (media + n5)/2 e guarde em media2 FIM_SE SE <media2>=5> ENTO <Mostre a media e aprovado> SENO <reprovado> FIM_SE Interpretao: Primeiro o nosso programa ir ler ou receber as notas n1, n2, n3 e n4, logo aps isso ele ir som-las, dividir o resultado por 4 e guardar na varivel media, ento aps isso ele realiza anlise condicional SE media for maior ou igual a 7 ele ir mostrar Aprovado, SENAO ele ir ler a nota do exame(n5) som-la com a media, dividir por 2 e depois guardar na varivel media2 encerrando a primeira anlise condicional. Aps isso ele inicia a segunda anlise condicional, onde SE a media2 for maior ou igual a 5 ENTO ele ira mostrar o valor da media e a mensagem aprovado, SENO ele ir mostrar apenas reprovado aps isso encerra -se o nosso programa. Nosso mesmo cdigo acima elaborado em um compilador C como o Dev C++ ou Code Blocks ficaria da seguinte maneira.

13

#include <stdio.h> void main() { float n1, n2, n3, n4, n5, media,media2; // declarao de variveis

scanf("%f %f %f %f",&n1, &n2, &n3, &n4); // entrada de dados media = (n1+n2+n3+n4)/4; if (media>=7) { printf("Aprovado"); return; } else { scanf("%f", &n5); media2=(media+n5)/2; } if (media2>=5) { printf("%.2f, aprovado",media2); } else { printf("Reprovado"); } system ("PAUSE"); return; } // pausa // encerramento da funo // saida de dados // quarta analise condicional // saida de dados // terceira analise condicional // entrada de dados // processamento // segunda analise condicional // saida de dados // encerramento da funo // processamento // primeira analise condicional

14

Na funo apresentada o programa declara sete variveis, onde quatro(n1, n2, n3, n4) iro receber as notas e calcularo a media, caso o aluno tenha media acima ou equivalente a 7, uma mensagem aprovado exibida e o programa encerra, caso contrrio recebe uma nota n5, soma-se a varivel media, divide por dois e guarda em media2, ento uma nova analise condicional realizada, caso media2 for maior ou equivalente a 5, o aluno aprovado, caso contrrio o aluno est reprovado e o programa encerra.

15

3.1. Exerccios
1 Elaborar um programa que efetue o clculo do reajuste de salrio de um funcionrio. Considere que o funcionrio dever receber um reajuste de 15% caso seu salario seja menor que 500. Se o salario for maior ou igual a 500 mas n\menor ou igual a 1000, seu reajuste ser de 10%, e caso seja ainda maior que 1000, o reajuste dever ser de 5%. ler um valor para o salario verificar se o valor de salario < 500; se sim, reajustar em 15% verificar se o valor de salario <=1000; se sim, reajustar em 10% verificar se o valor de salario > 1000; se sim, reajustar em 5% apresentar o valor reajustado. 2 Efetuar a leitura de trs valores (a,b,c) apresent-los em ordem crescente. 3 Efetuar a leitura de trs valores (a,b,c) e efetuar o clculo da equao de segundo grau, apresentando as duas razes, se para os valores informados for possvel efetuar o referido clculo. 4 Ler dois valores numricos e apresentar a diferena do maior para o menor. 5 Efetuar a leitura de um nmero inteiro positivoou negativo e apresent-lo como sendo positivo. 6 Efetuar a leitura de 4 numeros inteiros e apresentar os que so divisiveis por 2 ou 3.

16

3.2. Laos de Repetio


Looping com teste lgico no incio Este tipo de estrutura efetua um teste lgico no incio do looping, verificando se permitido executar o trecho de intrues subordinado a este looping. Esta estrutura conhecida como: enquanto, atravs do conjunto de instrues ENQUANTO...FAA...FIM_ENQUANTO. Esta estrutura, tem o seu funcionamento controlado por deciso, podendo executar um determinado conjunto de instrues enquanto a condio verificada for verdadeira. No momento em que esta condio se torna falsa o processamento da rotina desviado para fora do looping. SINTAXE ENQUANTO <condio> FAA <conjunto de instrues para condio verdadeira> FIM_ENQUANTO Exemplo: Considere o problema: Pedir a leitura de um valor para a varivel x, multiplicar este valor por 3, implicando-o varivel de resposta R e apresentar o valor R obtido, repetindo esta seqncia por 5 vezes. Resoluo: Faa contador igual a 1 ENQUANTO < contador<=5 > FAA Leia x Faa x*3 e guarde em R Mostre R contador = contador+1 FIM_ENQUANTO Interpretao: criar uma varivel para servir como contador com valor inicial 1; enquanto o valor do contador for < ou = a 5, Ler um valor para a varivel x; Efetuar a multiplicao do valor de x por 3, implicar o resultado em r; apresentar o valor calculado contido na varivel R; Acrescentar +1 varivel contador; Quando contador for maior que 5, encerrar o processamento do looping.

17

Exemplo: Elaborar o algoritmo de um programa que efetue o calculo da fatorial do nmero 5. Fatorial o produto dos nmeros naturais desde 1 at o inteiro n. Sendo assim o clculo de um fatorial conseguido pela multiplicao sucessiva do nmero de termos. Faa contador igual a 1 Leia fatorial ENQUANTO < contador<fatorial > FAA fatorial=fatorial*contador contador=contador+1 FIM_ENQUANTO Mostre fatorial

Interpretao: O programa ir atribuir 1 varivel contador, e vai ler o numero que voc quer saber o fatorial e guarda-lo dentro da varivel fatorial enquanto contador for menor ou igual a fatorial, fatorial vai receber fatorial(valor anterior de fatorial) vezes a varivel contador, aps isso contador ir incrementar 1 em seu valor atual, quando contador se tornar igual a fatorial o loop ir encerrar e o resultado ser mostrado ao usurio. Looping com teste lgico no fim Caracteriza-se por uma estrutura que efetua um teste lgico no fim de um looping, denominada repita, sendo conseguida com a utilizao do conjunto de instrues repita...at_que. A estrutura repita...at_que tem o seu funcionamento controlado tambm por deciso, porm ir efetuar a execuo de um conjunto de instrues pelo menos uma vez antes de verificar a validade da condio estabelecida. Diferente da estrutura enquanto que executa somente um conjunto de instrues, enquanto a condio verdadeira.

18

3.3. Exerccios
a) Apresentar todos os valores numricos inteiros pares situados na faixa de 100 a 200. b) Apresentar o total da soma obtido dos cinco primeiros nmeros inteiros. c) Apresentar a tabuada de um nmero qualquer. Todoo programa deve se repetir enquanto o usurio desejar. d) Apresentar todos os nmeros divisveis por 4 que sejam menores que 20. e) Apresentar os quadrados dos nmeros inteiros de 2 a 50. f) Elaborar um programa que apresente no final, o somatrio dos valores pares existentes na faixa de 10 at 20.

19

3.4. Looping com varivel de controle


Os loopings que possuem um nmero finito de execues podero ser processados atravs de estrutura para, sendo conseguida com a utilizao das intrues para...de...at...passo...faa...fim_para. Esta estrutura tem o seu funcionamento controlado por uma varivel denominada contador. Sendo assim, poder executar um determinado conjunto de instrues um determinado nmero de vezes. Sintaxe: PARA <varivel> DE <incio> AT <fim> PASSO <incremento> FAA <instrues> FIM_PARA Para exemplificar considere o problema anterior : "Pedir a leitura de um valor para a varivel X, multiplicar este valor por 3, colocando o resultado em uma varivel R e apresentar o valor. Tudo isso dever ser repetido por 5 veses". Definir um contador variando de 1 a 5; Ler um valor para a varivel X; Efetuar a multiplicao do valor de X por 3, implicando o resultador em R; Apresentar o valor calculado contido na varivel R; Repetir os passos 2,3,4 e 5 at que o contador sejamaior que 5 Resoluo: PARA < contador > DE <1> AT <5> PASSO<incremento> FAA Leia x Faa x*3 e guarde em R Mostre R FIM_PARA

20

3.5. Exerccios
a) Apresentar todos os valores numricos inteiros mpares situados na faixa de 1000 a 1500. b) Apresentar o total da soma obtido de N nmeros inteiros onde N um nmero digitado pelo usurio. c) Apresentar a tabuada de um nmero qualquer. d) Apresentar os nmeros divisveis por 3 que sejammenores que 12. e) Elaborar um programa que apresente no final, o somatrio dos valores pares existentes na faixa de 10 at 20.

21

3.6. Um pouco de C
Primeiros Passos O C "Case Sensitive" Vamos comear o nosso curso ressaltando um ponto de suma importncia: o C "Case Sensitive", isto , maisculas e minsculas fazem diferena. Se declarar uma varivel com o nome soma ela ser diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C, por exemplo, s podem ser escritos em minsculas pois seno o compilador no ir interpretlos como sendo comandos, mas sim como variveis.

Dois Primeiros Programas Vejamos um primeiro programa em C: #include <stdio.h> /* Um Primeiro Programa */ int main () { printf ("Ola! Eu estou vivo!\n"); return(0); } Compilando e executando este programa voc ver que ele coloca a mensagem Ola! Eu estou vivo! na tela. Vamos analisar o programa por partes. A linha #include <stdio.h>diz ao compilador que ele deve incluir o arquivocabealho stdio.h. Neste arquivo existem declaraes de funes teis para entrada e sada de dados (std = standard, padro em ingls; io = Input/Output, entrada e sada ==> stdio = Entrada e sada padronizadas). Toda vez que voc quiser usar uma destas funes deve-se incluir este comando. O C possui diversos Arquivos-cabealho. Quando fazemos um programa, uma boa idia usar comentrios que ajudem a elucidar o funcionamento do mesmo. No caso acima temos um comentrio: /* Um Primeiro Programa */. O compilador C desconsidera qualquer coisa que esteja comeando com /* e terminando com */. Um comentrio pode, inclusive, ter mais de uma linha. A linha int main()indica que estamos definindo uma funo de nome main.

22

Todos os programas em C tm que ter uma funo main, pois esta funo que ser chamada quando o programa for executado. O contedo da funo delimitado por chaves { }. O cdigo que estiver dentro das chaves ser executado seqencialmente quando a funo for chamada. A palavra int indica que esta funo retorna um inteiro. O que significa este retorno ser visto posteriormente, quando estudarmos um pouco mais detalhadamente as funes do C. A ltima linha do programa, return(0); , indica o nmero inteiro que est sendo retornado pela funo, no caso o nmero 0. A nica coisa que o programa realmente faz chamar a funo printf(), passando a string (uma string uma seqncia de caracteres, como veremos brevemente) "Ola! Eu estou vivo!\n" como argumento. por causa do uso da funo printf() pelo programa que devemos incluir o arquivo- cabealho stdio.h. A funo printf() neste caso ir apenas colocar a string na tela do computador. O \n uma constante chamada de constante barra invertida. No caso, o \n a constante barra invertida de "new line" e ele interpretado como um comando de mudana de linha, isto , aps imprimir Ola! Eu estou vivo! o cursor passar para a prxima linha. importante observar tambm que os comandos do C terminam com ;(ponto-vrgula). Podemos agora tentar um programa mais complicado: #include <stdio.h> int main () { int Dias; /* Declaracao de Variaveis */ float Anos; printf ("Entre com o nmero de dias: "); /* Entrada de Dados */ scanf ("%d",&Dias); Anos=Dias/365.25; /* Conversao Dias->Anos */ printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } Vamos entender como o programa acima funciona. So declaradas duas variveis chamadas Dias e Anos. A primeira um int(inteiro) e a segunda um

23

float(ponto flutuante). As variveis declaradas como ponto flutuante existem para armazenar nmeros reais, como 5,1497. feita ento uma chamada funo printf(), que coloca uma mensagem na tela. Queremos agora ler um dado que ser fornecido pelo usurio e coloc-lo na varivel inteira Dias. Para tanto usamos a funo scanf(). A string "%d" diz funo que iremos ler um inteiro. O segundo parmetro passado funo diz que o dado lido dever ser armazenado na varivel Dias. importante ressaltar a necessidade de se colocar um & antes do nome da varivel a ser lida quando se usa a funo scanf(). O motivo disto s ficar claro mais tarde. Observe que, no C, quando temos mais de um parmetro para uma funo, eles sero separados por vrgula. Temos ento uma expresso matemtica simples que atribui a Anos o valor de Dias dividido por 365.25 (365.25 uma constante ponto flutuante 365,25). Como Anos uma varivel float o compilador far uma converso automtica entre os tipos das variveis (veremos isto com detalhes mais tarde). A segunda chamada funo printf() tem trs argumentos. A string "\n \n %d dias equivalem a %f anos.\n"diz funo para pular duas linhas, colocar um inteiro na tela, colocar a mensagem " dias equivalem a ", colocar um valor float na tela, colocar a mensagem "anos."e pular outra linha. Os outros parmetros so as variveis, Dias e Anos, das quais devem ser lidos os valores do inteiro e do float, respectivamente.

24

3.7. Instalando o Dev C++ e Fazendo nosso Primeiro Programa!


Passo 01 - Aps feito download do aplicativo, execute-o aparecer a seguinte tela escolha o idioma em Portugus.

Passo 02 - Aps escolher o idioma aceite o contrato de Licena.

25

Passo 03 - Na Parte de Componentes basta clicar em Seguinte.

Passo 04 - Na parte de escolher o diretrio(Local da Instalao) deixe o diretrio Padro.

26

Passo 05 - Pode ocorrer de aparecer a mensagem abaixo que para instalar o Dev em todos os usurios do PC clique em Sim.

Passo 06 - Pronto agora seu compilador Dev C++ est Instalado.

Passo 07 - Na primeira vez que voc executar o programa aparecer a tela abaixo d OK.

27

Passo 08 - Logo em seguida aparecer algumas telas de configuraes na primeira escolha o idioma Portuguese (Brazil) Na segunda deixe a opo Yes, I want to use this featura e clique em next.

28

29

Passo 09 - Na caixa Dica do Dia clique em Fechar

Passo 10 - Clique em Arquivo -> Novo -> Projeto

30

Passo 11 - Na caixa Novo projeto selecione Console Application, Projeto C e no nome escolha o que achar melhor, procure utilizar sempre letras minusculas seguidos de numeros ex.: programa01, exercicio01, trabalho01 e etc..

Passo 12 - Feito isso vamos escrever nosso primeiro programa, diz uma Lenda que para o usurio ser um bom programador o seu primeiro programa deve mostrar a mensagem "Hello World" ou ele ser amaldioado pelo resto de sua vida. Escreva de acordo com o cdigo abaixo!

31

Passo 13 - Aps escrito o cdigo, v em Executar -> Compilar & Executar ou simplesmente pressione F9.

Passo 14 - Logo em seguida uma caixa para salvar o seu programa ser aberta, eu sugiro que para no misturar seus programas voc faa o seguinte: 1 Crie uma pasta no diretrio C: chamada Programas Dev C++ 2 Crie uma outra pasta no diretrio C:\Programas Dev C++ chamada programa01 3 Salve seu arquivo dentro da pasta programa01 medida que voc for fazendo novos programas sugiro que v criando novas pastas para guard-los separadamente e organizar seus programas. exemplo: programa02, programa03, programa04(PASTAS) e salve dentro delas.

32

Passo 15 - Feito isso ir abrir um prompt de comando exibindo a seguinte mensagem "Hello World" Parabns!! voc fez o seu primeiro programa, Bem vindo ao Mundo da Programao!

33

02) Com base no exemplo anterior elabore um programa que imprima na tela a seguinte mensagem: "O Campeao muda mas o vice sempre o mesmo!". Resoluo:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("O Campeao muda mas o vice e sempre o mesmo!\n"); system("PAUSE"); return 0; }

03) Agora faa um programa que imprima na tela a seguinte mensagem: "Vida dificil essa de programador..." Resoluo:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("Vida dificil essa de programador...\n"); system("PAUSE"); return 0; }

34

3.8. Exerccios
01) Faa um programa que imprima na tela a seguinte mensagem: "Rubro Negro at morrer!". 02) Faa um programa que imprima na tela a seguinte mensagem: "printf e uma saida de dados". 03) Faa um programa que imprima na tela as seguintes mensagens: "Hoje", "o", "sol", "esta", "radiante!" as mensagens devero aparecer escritas uma embaixo da outra como abaixo:

35

Captulo 4 - Entrada e Sada de dados em C!


Em C iremos considerar como entrada de dados todos os tipos de informaes que o usurio envia do Teclado para o PC(Diferente da saida de dados que so as informaes que o PC envia para o Usurio). Daqui em diante nossos programas sero baseados tanto em entradas de dados com processamentos e sadas de dados.

Nossa entrada de dados estar relacionada automaticamente com nosso processamento e nossa sada de dados. Ento importante que saibamos diferenciar de forma correta uma Entrada de dados de uma Sada de dados resumindo grosso modo o que trabalharemos: - Entrada de Dados (scanf - Toda informao enviada para o PC pelo Usurio) - Saida de Dados (printf - Toda informao enviada para o Usurio pelo PC) Nossa sintaxe de entrada de Dados ser a seguinte: Suponha que voc tenha uma varivel chamada "int valor" o comando scanf("%d",&valor); ir fazer com que o processamento(execuo) de seu programa pare e aguarde voc digitar um dado do tipo inteiro para que ele possa continuar o processamento. Nosso scanf tambm exige tipos de dados especficos para o armazenamento do contedo em suas determinadas variveis! Veja os tipos de dados para armazenamento seguir: %d -> serve para guardar dados do tipo int %f -> serve para guardar dados do tipo float %c -> serve para guardar dados do tipo char Vamos fugir teoria e ir um pouco a prtica! Suponha que voc queira fazer um programa que receba dois nmeros inteiros, some-os e mostre o seu resultado. #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n1,n2,resultado; scanf("%d %d",&n1,&n2); resultado=n1+n2; printf("O Resultado e: %d\n",resultado); system("PAUSE"); return 0; }
36

Interpretando nosso programa: scanf -> Nossa entrada de dados o scanf poderia ter sido escrito de duas formas a primeira como foi inserido no programa a segunda seria utilizando dois scanf para receber as duas variveis exemplo: scanf("%d",&n1); scanf("%d",&n2); dentro do scanf o %d indica que o dado que ser recebido dever ser inteiro e tambm dever ser guardado dentro de uma varivel inteira. Utiliza-se &(E Comercial) para que os valores recebidos sejam guardados dentro do endereo de memria das respectivas variveis relacionadas. Logo na linha de baixo, temos o que chamamos de processamento, que onde as aes do seu programa so realizadas, no caso do nosso exemplo est sendo efetuada uma soma de dois valores e guardando este mesmo resultado em outra varivel. resultado=n1+n2; -> Interpreta-se: "Resultado recebe n1(Valor numrico guardado em n1) mais n2(Valor numrico guardado em n2)". Logicamente a varivel resultado ir obter o valor da soma efetuada. printf -> Veja bem jovem, hoje aprenderemos como imprimir na tela o valor de uma varivel utilizando o printf. analisando a escrita do comando em nosso exemplo percebemos que dentro do printf("entre as aspas duplas"); encontrase um %d.. mas o que ele significa? :S relembrando a sintaxe do printf: printf ("expresso de controle", lista de argumentos); Dentro da expresso de controle o %d digitado tem a capacidade de chamar uma lista de argumentos que atenda seu tipo de dado! No caso do exemplo o %d(int) est chamando a varivel resultado(int), logo ento o resultado exibido no prompt de comando.

37

4.1. Resumindo Nosso Conhecimento!


No decorrer do nosso curso comeamos pela Sada de Dados, depois fomos para a Entrada de Dados, e por ultimo aplicamos um processamento bem bsico. Neste resumo vamos fazer uma abordagem bem Terica e sistemtica! - Sada de Dados Est referenciada ao nosso printf, com a capacidade de enviar dados do PC ao Usurio. Abaixo sua sintaxe: printf ("expresso de controle", lista de argumentos); expresso de controle: Aqui voce pode digitar qualquer texto que ele ser exibido no prompt de comando ao usurio. lista de argumentos: Aqui voc pode fazer uma chamada externa de outra varivel ou at mesmo de um processamento. Exemplos sem lista de argumentos: - printf("Brasil Hexacampeao"); -- Ele exibir no prompt: Brasil Hexacampeao - printf("O valor de pi e 3,14"); -- Ele exibir no prompt: O valor de pi e 3,14 Exemplos com lista de argumentos: int n1=5,n2=10; -- declara n1 como inteiro e atribui o valor 5 n1 e declara n2 como inteiro e atribui o valor 10 n2. printf("A soma de n1 com n2 e %d",n1+n2); -- na expresso de controle o %d chama uma lista de argumentos que n1+n2, toda lista de argumentos dever ser inserida dessa forma. como n1 e n2 so do tipo int(inteiro) dever ser utilizado %d porque uma escrita de nmero inteiro. float n1=8,n2=12; -- declara agora n1 e n2 como float printf("A divisao de %f com %f e %f",n1,n2,n1/n2); -- na expresso de controle encontra-se um %f trs vezes, isso significa que ser chamado na nossa mensagem 3 argumentos que sero eles o n1, n2 e o n1/n2. lembrando que as chamadas de listas de argumentos so ordenadas, ou seja o primeiro %f chama o 1 Argumento(n1), o segundo %f chama o 2 Argumento(n2) e o terceiro e ltimo %f chama o 3 e ltimo Argumento(n1/n2). Na expresso de controle tambm podemos utilizar alguns comandos especiais veja-os abaixo: \n - Cria uma linha nova a partir do ponto que indicado \t - Cria um espao de tabulao do ponto que indicado \b - Executa um retrocesso de espao do ponto que indicado \ - Apresenta o smbolo de aspas no ponto que indicado \\ - Apresenta o smbolo de barra no ponto que indicado \f - Adiciona um salto de pgina de formulrio (impressora) \0 - Gera um nulo

38

E tambm, na expresso de controle temos as chamadas de argumentos

%c - Permite que seja efetuada a escrita de apenas um caractere %d - Permite que seja efetuada a escrita de nmeros inteiros decimais %e - Permite que seja efetuada a escrita de nmeros em notao cientfica %f - Permite que seja efetuada a escrita de nmeros reais (ponto flutuante) %g - Permite que seja efetuada a escrita de %e ou %f no formato mais curto %o - Permite que seja efetuada a escrita de nmeros octais %s - Permite que seja efetuada a escrita de uma srie de caracteres %u - Permite que seja efetuada a escrita de um nmero decimal sem sinal %x - Permite que seja efetuada a escrita de um nmero hexadecimal

39

- Entrada de Dados Est referenciada ao nosso scanf, com a capacidade de enviar dados do Usurio ao PC. Abaixo sua sintaxe: scanf ("expresso de controle", lista de argumentos); expresso de controle: aqui voc vai digitar os tipos e a quantidade de dados a serem armazenados de acordo com as variveis declaradas. lista de argumentos: aqui voc vai digitar as variveis que iro receber os dados do Usurio de acordo com seus tipos de dados. Exemplo: int numero; -- declara numero como inteiro float idade; -- declara idade como real char sexo; -- declara sexo como caractere scanf("%d %f %c",&numero,&idade,&sexo); -- na expresso de controle temos %d, %f, %c isso indica que na minha lista de argumentos a primeira varivel dever ser int(numero), a segunda float(idade) e a terceira char(sexo). Segue abaixo a identificao para cada tipo de dado a ser recebido pelo usurio. %c - Permite que seja efetuada a leitura de apenas um caractere %d - Permite que seja efetuada a leitura de nmeros inteiros decimais %e - Permite que seja efetuada a leitura de nmeros em notao cientfica %f - Permite que seja efetuada a leitura de nmeros reais (ponto flutuante) %l - Permite que seja efetuada a leitura de um nmero inteiro longo %o - Permite que seja efetuada a leitura de nmeros octais %s - Permite que seja efetuada a leitura de uma srie de caracteres %u - Permite que seja efetuada a leitura de um nmero decimal sem sinal %x - Permite que seja efetuada a leitura de um nmero hexadecimal

40

4.2. Tipos de Dados, Operadores Matemticos, Lgicos e Relacionais.


Um bom programador precisa ter os conhecimentos bsicos sobre tipos de dados e operadores, para que o seu programa possa ser desenvolvido com um melhor desempenho, rapidez e eficcia. - Tipos de Dados Para se desenvolver um programa que seja executvel dentro de um computador, necessrio ter em mente que o trabalho de gerenciamento de dados ocorre em trs nveis: 1. A entrada dos dados; 2. O processamento dos dados; 3. A sada de dados. O objetivo principal de qualquer computador a manipulao de dados, que so representados por elementos em estado primrio. Ao agregar valores esses dados, so criadas as informaes, que ao serem estruturadas de forma organizada e com algum significado, tem por objetivo gerar algum conhecimento. Os computadores servem para armazenar informaes e programas para sua manipulao. Sendo assim, um programador consciente no pode ignorar a importncia dos dados e como eles devem ser estruturados. Como exemplo padro da estruturao de dados e informaes pode ser citado a lista telefnica, que por ser ordenada alfabeticamente, torna razoavelmente simples e rpido o acesso a um determinado nmero de telefone de um assinante. Os dados ento so representados pelas informaes a serem processadas por um computador. A linguagem C fornece ao programador um conjunto de tipos de dados pr-definidos, podendo ser dos tipos: numricos, caracteres e lgicos (camuflados por 0 e 1). Tipos de dados inteiros So caracterizados tipos inteiros os dados numricos positivos ou negativos, excluindo-se destes qualquer nmero fracionrio. Em C, este tipo de dado pode ser referenciado por um dos seguintes identificadores: int de -32.768 a 32.767 long de -2.147.483.648 at 2.147.483.647 unsigned int de 0 at 65.535 Tipos de dados reais So caracterizados tipos reais os dados numricos positivos, negativos e nmeros fracionrios e tambm os inteiros. Em C, este tipo de dado pode ser referenciado por um dos seguintes identificadores: float de 3.4 E -38 at 3.4 E+38 double de 1.7 E -308 at 1.7 E+308 Este tipo de dado real permite trabalhar com uma representao de valores em ponto flutuante que consiste em uma mantissa (parte fracionria).

41

Tipos de dados caracteres So caracterizadas tipos caracteres as seqncias contendo letras, nmeros e smbolos especiais. Uma seqncia de caracteres deve ser representada na linguagem C entre aspas( " " ). Este tipo de dado referenciado pelo identificador char, podendo armazenar de 0 at 255 caracteres. Tipos de dados lgicos Na linguagem C, no existe um tipo de dado lgico ou booleano propriamente dito, ou seja, no existiro os valores lgicos Falso ou Verdadeiro para um determinado tipo de dado. Nesta linguagem, qualquer valor igual a zero 0, considerado um valor lgico falso, e qualquer valor diferente de zero(que ser representado pelo nmero 1 inteiro) ser considerado um valor lgico verdadeiro. - Operadores Matemticos Os operadores matemticos que iremos trabalhar, sero os de Soma, Subtrao, Multiplicao, e Diviso que so os que contm a biblioteca stdio.h tambm h funes como potenciao e extrao de raiz que vem inclusos na biblioteca math.h veremos mais adiante. Os operadores matemticos so referenciados pelos seguintes simbolos abaixo:

Estes so os operadores matemticos ou tambm chamados de Aritmticos pode haver a existncia de outros operadores tambm estes no so os nicos.

42

- Operadores Lgicos Os operadores lgicos so muito utilizados em testes condicionais sendo eles o E Lgico, OU Lgico e Negao veja seus smbolos abaixo: && = E Lgico || = OU Lgico ! = Negao

O que o E Lgico e o OU Lgico? Suponha que voc tenha uma deciso a ser tomada, como por exemplo: "Eu vou a praia se fizer sol E estiver com carro" Voc ainda no decidiu se vai praia porque voc no sabe se est fazendo sol ou se voc est com carro. Ento vamos listar quais so as probabilidades de voc ir a praia: Faz Sol? Estou com Carro? Vou a Praia? No No Sim Sim No Sim No Sim No No No Sim

Atravs dos testes feitos nas combinaes acima pode-se concluir que o E Lgico s ir fazer algo caso as condies sejam verdadeiras, caso faa sol E esteja com o carro. Agora vamos mudar o contexto, suponha que mudamos nossa condio e que agora Eu vou praia se fizer sol OU estiver com carro Faz Sol? Estou com Carro? Vou a Praia? No No Sim Sim No Sim No Sim No Sim Sim Sim

Veja a diferena acima com a condio OU Lgico eu vou a praia se qualquer um dos casos acima for verdadeiro, se fizer sol ou estiver com o carro eu irei a praia.

43

Mas e a Negao? vejamos um ltimo exemplo: Se estiver Chuvendo eu no vou Praia. Est chovendo? Vou a Praia? No Sim Sim No

A negao ela indica o processo contrrio sua entrada no caso, se no estiver chovendo irei a praia, se estiver chovendo no irei praia. O E Lgico muitas das vezes comparado uma multiplicao, j o OU Lgico comparado uma soma e a Negao simplesmente a alternativa contrria a fornecida. Mais adiante os Operadores Lgicos iro ficar mais claros com a prtica. - Operadores Relacionais J os operadores relacionais, so utilizados para efetuar comparaes na Linguagem C veja-os abaixo:

So muito utilizados para comparar valores entre duas variveis e etc.

44

4.3. Exemplos
1) Faa um programa que receba dois nmeros e multiplique-os.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n1,n2,resultado; printf("Entre com o valor de N1 e N2\n"); scanf("%d %d",&n1,&n2); resultado=n1*n2; printf("O Resultado e: %d\n",resultado); system("PAUSE"); return 0; }

2) Faa um programa que receba dois nmeros positivos e troque seus valores entre si.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n1,n2,aux; printf("Entre com o valor de N1 e de N2\n"); scanf("%d %d",&n1,&n2); aux=n1; n1=n2; n2=n1; printf("O Valor de N1 e: %d\nO Valor de N2 e: %d\n",n1,n2); system("PAUSE"); return 0; }

45

3) Faa um programa que leia um numero inteiro e imprima o seu antecessor e o seu sucessor!
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero,antecessor,sucessor; printf("Entre com o numero\n"); scanf("%d",&numero); antecessor=numero-1; sucessor=numero+1; printf("O Antecessor e: %d\nO Sucessor e: %d\n",antecessor,sucessor); system("PAUSE"); return 0; }

4) Faa um programa que leia trs numeros e retire a mdia entre eles.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float n1,n2,n3,media; printf("Entre com o valor de N1, de N2 e de N3\n"); scanf("%f %f %f",&n1,&n2,&n3); media=(n1+n2+n3)/3; printf("A Media e: %f\n",media); system("PAUSE"); return 0; }

5) Faa um programa que leia um valor e o imprima com um reajuste de 10%


#include <stdio.h>

46

#include <stdlib.h> int main(int argc, char *argv[]) { float valor,reajuste; printf("Entre com o valor para reajuste\n"); scanf("%f",&valor); reajuste=valor+(valor*0.1); printf("O Reajuste e: %f\n",reajuste); system("PAUSE"); return 0; }

6) Faa um programa que leia dois valores e retorne o resto da diviso do primeiro pelo segundo, o segundo valor no pode ser zero!
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n1,n2,resto; printf("Entre com o primeiro valor e o segundo valor\n"); scanf("%d %d",&n1,&n2); resto=n1%n2; printf("O resto e: %d\n",resto); system("PAUSE"); return 0; }

7) Faa um programa que leia um numero inteiro e calcule o seu quadrado.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[])

47

{ int n1,quadrado; printf("Entre com o valor\n"); scanf("%d",&n1); quadrado=n1*n1; printf("O quadrado e: %d\n",quadrado); system("PAUSE"); return 0; }

48

8) Faa um programa que calcule o salario lquido de um professor baseandose no valor da hora aula, quantidade de aulas dadas e a % de desconto do INSS. E por final mostre o salario bruto, liquido e o desconto.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float valor_hora,qtd_aulas,desconto_inss,sal_bruto,sal_liquido; printf("Entre com o valor da hora-aula\n"); scanf("%f",&valor_hora); printf("Entre com a quantidade de aulas\n"); scanf("%f",&qtd_aulas); printf("Entre com o desconto do inss de 0~100%\n"); scanf("%f",&desconto_inss); sal_bruto=valor_hora*qtd_aulas; sal_liquido=sal_bruto-(sal_bruto*(desconto_inss/100)); printf("O Salario Bruto e: %.2f\nO Salario Liquido e: %.2f\nO Desconto Foi: %.2f%%\n",sal_bruto,sal_liquido,desconto_inss); system("PAUSE"); return 0; }

49

Captulo 5 - Condicionais IF, ELSE e SWITCHCASE


Bom, at ento nossos programas feitos, s utilizaram clculos matemticos, foram todos baseados em cima de expresses, tudo isso necessrio para que se possa dar o prximo passo para as condicionais, onde ser a parte que o seu programa ir se tornar um pouco mais "racional". Mas o que vem a serem as condicionais? Aonde devo aplic-las? Em que elas iro me ajudar? Daqui em diante no nosso curso, iremos utilizar as condicionais em grande parte dele, afinal nossos programas iro se tornar um pouco mais extensos e lgicos.

5.1. Compreendendo o IF e ELSE.


O IF significa "SE", j o ELSE significa "SENO", ou seja, as condicionais IF e ELSE sero utilizadas para a tomada de decises, caso uma condio seja verdadeira ou caso ela seja falsa. De uma forma interpretativa para um melhor entendimento suponhamos a seguinte situao: "Vou tomar sorvete se fizer calor hoje" logo podemos interpretar a situao da seguinte maneira: SE estiver calor irei tomar sorvete, SENO no irei tomar sorvete. A condicional IF e ELSE funcionam dessa mesma forma se um caso (SE) for verdade ele executa-o se for falso ele executa o outro caso (SENO). Mas agora vamos tentar entender o funcionamento do IF na prtica. Primeiro analisemos sua sintaxe. if (condio) // if o comando todo em minsculas, (condio) a condio que voc ir definir para execuo de uma determinada tarefa. { comandos; // o if utiliza chaves abrindo e fechando e ele s executa os comandos aqui contidos se a condio do IF for VERDADEIRA. } else // else o comando todo em minsculas, diferente do if nesse caso ele no tem condio ele serve para qualquer outro caso. { comandos; // o else tambm utiliza chaves abrindo e fechando e ele s executa os comandos aqui contidos se a condio do IF for FALSA. }

50

5.2. Lgica Comentada


Exemplo 01) Faa um programa que receba duas idades quaisquer e retorne a maior ou se so iguais.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int id1,id2; printf("Entre com a idade 1 e a idade 2\n",&id1,&id2); scanf("%d %d",&id1,&id2); if (id1>id2) { printf("A idade %d e maior\n",id1); } else if (id1<id2) { printf("A idade %d e maior\n",id2); } else { printf("As idades sao iguais\n"); }

system("PAUSE"); return 0; }

51

Vamos interpretar o nosso programa agora, para melhor entender o que est ocorrendo. int id1,id2; printf("Entre com a idade 1 e a idade 2\n",&id1,&id2); scanf("%d %d",&id1,&id2); Nesta primeira parte id1 e id2 so declaradas como variveis inteiras, uma saida de dados(printf) envia uma mensagem ao usurio pedindo que ele informe a idade 1 e a idade 2 e por fim uma entrada de dados(scanf) recebe esses valores e os armazena em id1 e id2(respectivamente em seus endereos de memria). -- Primeiro Bloco Condicional abaixo if (id1>id2) { printf("A idade %d e maior\n",id1); } Nesta segunda parte temos a nossa condicional que est verificando se id1 maior que id2 [if (id1>id2)] se essa condio for verdadeira, o seu programa ir executar a sada de dados(printf) que esta dentro das chaves, se ela for falsa ele ir pular para a prxima condio. -- Segundo Bloco Condicional abaixo else if (id2>id1) { printf("A idade %d e maior\n",id2); } Nesta terceira parte temos o ELSE que referente ao IF doprimeiro bloco condicional e temos tambm outro IF que para que possamos impor a nossa segunda condio [if(id1<id2)], relembrando que esse ELSE IF s ser executado se o primeiro IF for falso, pois o ELSE est ligado diretamente ao primeiro IF, logo podemos concluir que nesta terceira parte a sada de dados(printf) que est dentro das chaves do ELSE IF s ir executar caso o primeiro IF seja falso.

52

-- Terceiro Bloco Condicional abaixo else { printf("As idades sao iguais\n"); } Nesta ltima parte temos apenas um ELSE, que no ultimo caso, se o IF do primeiro bloco condicional e o ELSE IF do segundo bloco condicional forem falsos ele automaticamente ir executar esse ultimo ELSE. assim executando a sada de dados(printf) apenas se as duas condies forem falsas. Pensando logicamente no se faz necessrio a escrita de mais um if como abaixo: else if (id1==id2) { printf("As idades sao iguais\n"); } Pois: 1 - No primeiro Bloco Condicional voc testa se o id1 maior que o id2 2 - No segundo Bloco Condicional voc testa se o id2 maior que o id1 Ento analisando e interpretando os blocos, pode-se concluir que: Se o id1 no for maior que o id2(1 Bloco) e o id2 no for maior que o id1(2 Bloco) automaticamente as idades s podem ser iguais.

53

Olhando por outro lado, poderamos reescrever o mesmo programa, com as mesmas funes da forma a seguir:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int id1,id2; printf("Entre com a idade 1 e a idade 2\n",&id1,&id2); scanf("%d %d",&id1,&id2); if (id1>id2) printf("A idade %d e maior\n",id1); else if (id1<id2) printf("A idade %d e maior\n",id2); else printf("As idades sao iguais\n"); system("PAUSE"); return 0; }

Mas e as chaves do IF, ELSE IF e ELSE? O programa vai funcionar do mesmo jeito? Eu no preciso mais us-las? Para este caso o seu programa ir funcionar sim, mas veja bem, neste caso no se fez necessrio o uso de chaves pois, dentro das condicionais possui apenas um comando(um nico printf), caso tivesse mais de um comando o uso de chaves seria obrigatrio, em outras palavras, se tivesse mais um printf dentro de algum IF ou ELSE o seu programa apresentaria erro de semntica. Erro de semntica representa o erro de lgica (erro no seu raciocnio) e o erro de sintaxe representa o erro de programao (comandos utilizados incorretamente).

54

5.3. Exemplos
1) Faa um programa que receba dois nmeros quaisquer e o usurio possa escolher uma operao para realizar: 1- Soma, 2 - Subtrao, 3 - Multiplicao ou 4 - Diviso em seguida mostre o resultado, caso o usurio escolha uma opo inexistente o programa dever retornar opo invalida.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float n1,n2,opcao,result; printf("Entre com os valores N1 e N2\n"); scanf("%f %f",&n1,&n2); printf("Escolha a Operacao\n 1)Soma\n 2)Subtracao\n 3)Multiplicacao\n 4)Divisao\n"); scanf("%f",&opcao); if (opcao==1) { result=n1+n2; printf("O Resultado e %.2f\n",result); } else if (opcao==2) { result=n1-n2; printf("O Resultado e %.2f\n",result); } else if (opcao==3) { result=n1*n2; printf("O Resultado e %.2f\n",result); } else if (opcao==4) { result=n1/n2; printf("O Resultado e %.2f\n",result);

55

} else { printf("Opcao Invalida\n"); } system("PAUSE"); return 0; }

2) Faa um programa que receba um numero qualquer inteiro e que retorne se ele PAR ou IMPAR.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; printf("Entre com o numero\n"); scanf("%d",&numero); if (numero%2==0) printf("O Numero e PAR\n"); else printf("O Numero e Impar\n"); system("PAUSE"); return 0; }

56

3) Faa um programa que receba um numero qualquer inteiro e verifique se ele divisvel por 2 e 3.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; printf("Entre com o numero\n"); scanf("%d",&numero); if (numero%2==0 && numero%3==0) printf("E divisivel por 2 e 3\n"); else printf("Nao e divisivel por 2 e 3\n"); system("PAUSE"); return 0; }

57

4)Faa um programa que receba um numero qualquer inteiro e verifique se ele divisvel por 4 ou por 5 ou pelos dois.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero; printf("Entre com o numero\n"); scanf("%d",&numero); if (numero%4==0 && numero%5==0) printf("E divisivel por 4 e 5\n"); else if (numero%4==0) printf("E divisivel por 4\n"); else if (numero%5==0) printf("E divisivel por 5\n"); else printf("Nao e divisivel por 4 e nem por 5\n"); system("PAUSE"); return 0; }

58

5)Sabe-se que as portas lgicas AND(E), OR(OU), XOR(OU Exclusivo) e NXOR(Coincidncia) possuem diferentes sadas em suas tabelas verdades, ento cabe a voc fazer um programa que recebe as 4 sadas de uma determinada porta lgica e identifique se ela uma porta AND, OR, XOR, NXOR ou inexistente, veja a figura a seguir:

59

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int s1,s2,s3,s4; printf("Entre com as saidas da porta logica\nAs saidas devem assumir apenas valor 0 ou 1\n"); scanf("%d %d %d %d",&s1,&s2,&s3,&s4); if (s1==0 && s2==0 && s3==0 && s4==1) printf("Porta Logica And\n"); else if (s1==0 && s2==1 && s3==1 && s4==1) printf("Porta Logica OR\n"); else if (s1==0 && s2==1 && s3==1 && s4==0) printf("Porta Logica XOR\n"); else if (s1==1 && s2==0 && s3==0 && s4==1) printf("Porta Logica NXOR\n"); else printf("Porta Logica Inexistente ou Saida Digitada Invalida\n"); system("PAUSE"); return 0; }

60

6) Dado o circuito eltrico a seguir, faa um programa que calcule a corrente do circuito para quaisquer valor de R1, R2 e R3.

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float v,i,req,r1,r2,r3; printf("Entre com o valor da Tensao\n"); scanf("%f",&v); printf("Entre com os valores de R1, R2 e R3\n"); scanf("%f %f %f",&r1,&r2,&r3); req=(r3*r2)/(r3+r2)+r1; i=v/req; printf("O Valor da Corrente e %f\n",i); system("PAUSE"); return 0; }

61

5.4. Condicional SWITCH-CASE (Escolha-caso)


Bem como vimos o IF e ELSE, tambm temos outra anlise condicional similar ao IF que o Switch, porm o Switch s aceita variveis inteiras. Sua sintaxe bem simples veja abaixo: switch (variavel) { case 1: comandos; break; case 2: comandos; break; case N: comandos; break; default: comandos; } Analisando o cdigo acima, podemos notar que o comando EscolhaCaso(Switch-Case) ele anlisa uma varivel qualquer e dependendo do valor da varivel ele executa uma ao. Por exemplo, se o valor de "varivel" for 1, ele executa o case 1: [...] se for 2 ele executa o case 2: [...] e assim por diante at o default: que caso o valor no seja nenhum dos cases acima.

5.5. Exemplos
1) Faa um programa que receba do usuario um numero referente a um dia da semana e indique qual dia , considere 1 - domingo e 7 - sabado.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int diasemana; printf("Digite um numero relativo ao dia da semana: \n1)Domingo\n2)Segunda\n3)Terca\n4)Quarta\n5)Quinta\n6)Sexta\n7)Sabado\n"); scanf("%d",&diasemana); switch (diasemana) { case 1: printf("Domingo\n"); break; case 2: printf("Segunda\n");

62

break; case 3: printf("Terca\n"); break; case 4: printf("Quarta\n"); break; case 5: printf("Quinta\n"); break; case 6: printf("Sexta\n"); break; case 7: printf("Sabado\n"); break; default: printf("Dia invalido\n"); } system("PAUSE"); return 0; }

63

2) Faa um programa que receba do usuario um numero referente a um ms do ano.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int mes; printf("Digite um numero relativo ao mes do ano: \n1)Janeiro\n2)Fevereiro\n3)Marco\n4)Abril\n5)Maio\n6)Junho\n"); printf("7)Julho\n8)Agosto\n9)Setembro\n10)Outubro\n11)Novembro\n12)Dezembro\n"); scanf("%d",&mes); switch (mes) { case 1: printf("Janeiro"); break; case 2: printf("Fevereiro"); break; case 3: printf("Marco"); break; case 4: printf("Abril"); break; case 5: printf("Maio"); break; case 6: printf("Junho"); break; case 7: printf("Julho");

64

break; case 8: printf("Agosto"); break; case 9: printf("Setembro"); break; case 10: printf("Outubro"); break; case 11: printf("Novembro"); break; case 12: printf("Dezembro"); break; default: printf("Mes invalido"); } system("PAUSE"); return 0; }

65

3) Faa um programa que pea ao usuario uma operao: Soma, Subtrao, Multiplicao ou Diviso receba dois numeros e execute a operao selecionada.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int operacao; float n1,n2,result; printf("Entre com N1 e N2\n"); scanf("%f %f",&n1,&n2); printf("Entre com a operacao desejada: \n1)Soma\n2)Subtracao\n3)Multiplicacao\n4)Divisao\n"); scanf("%d",&operacao); switch (operacao) { case 1: result=n1+n2; printf("O Resultado da Soma e %.2f\n",result); break; case 2: result=n1-n2; printf("O Resultado da Subtracao e %.2f\n",result); break; case 3: result=n1*n2; printf("O Resultado da Multiplicacao e %.2f\n",result); break; case 4: result=n1/n2; printf("O Resultado da Divisao e %.2f\n",result); break; default:

66

printf("Operacao Invalida\n"); } system("PAUSE"); return 0; }

O Comando Switch bem simples, ele ir analisar o valor guardado dentro da varivel de controle, depois ir executar o case equivalente ao valor. Como no exercicio 1 se a varivel "diasemana" for igual a 3 ele ir mostrar "Terca" pois ele iria cair no case 3. No exerccio 2 se a varivel "mes" for igual a 9 ele ir mostrar "Setembro" pois ele iria cair no case 9. E No exerccio 3 se a varivel "operacao" for igual a 2 ele ir fazer a subtrao de n1 por n2 e mostrar o result pois ele iria cair no case 2.

67

5.6. Exerccios
1) Faa um programa que receba o peso de uma pessoa e retorne as seguintes mensagens: Magra se ela tiver menos que 40kg, Normal se tiver mais que 40kg e menos que 80kg e Gorda se tiver mais que 80kg. 2) Faa um programa que receba trs notas retire a mdia entre elas e se a mdia for maior que 6 o retornar a mensagem aprovado, se for menor que 6 ele retornar reprovado. 3) Faa um programa que receba trs nmeros e os coloque em ordem crescente. 4) Faa um programa que receba trs nmeros e os coloque em ordem decrescente. 5) Faa um programa que receba o ms em que uma pessoa nasceu e indique se ela nasceu no 1, 2, 3 ou 4 Trimestre do ano. 6) Faa um programa que Calcule e exiba o valor da conta de luz, a partir da leitura do consumo em KwH do ms anterior e do ms atual marcado no relgio. O clculo dever se basear nos dados da tabela apresentada a seguir:

68

Captulo 6 - Tipo de Dado Char e Strings.


O tipo de dado char, nada mais so do que os nossos caracteres, so tipos de dados fceis de manipular e trabalhar. No nosso curso com nfase na automao iremos utilizar ele para guardar letras e palavras, para que possamos desenvolver nossos sistemas bsicos. Ento vamos l vejamos sua sintaxe. - Como declarar uma varivel char: char sexo; Assim voc declara uma varivel char com nome sexo e capacidade para armazenar um nico caractere. char sexo[20]; Assim voc declara uma varivel char com nome sexo e capacidade para armazenar vinte caracteres que juntos formam uma String ou array de caracteres. Sua representao como entrada de dados utiliza-se %c quando se trata de apenas um caractere ou %s quando se trata de mais do que um caractere, vejamos um exemplo: 1) Faa um programa que receba duas idades e dois sexos e indique qual idade maior e qual o sexo dessa mesma idade.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int idade1,idade2; char sexo1,sexo2; printf("Entre com a primeira idade e o sexo da mesma\n"); scanf("%d %c",&idade1,&sexo1); printf("Entre com a segunda idade e o sexo da mesma\n"); scanf("%d %c",&idade2,&sexo2); if (idade1>idade2) printf("Maior idade: %d Sexo: %c\n",idade1,sexo1); else if (idade1<idade2) printf("Maior idade: %d Sexo: %c\n",idade2,sexo2); else printf("Idades iguais: %d\n",idade1); system("PAUSE"); return 0; }

69

Vejamos o que ocorre no nosso programa: foram declaradas como inteiro as variveis idade1 e idade2 e como char sexo1 e sexo2. Veja a forma que utilizada para guardar um nico caractere nos scanf's, utiliza-se %c o formato o mesmo. Tambm existem outras formas de receber dados utilizando outros comandos que no nos convm neste momento. Logo em seguida, so aplicadas as condicionais IF para saber qual das idades maior e assim exibila, juntamente do sexo da maior idade. Agora vejamos outro exemplo s que com palavras. 2) Faa um programa que receba 3 palavras e que as imprima na tela de trs para frente.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char palavra1[20],palavra2[20],palavra3[20]; printf("Digite as 3 palavras\n"); scanf("%s %s %s",palavra1,palavra2,palavra3); printf("%s %s %s\n",palavra3,palavra2,palavra1); system("PAUSE"); return 0; }

Este bem bsico so declaradas como vetores (veremos no captulo X mais detalhadamente) de caracteres as variveis palavra1, palavra2 e palavra3. As mesmas so capazes de armazenar palavras de at 20 caracteres, no printf ele pede para que o usurio digite elas no scanf ele armazena-as na sua determinada ordem e no ultimo printf ele inverte a ordem e imprime na tela. Existe tambm a biblioteca string.h que capaz de fazer diversas funes diferentes como copiar uma string para uma outra determinada varivel, comparar as mesmas, e etc. Mas o nosso foco especificamente no esse. Vale lembrar que caracteres so separados por aspas simples a e strings por aspas duplas Bom dia e para o armazenamento de strings atravs do comando scanf no se faz necessrio o uso de &(E comercial) para guardar as strings. No captulo 8 ser feita uma abordagem mais aprofundada sobre strings.

70

Captulo 7 - Laos de Repetio FOR, While e DoWhile


For a primeira de uma srie de trs estruturas para se trabalhar com loops de repetio. As outras so while e do while. As trs compem a segunda famlia de comandos de controle de fluxo. Podemos pensar nesta famlia como sendo a das estruturas de repetio controlada. Como j foi dito, o loop for usado para repetir um comando, ou bloco de comandos, diversas vezes, de maneira que se possa ter um bom controle sobre o loop. Sua forma geral : for (inicializao; condio; declarao, incremento); O melhor modo de se entender o loop for ver como ele funciona "por dentro". O loop for equivalente a se fazer o seguinte: inicializao; if (condio) { declarao; incremento; "Volte para o comando if" } Podemos ver, ento, que o for executa a inicializao incondicionalmente e testa a condio. Se a condio for falsa ele no faz mais nada. Se a condio for verdadeira ele executa a declarao, faz o incremento e volta a testar a condio. Ele fica repetindo estas operaes at que a condio seja falsa. Um ponto importante que podemos omitir qualquer um dos elementos do for, isto , se no quisermos uma inicializao poderemos omiti-la. Abaixo vemos um programa que coloca os primeiros 100 nmeros inteiros na tela:
#include <stdio.h> #include <stdlib.h> int main() { int cont; for (cont=0; cont<=100; cont++) { printf("%d\n",cont); } system("PAUSE"); return 0; }

71

O Loop FOR muito fcil de se aplicar, porm devemos tomar cuidado para no cairmos em um LOOP Infinito, onde o FOR no ir parar de executar. Temos tambm o lao de repetio while, que pode trabalhar da mesma forma que um FOR. vejamos o mesmo exerccio acima utilizando o lao while como ficaria.
#include <stdio.h> #include <stdlib.h> int main() { int cont=0; while(cont<=100) { printf("%d",cont); cont++; } system("PAUSE"); return 0; }

O lao while, ele faz o teste se cont menor ou igual a CEM no inicio do lao, e caso o teste for verdade, ele ir executar os comandos contidos nas chaves, ao final o ultimo comando cont++ realiza um incremento de 1, e ele volta a testar a condio de cont menor ou igual a CEM, o while s ir parar de executar quando a condio de cont for falsa. E Temos tambm o lao Do-While, a nica diferena entre o lao Do-While que ele executa primeiro os comandos e depois ele testa a condio, vejamos o mesmo exercicio feito com o Do-While.
#include <stdio.h> #include <stdlib.h> int main() { int cont=0; do{ printf("%d\n",cont); cont++; }while(cont<=100); system("PAUSE"); return 0; }

72

7.1. Exemplos
1) Exiba 1000 vezes o seu nome
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[40]; int i; printf("Entre com seu nome\n"); scanf("%s",&nome); for (i=0; i<1000; i++) printf("%s\n",nome); system("PAUSE"); return 0; }

2) Exiba os nmeros de 1 a 500, um ao lado do outro com um espao em branco de separao.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; for (i=1; i<=500; i++) printf("%d ",i); system("PAUSE"); return 0; }

73

3) Exiba todos os nmeros pares de 10 a 200, um em cada linha.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; for (i=0; i<=200; i++) { if (i%2==0) printf("%d\n",i); } system("PAUSE"); return 0; }

4) Verifique se um nmero primo ou no.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero,i,cont=0; printf("Entre com o numero que deseja saber se e primo ou nao\n"); scanf("%d",&numero); for (i=1; i<numero; i++) if (numero%i==0) cont+=1; if (cont>1) printf("Nao e primo\n"); else printf("E primo\n"); system("PAUSE"); return 0; }

74

5)Solicite ao usurio a idade de cada um componente de um grupo de pessoas. A quantidade de pessoas tambm ser determinada por ele antes da entrada das idades. Aps o trmino da entrada, apresente: a) a mdia das idades, b) a maior idade, c) a menor idade, d) a quantidade de pessoas maior de idade.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float idade,maior=0,menor=0,cont=0,qtd,i,media=0; printf("Quantas pessoas deseja solicitar a idade?\n"); scanf("%f",&qtd); for (i=0; i<qtd; i++) { printf("Entre com a %.0f idade\n",i+1); scanf("%f",&idade); if (i==0) { maior=idade; menor=idade; } if (idade>maior) maior=idade; if (idade<menor) menor=idade; if (idade>=18) cont++; media=media+idade; } printf("A media e %.2f\n",media/qtd); printf("Sao %.0f maiores de idade\n",cont); printf("A maior idade e %.0f anos\n",maior); printf("A menor idade e %.0f anos\n",menor);

75

system("PAUSE"); return 0; }

Os mesmos exerccios usando o comando While. 1) Exiba 1000 vezes o seu nome
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[40]; int i=0; printf("Entre com seu nome\n"); scanf("%s",&nome); while (i<1000) { printf("%s\n",nome); i++; } system("PAUSE"); return 0; }

76

2) Exiba os nmeros de 1 a 500, um ao lado do outro com um espao em branco de separao.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=0; while(i<=500) { printf("%d ",i); i++; } system("PAUSE"); return 0; }

3) Exiba todos os nmeros pares de 10 a 200, um em cada linha.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=0; while(i<=200) { if (i%2==0) printf("%d\n",i); i++; } system("PAUSE"); return 0; }

77

4) Verifique se um nmero primo ou no.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero,i=1,cont=0; printf("Entre com o numero que deseja saber se e primo ou nao\n"); scanf("%d",&numero); while(i<numero) { if (numero%i==0) cont+=1; i++; } if (cont>1) printf("Nao e primo\n"); else printf("E primo\n"); system("PAUSE"); return 0; }

5)Solicite ao usurio a idade de cada um componente de um grupo de pessoas. A quantidade de pessoas tambm ser determinada por ele antes da entrada das idades. Aps o trmino da entrada, apresente: a) a mdia das idades, b) a maior idade, c) a menor idade, d) a quantidade de pessoas maior de idade.

78

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float idade,maior=0,menor=0,cont=0,qtd,i=0,media=0; printf("Quantas pessoas deseja solicitar a idade?\n"); scanf("%f",&qtd); while(i<qtd) { printf("Entre com a %.0f idade\n",i+1); scanf("%f",&idade); if (i==0) { maior=idade; menor=idade; } if (idade>maior) maior=idade; if (idade<menor) menor=idade; if (idade>=18) cont++; media=media+idade; i++; } printf("A media e %.2f\n",media/qtd); printf("Sao %.0f maiores de idade\n",cont); printf("A maior idade e %.0f anos\n",maior); printf("A menor idade e %.0f anos\n",menor);

system("PAUSE"); return 0; }

79

Os mesmos exerccios usando o comando Do-While. 1) Exiba 1000 vezes o seu nome
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[40]; int i=0; printf("Entre com seu nome\n"); scanf("%s",&nome); do { printf("%s\n",nome); i++; }while(i<1000); system("PAUSE"); return 0; }

2) Exiba os nmeros de 1 a 500, um ao lado do outro com um espao em branco de separao.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=1; do{ printf("%d ",i); i++; }while(i<=500); system("PAUSE"); return 0; }

80

3) Exiba todos os nmeros pares de 10 a 200, um em cada linha.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=10; do{ if (i%2==0) printf("%d\n",i); i++; }while(i<=200); system("PAUSE"); return 0; }

4) Verifique se um nmero primo ou no.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int numero,i=1,cont=0; printf("Entre com o numero que deseja saber se e primo ou nao\n"); scanf("%d",&numero); do { if (numero%i==0) cont+=1; i++; }while(i<numero); if (cont>1) printf("Nao e primo\n"); else printf("E primo\n");

81

system("PAUSE"); return 0; }

5)Solicite ao usurio a idade de cada um componente de um grupo de pessoas. A quantidade de pessoas tambm ser determinada por ele antes da entrada das idades. Aps o trmino da entrada, apresente: a) a mdia das idades, b) a maior idade, c) a menor idade, d) a quantidade de pessoas maior de idade. #include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) { float idade,maior=0,menor=0,cont=0,qtd,i=0,media=0; printf("Quantas pessoas deseja solicitar a idade?\n"); scanf("%f",&qtd); do{ printf("Entre com a %.0f idade\n",i+1); scanf("%f",&idade); if (i==0) { maior=idade; menor=idade; } if (idade>maior) maior=idade;

82

if (idade<menor) menor=idade;

if (idade>=18) cont++; media=media+idade; i++; }while(i<qtd); printf("A media e %.2f\n",media/qtd); printf("Sao %.0f maiores de idade\n",cont); printf("A maior idade e %.0f anos\n",maior); printf("A menor idade e %.0f anos\n",menor);

system("PAUSE"); return 0; }

7.2. Exerccios
1) Exiba mil vezes o seu nome. 2) Exiba os nmeros de 1 a 500, um ao lado do outro com um espao em branco de separao. 3) Exiba todos os nmeros pares de 10 a 200, um em cada linha. 4) Leia um conjunto de 20 valores inteiros e em seguida exiba-os na ordem inversa do que foram digitados. 5) Leia um conjunto de 10 notas de alunos. Calcule e exiba a mdia destas notas. Em seguida exiba apenas as notas que so maiores do que a mdia calculada.

83

Captulo 8 - Vetores, Matrizes e Strings. 8.1. Vetores


Vetores so usados para tratamento de conjuntos de dados que possuem as mesmas caractersticas. Uma das vantagens de usar vetores que o conjunto recebe um nome comum e elementos deste conjunto so referenciados atravs de ndices. Pelo nome vetor estaremos referenciando estruturas que podem ter mais de uma dimenso, como por exemplo, matrizes de duas dimenses. Declarando um vetor Como uma varivel qualquer das que trabalhamos um vetor tambm possui um tipo de dado (Int, Float, Char) e seu ndice para representar a quantidade de posies dele. Exemplo: tipo_de_dado nome_varivel[indice_de_posicoes]; Como se declara vetores ento? int numeros[20]; Assim acabamos de declarar uma varivel com nome "numeros", ela do tipo inteira (int) e um vetor com capacidade de armazenamento de 20 posies, ou seja, ela capaz de armazenar 20 numeros inteiros. float peso[20]; Assim acabamos de declarar uma varivel com nome "peso", ela do tipo ponto flutuante (float) e um vetor com capacidade de armazenamento de 20 posies, ou seja, ele capaz de armazenar 20 nmeros reais. char nome[10]; Assim acabamos de declarar uma varivel com nome "nome", ela do tipo caractere (char) e um vetor com capacidade de armazenamento de 20 posies, ou seja, ela capaz de armazenar 20 CARACTERES (NO SO 20 PALAVRAS) onde vale lembrar que o ltimo caractere representado pelo dgito terminador '\0' que onde encerra o preenchimento de um vetor de caracteres tambm chamado de String. Uma considerao importante a seguinte, bom sempre lembrar que em um vetor a sua primeira posio no ndice 0 (ZERO), e sua ultima posio ser no ndice quantidade_de_posicoes-1(Tamanho do vetor menos 1). De uma forma mais representativa, por exemplo, declara-se um vetor de 7 posies do tipo inteiro com nome dia_semana. int dia_semana[7]; A primeira posio desse vetor dia_semana[0], a segunda dia_semana[1], a terceira dia_semana[2] ... a ltima dia_semana[indice_de_posicoes-1] que equivale dia_semana[6]. Este tipo de considerao valido para qualquer vetor.

84

Agora como podemos trabalhar com vetores e em que eles nos sero teis? Veja o exerccio a seguir: 1) Faa um programa que leia e retire a mdia de 3 numeros.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float n1,n2,n3,media; printf("Entre com o valor de N1, de N2 e de N3\n"); scanf("%f %f %f",&n1,&n2,&n3); media=(n1+n2+n3)/3; printf("A Media e: %f\n",media); system("PAUSE"); return 0; }

Acima est o nosso programa resolvido no modo "bruto" existem maneiras mais simples de refazer o mesmo programa vejamos agora:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float numeros[3],media=0; int i; for(i=0;i<3;i++) { printf("Entre com o valor de N%d \n",i+1); scanf("%f",&numeros[i]); media+=numeros[i]; } media/=3; printf("A Media e: %f\n",media); system("PAUSE"); return 0; }

85

E aparentemente o nosso programa se utilizando vetores se tornou maior do que sem vetores, porm poupamos 2 variveis N2 e N3 e acrescentamos a varivel i. Para este caso aparenta ser invivel o uso de vetores, mas imagine agora para remover a mdia de 10 nmeros? Vejamos a seguir no modo "bruto".
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,media; printf("Entre com o valor de N1, N2, N3, N4, N5, N6, N7, N8, N9 e N10\n"); scanf("%f %f %f %f %f %f %f %f %f %f",&n1,&n2,&n3,&n4,&n5,&n6,&n7,&n8,&n9,&n10); media=(n1+n2+n3+n4+n5+n6+n7+n8+n9+n10)/10; printf("A Media e: %f\n",media); system("PAUSE"); return 0; }

E agora no modo simplificado com o uso de vetores.


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float numeros[10],media=0; int i; for(i=0;i<10;i++) { printf("Entre com o valor de N%d \n",i+1); scanf("%f",&numeros[i]); media+=numeros[i]; } media/=10; printf("A Media e: %f\n",media); system("PAUSE");

86

return 0; }

enfim agora poupamos de usar as variveis: n2, n3, n4, n5, n6, n7, n8, n9 e n10 em troca disso estamos usando um vetor de numeros com 10 posies(numeros[10]) e uma varivel i. Ou seja medida que o nvel de complexidade dos programas vo aumentando torna-se indispensvel o uso de vetores, para reduo do seu programa e otimizao do mesmo. Estes tipos de vetores so chamados de VETORES UNIDIMENSIONAIS (de uma nica dimenso).

8.2. Cadeia de caracteres(String)


Cadeia de caracteres so os vetores de caracteres tambm chamados de strings, so vetores capazes de armazenar palavras. exemplo:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[10]; gets(nome); printf("%s\n",nome); system("PAUSE"); return 0; }

Este programa recebe um nome do usurio e imprime-o na tela. o Vetor nome tem capacidade de 10 posies porm armazena apenas 9 caracteres lembrando que o ultimo o digito terminador '\0'. Por ser uma string, podem-se usar vrios comandos novos tais como o "gets" ele se comporta como um scanf. No muito aconselhvel o uso de scanf("%s",nome) para variveis do tipo char, e vale lembrar tambm que as strings comportam-se como ponteiros, logo no se faz necessrio o uso de & no scanf pois ele j aponta direto ao endereo de memria da varivel nome.

87

Ento podemos reescrever o mesmo programa da seguinte maneira:


#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[10]; scanf("%s",nome); printf("%s\n",nome); system("PAUSE"); return 0; }

Na linguagem C tambm possumos a biblioteca string.h que possui diversas funes para manipulao de strings vejamos abaixo:

lembre-se sempre de inclu-la(#include <string.h>) nos seus programas quando for utilizar alguns desses comandos, caso contrrio eles podero no funcionar corretamente ou at no funcionar.

88

8.3. Matrizes
Em C existe h possibilidade de declararmos vetores de mais de uma dimenso. A forma geral da declarao a seguinte: tipo_de_dade nome[dim1][dim2]..[dimN] As matrizes nada mais sao que vetores de duas dimenses, vejamos um exemplo: int matriz[3][3];

acima temos uma matriz de 3 linhas por 3 colunas(Matriz[Linhas][Colunas]). Vale lembrar que iremos trabalhar com vetores de no mximo duas dimenses aqui. O uso de matrizes ir nos ajudar tambm a trabalhar com palavras, vamos exemplificar agora: Faa um programa que receba 5 nomes e depois imprima os 5 na tela.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[5][10]; int i; for (i=0; i<5; i++) gets(nome[i]); for (i=0; i<5; i++) printf("%s\n",nome[i]); system("PAUSE"); return 0; }

no exemplo acima nome uma matriz de 5 linhas onde cada linha capaz de armazenar 10 caracteres. Lembrando que o ltimo sempre o digito terminador '\0'.

89

8.4. Exemplos
1) Leia um conjunto de 10 notas de alunos. Calcule e exiba a mdia destas notas. Em seguida exiba apenas as notas que so maiores do que a mdia calculada.
#include <stdio.h> #include <stdlib.h> #define MAX 10 int main(int argc, char *argv[]) { float nota[MAX],media=0; int i; for(i=0; i<MAX; i++) { printf("entre com a %d nota\n",i+1); scanf("%f"&nota[i]); media=media+nota[i]; } media=media/max; printf("Media da classe %.2f\n",media); for (i=0; i<MAX; i++) if (nota[i]>media) printf("Nota %.2f acima da media da classe\n",nota[i]); system("PAUSE"); return 0; }

90

2) Leia um conjunto de 20 valores inteiros e em seguida exiba-os na ordem inversa do que foram digitados.
#include <stdio.h> #include <stdlib.h> #define MAX 20 int main(int argc, char *argv[]) { int numeros[MAX],i; for(i=0; i<MAX; i++) { printf("entre com o %d numero\n",i+1); scanf("%d",&numeros[i]); } for (i=max-1; i>=0; i--) printf("%d ",numeros[i]); system("PAUSE"); return 0; }

91

3) Crie um vetor capaz de armazenar 50 nmeros inteiros. Em seguida faa o seu preenchimento automtico com os nmeros de 101 a 150, ou seja, na posio nmero 0 ponha 101, na posio 1 ponha o nmero 102, e assim sucessivamente. Em seguida exiba os valores deste vetor.
#include <stdio.h> #include <stdlib.h> #define MAX 50 int main(int argc, char *argv[]) { int numeros[max],i,j; for(i=101,j=0; j<50; j++,i++) { numeros[j]=i; } for (i=0; i<50; i++) printf("%d ",numeros[i]); system("PAUSE"); return 0; }

4)Faa um programa que receba do usuario uma matriz de ordem 3 calcule a soma de sua diagonal principal.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int matriz[3][3],i,j,soma=0; for (i=0; i<3; i++) { for (j=0; j<3; j++) printf("Entre com o valor da posicao %d %d\n",i,j); if (i==0) soma+=matriz[i][j];

92

} printf("A soma dos elementos e %d\n",soma); system("PAUSE"); return 0; }

5) Faa um programa que receba 5 nomes e depois exiba os em ordem contrria, o ultimo primeiro, o penltimo segundo e etc.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char nome[5][30]; int i; for (i=0; i<5; i++) { printf("Entre com o primeiro nome\n"); fflush(stdin); gets(nome[i]); } for (i=4; i>=0; i--) printf("%s\n",nome[i]); system("PAUSE"); return 0; }

A diretiva #define indica uma definio como nos casos acima. Por exemplo: #define MAX 10 Define que a palavra MAX ir ter valor 10, assim no podendo possuir outro valor a no ser que seja modificada em sua definio.

93

8.5. Exerccios
1) Solicite o nome do usurio, em seguida exiba-o na console. 2) Exiba a quantidade de caracteres do nome do usurio. 3) Solicite uma frase ao usurio, e em seguida exiba-a sem espaos em branco. 4) Solicite dois nomes ao usurio, em seguida verifique se os dois so exatamente iguais. 5) Em um prdio de 8 andares com 4 apartamentos por andar h uma necessidade de se registrar o consumo de energia eltrica de um determinado ms. Faa um programa para realizar este registro (em todos os apartamentos). Entre os muitos levantamentos que se pode fazer com estes dados, no momento, se quer saber as seguintes informaes: - consumo total dos apartamentos da 2 coluna. - consumo total de cada andar deste do prdio. 6) Criar um algoritmo que leia os elementos de uma matriz inteira de 4 x 4 e imprimir os elementos da diagonal principal. 7) Criar um algoritmo que leia os elementos de uma matriz inteira de 3 x 3 e imprimir todos os elementos, exceto os elementos da diagonal principal. 8) Preencher um vetor com nmeros inteiros(8unidades); solicitar um nmero do teclado. Pesquisar se esse nmero existe no vetor. Se existir,imprimir em qual posio do vetor. Se no existir,imprimir MSG que no existe. 9) Preencher um vetor com os numeros pares do nmero 2 a 20 e depois exibilos. 10) Preencher um vetor de 8 elementos inteiros. Mostrar o vetor e informar quantos nmeros so maior que 30.

94

Captulo 9 Funes
At ento as nicas funes que utilizamos, foi a funo main, que a principal de cada programa constitudo no nosso curso, ela era representada como int main, pois ao final do programa ela sempre retornava um inteiro return 0; existem tambm outros tipos de funes alm da int como float, char, void, struct e etc. neste captulo iremos abordar suas utilidades e aplicaes a grande vantagem do uso de funes poder simplificar, esclarecer e organizar seus cdigos para que outros usurios possam compreend-los. A sintaxe de uma funo consiste em ter um tipo, nome e passagem de parmetros como abaixo: void soma (int n1, int n2); Acima acabamos de declarar e inicializar uma funo chamada soma, ela do tipo void(no retorna nada ao seu final) e recebe como parmetros duas variveis n1 e n2. Todas as funes antes de ser implementadas em nossos programas devero ser inicializadas antes do cdigo fonte principal (main) e escritas ao final do cdigo fonte principal (main) como a sintaxe abaixo
#include <stdio.h> #include <stdlib.h> void soma(int n1, int n2); int main(int argc, char *argv[]) { int n1,n2; scanf("%d %d",&n1,&n2); soma(n1,n2); system("PAUSE"); return 0; } void soma(int n1, int n2){ printf("Resultado = %d\n",n1+n2); }

Interpretando nosso programa, inicialmente so includas as bibliotecas stdio.h e stdlib.h em seguida a funo void soma inicializada tendo como parmetros n1 e n2, aps isso a funo main chamada no scanf recebido os dois nmeros que sero somados, os numeros so passados para a funo soma(n1,n2) neste momento ele para a main executa a funo fora da main e depois retorna ao programa principal encerrando-o.
95

Perceba que na funo soma ela no tem a diretiva return, pois ela uma funo void (vazia) ela no retorna nada para a funo principal (main) logo seu uso neste tipo de caso desnecessrio. Vejamos alguns exemplos com a utilizao de funes: 1) Faa um programa que simule uma calculadora onde o usurio poder escolher uma das opes: 1 soma, 2 subtrao, 3 multiplicao, 4 diviso.
#include <stdio.h> #include <stdlib.h> float soma(float n1, float n2); float subtracao(float n1, float n2); float multiplicacao(float n1, float n2); float divisao(float n1, float n2); int main(int argc, char *argv[]) { int opcao; float n1,n2,resultado; printf("Entre com n1 e n2\n"); scanf("%f %f",&n1,&n2); printf("Qual operacao deseja realizar?\n"); printf("1 - Soma\n2 - Subtracao\n3 - Multiplicacao\n4 - Divisao\n"); scanf("%d",&opcao); if (opcao==1) resultado=soma(n1,n2); else if (opcao==2) resultado=subtracao(n1,n2); else if (opcao==3) resultado=multiplicacao(n1,n2); else if (opcao==4 && n2!=0) resultado=divisao(n1,n2); else{ printf("Operacao invalida\n"); system("PAUSE"); return 0;

96

} printf("O Resultado e %.2f\n",resultado); system("PAUSE"); return 0; }

float soma(float n1, float n2){ return n1+n2; } float subtracao(float n1, float n2){ return n1-n2; } float multiplicacao(float n1, float n2){ return n1*n2; } float divisao(float n1, float n2){ return n1/n2; }

No exemplo so inicializadas quatro funes (soma, subtrao, multiplicao, diviso) todas so do tipo float (retornam um dado float) e recebem como passagem de parmetros n1 e n2 que tambm so float. Na funo main recebido os valores de n1 e de n2 uma varivel inteira opcao declarada para decidir qual operao ser executada pelo usurio atravs das analises condicionais que vem logo em seguida. Dentro de cada condicional chamada uma funo de acordo com o valor que esta em opcao ou seja se opcao igual a 1 efetuada a soma de n1 com n2 e exibido seu resultado, se igual a 2 efetuada a subtrao de n1 com n2 e exibido seu resultado, se igual a 3 efetuada a multiplicao de n1 com n2 e exibido seu resultado e se for igual a 4 e n2 diferente de zero(no existe diviso por zero) efetuada a diviso de n1 com n2 e exibido seu resultado. Ao final da main escrita as funes que foram inicializadas para execuo das expresses. As funes podem ser escritas de diversas maneiras diferentes contanto que o seu tipo e sua passagem de parmetro esteja de acordo com os tipos de dados estudados no captulo 2.2 e os tipos existentes no compilador em uso(No caso o Dev C++).

97

2) Faa um programa que receba um nmero inteiro e verifique se ele primo, par e divisvel por 5.
#include <stdio.h> #include <stdlib.h> void verificaprimo(int n1); void verificapar(int n1); void divisivelpor5(int n1); int main(int argc, char *argv[]) { int n1; printf("Entre com n1 \n"); scanf("%d",&n1); verificaprimo(n1); verificapar(n1); divisivelpor5(n1); system("PAUSE"); return 0; } void verificaprimo(int n1){ int i,cont=0; for (i=1; i<n1; i++) if (n1%i==0) cont+=1;

if (cont>1) printf("Nao e primo\n"); else printf("E primo\n"); } void verificapar(int n1){ if (n1%2==0) printf("Par\n"); else

98

printf("Impar\n"); } void divisivelpor5(int n1){ if (n1%5==0) printf("Divisivel por 5\n"); else printf("Nao divisivel por 5\n"); }

3) Criar uma funo que receba um caractere como parmetro e retorne 1 (um) caso seja uma vogal e zero caso no seja.
#include<stdio.h> #include<stdlib.h> int verificavogal (char M); int main(int argc, char *argv[]) { char x; printf("Digite uma letra: "); scanf("%c",&x); if(verificavogal(x)==1) printf("\nA letra [ %c ] eh uma vogal: ",x); else printf("\nA letra [ %c ] eh uma constante: ",x); printf("\n\n"); system("pause"); return 0; } int verificavogal (char M) { if(M=='a' || M=='A' || M=='e' || M=='E' || M=='i' || M=='I' || M=='o' || M=='O' || M=='u' || M=='U') return(1); else return(0); }

99

9.1. Exerccios
1) Faa um programa que calcule a tenso, corrente eltrica ou resistncia de acordo com os dados fornecidos pelo usurio. Crie as seguintes funes abaixo: float tensao(void); float corrente(void); float resistencia(void); O usurio dever escolher qual calcular e fornecer os dados. Obs.: V = R x I. 2) Faa um programa que receba as sadas de uma tabela verdade de duas entradas (A e B), e verifique se uma porta lgica AND, OR, XOR , NXOR, Inexistente. Crie as seguintes funes abaixo: void verificaporta(int A, int B); 3) Faa um programa que receba dois nmeros (N1 e N2) onde N1 obrigatoriamente dever ser maior ou igual N2. Seu programa dever efetuar a diviso de N1 por N2 e retornar o Quociente e o Resto da diviso (sem utilizar os operadores / e %) crie tambm uma funo para verificar os critrios validos para uma diviso (N1 tem que ser maior que N2 e N2 no pode ser igual ZERO) se a diviso for vlida seu programa deve retornar 1 e proceder, caso seja invlida ele deve retornar 0 e encerrar. Abaixo os modelos de funes: int verificadivisao(int N1, int N2); int quociente(int N1, int N2); int resto(int N1, int N2); 4) Faa um programa que receba dois nmeros (N1 e N2) e execute a exponenciao de N1 por N2, ou seja N1 elevado N2, por ltimo exiba o resultado. Faa de acordo com a funo abaixo: int exponencial(int N1, int N2); 5) Refaa o exerccio 4 agora com o seguinte modelo de funo: void exponencial(int N1, int N2); 6) Refaa o exerccio 4 agora com o seguinte modelo de funo: Void exponencial(void);
100

Captulo 10 Arduino
O que Arduino? O Arduino uma plataforma de computao fsica ou embarcada, capaz de ser programado e reprogramado vrias vezes para diversos tipos de aplicaes sejam elas voltadas : Automao, Eletrnica, Computao dentre outras. Fsicamente a placa de controle conhecida como Arduino UNO composta de diversos componentes eletrnicos, sendo eles: Resistores, Capacitores, Leds, Crystal e o mais importante que o seu Microcontrolador modelo ATMEGA328P-PU da Atmel. Seu microcontrolador, programvel por um software chamado Arduino. O Arduino UNO composto por 27 pinos com diversas funes tais como: Entradas Digitais, Entradas Analgicas, Sadas Digitais, Sadas PWM, Reset, Sadas de Tenso: 3.3V e 5V, Terra e AREF. Os temas que sero estudados no andamento do curso sero: - Entadas Digitais - Entradas Analgicas Resoluo de 10 bits - Sadas Digitais - Sadas Analgicas (PWM) Resoluo de 8 bits A resoluo de entrada analgica de 10 bits(variando de 0 a 1023 em decimal) e a de sada analgica(PWM) de 8 bits(variando de 0 a 255 em decimal). Alguns pinos do Arduino podem exercer funes diferentes baseando-se em sua programao, ou seja, pela programao do Arduino definimos a forma de funcionamento de seus pinos configurando-os como entradas ou sadas.

101

10.1. Configurando o Arduino para Programao.


Como foi dito acima, para que o arduino seja programado ele necessita de um software especfico chamado Arduino que pode ser utilizado gratuitamente, o endereo para download : http://arduino.cc/en/Main/Software O software se encarregar de fazer upload de seus programas diretamente do PC para o Arduino. Para o correto funcionamento do Arduino necessrio que voc conecte-o com seu pc e instale os drivers para reconhecimento do novo hardware. Este procedimento bem simples, logo aps conectado porta USB, o PC ir detectar um novo hardware e pedir a instalao de seu driver, o Arduino no vem com o driver de comunicao auto-instalvel(firmware) como em PEN DRIVES, CARTES DE MEMRIAS e etc. necessrio que voc v ao gerenciador de dispositivos e selecione o Arduino, clique em atualizar driver localize o driver dentro da pasta DRIVERS e pronto agora seu arduino j est se comunicando com o seu PC. Veja o Passo-a-passo seguir: Abra o Gerenciador de dispositivos e em Outros dispositivos clique com o boto direito no Dispositivo Arduino Uno depois clique em Atualizar Driver.

102

Agora na nova janela clique em Procurar Software de driver no Computador

Agora clique em Procurar, selecione o diretrio da pasta arduino, marque a caixa de opo incluir subpastas e depois clique em avanar.

103

Logo aps clicar em avanar o gerenciador de dispositivos ir instalar e configurar o driver de comunicao e agora ir aparecer no gerenciador de dispositivos na parte Portas COM e LPT a porta de comunicao COM6 que ser a porta de comunicao do seu Arduino.

Pronto, toda configurao de instalao e programao do seu arduino est preparada agora, basta comear a programar e testar suas experincias.

10.2. Caractersticas do Arduino UNO.

O Arduino UNO composto por 27 Pinos dentre eles podem ser configurados como entradas ou saidas digitais os pinos 0 at o 13. Os pinos GND ou Ground so o negativo. O Arduino UNO possui 6 entradas analgicas que so de A0 at A5 e 6 sadas PWM que so os pinos: 3,5,6,9,10,11 que quando configurados como saidas PWM so capazes de enviar um sinal de tenso de 0V a 5V. Tambm possui 2 pinos para transmisso e recepo de dados que s/ao os pinos 0(Rx) e 1(Tx).

104

10.3. Funes Setup e Loop e principais Comandos.


As funes: void setup() e void loop() so as principais funes de seu programa, sem elas voc no conseguir fazer os seus programas. void setup, uma funo de parametrizao onde voc pode definir quais pinos sero entradas, quais sero saidas, velocidade de comunicao serial e etc. Nela utilizaremos o comando pinMode que ir definir o comportamento dos pinos utilizados(entradas ou sadas). Sua sintaxe : pinMode (n do pino, E/S); No primeiro parmetro voc insere o numero do pino, no segundo parmetro voc configura ele como ENTRADA (INPUT) ou SAIDA (OUTPUT). Existem outros comandos mas o que ser abordado no curso ser apenas o pinMode. void loop, uma funo de repetio para que seu programa rode constantemente, ela fica simplesmente se repetindo e comporta-se como se fosse um while(true). Na void loop os comandos utilizados sero digitalWrite, digitalRead, analogWrite e analogRead que so para realizar, leitura/escrita digital e analgica abaixo suas sintaxes: digitalWrite(n do pino,HIGH/LOW); - Escrita Digital: High representa nvel lgico alto e LOW nvel lgico baixo tambm podendo ser substitudos por 1 ou 0. digitalRead(n do pino); - Leitura Digital: Realiza a leitura do estado(HIGH/LOW) de um determinado pino. analogWrite(n do pino, 0~255); - Escrita Analgica: feita atravs de um sinal PWM, voc pode utilizar um pino com sada PWM e o seu valor de tenso varia entre 0V ~5V representado por uma escala decimal e proporcional de 0 a 255 onde 0 equivale a 0V e 255 equivale a 5V.

105

analogRead(pino analgico); - Leitura Analgica: Efetua a leitura do valor de tenso em um pino de entrada analgica em uma escala decimal e proporcional de 0 a 1023 onde 0 equivale a 0V e 1023 equivale 5V.

10.4. Exemplos
1) Faa um programa e a montagem fsica do circuito que faa um LED piscar de 1 em 1 segundo.
Componentes: - 1 Resistor de 680 - 1 Led

106

No programa foi utilizado o pino 0 como uma sada digital que assume dois valores, ligado ou desligado, agora vamos para a ligao fsica. *O comando delay, gera um atraso de tempo em milissegundos . Para que se tenha uma maior facilidade para manusear o tempo do seu programa tambm poderia ser usado a diretiva #define assim ao invs de ter que alterar os dois delay, voc altera apenas o define, veja abaixo:

107

2) Faa um programa e a montagem fsica do circuito que faa um LED acender ou apagar atravs de um boto.
Componentes: - 1 Resistor de 680 - 1 Resistor de 10k - 1 Resistor de 1k - 1 Push-Button (2 Contatos) - 1 Led

108

Para perfeito funcionamento necessrio montar um circuito de Pull-Down para que a leitura digital funcione corretamente, segue abaixo uma figura de como montar um circuito Pull-Down e Pull-Up.

109

No lugar do resistor de 100 foi utilizado um resistor de 680 isso no alt era o funcionamento do circuito. 3) Faa um programa e a montagem fsica que faa acender trs leds sequenciais atravs da variao de uma entrada analgica, A variao dever ser proporcional entrada de tenso 5V e de forma igualitria.
Componentes: - 3 Resistores de 680 - 3 Leds - 1 Potenciometro B5K

110

A medida que o potencimetro vai variando a sua resistncia os leds vo acendendo em sequencia, isto feito de acordo com a leitura da entrada analgica A0. Lembrando que as sadas analgicas no arduino UNO j vm configuradas no sendo necessrio voc definir na funo setup o pino A0 como INPUT.

111

4) Faa um programa e a montagem fsica que faa variar o brilho de dois leds de forma contrria(enquanto um est acendendo o outro dever estar apagando) de sua luminosidade mnima(apagado) at sua luminosidade mxima(totalmente aceso) utilize duas sadas PWM.
Componentes: - 2 Resistores 680 - 2 Leds

112

Os pinos utilizados foram os pinos 3 e 5 que so dois dos 6 pinos disponveis com sada PWM. Os outros pinos com sada PWM so os pinos: 6, 9, 10 e 11. Atravs de um comando for voc consegue variar a luminosidade dos leds necessrio tambm que se use um atraso (delay) pois o tempo de scan/varredura do arduino muito rpido, caso voc no utilize o delay pode ser que ele nem chegue a variar a luminosidade do inicio ao fim. 5) Faa um programa e a montagem fsica que faa variar o brilho de dois leds atravs de um potencimetro de forma inversa ou seja, se o potencimetro estiver no mximo o brilho do primeiro led dever estar no mximo e do segundo no mnimo(apagado), se ele estiver no mnimo o brilho primeiro led dever estar no mnimo(apagado) e do segundo no mximo.
Componentes: - 2 Resistores 680 - 2 Leds - 1 Potenciometro B5K

113

114

Neste exemplo as sadas PWM esto em funo da entrada analgica, porm a resoluo da entrada analgica de 10 bits ou seja ela varia de 0 a 1023 e das sadas PWM so de 8 bits variando de 0 a 255, necessrio que se utilize uma varivel auxiliar(brilho) e que ela divida a resoluo da entrada(0 a 1023) por 4 assim essa varivel auxiliar ir possuir valores no mximo de 0 255 e assim podendo escrever proporcionalmente nas sadas PWM sem ultrapassar a faixa de valores. Note que a varivel brilho do tipo int, sendo assim 1023 dividido por 4 resultaria em 255,75 pelo fato de brilho ser int neste tipo de caso ele ir escrever na sada 255.

10.5. Exerccios
1) Faa um programa para piscar um LED em um intervalo de 2 segundos. 2) Faa um programa que oscilem o piscar de 2 led's entre si, durante o intervalo de 1 segundo. 3) Faa um programa que atravs de um unico boto acione 3 leds de forma sequencial. 4) Faa um programa que atravs de duas entradas simule uma porta lgica E. 5) Faa um programa que atravs de duas entradas simule uma porta lgica OU. 6) Faa uma barra de leds com 6 leds para simular um medidor de nvel de um tanque, utilize um potencimetro para simular o aumentar e diminuir do nvel. 7) Faa um programa que simule um interruptor three-way. 8) Faa um programa emule um semforo com 3 led's (Verde, Amarelo, Vermelho) O tempo de oscilao dever ser: - Vermelho 6s - Amarelo 2s - Verde 4s 9) Faa um programa que com 2 botes seja capaz de voc aumentar ou diminuir o brilho de um LED. 10) Faa um programa que com 2 botes seja capaz de voc aumentar ou diminuir o brilho de dois LED's de forma inversa(Enquanto um led aumenta o outro ir ter que diminuir o seu brilho). 11) Faa um programa que simule a funo SET e RESET utilizando 2 botes e um LED, 1 boto ser para SET(Ligar o Led) o outro para RESET(Desligar o Led).

115

Referncias Bibliogrficas:
- www.google.com.br - C completo e total 3 edio Herbert Schildt - Microcontroladores PIC - Programao em C Fbio Pereira - www.arduino.cc

116

Das könnte Ihnen auch gefallen