Apostila Arduino Jhsfurno

Embed Size (px)

Citation preview

  • 1

    PROGRAMAO COM ARDUINO PARA

    AUTOMAO INDUSTRIAL

    2014

    Professor: Jordan Henrique de Souza Furno

    Curso: Tcnico em Automao Industrial

    Disciplina: Lgica de Programao

  • 2

    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

  • 3

    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

  • 4

    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.

  • 5

    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

  • 6

    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.

  • 7

    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..

  • 8

    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

  • 9

    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

  • 10

    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

  • 11

    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 ENTO

    FIM_SE

    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

    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.

  • 12

    SE ENTO

    SE ENTO

    SENO

    FIM_SE

    SENO

    SE ENTO

    SENO

    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.

  • 13

    Resoluo:

    Leia n1, n2, n3, n4

    Faa n1+n2+n3+n4 e guarde em media

    SE =7> ENTO

    SENO

    Leia n5

    Faa (media + n5)/2 e guarde em media2

    FIM_SE

    SE =5> ENTO

    SENO

    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.

  • 14

    #include

    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; // processamento

    if (media>=7) // primeira analise condicional

    {

    printf("Aprovado"); // saida de dados

    return; // encerramento da funo

    }

    else // segunda analise condicional

    {

    scanf("%f", &n5); // entrada de dados

    media2=(media+n5)/2; // processamento

    }

    if (media2>=5) // terceira analise condicional

    {

    printf("%.2f, aprovado",media2); // saida de dados

    }

    else // quarta analise condicional

    {

    printf("Reprovado"); // saida de dados

    }

    system ("PAUSE"); // pausa

    return; // encerramento da funo

    }

  • 15

    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.

  • 16

    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 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.

  • 17

    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 FAA

    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 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.

  • 18

    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 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.

  • 19

    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.

  • 20

    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 DE AT PASSO FAA

    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 AT PASSO FAA

    Leia x

    Faa x*3 e guarde em R

    Mostre R

    FIM_PARA

  • 21

    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.

  • 22

    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 interpret-

    los como sendo comandos, mas sim como variveis.

    Dois Primeiros Programas

    Vejamos um primeiro programa em C:

    #include

    /* 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 diz ao compilador que ele deve incluir o arquivo-

    cabealho 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.

  • 23

    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

    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

  • 24

    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.

  • 25

    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.

  • 26

    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.

  • 27

    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.

  • 28

    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.

  • 29

  • 30

    Passo 09 - Na caixa Dica do Dia clique em Fechar

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

  • 31

    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!

  • 32

    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.

  • 33

    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!

  • 34

    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

    #include

    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

    #include

    int main(int argc, char *argv[])

    {

    printf("Vida dificil essa de programador...\n");

    system("PAUSE");

    return 0;

    }

  • 35

    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:

  • 36

    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

    #include

    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;

    }

  • 37

    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"); encontra-

    se 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.

  • 38

    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

  • 39

    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

  • 40

    - 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

  • 41

    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).

  • 42

    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.

  • 43

    - 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 No

    No Sim No

    Sim No No

    Sim Sim 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 No

    No Sim Sim

    Sim No Sim

    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.

  • 44

    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.

  • 45

    4.3. Exemplos 1) Faa um programa que receba dois nmeros e multiplique-os.

    #include

    #include

    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

    #include

    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;

    }

  • 46

    3) Faa um programa que leia um numero inteiro e imprima o seu antecessor e

    o seu sucessor!

    #include

    #include

    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

    #include

    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

  • 47

    #include

    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

    #include

    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

    #include

    int main(int argc, char *argv[])

  • 48

    {

    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;

    }

  • 49

    8) Faa um programa que calcule o salario lquido de um professor baseando-

    se 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

    #include

    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;

    }

  • 50

    Captulo 5 - Condicionais IF, ELSE e SWITCH-CASE 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. }

  • 51

    5.2. Lgica Comentada

    Exemplo 01) Faa um programa que receba duas idades quaisquer e retorne a

    maior ou se so iguais.

    #include

    #include

    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

  • 52

    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

  • 53

    -- 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.

  • 54

    Olhando por outro lado, poderamos reescrever o mesmo programa, com as

    mesmas funes da forma a seguir:

    #include

    #include

    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

  • 55

    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

    #include

    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);

  • 56

    }

    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

    #include

    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;

    }

  • 57

    3) Faa um programa que receba um numero qualquer inteiro e verifique se ele

    divisvel por 2 e 3.

    #include

    #include

    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;

    }

  • 58

    4)Faa um programa que receba um numero qualquer inteiro e verifique se ele

    divisvel por 4 ou por 5 ou pelos dois.

    #include

    #include

    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;

    }

  • 59

    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:

  • 60

    #include

    #include

    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;

    }

  • 61

    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

    #include

    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;

    }

  • 62

    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 Escolha-Caso(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

    #include

    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");

  • 63

    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;

    }

  • 64

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

    do ano.

    #include

    #include

    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");

  • 65

    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;

    }

  • 66

    3) Faa um programa que pea ao usuario uma operao: Soma, Subtrao, Multiplicao ou Diviso receba dois numeros e execute a operao selecionada. #include

    #include

    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:

  • 67

    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.

  • 68

    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:

  • 69

    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

    #include

    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

  • 70

    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 exibi-

    la, 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

    #include

    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.

  • 71

    Captulo 7 - Laos de Repetio FOR, While e Do-

    While

    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 #include int main() { int cont; for (cont=0; cont

  • 72

    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 #include int main() { int cont=0; while(cont

  • 73

    7.1. Exemplos 1) Exiba 1000 vezes o seu nome

    #include

    #include

    int main(int argc, char *argv[])

    {

    char nome[40];

    int i;

    printf("Entre com seu nome\n");

    scanf("%s",&nome);

    for (i=0; i

  • 74

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

    #include

    #include

    int main(int argc, char *argv[])

    {

    int i;

    for (i=0; i

  • 75

    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

    #include

    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; imaior)

    maior=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);

  • 76

    system("PAUSE");

    return 0;

    }

    Os mesmos exerccios usando o comando While.

    1) Exiba 1000 vezes o seu nome

    #include

    #include

    int main(int argc, char *argv[])

    {

    char nome[40];

    int i=0;

    printf("Entre com seu nome\n");

    scanf("%s",&nome);

    while (i

  • 77

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

    branco de separao.

    #include

    #include

    int main(int argc, char *argv[])

    {

    int i=0;

    while(i

  • 78

    4) Verifique se um nmero primo ou no.

    #include

    #include

    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(i1) 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.

  • 79

    #include

    #include

    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(imaior)

    maior=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;

    }

  • 80

    Os mesmos exerccios usando o comando Do-While.

    1) Exiba 1000 vezes o seu nome

    #include

    #include

    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

  • 81

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

    #include

    #include

    int main(int argc, char *argv[])

    {

    int i=10;

    do{

    if (i%2==0)

    printf("%d\n",i);

    i++;

    }while(i

  • 82

    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

    #include

    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;

  • 83

    if (idade=18) cont++;

    media=media+idade;

    i++;

    }while(i

  • 84

    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.

  • 85

    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

    #include

    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

    #include

    int main(int argc, char *argv[])

    {

    float numeros[3],media=0;

    int i;

    for(i=0;i

  • 86

    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

    #include

    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

    #include

    int main(int argc, char *argv[])

    {

    float numeros[10],media=0;

    int i;

    for(i=0;i

  • 87

    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

    #include

    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.

  • 88

    Ento podemos reescrever o mesmo programa da seguinte maneira:

    #include

    #include

    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 ) nos seus programas quando for utilizar alguns desses comandos, caso contrrio eles podero no funcionar corretamente ou at no funcionar.

  • 89

    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

    #include

    int main(int argc, char *argv[])

    {

    char nome[5][10];

    int i;

    for (i=0; i

  • 90

    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

    #include

    #define MAX 10

    int main(int argc, char *argv[])

    {

    float nota[MAX],media=0;

    int i;

    for(i=0; i

  • 91

    2) Leia um conjunto de 20 valores inteiros e em seguida exiba-os na ordem

    inversa do que foram digitados.

    #include

    #include

    #define MAX 20

    int main(int argc, char *argv[])

    {

    int numeros[MAX],i;

    for(i=0; i=0; i--)

    printf("%d ",numeros[i]);

    system("PAUSE");

    return 0;

    }

  • 92

    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

    #include

    #define MAX 50

    int main(int argc, char *argv[])

    {

    int numeros[max],i,j;

    for(i=101,j=0; j

  • 93

    }

    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

    #include

    int main(int argc, char *argv[])

    {

    char nome[5][30];

    int i;

    for (i=0; 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.

  • 94

    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). Entr