Post on 16-Oct-2015
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