Você está na página 1de 126

ALGORITMOS E

PROGRAMAÇÃO APLICADA
PROF. ME. RAFAEL BARBOSA
Prof. Me. Ricardo Benedito de Oliveira
REITOR

Reitor:
Prof. Me. Ricardo Benedito de
Oliveira
Pró-reitor:
Prof. Me. Ney Stival
Gestão Educacional:
Prezado (a) Acadêmico (a), bem-vindo Prof.a Ma. Daniela Ferreira Correa
(a) à UNINGÁ – Centro Universitário Ingá.
PRODUÇÃO DE MATERIAIS
Primeiramente, deixo uma frase de
Sócrates para reflexão: “a vida sem desafios Diagramação:
não vale a pena ser vivida.” Alan Michel Bariani
Thiago Bruno Peraro
Cada um de nós tem uma grande
responsabilidade sobre as escolhas que Revisão Textual:
fazemos, e essas nos guiarão por toda a vida Felipe Veiga da Fonseca
acadêmica e profissional, refletindo diretamente Letícia Toniete Izeppe Bisconcim
em nossa vida pessoal e em nossas relações Luana Ramos Rocha
com a sociedade. Hoje em dia, essa sociedade
é exigente e busca por tecnologia, informação Produção Audiovisual:
e conhecimento advindos de profissionais que Márcio Alexandre Júnior Lara
possuam novas habilidades para liderança e Marcus Vinicius Pellegrini
sobrevivência no mercado de trabalho. Osmar da Conceição Calisto

De fato, a tecnologia e a comunicação Gestão de Produção:


têm nos aproximado cada vez mais de pessoas,
Kamila Ayumi Costa Yoshimura
diminuindo distâncias, rompendo fronteiras e
nos proporcionando momentos inesquecíveis.
Fotos:
Assim, a UNINGÁ se dispõe, através do Ensino a
Shutterstock
Distância, a proporcionar um ensino de qualidade,
capaz de formar cidadãos integrantes de uma
sociedade justa, preparados para o mercado de
trabalho, como planejadores e líderes atuantes.

Que esta nova caminhada lhes traga


muita experiência, conhecimento e sucesso.

© Direitos reservados à UNINGÁ - Reprodução Proibida. - Rodovia PR 317 (Av. Morangueira), n° 6114
UNIDADE ENSINO A DISTÂNCIA

01
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA

CONCEITOS BÁSICOS DA CIÊNCIA DA COMPUTAÇÃO,


ÁLGEBRA DE BOOLE E FUNDAMENTOS DA LÓGICA
DE PROGRAMAÇÃO
PROF. ME. RAFAEL BARBOSA

SUMÁRIO DA UNIDADE

INTRODUÇÃO...............................................................................................................................................................5
1. CONCEITOS BÁSICOS DE HARDWARE E SOFTWARE DE UM COMPUTADOR.................................................6
1.1 HARDWARE.............................................................................................................................................................8
1.2 UNIDADE CENTRAL DE PROCESSAMENTO - UCP............................................................................................8
1.3 MEMÓRIAS............................................................................................................................................................8
1.4 PERIFÉRICOS DE ENTRADA E SAÍDA..................................................................................................................8
1.5 SISTEMA OPERACIONAL......................................................................................................................................9
2. SISTEMA DE NUMERAÇÃO: DECIMAL, BINÁRIO, OCTAL E HEXADECIMAL.....................................................9
2.1 CONVERSÃO DECIMAL PARA BINÁRIOS...........................................................................................................10
2.2 CONVERTER BINÁRIO EM DECIMAL ................................................................................................................ 12

WWW.UNINGA.BR 3
2.3 CONVERTER DECIMAL PARA OCTAL................................................................................................................. 13
2.4 CONVERTER DECIMAL PARA HEXADECIMAL..................................................................................................14
2.5 CONVERTER BINÁRIO PARA OCTAL..................................................................................................................15
2.6 CONVERTER BINÁRIO PARA HEXADECIMAL...................................................................................................16
3. TABELA ASCII ........................................................................................................................................................16
4. ÁLGEBRA DE BOOLE ........................................................................................................................................... 20
4.1 HISTÓRIA DA ÁLGEBRA DE BOOLE ................................................................................................................. 20
4.2 FUNÇÕES DE BOOLE........................................................................................................................................... 21
4.3 FUNÇÕES BOOLEANAS BÁSICAS E SUAS TABELAS VERDADES....................................................................23
4.4 POSTULADOS DA ÁLGEBRA DE BOOLE ......................................................................................................... 25
4.5 PROPRIEDADES DA ÁLGEBRA DE BOOLE ..................................................................................................... 26
4.5.1 TEOREMAS DE ÁLGEBRA DE BOOLE ........................................................................................................... 26
5. FUNDAMENTOS DA LÓGICA DE PROGRAMAÇÃO..............................................................................................27
5.1 ALGORITMOS .......................................................................................................................................................27
5.2 CONSTRUÇÃO DE FLUXOGRAMAS ................................................................................................................. 28

WWW.UNINGA.BR 4
ENSINO A DISTÂNCIA

INTRODUÇÃO
A onda de novas tecnologias computacionais tende a gerar novos tipos de sistemas,
novas formas de criar ferramentas, novas formas de dados e assim por diante, que muitas vezes
derrubaram seus predecessores. O que pareceu ser a evolução é, de certa forma, uma série de
revoluções. Entretanto o desenvolvimento de tecnologias de computação é mais do que uma
cadeia de inovação - um processo que tem sido uma característica das tecnologias físicas que
moldam nosso mundo. Por exemplo, existe uma cadeia de inspiração da roda hidráulica,
da máquina a vapor, ao motor de combustão interna. Subjacente a isso, é um processo de
habilitação. A indústria de construção de motores a vapor produziu as habilidades, materiais e
ferramentas utilizados na construção dos primeiros motores de combustão interna.
Na computação, algo mais rico está acontecendo, novas tecnologias emergem, não só
pela substituição dos predecessores, mas também pela envolvente. A computação está criando
plataformas em que se reinventa. Nesta unidade iremos explorar alguns conceitos básicos de

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


ciência da computação e como que interpretar a linguagem de máquina (binários) e a lógica que
norteia a computação.

WWW.UNINGA.BR 5
ENSINO A DISTÂNCIA

1. CONCEITOS BÁSICOS DE HARDWARE E SOFTWARE


DE UM COMPUTADOR
A evolução dos computadores pode ser considerada desde o surgimento do ENIAC
(Eletronic Numerical Integrator and Computer - Computador Integrador Numérico Eletrônico),
como o primeiro computador digital de grande escala, até o Tianhe-2, o supercomputador chinês
que alcançou a marca de 33,86 petaflop/s, ou seja, 33,8615 operações por segundo. Para se ter
uma ideia, isso representa um equipamento 1 milhão de vezes mais rápido que um computador
comercial comum. Esses avanços foram graças às descobertas e pesquisas no campo da eletrônica:

• Em 1904, o inglês John Ambrose Fleming (1849-1945) desenvolveu a válvula termiônica,


também chamada várias vezes de válvula a vácuo, como podemos observar na Figura 1. As
válvulas eram utilizadas como componente de controle para integrar dispositivos biestáveis (com
dois estados estáveis ON/OFF).

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Figura 1 - Válvula Termiônica. Fonte: Domínio Público (2017).

• Na década de 50, com aperfeiçoamento das técnicas, foi possível utilizar os semicondutores,
para o desenvolvimento do diodo e o transistor, permitindo a redução do tamanho de circuitos e
aumentando a confiabilidade dos equipamentos.

Figura 2 – Transistor. Fonte: King of Wallpapers (2017).

WWW.UNINGA.BR 6
ENSINO A DISTÂNCIA

• Nos anos seguintes, começou a miniaturização com os circuitos integrados, composto


basicamente por dispositivos semicondutores sobre um substrato fino de material semicondutor
(BRIAN, 1998).

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Figura 3 - Circuito integrado. Fonte: Wiki Wand (2017).

• Na década de 70 surgiu o microprocessador, que conseguiu implementar toda a CPU de


um computador num único elemento integrado (Friederich e Korbs, 2014).
A maioria dos computadores segue a arquitetura de von Neumann, que descreve um
computador de três partes principais: CPU (Computer Processing Unit - Unidade Central de
Processamento), Memória e dispositivos de entrada e saída. Esses componentes podem ser vistos
na Figura 4.

Figura 4 - Diagrama do princípio do funcionamento do computador. Fonte: Doc Player (2017).

WWW.UNINGA.BR 7
ENSINO A DISTÂNCIA

1.1 Hardware
Pela definição usual, Hardware é a parte física do computador, formado por componentes
eletrônicos, como por exemplo, mouse, teclado, monitor, caixa de som dentre outros. Não
necessariamente apenas componentes externos, como também os internos, por exemplo,
memória RAM, placa de vídeo, placa de rede e etc.

1.2 Unidade Central de Processamento - UCP


Basicamente é um circuito eletrônico, conhecido como processador, tem a função de
executar as instruções de um programa, executando as operações aritméticas, lógicas e o controle
das entradas e saídas especificadas pela instrução (WEIK, 1971).
A forma, a concepção e a implementação da UCP mudaram ao longo de sua história,
mas sua operação fundamental permanece inalterada. Os componentes principais da UCP
são a Unidade Lógica Aritmética (ULA), que tem a função de executar as operações lógicas e
aritméticas; a Unidade de Controle (UC ou CC), que tem como atribuição direcionar a operação

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


do processador para responder as instruções do programa; e os registradores, que têm como
função armazenar os dados para o processamento. Alguns autores dizem que os registradores se
incluem na mesma categoria das memórias cache.

1.3 Memórias
Na computação, memória refere-se aos dispositivos de hardware do computador usados
para armazenar informações para uso imediato. A memória opera a uma velocidade elevada, por
exemplo, a memória de acesso aleatório (RAM), que armazena grandes quantidades de dados.
Nesta subseção, iremos ver os dois tipos de memória, a principal e a secundária.
Memória Principal:

• Memória RAM (Random-access memory - Memória de Acesso Aleatório): armazena as


instruções do programa para aumentar a velocidade, ou seja, permite que os itens de dados sejam
lidos ou escritos independentes da localização física dos dados da memória.

• Memória ROM (Random-Only Memory - Memória exclusiva para leitura): é um tipo de


memória não volátil. Os dados são armazenados permanentemente ou não, serve para armazenar
informações do firmware (software que está intimamente ligado ao hardware).

Memória Secundária:
• As memórias secundárias ou auxiliares são um meio para guardar informações que não
podem ser perdidas, mesmo quando o computador é desligado por qualquer motivo. Este tipo
de memória é conhecido ainda como memória de massa ou externa (Frederich e Korb, 2014).
Alguns exemplos, disco magnéticos (HD) ou flexível (disquete), CD-ROM e Pen drive.

1.4 Periféricos de Entrada e Saída


São dispositivos que permitem a comunicação com o computador. Todos esses dispositivos
são processados pela UCP.

WWW.UNINGA.BR 8
ENSINO A DISTÂNCIA

• Dispositivos de entrada: são utilizados para introduzir informações para o computador.


Exemplos: teclado, mouse, leitora de código de barras, scanner.

• Dispositivos de saída: são utilizados para exibir informações armazenadas ou processadas


pelo computador. Exemplos: impressora, Display, mostradores digitais.

1.5 Sistema Operacional


Basicamente, o Sistema Operacional (SO) é um software de sistema que gerencia recursos
de hardware e software e fornece serviços comuns para os programas de computador. Todos
os programas de computador, salvo o firmware, necessitam de um sistema operacional para
funcionar.
Os sistemas operacionais utilizam um recurso chamado (time-sharing), esse recurso
serve para planejar tarefas para uso eficiente do processador, armazenamento de dados em massa,
impressão e outros recursos.
Para as funções de hardware como entrada e saída e alocação de memória, o sistema

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


operacional atua como intermediário entre os programas e o hardware do computador
(STALLINGS, 2005). Embora o código do programa seja normalmente executado diretamente
pelo hardware, o programa frequentemente faz chamada para o SO ou até mesmo é interrompido
por ele.
Os sistemas operacionais (SO) de desktop (referência ao computador de mesa) e notebooks
mais utilizados, de acordo com o Global Stats (2015), no período de 2015, é dominante o SO da
Microsoft, o Windows, com uma participação do mercado de cerca de 82%. O SO da Apple Inc.
está em segundo lugar (9,8%), e o Linux o SO gratuito está em terceiro com 1,5%. Ainda de
acordo com a Global Stats, o mercado de sistema operacionais de celulares, o Android do Google
é dominante, com 87,5%, em segundo o iOS da Apple com 12,1%, os outros SO somam 0,4%. No
setor de supercomputadores e servidores é dominante o sistema operacional Linux.

2. SISTEMA DE NUMERAÇÃO: DECIMAL, BINÁRIO,


OCTAL E HEXADECIMAL
Com o surgimento da computação no campo da multimídia, é comum termos um
olhar de máquinas de manipulação de texto, vídeos e imagens, mas realmente os computadores
funcionam manipulando apenas números. Sons e imagens são interpretados pelo computador
como um conjunto de números.
De acordo com Damas (2011), tudo começou com a invenção do bit (binary digital), que
pode ser representado por dois estados: ligado e desligado. Geralmente ligado (1) e desligado (0),
um bit serve perfeitamente para indicar o sexo de um determinado indivíduo, pois existe o sexo
masculino e o feminino:
• 1 - Feminino
• 0 - Masculino
Se pretendermos representar o estado civil de uma pessoa, o bit já não chega, pois
existem vários estados: solteiro, casado, divorciado e viúvo. Precisamos juntar dois bits de forma
a representar o estado civil:
• 00 - Solteiro
• 01 - Casado
• 10 - Divorciado

WWW.UNINGA.BR 9
ENSINO A DISTÂNCIA

• 11 - Viúvo

No entanto, em vias de normas, podemos juntar apenas grupos de 8 bits, o que passa a
ser chamado de byte.
O byte representa uma letra, sinal de pontuação, pixel e outras informações que o
computador processa. Para que isso ocorra, os computadores utilizam uma tabela que combina
números binários com símbolos, a tabela ASCII (American Standard Code for Information
Interchange), que iremos ver mais adiante ainda nesta unidade.

2.1 Conversão Decimal para Binários


O sistema decimal de numeração (base 10) possui dez possíveis valores (0,1,2,3,4,5,6,7,8,9)
para cada casa numérica. Já o sistema binário possui dois valores (0,1) para cada casa numérica. Já
que apenas o sistema binário é a linguagem interna dos computadores, o programador deve saber
converter decimal para binário. Existem vários métodos para a conversão, no entanto, vamos
ensinar o método mais prático, que é a divisão curta por dois com resto, por exemplo:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Converter 1810 para binário.
Solução: para converter esse número decimal em binário, faça a divisão por dois e escreva
o resto.

1810 Resultado Fracionada? Binário


18/2 9 Não, é uma divisão 0
exata
9/2 4,5 Sim, divisão 1
fracionada
4/2 2 Não, é uma divisão 0
exata
2/2 1 Não, é uma divisão 0
exata
1/2 0,5 Sim, divisão 1
fracionada

Escreva os binários de baixo para cima

1810 = 100102

WWW.UNINGA.BR 10
ENSINO A DISTÂNCIA

b) Converter 12510 para binário:

12510 Resultado Binário


125/2 62,5 1
62/2 31 0
31/2 15,5 1
15/2 7,5 1
7/2 3,5 1
3/2 1,5 1
1/2 0,5 1

12510 = 11111012

c) Converter 19210 para binário:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


19210 Resultado Binário
192/2 96 0
96/2 48 0
48/2 24 0
24/2 12 0
12/2 6 0
6/2 3 0
3/2 1,5 1
1/2 0,5 1

19210 = 110000002

A conversão não parece ser difícil, mas deve-se ter atenção. São muitos números
e muitas variáveis, se houver erros, a leitura final ficará comprometida!

WWW.UNINGA.BR 11
ENSINO A DISTÂNCIA

Na tabela a seguir observe os decimais convertidos em binários.

Decimal Binário
0 00000
1 00001
2 00010
3 00011
4 00100
5 00101
6 00110
7 00111
8 01000
9 01001

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Tabela 1 - Decimal e seu valor correspondente em binário. Fonte: o autor.

2.2 Converter Binário em Decimal


Se analisarmos a tabela 1, vemos que os múltiplos de 2 estão todos colocados
estrategicamente, contendo um dos bits e todos os outros zeros. Por exemplo, o decimal 9, observe
se enumerarmos da esquerda para direita, cada casa é uma posição, que pode representar dois
valores (0 ou 1), ou seja base 2. Vamos verificar o exemplo abaixo:

010012

Binário 0 1 0 0 1
24 23 22 21 20

Resultado 0 8 0 0 1

A soma é igual: 0+8+0+0+1 = 9

Outro exemplo, o mesmo no caso:

100102

Binário 1 0 0 1 0
2 4
23
2 2
2 1
20

Resultado 16 0 0 2 0

A soma é igual: 16+0+0+2+0 = 18

WWW.UNINGA.BR 12
ENSINO A DISTÂNCIA

2.3 Converter decimal para octal


O octal se tornou amplamente utilizado na computação pois era ideal em converter
sistemas binários uma vez que cada dígito octal pode ser escrito como um único número binário
de três dígitos. Assim, foi possível diminuir custos de display e calculadoras (PRICE; PESELNICK,
1987).
Basicamente é um sistema numérico de base 8, (0,1,2,3,4,5,6 e 7), para converter um
número decimal em octal é simples.

Exemplos:
1810 para octal:
Podemos verificar que 1810 = 228

Caso esteja com dúvidas tire a prova real:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


2×81 + 2× 80 = 16 + 2 = 18

b) 1610 para octal:


Para não ficar muito confuso, na operação, coloque apenas o resto.

1610 = 208

c) 9610 para octal:

9610 = 1408
Caso esteja com dúvidas, faça a prova real:
1x 82 +4 x 81 + 0 x 80 = 64 + 32 + 0 = 96

WWW.UNINGA.BR 13
ENSINO A DISTÂNCIA

Decimal Octal
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 10
9 11
Tabela 2 - Decimal para octal. Fonte: o autor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


2.4 Converter Decimal Para Hexadecimal
O sistema numérico hexadecimal tem a base numérica 16, possui 16 símbolos possíveis
para representar um único dígito (0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F). Para converter precisamos
do auxílio da tabela a seguir.

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F

Os números hexadecimais são amplamente utilizados por profissionais da computação,
pois é mais conveniente que o binário, mais adiante iremos verificar a razão disso. Agora vamos
ver um exemplo.
Converter 1810 em hexadecimal
Utilizaremos o mesmo princípio, da operação para converter em octal, mas só que agora
com a base 16.
Então 1810 = 1216

b) Converter 102410 em hexadecimal


Para números decimais muito grandes o sistema hexadecimal é vantajoso veja:
102410 = 40016

WWW.UNINGA.BR 14
ENSINO A DISTÂNCIA

b) Converter 12510 em hexadecimal:

12510 = 7D

D = 13, como podemos ver na tabela 2.

2.5 Converter Binário Para Octal


É extremamente simples converter Binário para Octal, temos que observar que a base
octal (8 valores) pode ser representada por 3 bits. Podemos confirmar isso visualizando a tabela
a seguir:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Octal Binário
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Tabela 3 - Octal para binário. Fonte: o autor.

Exemplos:
1001102 para octal
Vamos agrupar os bits 3 em 3:

De acordo com a tabela (100) = 4 e (110) = 6


b) 101101012 para octal:

101101012 = 2658

WWW.UNINGA.BR 15
ENSINO A DISTÂNCIA

2.6 Converter Binário Para Hexadecimal


Tem o mesmo princípio que o Octal, porém a base não é a mesma, hexadecimal (16
valores), nesse caso deve-se agrupar os bits em grupos de 4.

Hexa Binário Hexa Binário


0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 0111 F 1111

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Tabela 4 – Converter Binário para Hexadecimal. Fonte: o autor.

Exemplos:
1001102 para Hexadecimal:

Observe que foram inseridos dois zeros


no lado esquerdo, para fazer agrupamento
de 4 bits.

1001102 = 2616
b) 101101012 para Hexadecimal:

101101012 = B516

3. TABELA ASCII
A tabela ASCII (American Standard Code for Information Interchange - Código Padrão
Americano para Intercâmbio de Informações), representa texto em computadores, equipamentos
de telecomunicação e outros dispositivos. A maioria dos dispositivos modernos de codificação se
baseiam no ASCII (MACKENZIE, 1980).
A ASCII foi desenvolvida a partir do código telegráfico. Seu primeiro uso comercial foi
como código de teleimpressor de sete bits, promovido pelos serviços de dados da empresa Bell.
O trabalho sobre o padrão ASCII começou nos anos 60, três anos depois foi publicada a primeira
versão e foi submetida a uma revisão no final dos anos 60, e passou por uma atualização em
1986. Originalmente baseado no alfabeto inglês, ASCII codifica 128 caracteres especificados em
inteiros de sete bits. Os caracteres codificados podem ser vistos na tabela a seguir.

WWW.UNINGA.BR 16
ENSINO A DISTÂNCIA

Caractere Decimal Hexadecimal Binário Comentário


NUL 00 00 0000 0000 Caracter Nulo
SOH 01 01 0000 0001 Começo de cabeçalho de
transmissão
STX 02 02 0000 0010 Começo de texto
ETX 03 03 0000 0011 Fim de texto
EOT 04 04 0000 0100 Fim de transmissão
ENQ 05 05 0000 0101 Interroga
ACK 06 06 0000 0110 Confirmação
BEL 07 07 0000 0111 Sinal sonoro
BS 08 08 0000 0100 Volta um caracter
HT 09 09 0000 1001 Tabulação Horizontal
LF 10 0A 0000 1010 Próxima linha

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


VT 11 0B 0000 1011 Tabulação Vertical
FF 12 0C 0000 1100 Próxima Página
CR 13 0D 0000 1101 Início da Linha
SO 14 0E 0000 1110 Shift-out
SI 15 0F 0000 1111 Shift-in
DLE 16 10 0001 0000 Data link escape
D1 17 11 0001 0001 Controle de dispositivo
D2 18 12 0001 0010 Controle de dispositivo
D3 19 13 0001 0011 Controle de dispositivo
D4 20 14 0001 0100 Controle de dispositivo
NAK 21 15 0001 0101 Negativa de Confirmação
SYN 22 16 0001 0110 Synchronous idle
ETB 23 17 0001 0111 Fim de transmissão de bloco
CAN 24 18 0001 1000 Cancela
EM 25 19 0001 1001 Fim de meio de transmissão
SUB 26 1A 0001 1010 Substitui
ESC 27 1B 0001 1011 Escape
FS 28 1C 0001 1100 Separador de Arquivo
GS 29 1D 0001 1101 Separador de Grupo
RS 30 1E 0001 1110 Separador de registro
US 31 1F 0001 1111 Separador de Unidade
Tabela 5 – ASCII. Fonte: Mackenzie (1980).

WWW.UNINGA.BR 17
ENSINO A DISTÂNCIA

Espaço 32 20 0010 0000


! 33 21 0010 0001
“ 34 22 0010 0010
# 35 23 0010 0011
$ 36 24 0010 0100
% 37 25 0010 0101
& 38 26 0010 0110
‘ 39 27 0010 0111
( 40 28 0010 1000
) 41 29 0010 1001
* 42 2A 0010 1010
+ 43 2B 0010 1011
, 44 2C 0010 1100

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


- 45 2D 0010 1101
. 46 2E 0010 1110
/ 47 2F 0010 FFFF
0 48 30 0011 0000
1 49 31 0011 0001
2 50 32 0011 0010
3 51 33 0011 0011
4 52 34 0011 0100
5 53 35 0011 0101
6 54 36 0011 0110
7 55 37 0011 0111
8 56 38 0011 1000
9 57 39 0011 1001
: 58 3A 0011 1010
; 59 3B 0011 1011
< 60 3C 0011 1100
= 61 3D 0011 1101
> 62 3E 0011 1110
? 63 3F 0011 1111
@ 64 40 0100 0000
A 65 41 0100 0001
B 66 42 0100 0010
C 67 43 0100 0011
D 68 44 0100 0100

WWW.UNINGA.BR 18
ENSINO A DISTÂNCIA

E 69 45 0100 0101
F 70 46 0100 0110
G 71 47 0100 0111
H 72 48 0100 1000
I 73 49 0100 1001
J 74 4A 0100 1010
K 75 4B 0100 1011
L 76 4C 0100 1100
M 77 4D 0100 1101
N 78 4E 0100 1110
O 79 4F 0100 1111
P 80 50 0101 0000
Q 81 51 0101 0001

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


R 82 52 0101 0010
S 83 53 0101 0011
T 84 54 0101 0100
U 85 55 0101 0101
V 86 56 0101 0110
W 87 57 0101 0111
X 88 58 0101 1000
Y 89 59 0101 1001
Z 90 5A 0101 1010
[ 91 5B 0101 1011
\ 92 5C 0101 1100
] 93 5D 0101 1101
^ 94 5E 0101 1110
_ 95 5F 0101 1111
` 96 60 0110 0000
a 97 61 0110 0001
b 98 62 0110 0010
c 99 63 0110 0011
d 100 64 0110 0100
e 101 65 0110 0101
f 102 66 0110 0110
g 103 67 0110 0111
h 104 68 0110 1000
i 105 69 0110 1001

WWW.UNINGA.BR 19
ENSINO A DISTÂNCIA

j 106 6A 0110 1010


k 107 6B 0110 1011
l 108 6C 0110 1100
m 109 6D 0110 1101
n 110 6E 0110 1110
o 111 6F 0110 1111
p 112 70 0111 0000
q 113 71 0111 0001
r 114 72 0111 0010
s 115 73 0111 0011
t 116 74 0111 0100
u 117 75 0111 0101
v 118 76 0111 0110

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


w 119 77 0111 0111
x 120 78 0111 1000
y 121 79 0111 1001
z 122 7A 0111 1010
{ 123 7B 0111 1011
| 124 7C 0111 1100
} 125 7D 0111 1101
~ 126 7E 0111 1110
DELETE 127 7F 0111 1111
Tabela 6 – Caracteres. Fonte: Mackenzie (1980).

Cabe lembrar que o ASCII reserva 32 códigos (0 - 31) para caracteres de controle (veja
a coluna de comentários), originalmente destinados a não representar informações imprimíveis,
mas sim para dispositivos de controle (como impressoras) que fazem o uso do ASCII.

4. ÁLGEBRA DE BOOLE

4.1 História da Álgebra de Boole


A álgebra de Boole antecede os desenvolvimentos modernos no campo da álgebra abstrata
e na lógica matemática, no entanto está intimamente ligada às origens de ambos os campos
(DUNN; HARDEGREE, 2001).
Em 1847, dois grandes trabalhos inovadores foram publicados por matemáticos
britânicos: Lógica Formal por Augustus de Morgan (1806-1871) e a Análise Matemática da
Lógica por George Boole (1815-1864). Ambos os autores procuraram expandir os limites da
lógica tradicional, desenvolvendo um método geral para representar e manipular inferências
logicamente válidas.

WWW.UNINGA.BR 20
ENSINO A DISTÂNCIA

Embora de natureza explicitamente algébrica, a abordagem audaz e original de Boole levou


a um sistema de álgebra muito estranho. Em seu trabalho publicado no livro “Uma Investigação
das Leis do Pensamento”, publicado em 1854, Boole explorou essa álgebra estranha e verificou que
seu sistema se assemelhava e divergia da álgebra tradicional. Apesar de não ter sido bem recebido
na época, posteriormente tornou-se um campo de estudo em matemática e uma ferramenta
poderosa na concepção e estudo de circuitos eletrônicos e arquitetura de computadores.
Na década de 1930, ao estudar circuitos de comutação, Claude Shannon (1916 - 2001),
matemático e engenheiro eletrônico estadunidense, conhecido como pai da teoria da informação,
observou que também se poderia aplicar as regras da álgebra de Boole na configuração de
circuitos de comutação, como uma maneira de analisar e projetar circuitos por meios algébricos
em termos de porta lógicas. A implementação eficiente das funções booleanas, para resolução
de problemas fundamentais em circuitos lógicos combinacionais, fez desenvolver as modernas
ferramentas de automação, permitindo o desenvolvimento da computação.

4.2 Funções de Boole

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


O estudo da Álgebra de Boole passa pela definição de uma série de símbolos, com a
finalidade de formalização de expressões matemáticas para análise mais adequada de suas funções.
Enquanto a álgebra tradicional opera com relações quantitativas, a álgebra de Boole opera
com relações lógicas. As variáveis booleanas são representadas por letras que podem assumir
apenas dois valores (0 ou 1), e as variáveis da álgebra tradicional representam números reais.
Vamos considerar dois operadores “+” e “”, soma e multiplicação, como ficaria esses
operadores na álgebra booleana? Veja na tabela a seguir.

Operador Álgebra Tradicional Álgebra Booleana


“+” Soma “OR” ou “OU”
“” Multiplicação “AND” ou “E”
Tabela 7 - Operadores da álgebra tradicionais e booleana. Fonte: o autor.

Verificando a tabela, podemos perceber que a álgebra booleana não exige uma resposta
numérica, contudo, busca uma conclusão lógica de alguma expressão. Vamos analisar o exemplo
a seguir na Figura 5:

Figura 5 - Circuito elétrico simples com chave tipo switch. Fonte: o autor.

WWW.UNINGA.BR 21
ENSINO A DISTÂNCIA

Em um circuito elétrico simples, para ligar a lâmpada basta fechar os interruptores


(a e b) ou (c e d). Qual a função lógica formada por variáveis binárias que representa
esse circuito?
Lembrando que as variáveis na álgebra booleana podem representar dois números
(0 ou 1). Logo a função que representa esse circuito é:
S = f(a,b,c,d) = a·b + c·d

Para representarmos o estado da variável binária, utilizamos um procedimento chamado


tabela verdade. A tabela a seguir representa a função binária . Número de variáveis binárias é 4,
logo a tabela tem 24 = 16 linhas.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


a b c d S
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1
Tabela 8 - verdade da função S = f(a,b,c,d) = a . b + c . d . Fonte: o autor.

WWW.UNINGA.BR 22
ENSINO A DISTÂNCIA

4.3 Funções Booleanas básicas e suas tabelas verdades


A seguir, iremos estudar as funções booleanas básicas e as respectivas tabelas verdades:

• Função Igualdade:
S(a) = a

a S
0 0
1 1

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


• Função União (OR ou OU) - Soma lógica:
S (a,b) = a+b

a b S
0 0 0
0 1 1
1 0 1
1 1 1

• Função intersecção (AND ou E) - Multiplicação lógica:


S (a,b) = a . b

a b S
0 0 0
0 1 0
1 0 0
1 1 1

WWW.UNINGA.BR 23
ENSINO A DISTÂNCIA

• Função negação (NOT ou N):


S (a) = α

a S
0 1
1 0

• Função da negação da intersecção (NAND ou NE):


S (a,b) = a · b

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


a b S
0 0 1
0 1 1
1 0 1
1 1 0

• Função negação da reunião (NOR ou NOU):


S(a,b) = a + b

a b S
0 0 1
0 1 0
1 0 0
1 1 0

WWW.UNINGA.BR 24
ENSINO A DISTÂNCIA

• Função OR ou OU exclusivo (XOR ou XOU) ():


S(a,b) = a⋅b + a⋅b
S(a,b) = a⊕b

a b S
0 0 0
0 1 1
1 0 1
1 1 0

4.4. Postulados da Álgebra de Boole


Por meio dos postulados e teoremas, é possível simplificar as expressões lógicas.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Seguem os postulados e teoremas de acordo com Daghlin (1995):

Postulado 1 - A soma lógica de uma variável (a) mais 1 é sempre 1.

Postulado 2 - A soma lógica de uma variável mais um valor lógico 0 sempre será igual a
variável.

Postulado 3 - O produto lógico de uma variável por um valor lógico 1 sempre será a
variável.

Postulado 4 - O produto lógico de uma variável por um valor lógico 0 será sempre 0.

Postulado 5 - A soma lógica ou o produto de duas variáveis iguais é igual a própria variável.

Postulado 6 - A soma lógica de uma variável mais a negação da mesma é sempre 1.

Postulado 7 - O produto lógico de uma variável pela negação da mesma é sempre 1.

Postulado 8 - A variável negada duas vezes (ou par de vezes) fica sempre constante.

WWW.UNINGA.BR 25
ENSINO A DISTÂNCIA

Postulado 9 - Se dois membros de uma igualdade forem negados, não sofrerá alteração,
ou seja:

4.5 Propriedades da Álgebra de Boole


Dentro da álgebra de Boole existem três tipos de propriedades: a comutativa, associativa
e a distributiva:

• Comutativa
a+b = b+a

ab=ba
• Associativa

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


a + (b + c) = (a + b) + c = a + b + c

a (bc) =(ab)c = abc

• Distributiva
a (b + c) = ab + ac

4.5.1 Teoremas de Álgebra de Boole


Os teoremas são propostos para simplificações em álgebra booleana, são no total três
teoremas fundamentais, o terceiro foi formulado pelo matemático De Morgan um dos responsáveis
pelo desenvolvimento da lógica:

• Teorema 1

• Teorema 2

• Teorema 3 de De Morgan:

WWW.UNINGA.BR 26
ENSINO A DISTÂNCIA

5. FUNDAMENTOS DA LÓGICA DE PROGRAMAÇÃO

Os computadores mais antigos foram frequentemente programados sem a ajuda de uma


linguagem de programação, a inserção dos códigos era geralmente na forma binária com cartões
perfurados ou fita magnética, ou, alternando interruptores no painel frontal do computador. As
linguagens de máquinas foram posteriormente substituídas pelas linguagens de programação,
com o intuito de facilitar no desenvolvimento do programa. Para entendermos o funcionamento
da lógica de programação é preciso saber alguns conceitos, que falaremos adiante.

5.1 Algoritmos
De acordo com Salvetti (1999), o algoritmo é uma sequência finita de instruções ou
operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que
seja sua instância.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


Sobre a origem da palavra Algoritmo, encontra-se no sobrenome, Al-Khwarizmi, do
matemático persa Mohamed ben Musa que viveu no século IX. Além de matemático, também era
astrônomo, membro da “Casa da Sabedoria”, uma academia de cientistas em Bagdá (LOUREIRO,
2010). A álgebra foi introduzida na Europa ocidental por meio dos seus trabalhos, cujas obras
foram traduzidas no ocidente no século XII, uma dessas obras falava sobre o sistema decimal.
Um algoritmo é formalmente uma sequência de passos finitos que levam uma execução
de uma tarefa. Podemos pensar em algoritmo como uma receita (MORAES, 2000). Por exemplo:

Exemplo 1 - Somar dois números

Passo 1: Receber os dois números.


Passo 2: Somar os dois números.
Passo 3: Mostrar o resultado obtido

Exemplo 2 - Sacar dinheiro em caixa eletrônico

Passo 1: Ir até o caixa eletrônico.


Passo 2: Colocar o cartão.
Passo 3: Digitar senha.
Passo 4: Selecionar a opção “saque”.
Passo 5: Digitar valor da quantia que deseja sacar.
Passo 6: Retirar o cartão.
Passo 7: Retirar o dinheiro.
Passo 8: Sair.

Você deve estar pensando que poderia alterar os passos para simplificar ou deixar mais
detalhado, entretanto devemos pensar que o problema pode ser resolvido de várias maneiras
diferentes, porém atingindo o mesmo objetivo. Em suma, podemos ter vários algoritmos
diferentes para resolver o mesmo problema.

WWW.UNINGA.BR 27
ENSINO A DISTÂNCIA

5.2 Construção de fluxogramas


De acordo com Ascencio e Campos (2000), para desenvolver qualquer algoritmo são
necessários alguns passos descritos a seguir:

a) Ler atentamente o enunciado, destacando os pontos importantes.

b) Definir os dados de entrada, ou seja, quais dados serão fornecidos.

c) Definir o processamento, ou seja, quais cálculos serão efetuados e quais as restrições


para esses cálculos. O processamento é responsável pela transformação dos dados de entrada em
dados de saída.

d) Definir dados de saída, ou seja, quais dados serão gerados depois do processamento.

e) Construir o algoritmo utilizando o método de fluxograma.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


f) Testar o algoritmo realizando simulações.

O fluxograma consiste em analisar o enunciado do problema e escrever, utilizando


símbolos e gráficos predefinidos. A vantagem desse tipo de organização do algoritmo é que os
elementos gráficos facilitam o entendimento em relação ao texto. Na tabela a seguir, iremos
analisar o conjunto de símbolos utilizados no fluxograma.

Tabela 9 - Conjunto de símbolos principais utilizados no fluxograma. Fonte: Pereira (2009, p. 5)

WWW.UNINGA.BR 28
ENSINO A DISTÂNCIA

Exemplos de fluxogramas

a) Faça um fluxograma para mostrar o resultado da multiplicação de dois números:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1


b) Faça um algoritmo para mostrar o resultado da divisão de dois números:

WWW.UNINGA.BR 29
ENSINO A DISTÂNCIA

c) Faça um algoritmo para calcular a média aritmética entre duas notas de um aluno
e para mostrar a situação desse aluno, ou seja, se o aluno tiver igual ou maior que a nota 6,
aprovado, se menor a nota for menor que 6, reprovado.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 1

WWW.UNINGA.BR 30
UNIDADE ENSINO A DISTÂNCIA

02
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA

ESTRUTURA DE PROGRAMAÇÃO SEQUENCIAL


E CONDICIONAL
PROF. ME. RAFAEL BARBOSA

SUMÁRIO DA UNIDADE

INTRODUÇÃO............................................................................................................................................................. 32
1. HISTÓRIA DA LINGUAGEM C .............................................................................................................................. 33
2. DEV C++................................................................................................................................................................. 33
3. LINK DEV C++ ....................................................................................................................................................... 34
4. PRIMEIROS PROGRAMAS.................................................................................................................................. 36
4.1 CARACTERES ESPECIAIS....................................................................................................................................40
4.2 TIPOS DE DADOS BÁSICOS ............................................................................................................................... 41
5. ESTRUTURA DE CONTROLE................................................................................................................................ 46
5.1 ESTRUTURA SEQUENCIAL................................................................................................................................. 47
5.2 ESTRUTURA CONDICIONAL..............................................................................................................................50
5.3 ESTRUTURA CONDICIONAL - SIMPLES...........................................................................................................50
5.4 ESTRUTURA CONDICIONAL - COMPOSTA....................................................................................................... 52

WWW.UNINGA.BR 31
ENSINO A DISTÂNCIA

INTRODUÇÃO
A linguagem de programação é importante, porque define o relacionamento, a semântica e
a gramática, o que permite que os programadores se comuniquem efetivamente com as máquinas
que eles programam.
Uma linguagem de programação serve para várias finalidades:

• Você pode instruir o computador o que fazer, de forma legível por humanos.

• Permite que o programador estruture as instruções em funções, procedimentos etc. Isso


também permite que o programa seja dividido em “pedaços” que podem ser desenvolvidos por
um grupo de desenvolvedores.

• Fornece portabilidade - as instruções de baixo nível de um computador serão diferentes


das de outro computador.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Os programadores de computador têm uma compreensão completa do modo e do
porquê dos sistemas informáticos, incluindo as limitações do sistema, e podem estabelecer
expectativas realistas e trabalhar em torno dessas limitações para maximizar completamente o
uso do equipamento e seus acessórios.
Nesta unidade, iremos estudar uma linguagem de programação, a mais comum e a base
de várias outras linguagens: a famosa linguagem C.

WWW.UNINGA.BR 32
ENSINO A DISTÂNCIA

1. HISTÓRIA DA LINGUAGEM C
A linguagem de programação C foi concebida no início dos anos 70 por Dennis M.
Ritchie, um funcionário da Bell Labs (AT&T). Nos anos 60, Ritchie trabalhou com vários
outros funcionários da Bell Labs em um projeto chamado Multics. O objetivo do projeto era
desenvolver um sistema operacional para um computador grande, que pudesse ser usado por mil
usuários. Em 1969, a Bell Labs retirou-se do projeto, porque não poderia produzir um sistema
economicamente viável. Assim, os funcionários da Bell Labs tiveram que procurar outro projeto
para trabalhar (principalmente Dennis e Thompson).
Thompson começou a trabalhar no desenvolvimento de um novo sistema de arquivos.
Ele descreveu uma versão do novo sistema para o DEC PDP-7, um computador produzido pela
Digital Equipment Corporation, que custava na época 70 mil dólares, e tinha arquitetura de 18
bits, bastante poderoso para a época. Desenvolveu o sistema utilizando a linguagem assembler.
Depois de algum tempo, começaram a fazer melhorias e adicionar expansões, que culminou
no jogo Space Travel, bastante popular e que exigia muito do processador para gerar gráficos e

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


ilustração dos planetas.
Depois do sistema completo, a equipe chamou-o de UNIX (uma referência sarcástica do
sistema fracassado Multics). Detalhe, o programa todo estava escrito em código assembly.
Após alguns anos, o UNIX contava com um “intérprete” para a linguagem B, linguagem
criada por Martin Richards, derivada do nome BCPL, Basic Combined Programming Language
(Linguagem de Programação Básica Combinada). Antes da linguagem B, para criar um código
demandava muitas páginas, com a linguagem B o mesmo código poderia ser escrito em poucas
linhas. Todavia ao programar utilizando a linguagem BCPL, ninguém conseguia representar
dados, ou seja, isso incapacitava o uso de estruturas. Diante dessa necessidade, Dennis M. Ritchie
junto com sua equipe (em 1971-1973) transformaram a linguagem B em C, mantendo maior
parte da sintaxe e adicionaram os tipos de dados, deixando a linguagem mais funcional.
Na época, Dennis Ritchie viu o potencial da linguagem de programação C e junto com
sua equipe reescreveram o sistema operacional UNIX em um DEC PDP-11 e mais tarde, um livro
sobre a linguagem de programação em C, clássico, chamado “The C Programming Language, 1 st
edition”. No livro se encontra o famoso programa “Hello, World”.
Durante muitos anos, o livro de Dennis Ritchie (principal autor) era considerado padrão.
Entretanto, em 1983, um comitê foi formado pelo American National Standards Institute (ANSI),
para desenvolver uma definição moderna para a linguagem de programação em C. Algumas
modificações foram feitas, porém nada que afetasse os programas antigos. Em 1988, o comitê
define a linguagem C. Posteriormente, a norma foi adotada pela International Standards
Organization (ISO).

2. DEV C++
Basicamente o ciclo de desenvolvimento de uma aplicação engloba três fases distintas:
• Desenvolvimento do código fonte: etapa do trabalho realizado pelo programador.

• Compilação do código: verificar se os códigos respeitaram as sintaxes das instruções.


Este procedimento de compilação é realizado pelo compilador, que detecta situações que não
podem ser traduzidas pelo computador. Sendo assim o programador deve verificar possíveis
erros de digitação ou estruturais.

WWW.UNINGA.BR 33
ENSINO A DISTÂNCIA

• Execução do programa: depois de compilado o código, só executar a aplicação.

Para desenvolver programas em linguagem C no sistema operacional Windows, precisamos


do programa DEV C++, um software gratuito que oferece um ambiente de desenvolvimento de
aplicações. Nesse programa, muitas funcionalidades são oferecidas para a escrita, compilação,
debugging (evita que o programa execute de forma inesperada) e execução de programas em C e
C++ (extensão da linguagem C).

Para executar os projetos, o programa utiliza os padrões ANSI C, apesar do


programa ser livre e de código aberto, foi descontinuado oficialmente em 2006,
porém muitos desenvolvedores continuam o projeto independente, personalizando
o programa e adicionando outras funcionalidades.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Utilizaremos uma versão leve e completa, que pode ser instalada em qualquer sistema
operacional Windows. A seguir, o link para instalação do programa: <https://drive.google.com/
open?id=0B0ccdGtHNUWjd1RUNGE4dC0ta00>.

3. LINK DEV C++


Procedimentos de instalação:
1. Depois do download do programa, abra o “devcpp4.9.9.2_setup”.

Figura 1 - Instalação do DEC C++, selecionando linguagem. Fonte: o autor.

WWW.UNINGA.BR 34
ENSINO A DISTÂNCIA

2. Após aceitar o termo, selecione o tipo de instalação “Full”.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 2 - Instalação do DEV C++, instalando os componentes. Fonte: o autor.

3. Selecione a pasta do diretório de preferência, ou deixe padrão de acordo com a Figura


a seguir.

Figura 3 - Instalação do DEV C++, selecionando a pasta de destino. Fonte: o autor.

WWW.UNINGA.BR 35
ENSINO A DISTÂNCIA

4. Depois de instalado, execute o programa para verificar se está tudo correto

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 4 - Ambiente do software DEV C++. Fonte: o autor.

4. PRIMEIROS PROGRAMAS
Com o DEV C++ aberto, siga o procedimento a seguir:

Figura 5 - Como criar o primeiro programa em C. Fonte: o autor.

WWW.UNINGA.BR 36
ENSINO A DISTÂNCIA

Escreva o código abaixo:

Figura 6 - Primeiro programa em C (Hello World). Fonte: o autor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Compile o programa e execute:

Figura 7 - Compilando e executando o programa, se preferir apenas aperte a tecla F9. Fonte: o autor.

WWW.UNINGA.BR 37
ENSINO A DISTÂNCIA

Salve o programa:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 8 - Salvando o primeiro programa. Fonte: o autor.

Figura 9 - Programa Hello World. Fonte: o autor.

Caso você digite errado alguma linha, irá aparecer um “log” abaixo do ambiente de
programação, veja na Figura 10.

WWW.UNINGA.BR 38
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 10 - Mensagem de erro do compilador, o erro foi a falta de (;), no final da linha 7. Fonte: o autor.

O erro mais comum é esquecer o (;), no final da linha da função, mas você pode ter
percebido que a linha #include <stdio.h> não tem (;), isso porque a extensão (.h) não é linguagem
C, mas sim uma diretiva que indica ao compilador adicionar um processo de compilação, no caso
um cabeçalho padrão que vem da expressão inglesa (standard input-output header), que significa
“cabeçalho padrão de entrada/saída”.

Veja mais detalhes do algoritmo que desenvolvemos:


#include <stdio.h> → Inclui funções de entrada e saída

main ( ) → O programa começa aqui

{ → Início do bloco de instruções

printf (“Hello World”); → Escrever a string (sequência de caracteres) usando a


função printf

} → Fim do bloco de instruções (e fim do programa)

WWW.UNINGA.BR 39
ENSINO A DISTÂNCIA

A função printf mostra todos os caracteres, desde que estejam com aspas (“”). E como
representar a mudança de linha (ENTER)?
Uma nova linha (New Line) em C é representada por \n. Tente desenvolver um programa
assim:
#include <stdio.h>
main ( )
{
printf (“Hello \n”);
printf (“World”);
}

4.1 Caracteres Especiais


O símbolo \ é utilizado para retirar o significado especial de caractere, ou em outros casos
como \n, serve para representar um comando. Veja a tabela:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


\7 Bell (sinal sonoro do computador)
\a Bell (sinal sonoro do computador)
\n Nova linha
\\ Caractere \ (representação \ )
\’ Caractere ‘ (aspas simples)
\” Caractere “ (aspas)
\? Caractere ? (ponto de interrogação)
Tabela 1 - Caracteres e comandos. Fonte: o autor.

Geralmente, se você pesquisar na internet alguns algoritmos, verá que o programador


faz “comentários” sobre o seu programa. Evidentemente que os comentários não são dedicados
para o compilador e sim para o leitor entender o seu código, é a razão para descrever o algoritmo
daquela forma. Os comentários não interferem no programa, e é representado por /*.
Tente compilar o seguinte:

#include <stdio.h>
main ()
{
printf (“Hello \n”);
/*printf (“World”); /*
}

WWW.UNINGA.BR 40
ENSINO A DISTÂNCIA

Você irá perceber que a palavra “World” sumiu, porque o compilador entende que é um
comentário e não entra no programa final. Para você entender melhor a função dos comentários,
veja a seguir um exemplo:

#include <stdio.h> /*Inclui funções de entrada e saída*/

main () /*O programa começa aqui*/

{ /* Início do bloco de instruções */

printf (“Hello World”); /* Escrever a string (sequência de caracteres) usando a função


printf */

} /* Fim do bloco de instruções (e fim do programa) */

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


4.2 Tipos de Dados Básicos
Na programação em C, é necessário conhecer o tipo de dado para só então utilizá-lo.
Podemos fazer uma analogia com a geladeira. Você não vai colocar uma lata de refrigerante no
recipiente dos ovos, claro que você vai guardar o produto nos melhores recipientes possíveis. É a
mesma coisa na linguagem C, com relação aos tipos de dados, que são basicamente quatro (char,
int, float e double), e serão apresentados detalhadamente em seguida.
Antes de falar sobre os tipos de dados, é bom termos alguns conceitos bem definidos.
Por exemplo, sempre que desejarmos guardar um valor que, por qualquer razão, não seja fixo,
devemos fazê-lo utilizando variáveis.

De acordo com Damas (1995), uma variável é nada mais que um nome que damos
a uma determinada posição de memória para conter um valor de um determinado
tipo.

WWW.UNINGA.BR 41
ENSINO A DISTÂNCIA

a) Inteiros – int:
Como o nome indica, int é um tipo de variável que armazena valores que pertencem ao
conjunto dos números inteiros positivos e negativos. EX: -1, 0, 2341234234.

É bom lembrar que a declaração de uma variável tem que ser sempre realizada
antes de qualquer instrução. Você irá entender logo em seguida.

As operações dos inteiros, pode ser visto na Tabela 2 a seguir:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Operação Descrição Exemplo Resultado
+ Soma 25+4 29
- Subtração 25-4 21
* Multiplicação 25*4 100
/ Divisão Inteira 25/4 6,25
% Resto da Divisão 25%4 1
Tabela 2 – Operadores. Fonte: o autor.

É importante ressaltar que qualquer operação entre inteiros o resultado será inteiro.
Como é feita a declaração do inteiro, veja a seguir:

int num; /*números inteiros*/

Vamos aprender como se escreve os números inteiros em um algoritmo em C:

#include <stdio.h>
main ()
{
int num = 24;
printf (“O valor de num = %d e o valor seguinte = %d \n”, num,num+1);
}

O que vai aparecer em sua tela provavelmente é a seguinte string:


O valor de um num = 24 e o valor seguinte = 25
Você já deve ter percebido que para representar num dentro da string do printf devemos
escrever um inteiro de um printf, no formato de escrita utilizando o símbolo %d.

WWW.UNINGA.BR 42
ENSINO A DISTÂNCIA

Depois temos que indicar ao printf quais os valores que terá que colocar nos locais
assinalados por %d.

Por isso, a importância de colocar em ordem as variáveis ou os valores que substituíram


%d, separados por vírgula.
Da mesma forma que existe uma função printf para a escrita de valores, existe também
uma função para leitura de valores - a função scanf.
Teste esse exemplo:

#include <stdio.h>

main()
{

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


int num;

printf (“introduza um numero:”);
scanf (“%d”,&num);
printf (“O numero introduzido foi %d\n”,num);
}

Para ler qualquer variável é necessário que a função scanf preceda de & (E
comercial), como no algoritmo anterior.
scanf (“%d”,&num);

b) Reais - Float e double

As variáveis declaradas do tipo float ou double são utilizadas para armazenar valores
numéricos reais. Geralmente é denominado ponto flutuante, porque consegue representar a parte
fracionária (EX: 0.00003234).
A diferença entre as declarações float e double é o número de bytes que é reservado para
armazenamento. O float consegue até 7 dígitos decimais e são necessários 4 bytes de memória. Já
o double e até 15 dígitos decimais e são necessários 8 bytes.

WWW.UNINGA.BR 43
ENSINO A DISTÂNCIA

Os números fracionários na declaração devem conter ponto para separar inteiros


da parte decimal, EX: 12.5 e não 12,5.

Teste essa aplicação: escreva um programa que calcule o perímetro e a área de uma
circunferência.

#include <stdio.h>

main()

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


{
float raio, perimetro;
double Pi = 3.1415927, area;

printf (“Introduza o Raio da Circunferencia: “);
scanf (“%f ”,&raio);
area = Pi*raio*raio;
perimetro = 2*Pi*raio;

printf (“Area = %f\n”, area);
printf (“Perimetro = %f\n”, perimetro);
}

c) Caracteres – char:

Para armazenar caracteres utilizamos o char, porém serve apenas para armazenar UM, e
somente UM, caractere.
É importante enfatizar isso porque um dos erros mais comuns de programação em C é
pensar que o tipo char permite armazenar strings ou conjunto de caracteres numa variável do tipo
char.

WWW.UNINGA.BR 44
ENSINO A DISTÂNCIA

Escreva o algoritmo a seguir, para testar a variável char.

#include <stdio.h>

main ()

char ch;
printf (“Introduza um Caractere: “);
scanf (“%c”, &ch);
printf (“O caractere introduzido foi %c\n”, ch);
}

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


note no algoritmo %c, representa a variável char, nomeada como ch.

Existe uma função chamada getchar que serve para fazer leitura de caracteres sem ter que
recorrer a função scanf. O interessante é que ela pode ser invocada sem qualquer parâmetro, ou
seja, a função lê o caractere e mostra o caractere obtido como um resultado, evitando-se assim o
&.
Veja como ficaria o programa anterior:

#include <stdio.h>

main ()

{
char ch;
printf (“Introduza um Caractere: “);
ch = getchar ();
printf (“O caractere introduzido foi %c\n”, ch);
}

Agora, escreva o algoritmo a seguir e veja algo interessante

WWW.UNINGA.BR 45
ENSINO A DISTÂNCIA

#include <stdio.h>

int main()
{
char ascii = 82;
printf(“%c”,ascii);
}

Provavelmente na tela irá aparecer R, agora tente rodar esse programa:

#include <stdio.h>

int main()
{
char ascii = 83;
printf(“%c”,ascii);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


}

Apareceu S? Se sim, dê uma olhada na tabela ASCII na unidade I, o decimal 83, certamente,
está associado ao caractere S. E 82 o R. O interessante que você pode fazer códigos ou senhas
utilizando a tabela ASCII.

Exemplo:

#include <stdio.h>

int main()
{
printf(“%c%c%c%c%c”,83,69,78,72,65);
}

Veja que palavra irá aparecer.

5. ESTRUTURA DE CONTROLE
Uma estrutura de controle é um bloco de programação que analisa variáveis e escolhe
uma direção para onde ir, com base em determinados parâmetros. O termo controle de fluxo
detalha a direção que o programa leva (de que maneira o controle do programa “flui”). O controle
de fluxo determina como um computador responderá as condições e parâmetros.
O fluxo de controle é dividido em três categorias:

• Estrutura Sequencial → Realiza um conjunto predeterminado de comandos de forma


sequencial, ou seja, na ordem que foram declarados.

• Estrutura Condicional → É uma estrutura que realiza ações dependendo da condição


imposta (verdadeira ou falsa).

WWW.UNINGA.BR 46
ENSINO A DISTÂNCIA

• Estrutura de Repetição → A estrutura executa sempre em laço infinito. Dependendo do


algoritmo pode-se criar uma condição para sair do laço.

5.1 Estrutura Sequencial


Como o nome sugere, essa estrutura basicamente realiza um conjunto predeterminado
de instruções de comandos de cima para baixo, sequencialmente, você pode visualizar olhando
a Figura 11, a seguir.

Figura 11 - Fluxograma de uma Estrutura Sequencial. Fonte: o autor.


ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2

WWW.UNINGA.BR 47
ENSINO A DISTÂNCIA

Escreva o algoritmo a seguir:

#include <stdio.h>

int main()
{
float num1, num2, sum, sub, mult, div;

printf(“Digite o primeiro numero: “ );


scanf(“%f ”, &num1);

printf(“Digite o segundo numero: “ );


scanf(“%f ”, &num2);

//Soma

sum = num1 + num2;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


//Subtração
sub = num1 - num2;

//Multiplicaçao
mult = num1 * num2;

//Divisão
div = num1/num2;

printf(“%.2f + %.2f = %.2f\n”, num1, num2, sum);


printf(“%.2f - %.2f = %.2f\n”, num1, num2, sub);
printf(“%.2f * %.2f = %.2f\n”, num1, num2, mult);
printf(“%.2f / %.2f = %.2f\n”, num1, num2, div);
}

Certamente você verificou alguns detalhes dessa programação, uma nova forma de
escrever comentários (//), e além de identificar o seguinte comando %.2f, a razão dessa função é
limitar o número de casas quando calculado o resultado. Percebemos também que o algoritmo
funciona de forma sequencial, respeitando as instruções.
Vamos ver outro exemplo, um pouco mais aplicado, no caso para calcular o salário de um
funcionário:

WWW.UNINGA.BR 48
ENSINO A DISTÂNCIA

#include <stdio.h>
main( )
{
float vlrHora, nroHoras, INSS, vlrINSS, salBruto, salLiquido;

printf(“Informe o valor por hora trabalhada:\n”);


scanf(“%f ”, &vlrHora);

printf(“\nInforme o nro de horas trabalhadas:\n”);


scanf(“%f ”, &nroHoras);

printf(“\nInforme o %% de desconto do INSS:\n”);


scanf(“%f ”, &INSS);

salBruto = vlrHora * nroHoras;


vlrINSS = salBruto * (INSS / 100);
salLiquido = salBruto - vlrINSS;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


printf(“\n\nSalario bruto = R$ %.2f ”, salBruto);
printf(“\nDesconto INSS = R$ %.2f ”, vlrINSS);
printf(“\n=============================”);
printf(“\nSalario liquido = R$ %.2f ”, salLiquido);
}

E como ficaria o algoritmo anterior, caso queira inserir horas extras? Tente escrever o
algoritmo, utilize o programa DEV C++.

Outro exemplo de algoritmo sequencial:



#include <stdio.h>
main() {
float litros, kms, vlrLitro, vlrKm, vlrTotal;

printf(“Informe o valor do litro de combustivel:\n”);


scanf(“%f ”, &vlrLitro);

printf(“\nInforme a qtde de litros gastos:\n”);


scanf(“%f ”, &litros);

printf(“\nInforme os quilometros percorridos:\n”);


scanf(“%f ”, &kms);

vlrTotal = litros * vlrLitro;


vlrKm = vlrTotal / kms;
printf(“\n\nValor total gasto = R$ %.2f ”, vlrTotal);
printf(“\nValor gasto / km = R$ %.2f ”, vlrKm);
}

WWW.UNINGA.BR 49
ENSINO A DISTÂNCIA

Caso você queira incrementar o algoritmo para determinar o consumo médio de um


automóvel, como você desenvolveria o algoritmo anterior?

5.2 Estrutura Condicional


A estrutura de condicional é um tipo de estrutura que realiza uma ação dependendo
da condição (ou seleção) verdadeira ou falsa. Usamos palavras em inglês para expressar uma
estrutura condicional com if (SE) e else (SENÃO ou DO CONTRÁRIO).

5.3 Estrutura Condicional - Simples



Basicamente a condicional simples executa um conjunto de instruções se a condição for
verdadeira, caso seja falsa o bloco de instruções não será executado.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2

Figura 12 - Fluxograma da estrutura condicional simples. Fonte: o autor.

WWW.UNINGA.BR 50
ENSINO A DISTÂNCIA

Exemplo de uma estrutura condicional simples:

#include <stdio.h>
#include <stdlib.h>
main() {
// Declarar variáveis
int idade;
// Pedir ao usuário para escrever sua idade
printf(“Digite sua idade: “);
scanf(“%d”, &idade);
// Comparar com a idade mínima
if (idade >= 18) {
printf(“Ja pode ser preso!”);
}

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Você já deve ter percebido que na estrutura condicional existe um bloco de instruções
para a condição, delimitados por (“{“ e “}”).

if (idade >= 18) {


printf(“Já pode ser preso!”);
}

Todavia se você digitar a idade <18, o programa deverá ser finalizado, pois não existe
nenhum bloco de instrução quando não for verdadeiro. Para isso, você deve estruturar uma
condicional composta como pode ver na subseção seguinte.
Entretanto existe uma forma de você criar mais uma condição para abranger outro grupo
que seja verdadeira, com a condição (idade < 18). De acordo com o algoritmo a seguir:

#include <stdio.h>
#include <stdlib.h>

main() {
// Declarar variáveis
int idade;
// Pedir ao usuário para escrever sua idade
printf(“Digite sua idade: “);
scanf(“%d”, &idade);
// Comparar com a idade mínima
if (idade >= 18) {
printf(“Ja pode ser preso!”);
}
if (idade < 18) {
printf(“nao pode ser preso!”);
}

WWW.UNINGA.BR 51
ENSINO A DISTÂNCIA

5.4 Estrutura Condicional - Composta


A estrutura condicional composta executa o bloco de instrução de condição verdadeira
como de uma condição falsa, de acordo com o fluxograma na Figura 13.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 13 - Fluxograma de uma estrutura condicional composta. Fonte: o autor.

WWW.UNINGA.BR 52
ENSINO A DISTÂNCIA

Exemplo de aplicação de uma estrutura composta.

// Solicitar salário e o valor da prestação de um empréstimo pretendido.


// Se prestação for maior que 20% do salário, imprimir: “Empréstimo não
// pode ser concedido”. Senão, imprimir: “Empréstimo pode ser concedido”.

#include <stdio.h>

main(void) {
float salario, prestacao, percentual;

printf(“Informe o salario: R$ “);


scanf(“%f ”, &salario);

printf(“Informe o valor da prestacao: R$ “);


scanf(“%f ”, &prestacao);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


percentual = (prestacao / salario) * 100;

printf(“\nA prestacao corresponde a %.2f%% do salario.”, percentual);

if (percentual > 20.0)


printf(“\nEmprestimo nao pode ser concedido.”);
else
printf(“\nEmprestimo pode ser concedido.”);
return 0;
}

Como no bloco If, else também é delimitado por (“{“ e “}”), porém não precisa colocar
uma expressão como por exemplo: else (percentual <= 20.0).
Vamos ver outra aplicação?

WWW.UNINGA.BR 53
ENSINO A DISTÂNCIA

#include <stdio.h>
#include <stdlib.h>

int main (void) {


float n1, n2, n3,n4, media;

printf(“Informe a 1a. nota:\n”);


scanf(“%f ”, &n1);

printf(“\nInforme a 2a. nota:\n”);


scanf(“%f ”, &n2);

printf(“\nInforme a 3a. nota:\n”);


scanf(“%f ”, &n3);

printf(“\nInforme a 4a. nota:\n”);


scanf(“%f ”, &n4);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


media = (n1 + n2 + n3 +n4) / 4;

printf(“\nMedia final = %.2f ”, media);

if (media >= 7.0)


printf(“ (aluno aprovado).”);
else
printf(“ (aluno reprovado).\n”);
}

WWW.UNINGA.BR 54
ENSINO A DISTÂNCIA

Se quisermos implementar o algoritmo para mostrar a recuperação, seria dessa forma:

#include <stdio.h>
#include <stdlib.h>

int main (void) {


float n1, n2, n3,n4, media;

printf(“Informe a 1a. nota:\n”);


scanf(“%f ”, &n1);

printf(“\nInforme a 2a. nota:\n”);


scanf(“%f ”, &n2);

printf(“\nInforme a 3a. nota:\n”);


scanf(“%f ”, &n3);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


printf(“\nInforme a 4a. nota:\n”);
scanf(“%f ”, &n4);

media = (n1 + n2 + n3 +n4) / 4;

printf(“\nMedia final = %.2f ”, media);

if (media >= 7.0)


printf(“ (aluno aprovado).”);
else if ((media >= 5.0) && (media < 7.0))
printf(“ (aluno em recuperacao).”);
else
printf(“ (aluno reprovado).\n”);
}

Nesse caso, utilizamos o else if, um recurso interessante para realizar múltiplas condições,
no entanto, precisa utilizar um operador lógico (&&), o significado desse operador é (E). Para
você entender melhor:

else if ((media >= 5.0) E (media < 7.0))


printf(“ (aluno em recuperacao).”);

Isto significa que o aluno ficará de recuperação com média maior ou igual a cinco e média
abaixo de 7,0.
Vamos a outro exemplo de aplicação da condição composta com else if.

WWW.UNINGA.BR 55
ENSINO A DISTÂNCIA

#include <stdio.h>

int main(void) {
int idade;

printf(“Informe a idade da pessoa:\n”);


scanf(“%d”, &idade);

printf(“\n%d = “, idade);

if (idade < 0)
printf(“Erro: idade invalida !!!.”);
else if ((idade >= 0) && (idade <= 21))
printf(“fase de crescimento”);
else if ((idade >= 22) && (idade <= 70))
printf(“ja esta marmanjo”);
else

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


printf(“Idoso.”);

}

Notamos nesse algoritmo que podemos utilizar mais de uma vez a função else if.

Estrutura Condicional Switch/case

A estrutura condicional switch/case tem uma peculiaridade diferente das estruturas


if, else e else if. Podemos entender o comando switch/case como uma construção de múltiplas
possibilidades de seleção e decisão (Figura 14). Essa é uma forma para reduzir a complexidade
de vários if ou else. Vejamos o exemplo de um algoritmo, escreva esse algoritmo no programa
DEV C++.

WWW.UNINGA.BR 56
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


Figura 14 - Fluxograma switch. Fonte: o autor.

WWW.UNINGA.BR 57
ENSINO A DISTÂNCIA

#include <stdio.h>
int main (void) {
int valor;
printf (“Informe o valor:\n”);
scanf (“%d”, &valor);
switch ( valor )
{
case 1 :
printf (“Mercurio\n”);
break;

case 2 :
printf (“Venus\n”);
break;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


case 3 :
printf (“Terra\n”);
break;

case 4 :
printf (“Marte\n”);
break;

case 5 :
printf (“Jupiter\n”);
break;

case 6 :
printf (“Saturno\n”);
break;

case 7 :
printf (“Urano\n”);
break;

case 8 :
printf (“Netuno\n”);
break;

default :
printf (“Valor invalido!\n”);
}

WWW.UNINGA.BR 58
ENSINO A DISTÂNCIA

Vimos no algoritmo anterior algumas funções que não conhecíamos como


a break e default:

break (quebrar)→ forçar a saída do switch/case.

default (ausência)→ Se digitar qualquer número que não esteja em uma


case, a opção default irá atuar.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2

WWW.UNINGA.BR 59
ENSINO A DISTÂNCIA

Existe a possibilidade de desenvolver o mesmo algoritmo utilizando as funções else if? A


resposta é sim, entretanto veja como ficou complexo nosso algoritmo a seguir:

#include <stdio.h>

int main (void )


{
int valor;

printf (“Digite um valor de 1 a 8: “);


scanf(“%d”, &valor);

if (valor == 1)
printf (“Mercurio\n”);
else
if (valor == 2)
printf (“Venus\n”);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 2


else
if (valor == 3)
printf (“Terra\n”);
else
if (valor == 4)
printf (“Marte\n”);
else
if (valor == 5)
printf (“Jupiter\n”);
else
if (valor == 6)
printf (“Saturno\n”);
else
if (valor == 7)
printf (“Urano\n”);
else
if (valor == 8)
printf (“Netuno\n”);
else
printf (“Valor invalido!\n”);

Por fim, segue o link para ter todos os programas comentados desta unidade:
https://drive.google.com/open?id=142LIdt3PJkuasKilqCZF-HIW684TSCpL

WWW.UNINGA.BR 60
UNIDADE ENSINO A DISTÂNCIA

03
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA

ESTRUTURA DE PROGRAMAÇÃO: REPETIÇÃO VETORES,


MATRIZES E TIPOS DE PASSAGEM DE PARÂMETROS
PROF. ME. RAFAEL BARBOSA

SUMÁRIO DA UNIDADE

INTRODUÇÃO............................................................................................................................................................. 63
1. OPERADORES DE ATRIBUIÇÃO............................................................................................................................ 64
2. ESTRUTURAS DE REPETIÇÃO............................................................................................................................. 66
2.1 REPETIÇÃO COM TERMINAÇÃO FORÇADA...................................................................................................... 67
2.2 ESTRUTURA DE REPETIÇÃO COM PÓS CONDIÇÃO........................................................................................ 68
2.3 ESTRUTURA DE REPETIÇÃO CONTADA........................................................................................................... 70
2.4 DESENVOLVIMENTO DE UM ALGORITMO QUE GERE UMA SEQUÊNCIA DE FIBONACCI...........................71
2.5 VETORES EM C................................................................................................................................................... 72
3. APLICAÇÃO............................................................................................................................................................ 75
4. VETORES MULTIDIMENSIONAIS ....................................................................................................................... 76

WWW.UNINGA.BR 61
4.1 MATRIZES OU VETORES MULTIDIMENSIONAIS ............................................................................................. 80
5. TIPOS DE PASSAGEM DE PARÂMETROS............................................................................................................83
5.1 PONTEIROS.......................................................................................................................................................... 85
5.2 PASSAGEM DE FUNÇÃO..................................................................................................................................... 85
6. APLICAÇÃO............................................................................................................................................................ 86

WWW.UNINGA.BR 62
ENSINO A DISTÂNCIA

INTRODUÇÃO
No capítulo anterior, aprendemos sobre estruturas de sequência e seleção. Sabemos
que a estrutura de seleção nos permite especificar como o computador reagirá a determinados
inputs. No entanto ainda há uma limitação no que podemos fazer na programação. Por exemplo,
e se quisermos exibir números de 1 a 100? Claro que podemos fazer cem linhas de printf (),
mas e se queremos repetir mil vezes? Teríamos que escrever dez mil declarações para alcançá-
lo e é possível fazê-lo, mas não é uma conveniência e levaria muito tempo para ser concluída.
Assim, a capacidade de especificar a repetição de instruções compostas é muito importante na
programação. A repetição da execução de instruções é chamada loop. Looping em um programa
é o processo de execução de série de instruções repetidamente em um determinado número de
vezes. Iremos explorar alguns recursos interessantes da linguagem C a seguir.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3

WWW.UNINGA.BR 63
ENSINO A DISTÂNCIA

1. OPERADORES DE ATRIBUIÇÃO
Existem muitos operadores de atribuição diferentes em C, o “=” não é o único operador
de atribuição, os seguintes também estão disponíveis, na tabela 1.

Tabela 1 - Operadores Aritméticos de Atribuição. Fonte: Freire (2015).



Um tipo de acumulador é uma variável que acumula os valores, quando iniciado o

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


programa (1 em 1). Vamos entender melhor essa função quando estudarmos estrutura de
repetição.
Já os contadores são um tipo de acumulador que aumenta ou diminui o valor. Veja como
é feita a operação na tabela 2 a seguir.

Operação Fluxograma Programa em C


Incremento C ← C +1 C++
Decremento C←C-1 C--
Tabela 2 - Operadores de Incrementos e Decrementos. Fonte: o autor.

Os operadores “auto-incremento” e “auto-decremento”, ++ e -- quando usando em uma


expressão, depende se eles vêm antes ou depois da variável, de acordo com a tabela 2, depois veja
o exemplo 1.
De acordo com Pereira (2010), na forma prefixa, o valor da variável é modificado e depois
usado; na forma posfixa, o valor da variável é usado e depois modificado. Assim por exemplo, se
c vale 3, a operação d = ++c armazena 4 em d; enquanto a operação d = c++ armazena 3 em d.
Mesmo assim ambos os casos, o valor final de c é 4.

WWW.UNINGA.BR 64
ENSINO A DISTÂNCIA

Exemplo 1 - Diferença entre incremento e decremento:

#include <stdio.h>

int main( )
{ int a=1,
b=1;

printf(“Valor inicial de a = %d\n”, a);


printf(“Valor inicial de b = %d\n”, b);

printf(“\nIncrementando: a++\n”);
a++;

printf(“Decrementando: b--\n”);
b--;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


printf(“\nAgora a = %d\n”, a);
printf(“Agora b = %d\n”,b);

Exemplo 2 - Diferença entre incremento prefixo e pósfixo

#include <stdio.h>

int main()
{
int a,
b=1;

printf(“b = %d\n”,b);
printf(“a = b++\n”);

a = b++;

printf(“\nAgora: \na = %d\n”,a);

printf(“b = %d\n”,b);
printf(“\na = ++b\n”);

a = ++b;

printf(“\nAgora: a = %d”,a);
}

WWW.UNINGA.BR 65
ENSINO A DISTÂNCIA

2. ESTRUTURAS DE REPETIÇÃO
Estrutura While
While permite a repetição de um conjunto de instruções de execução caso uma
determinada expressão (condição) seja verdadeira. Quando a condição se torna falsa, a repetição
termina quando a primeira instrução após a estrutura de repetição é executada.
Observe que, como a condição é avaliada antes do comando ser executado, se for falsa o
comando dentro da repetição não vai ser executado.
Exemplo de utilização do While:

#include <stdio.h>

int main( ){

int total = 0, num;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


while( total < 100) {
printf( “Total = %d\n”, total );

printf( “Entre com um número: “ );


scanf( “%d”, &num );

total += num;
}

printf( “Final total = %d\n”, total );


}

Exemplo prático da utilização do While:


// Um investidor aplicou R$ 1000,00 com rendimento de 1% ao mês. Quantos meses serão
necessários
// para que o capital investido ultrapasse a R$ 2000,00.

#include <stdio.h>

int main() {
float capital = 1000.00;
int ctMes = 0;

while (capital <= 2000.00) {


capital = capital + (capital * (1 / 1000.00));
ctMes = ctMes + 1;
}

printf(“Em %d meses o capital investido será de R$ %.2f ”, ctMes, capital);


}

WWW.UNINGA.BR 66
ENSINO A DISTÂNCIA

Como seria o fluxograma de típico do While?

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


Figura 1 – Fluxograma de While. Fonte: o autor.

2.1 Repetição com Terminação Forçada


Podemos utilizar o comando break para forçar o término de qualquer repetição. Pode ser
útil em algumas aplicações, nem tanto em linguagem C, mas em outras linguagens sua aplicação
é interessante. Veremos a seguir uma aplicação em C.

WWW.UNINGA.BR 67
ENSINO A DISTÂNCIA

#include <stdio.h>

int main () {

int a = 10;

while( a < 20 ) {

printf(“valor: %d\n”, a);


a++;

if( a > 15) {

break;
}

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3



}

return 0;
}

2.2 Estrutura de repetição com pós condição


Segundo Pereira (2010), a estrutura de repetição com pós condição serve para executar
um comando, repetidamente, até que uma determinada condição se torne falsa. Isso é interessante
em aplicações que garantam consistência de entrada de dados, além de implementar processos
orientados por menus.
Veja um exemplo de aplicação:

WWW.UNINGA.BR 68
ENSINO A DISTÂNCIA

#include <stdio.h>
int main ()
{
int i;
do
{
printf (“\n\nEscolha um time:\n\n”);
printf (“\t(1)...Corinthians\n”);
printf (“\t(2)...Palmeiras\n”);
printf (“\t(3)...Internacional\n\n”);
scanf(“%d”, &i);
} while ((i<1)||(i>3));

switch (i)
{
case 1:
printf (“\t\tMelhor time\n”);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


break;
case 2:
printf (“\t\ttime não é bom\n”);
break;
case 3:
printf (“\t\ttime está na segunda divisao\n”);
break;
}
return(0);
}

Como seria o fluxograma de uma estrutura de repetição com pós condição?

WWW.UNINGA.BR 69
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


Figura 2 – Fluxograma de estrutura de repetição com pós condição. Fonte: o autor.

2.3 Estrutura de Repetição Contada


Uma estrutura de repetição contada, segundo Damas (2008), serve para repetir a execução
de um comando por um determinado número de vezes, para saber quando o total de repetições
desejadas já foi atingido, ou seja, um for sempre está acompanhado de uma variável contadora
que armazena quantas vezes o bloco de sentenças deve ser executado.
Um exemplo da tabuada:

WWW.UNINGA.BR 70
ENSINO A DISTÂNCIA

#include <stdio.h>
int main(void)
{
int a, b;
for (a = 1; a <= 10; a = a + 1)
{
for (b = 1; b <= 10; b = b + 1)
printf(“%2d x %2d = %3d\n”, b, a, a * b);
printf(“\n”);
}
Return 0;
}

Aplicação prática:
A sequência de Fibonacci é uma série de números na qual um número é encontrado por
somar os dois números antes dele. Começando com 0 e 1, a sequência passa a 0, 1, 1, 2, 3, 5, 8, 13,

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


21, 34 e assim por diante. Escrito como regra, a expressão é xn = xn-1 + xn-2.

Um vídeo ilustrativo mostrando a sequência de Fibonacci.


Acesse: <https://www.youtube.com/watch?v=2VuS8JOkr7s>.

2.4 Desenvolvimento de um algoritmo que gere uma


sequência de Fibonacci

Figura 3 - Sequência de Fibonacci. Fonte: Domínio Público (2017).

WWW.UNINGA.BR 71
ENSINO A DISTÂNCIA

#include <stdio.h>

void main( ) {
printf(“Série de Fibonacci\n”);
printf(“==================\n”);

int termo1 = 1, termo2 = 1, novoTermo;

printf(“ 1o. termo = %d\n”, termo1);


printf(“ 2o. termo = %d\n”, termo2);

for (int i=3; i<=20; i++) {


novoTermo = termo1 + termo2;
printf(“%2do. termo = %d\n”, i, novoTermo);

termo1 = termo2;
termo2 = novoTermo;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


}

printf(“==================\n”);
}

2.5 Vetores em C
De acordo com Pereira (2010), um vetor é um tipo de variável capaz de armazenar uma
coleção de dados ao mesmo tempo. Ou seja, cada um dos dados armazenados num vetor é
identificado por um número inteiro, por vezes denominado como índice.
Para indicar uma variável do tipo vetor basta declará-la com o sufixo [n], n pode ser
qualquer número inteiro positivo.
Exemplo de aplicação de um vetor, para ler um conjunto de elementos 10 pessoas e
determinar quantas pessoas são maiores de 18 anos:

WWW.UNINGA.BR 72
ENSINO A DISTÂNCIA

#include <stdio.h>

int main (void) {


int n = 10; // tamanho do vetor
int idade[n]; // declarando o vetor para armazenar as idades de um grupo de “n” pessoas
int i, ct18; // indice (ou posicao) e contador de pessoas com mais de 18 anos

for (i=0; i<n; i++) {


printf(“Informe a idade da %2da. pessoa de %d: “, (i+1), n);
scanf(“%d”, &idade[i]);
}

ct18 = 0;
for (i=0; i<n; i++) {
// contando as idades superiores a 18 anos
if (idade[i] > 18)
ct18 = ct18 + 1;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


}

printf(“\nQuantidade de pessoas com idade superior a 18 anos = %d.”, ct18);


}

A lógica desse programa é bem simples, o intuito é ler os números e guardar em posições
dentro do vetor. Um vetor de tamanho constante pode ser iniciado ao ser declarado, no caso do
exemplo a seguir com relação às notas:

#include<stdio.h>
#include<conio.h>
int main(void)
{
float notas[5] = {7, 8, 9.5, 9.9, 5.2};
// declarando e inicializando o vetor notas

printf(“Exibindo os Valores do Vetor \n\n”);


printf(“notas[0] = %.1f\n”, notas[0]);
printf(“notas[1] = %.1f\n”, notas[1]);
printf(“notas[2] = %.1f\n”, notas[2]);
printf(“notas[3] = %.1f\n”, notas[3]);
printf(“notas[4] = %.1f\n”, notas[4]);

getch();
return 0;
}

Com os vetores, você pode manipular um conjunto de dados do mesmo tipo, utilizando
apenas uma variável. Um exemplo interessante é a cotação do dólar e sua conversão:

WWW.UNINGA.BR 73
ENSINO A DISTÂNCIA

#include <stdio.h>

int main(void) {
int n = 50;
float conversao[n], cotacao;
int i;

printf(“Informe a cotacao do dolar (U$) em relacao ao real (R$):\n”);


scanf(“%f ”, &cotacao);

for (i=0; i<n; i++) {


conversao[i] = cotacao * (i+1);
}

for (i=0; i<n; i++) {


printf(“\nU$ %2d.00 = R$ %5.2f ”, (i+1), conversao[i]);
}

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


}

No código supracitado, o usuário colocará o valor do dólar e o programa irá armazenar


em um vetor 50 elementos variando de 1 a 50.

WWW.UNINGA.BR 74
ENSINO A DISTÂNCIA

3. APLICAÇÃO
Aplicando os conhecimentos, podemos desenvolver um pequeno jogo de adivinhação!
Veja o algoritmo a seguir:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
srand(time(NULL));
int r = rand() % 1000 + 1;
int correct = 0;
int adivinhe;
int counter = 0;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


printf(“Adivinhe meu numero! “);

do {
scanf(“%d”, &adivinhe);
if (adivinhe == r) {
counter++;
printf(“Voce conseguiu adivinhar depois de %d tentativas! Parabens!\n”, counter);
correct = 1;
}

if (adivinhe < r) {
counter++;
printf(“Quase, mas ainda e um valor baixo. Tente novamente. “);
}

if (adivinhe > r) {
counter++;
printf(“Quase, mais ainda e um valor alto. Tente novamente. “);
}
} while (correct == 0);

return 0;
}

Você deve estar pensando como o computador seleciona um número aleatório. Na


verdade, os computadores seguem um comando nesse caso o comando (srand). Este comando
utiliza uma função de variável complexa e o tempo como semente para gerar números pseudo-
aleatórios. Se no lugar do tempo você colocar uma constante qualquer, o comando iria gerar
apenas um número.

WWW.UNINGA.BR 75
ENSINO A DISTÂNCIA

4. VETORES MULTIDIMENSIONAIS
Strings
Antes de entrar em vetores multidimensionais, vamos falar um pouco de armazenamento
e o conceito de string, que de acordo com Pereira (2010), pode ser definido como uma sequência
de caracteres finalizada por um byte nulo, esse por último é adicionado automaticamente pelo
compilador.
A seguir temos um exemplo como é feito esse armazenamento, na Figura 1:
char s[5];

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


Figura 4 - Representação de um String. Fonte: Tutorials Point (2017).

Vamos desenvolver um algoritmo que cumprimenta o usuário, utilizando uma variável


tipo string, veja o algoritmo a seguir:

#include <stdio.h>

int main(void) {

char n [30];

printf (“Qual e o seu nome?”);


scanf (“%s”, n);
printf (“\nOla %s!\n”, n);
return 0;

O inconveniente desse tipo de algoritmo que ele não lê strings com espaço, para evitar
isso utilize a função gets ( ), que é tem essa vantagem com relação ao scanf.

WWW.UNINGA.BR 76
ENSINO A DISTÂNCIA

#include <stdio.h>

int main(void) {

char n [30];

printf (“Qual e o seu nome?”);


gets (n);
printf (“\nOla %s!\n”, n);
return 0;
}

Se preferir exibir uma string, pode-se utilizar a função puts (), em vez de printf (). Vamos
ver alguns exemplos do uso das strings:

#include <stdio.h>

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


#include <string.h>

int main(void) {
int i;
char s[80];

printf(“Informe uma frase:\n”);


gets(s);

int cta = 0; // contador de vezes que a letra “a” ocorre na frase


int n = strlen(s); // tamanho da cadeia
for (i=0; i<n; i++) {
if ((s[i] == ‘a’) || (s[i] == ‘A’))
cta = cta + 1;
}

printf(“\nExistem %d caracteres \”a\” na frase.”, cta);


}

Veja o comando strlen. Ele tem a função de retornar o tamanho dos caracteres de uma
string, no caso acima retornou ao tamanho da cadeia [80].

WWW.UNINGA.BR 77
ENSINO A DISTÂNCIA

Outro exemplo da utilização de strings:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void) {
int i;
char s1[80], s2[80];

printf(“Informe a primeira frase:\n”);


gets(s1);

printf(“\nInforme a segunda frase:\n”);


gets(s2);

int saoiguais; // flag que indicara se as frases sao iguais

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


if (strlen(s1) != strlen(s2))
saoiguais = 0;
else {
i = 0;
int n = strlen(s1); // tamanho da cadeia
saoiguais = 1;
while ((i < n) && (saoiguais == 1)) {
if (toupper(s1[i]) != toupper(s2[i]))
saoiguais = 0;
else
i++;
}
}

if (saoiguais == 1)
printf(“\nAs frases informadas sao iguais.”);
else
printf(“\nAs frases informadas \”nao\” sao iguais.”);
}

O inconveniente desse algoritmo é que as frases devem ser totalmente iguais, inclusive os
espaços para que a condicional seja verdadeira, no entanto podemos ver o poder dessa função
para analisar caracteres.
Podemos ver que os caracteres maiúsculo e minúsculo são processados igualmente por
conta do comando toupper.

WWW.UNINGA.BR 78
ENSINO A DISTÂNCIA

Veja, na Tabela 1, os comandos que podem ser utilizados com a biblioteca string.h

Tabela 1 - Comandos que podem ser utilizados com a biblioteca string.h. Fonte: UFSJ (2017). ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3

WWW.UNINGA.BR 79
ENSINO A DISTÂNCIA

4.1 Matrizes ou Vetores Multidimensionais


De acordo com Pereira (2010), uma matriz pode ser considerada uma estrutura de dados
cujos itens são também vetores. Podemos inferir qualquer número de dimensões, mas as matrizes
bidimensionais são mais usadas. Para criarmos uma matriz com 3 linhas e 3 colunas, podemos
utilizar o seguinte algoritmo:

#include <stdio.h>

int main() {
#define n 3 // ordem da matriz quadrada
int i, j, m[n][n]; // matriz quadrada

for (i=0; i<n; i++) {


printf(“Informe os elementos da %da. linha:\n”, (i+1));
for (j=0; j<n; j++) {

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


printf(“m[%d][%d] = “, i, j);
scanf(“%d”, &m[i][j]);
}
printf(“\n”);
}

printf(“\n”);
for (i=0; i<n; i++) {
printf(“%da. linha: “, (i+1));
for (j=0; j<n; j++) {
printf(“%d “, m[i][j]);
}
printf(“\n”);
}
}

Observamos que para armazenar uma coleção de strings, precisamos de um vetor cujos
itens sejam vetores, isto é, uma matriz bidimensional. Nesse caso, o número de strings a serem
armazenadas define o tamanho dessa matriz. Vamos desenvolver um algoritmo de uma matriz
quadrada de ordem 3 e realizar uma rotina de busca de um elemento que o usuário queira. Veja
o exemplo a seguir:

WWW.UNINGA.BR 80
ENSINO A DISTÂNCIA

#include <stdio.h>

int main() {
#define n 3 // ordem da matriz quadrada
int i, j, m[n][n]; // matriz quadrada

// localizacao (linha e coluna) do elemento “x”


int x, lin = 0, col = 0, achou = 0;

// entrada de dados
for (i=0; i<n; i++) {
printf(“Informe os elementos da %da. linha:\n”, (i+1));
for (j=0; j<n; j++) {
printf(“m[%d][%d] = “, i, j);
scanf(“%d”, &m[i][j]);
}
printf(“\n”);
}

printf(“Informe o valor a ser procurado:\n”);

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


scanf(“%d”, &x);

// processamento: localizando a posicao do elemento “x”


for (i=0; (i<n)&&(achou==0); i++) {
for (j=0; (j<n)&&(achou==0); j++) {
if (m[i][j] == x) {
achou = 1; // elemento “x” foi encontrado
lin = i;
col = j;
}
}
}

// mostrando os resultados
printf(“\n”);
for (i=0; i<n; i++) {
printf(“%da. linha: “, (i+1));
for (j=0; j<n; j++) {
printf(“%d “, m[i][j]);
}
printf(“\n”);
}

if (achou == 1)
printf(“\n%d foi encontrado na %da. linha, %da. coluna”, x, (lin+1), (col+1));
else printf(“\n%d \”nao\” foi encontrado”, x);
}

WWW.UNINGA.BR 81
ENSINO A DISTÂNCIA

Uma das aplicações de matrizes dentro da linguagem de programação é no desenvolvimento


de games 2D. Veja um exemplo de algoritmo aplicando matrizes:

JOGO DA VELHA EM C

#include<stdio.h>
#include<conio.h>

int main(void)
{
char Matriz[3][3];
char O=’O’, X=’X’;
int l=0,j,i;

for(i=0;i<3;i++)
for(j=0;j<3;j++)

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


Matriz[i][j]=’ ‘;

while(l<=9)
{
printf(“ JOGO DA VELHA \n”);
for(i=0;i<3;i++)
{
printf(“\t\t %c \xBA %c \xBA %c\n”,Matriz[i][0],Matriz[i][1],Matriz[i][2]);
if(i<3-1)
{
printf(“\t\t ÍÍÍ\xCEÍÍÍ\xCEÍÍÍ\n”);
}
}

printf(“\n\n\n\n\n\n\n\n\n\n\n\nINSIRA AS COORDENADAS, “);


if(l%2)printf(“PLAYER 2\nLINHA: “);
else printf(“PLAYER 1\nLINHA: “);

scanf(“%d”,&i);
printf(“COLUNA: “);
scanf(“%d”,&j);

if(Matriz[i-1][j-1]==’ ‘)
{
if(l%2)Matriz[i-1][j-1]=X;
else Matriz[i-1][j-1]=O;
l++;
}

WWW.UNINGA.BR 82
ENSINO A DISTÂNCIA

if((Matriz[0][0]==O && Matriz[0][1]==O && Matriz[0][2]==O)||


(Matriz[1][0]==O && Matriz[1][1]==O && Matriz[1][2]==O)||
(Matriz[2][0]==O && Matriz[2][1]==O && Matriz[2][2]==O)||
(Matriz[0][0]==O && Matriz[1][0]==O && Matriz[2][0]==O)||
(Matriz[0][1]==O && Matriz[1][1]==O && Matriz[2][1]==O)||
(Matriz[0][2]==O && Matriz[1][2]==O && Matriz[2][2]==O)||
(Matriz[0][0]==O && Matriz[1][1]==O && Matriz[2][2]==O)||
(Matriz[0][2]==O && Matriz[1][1]==O && Matriz[2][0]==O))
{
printf(“\n\a\t\tJogador 1, VOCE VENCEU!!!”);
break;
}
if((Matriz[0][0]==X && Matriz[0][1]==X && Matriz[0][2]==X)||
(Matriz[1][0]==X && Matriz[1][1]==X && Matriz[1][2]==X)||
(Matriz[2][0]==X && Matriz[2][1]==X && Matriz[2][2]==X)||
(Matriz[0][0]==X && Matriz[1][0]==X && Matriz[2][0]==X)||

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


(Matriz[0][1]==X && Matriz[1][1]==X && Matriz[2][1]==X)||
(Matriz[0][2]==X && Matriz[1][2]==X && Matriz[2][2]==X)||
(Matriz[0][0]==X && Matriz[1][1]==X && Matriz[2][2]==X)||
(Matriz[0][2]==X && Matriz[1][1]==X && Matriz[2][0]==X))
{
printf(“\n\n\n\n\a\t\tJogador 2, VOCE VENCEU!!!”);
break;
}

if(l==9)
{
printf(“PARTIDA EMPATADA”);
break;
}

}
getch();
return(0);
}

5. TIPOS DE PASSAGEM DE PARÂMETROS


De acordo com Hitoshi (2006), os tipos de passagem de parâmetros podem ser passados
de duas maneiras, por valor e por referência. Na passagem de valor, uma expressão pode ser
utilizada para ser calculada, e o valor resultante é passado para a execução de um programa. Na
passagem de referência, a variável deve ser passada na chamada da função. Assim, a função pode
modificar a variável. Esse tipo de passagem é interessante na criação de funções que devolvem
mais de um valor.

WWW.UNINGA.BR 83
ENSINO A DISTÂNCIA

Vamos verificar a passagem de valor:

#include <stdio.h>

float sqr (float n);


int main ()
{
float n,sq;
printf (“Entre com um numero: “);
scanf (“%f ”,&n);
sq=sqr(n);
printf (“\n\nO numero original e: %f\n”,n);
printf (“O seu quadrado vale: %f\n”,sq);
}

float sqr (float n)


{

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


n=n*n;
return n;
}

Vemos no exemplo acima que o parâmetro n da função sqr () sofre alterações dentro da
função main (), isto pode ser considerado uma chamada de valor.
Quando queremos fazer uma chamada de função, precisa-se utilizar ponteiros.

WWW.UNINGA.BR 84
ENSINO A DISTÂNCIA

5.1 Ponteiros
A sintaxe para a declaração do ponteiro, pode ser visto no algoritmo a seguir:

#include <stdio.h>
#include <conio.h>

int main(void)
{
//valor é a variável que
//será apontada pelo ponteiro
int valor = 27;

//declaração de variável ponteiro


int *ptr;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


//atribuindo o endereço da variável valor ao ponteiro
ptr = &valor;

printf(“Utilizando ponteiros\n\n”);
printf (“Conteudo da variavel valor: %d\n”, valor);
printf (“Endereço da variavel valor: %x \n”, &valor);
printf (“Conteudo da variavel ponteiro ptr: %x”, ptr);

getch();
return(0);
}

Veja que foi usado um asterisco * para apontar que a variável ptr é um ponteiro. Intenção
deste código é armazenar o endereço da variável denominada valor. Cabe uma observação
importante como foi utilizado & na variável ptr estamos referindo ao endereço da variável e não
ao valor.

5.2 Passagem de função


De acordo com Casavelha (2013), a passagem por referência também chamada passagem
de função, estabelece ser possível alterar o conteúdo da variável original, usa-se uma função
como referência, diferente da passagem por valor que só altera a cópia. Para isso, iremos utilizar
do conceito de ponteiros para alterar os valores das variáveis passadas com argumentos para uma
função.
Esse tipo de passagem possibilita a oportunidade de retomar valores em uma única função
já que as alterações ocorrem diretamente nas variáveis.

WWW.UNINGA.BR 85
ENSINO A DISTÂNCIA

Veja o no exemplo a seguir:

#include <stdio.h>
void troca(int *a,int *b);
int main()
{
int x=5;
int y=10;
printf(“%d %d\n”,x,y);
troca (&x,&y);
printf(“%d %d”,x,y);
}

void troca(int *a,int *b)


{
int aux;

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


aux=*a;
*a=*b;
*b=aux;
}

Não foi preciso mexer na função apenas nas variáveis. x=y e y=x, na troca com o auxílio
de uma variável “aux”.

6. APLICAÇÃO
Uma das aplicações interessantes que podemos fazer com essas passagens e no
desenvolvimento de algoritmos de criptografia por substituição, é que podemos substituir
caracteres que estão n posições na frente. Esse tipo de processo se chama cifra de César.

#include <stdio.h>
#include <string.h>

char *criptografa(char s[80], int cifra);


char *descriptografa(char s[80], int cifra);

int main() {
char s[80], sc[80], sd[80];
int cifra;

printf(“Informe um texto:\n”);
gets(s);

WWW.UNINGA.BR 86
ENSINO A DISTÂNCIA

printf(“\nInforme o valor da cifra:\n”);


scanf(“%d”, &cifra);

strcpy(sc, criptografa(s, cifra));


strcpy(sd, descriptografa(sc, cifra));

printf(“\nTexto criptografado:\n”);
printf(“%s”, sc);

printf(“\n\nTexto descriptografado:\n”);
printf(“%s”, sd);
}

char *criptografa(char s[80], int cifra) {


int i, n = strlen(s);
char saux[80];

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 3


strcpy(saux, s);

for (i=0; i<n; i++) {


saux[i] = saux[i] + cifra;
}

return(saux);
}

char *descriptografa(char s[80], int cifra) {


int i, n = strlen(s);
char saux[80];
strcpy(saux, s);

for (i=0; i<n; i++) {


saux[i] = saux[i] - cifra;
}

return(saux);

Por fim, segue o link para ter todos os programas comentados desta unidade:

<https://drive.google.com/open?id=1bikiFVYztIsfcUKOc_co8oo4cfk1Jto4>

WWW.UNINGA.BR 87
UNIDADE ENSINO A DISTÂNCIA

04
DISCIPLINA:
ALGORITMOS E PROGRAMAÇÃO
APLICADA

MICROCONTROLADORES, MICROCOMPUTADORES
E PROJETOS DE SISTEMAS MICROCONTROLADOS
PROF. ME. RAFAEL BARBOSA

SUMÁRIO DA UNIDADE

INTRODUÇÃO............................................................................................................................................................ 89
1. MICROCONTROLADOR........................................................................................................................................ 90
2. ARDUÍNO ..............................................................................................................................................................100
3. MICROCOMPUTADOR.........................................................................................................................................104
3.1 RASPBERRY PI....................................................................................................................................................104
4. UTILIZAÇÃO DO SOFTWARE DE SIMULAÇÃO ..................................................................................................109
4.1 ACIONAMENTO ELETRÔNICO POR MEIO DO SERIAL MONITOR................................................................. 114
4.2 SENSOR DE TEMPERATURA LM35.................................................................................................................. 115
5. PONTE H COM L293D.......................................................................................................................................... 117
5.1 DISPLAY LCD....................................................................................................................................................... 118
6. INSTALANDO SO (SISTEMA OPERACIONAL) NO RASPBERRY PI E TESTANDO O HARDWARE.................120

WWW.UNINGA.BR 88
ENSINO A DISTÂNCIA

INTRODUÇÃO
Os microcontroladores estão escondidos em um número surpreendente de produtos nos
dias de hoje. Se o seu forno de micro-ondas tiver uma tela LED ou LCD e um teclado, ele contém
um microcontrolador. Todos os automóveis modernos contêm pelo menos um microcontrolador
e podem ter até seis ou sete: o motor é controlado por um microcontrolador, assim como os
travões antibloqueio, o controle de cruzeiro e assim por diante. Qualquer dispositivo que tenha
um controle remoto quase certamente contém um microcontrolador: TVs, videocassetes e
sistemas estéreo high-end entram nesta categoria. Câmeras SLR e câmeras digitais agradáveis,
telefones celulares, câmeras de vídeo, atendedores de chamadas, impressoras a laser, telefones
(aqueles com identificação do chamador, memória de 20 números, etc.), pagers e frigoríficos,
máquinas de lavar louça, lavadoras e secadoras (os únicos com displays e teclados). Basicamente,
qualquer produto ou dispositivo que interage com seu usuário tenha um microcontrolador

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


enterrado no interior. Nesta unidade, iremos explorar um pouco sobre os microcontroladores,
microcomputadores e vamos ver alguns projetos de sistemas microcontrolados.

WWW.UNINGA.BR 89
ENSINO A DISTÂNCIA

1. MICROCONTROLADOR
Um microcontrolador é um sistema autônomo com periféricos, memória e um processador
que pode ser usado como um sistema incorporado. A maioria dos microcontroladores programáveis
que são usados hoje estão incorporados em outros produtos de consumo ou máquinas, incluindo
telefones, periféricos, automóveis e eletrodomésticos para sistemas informáticos. Devido a isso,
outro nome para um microcontrolador é “controlador embutido” (embedded controller). Alguns
sistemas embutidos são mais sofisticados, enquanto outros possuem exigências mínimas de
memória e duração da programação e uma baixa complexidade de software. Os dispositivos de
entrada e saída incluem solenóides, monitores LCD, relés, interruptores e sensores para dados
como umidade, temperatura ou nível de luz, entre outros.
Ao reduzir o tamanho e o custo em comparação com um design, que usa um
microprocessador separado, memória e dispositivos de entrada/saída, os microcontroladores
tornam econômico o controle digital de dispositivos e processos. Os microcontroladores de sinais
mistos são comuns, integrando componentes analógicos necessários para controlar sistemas

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


eletrônicos não digitais.
De acordo com Stan (1983), o primeiro microprocessador foi o Intel 4004 (Figura 1)
de 4 bits lançado em 1971, Gary Boone e Michael Cochran com a criação bem-sucedida do
primeiro microcontrolador em 1971. O resultado de seu trabalho foi o TMS 1000, que se tornou
comercialmente disponível em 1974. Combinou memória de leitura/ gravação, processador e
relógio em um chip e direcionado para sistemas incorporados. Alguns anos depois foi lançado
o Intel 8008 e outros microprocessadores mais capazes. No entanto, ambos os processadores
exigiram chips externos para implementar um sistema de trabalho, aumentando o custo total e
tornando impossível a computação econômica de aparelhos.

Figura 1 - Intel 4004. Fonte: Extremetech (2011).

WWW.UNINGA.BR 90
ENSINO A DISTÂNCIA

Em parte, em resposta à existência do TMS 1000 de chip único, a Intel desenvolveu um


sistema de computador em um chip otimizado para aplicações de controle, o Intel 8048, com
o primeiro envio comercial em 1977. De acordo Stamm et. al (2008), o 8048 combinou RAM e
ROM no mesmo chip. Este chip encontraria o caminho para mais de um bilhão de teclados de
PC e outras aplicações numerosas. Naquela época, o presidente da Intel, Luke J. Valenter, afirmou
que o microcontrolador foi um dos mais bem-sucedidos da história da empresa e expandiu o
orçamento da divisão em mais de 25%.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 2 - Intel 8048. Fonte: CDN CPU World (2017).

A maioria dos microcontroladores apresentava variações simultâneas. Um com uma


memória de programa EPROM (sigla do inglês “erasable programmable read-only memory”,
significando “memória programável apagável somente de leitura”), com uma janela de quartzo
transparente na tampa da embalagem para permitir que ela fosse apagada pela exposição à luz
ultravioleta, muitas vezes usada para prototipagem. O outro era uma ROM programada com
máscara do fabricante para séries grandes, ou uma variante PROM que só era programável uma
vez; com a designação OTP, representando “programável em uma única hora”.
As versões apagáveis exigiam
​​ pacotes cerâmicos com janelas de quartzo, tornando-os
significativamente mais caros do que as versões OTP, que poderiam ser feitas em pacotes de
plástico opaco de baixo custo. Para as variantes apagáveis, exigiu-se quartzo, em vez de vidro
menos caro, porque a transparência para o vidro ultravioleta é amplamente opaca para UV, mas
o principal diferencial de custos foi o próprio pacote cerâmico.
Em 1993, a introdução da memória EEPROM (sigla do inglês de Electrically-Erasable
Programmable Read-Only Memory, um tipo de memória não-volátil) permitiu que os
microcontroladores (começando com o Microchip PIC16x84) fossem apagados eletronicamente,
sem uma embalagem cara, conforme exigido para a EPROM, permitindo prototipagem rápida
e Programação no sistema. (A tecnologia EEPROM estava disponível antes desse tempo, mas a
EEPROM anterior era mais cara e menos durável, tornando-a inadequada para microcontroladores
produzidos em massa de baixo custo.) Assim conforme Svendsli (2003) no mesmo ano, a Atmel
introduziu o primeiro microcontrolador usando a memória Flash, um especial Tipo de EEPROM.
Outras empresas seguiram rapidamente o exemplo, com ambos os tipos de memória.
Atualmente, os microcontroladores são baratos e prontamente disponíveis para os
hobistas, com grandes comunidades on-line em torno de certos processadores.
No futuro, o MRAM (significa Magneto-resistive Random Access Memory, uma memória
de computador não volátil) poderia ser usado em microcontroladores, pois possui resistência
infinita e seu custo incremental de processo de placa de semicondutor é relativamente baixo.

WWW.UNINGA.BR 91
ENSINO A DISTÂNCIA

Figura 3 – MRAM. Fonte: MRAM INFO (2017).

Os microcontroladores devem fornecer resposta em tempo real (previsível, embora não


necessariamente rápida) aos eventos no sistema incorporado que eles estão controlando. Quando
ocorrem certos eventos, um sistema de interrupção pode sinalizar o processador para suspender
o processamento da sequência de instruções atual e iniciar uma rotina de serviço de interrupção

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


(ISR ou “manipulador de interrupção”), que realizará qualquer processamento necessário com
base na fonte da interrupção. As possíveis fontes de interrupção são dependentes do dispositivo e
muitas vezes incluem eventos como um transbordamento de temporizador interno, completando
uma conversão analógica a digital, uma mudança de nível lógico em uma entrada, como por um
botão pressionado e dados recebidos em um link de comunicação. Onde o consumo de energia
é importante como nos dispositivos de bateria, as interrupções também podem despertar um
microcontrolador de um estado de suspensão de baixa potência onde o processador é interrompido
até que seja necessário fazer algo por um evento periférico.
Normalmente, os programas de microcontroladores devem caber na memória disponível
no chip, uma vez que seria caro fornecer um sistema com memória externa expansível. Os
compiladores são usados para converter códigos de linguagem em um código de máquina
compacto para armazenamento na memória do microcontrolador. Dependendo do dispositivo,
a memória do programa pode ser uma memória permanente, que só pode ser programada na
fábrica, ou pode ser uma memória de leitura ou apagável que pode ser alterada em campo.
Os fabricantes geralmente produzem versões especiais de seus microcontroladores para
ajudar o desenvolvimento de hardware e software do sistema alvo. Originalmente, estas incluíam
versões EPROM que possuem uma “janela” na parte superior do dispositivo através da qual a
memória do programa pode ser apagada por luz ultravioleta, pronta para reprogramação após
uma programação (“queima”) e um ciclo de teste. Desde 1998, as versões EPROM são raras
e foram substituídas por EEPROM e flash, que são mais fáceis de usar (podem ser apagadas
eletronicamente) e mais baratas de fabricar.
Outras versões podem estar disponíveis onde a ROM é acessada como um dispositivo
externo e não como memória interna, no entanto, estas estão se tornando raras devido à
disponibilidade generalizada de programadores de microcontroladores baratos.
O uso de dispositivos programáveis em campo em um microcontrolador pode permitir
a atualização de campo do firmware ou permitir revisões de fábrica atrasadas para produtos que
foram montados, mas ainda não enviados. A memória programável também reduz o tempo de
entrega necessário para a implantação de um novo produto.
Um microcontrolador personalizado incorpora um bloco de lógica digital que pode ser
personalizado para recursos de processamento adicionais, periféricos e interfaces adaptados aos
requisitos da aplicação. Um exemplo é o AT91CAP da Atmel.

WWW.UNINGA.BR 92
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 4 - AT91CAP. Fonte: Domínio Público (2017).

Os microcontroladores geralmente contêm de vários a dezenas de pinos de entrada/


saída de uso geral (GPIO). Os pinos GPIO são configuráveis em software para uma entrada ou
um estado de saída. Quando os pinos GPIO são configurados para um estado de entrada, eles
são frequentemente usados para ler sensores ou sinais externos. Configurado para o estado de
saída, os pinos GPIO podem gerar dispositivos externos, como LEDs ou motores, muitas vezes
indiretamente, através de eletrônica de energia externa.

Figura 5 – GPIO. Fonte: Raspberry Pi (2017).

Muitos sistemas incorporados precisam ler sensores que produzem sinais analógicos. Esta
é a finalidade do conversor analógico-digital (ADC). Uma vez que os processadores são criados
para interpretar e processar dados digitais, ou seja, 1s e 0s, eles não conseguem fazer nada com os
sinais analógicos que podem ser enviados a ele por um dispositivo. Então, o conversor analógico
para digital é usado para converter os dados recebidos em uma forma que o processador pode
reconhecer.

WWW.UNINGA.BR 93
ENSINO A DISTÂNCIA

Uma característica menos comum em alguns microcontroladores é um conversor digital-


analógico (DAC) que permite que o processador emita sinais analógicos ou níveis de tensão.
De acordo com Harris (2012), além dos conversores, muitos microprocessadores
incorporados incluem uma variedade de temporizadores também. Um dos tipos de temporizadores
mais comuns é o Temporizador de Intervalo Programável (PIT). Um PIT pode contar para baixo
de algum valor para zero, ou até a capacidade do registro de contagem, transbordando para
zero. Uma vez que chega a zero, ele envia uma interrupção para o processador, indicando que
terminou a contagem. Isso é útil para dispositivos como termostatos, que periodicamente testam
a temperatura em torno deles para ver se eles precisam ligar o aparelho de ar condicionado, o
aquecedor ligado, etc.
Um bloco dedicado de modulação de largura de pulso (PWM) permite que a CPU
controle conversores de energia, cargas resistivas, motores, etc., sem usar muitos recursos de
CPU em laços de temporizador apertado.
O bloco de receptor/transmissor assíncrono universal (UART) permite receber e
transmitir dados através de uma linha serial com muita pouca carga na CPU. O hardware dedicado
no chip também geralmente inclui recursos para se comunicar com outros dispositivos (chips)
em formatos digitais, como o Inter-Integrated Circuit (I²C), a interface periférica serial (SPI), o

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Universal Serial Bus (USB) e Ethernet.
Segundo Gualtiero (2015), os microcontroladores foram originalmente programados
apenas em linguagem de máquina, mas várias linguagens de programação de baixo e alto nível
são utilizadas para programar, como C, Python e JavaScript. Esses são comuns para direcionar os
microcontroladores e os sistemas incorporados
Os compiladores para linguagens de uso geral terão algumas restrições, bem como
melhorias para melhor suportar as características únicas dos microcontroladores. Alguns
microcontroladores têm ambientes para ajudar a desenvolver certos tipos de aplicações. Os
fornecedores de microcontroladores muitas vezes criam ferramentas para facilitar a adoção de
seu hardware.
Muitos microcontroladores são tão peculiares que exigem efetivamente seus próprios
dialetos não convencionais de C, como o SDCC para o 8051, que impedem o uso de ferramentas
padrão (como bibliotecas de código ou ferramentas de análise estática) mesmo para códigos não
relacionados aos recursos de hardware. Os intérpretes costumam ser usados para esconder essas
peculiaridades de baixo nível.

WWW.UNINGA.BR 94
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 6 - Ambiente de desenvolvimento SDCC para programar um 8051. Fonte: Xtronic (2010).

O firmware do intérprete também está disponível para alguns microcontroladores. Por


exemplo, BASIC sobre os microcontroladores iniciais Intel 8052; BASIC e FORTH no Zilog
Z8, bem como alguns dispositivos modernos. Normalmente, esses intérpretes suportam a
programação interativa.

Figura 7 - Zilog Z8. Fonte: DroidCo (2017).

WWW.UNINGA.BR 95
ENSINO A DISTÂNCIA

PIC (Controlador de Interface Periférica)

PIC (geralmente pronunciado como “pick”) é uma família de microcontroladores


fabricados pela Microchip Technology, derivados da PIC1650 originalmente desenvolvida
pela General Instrument’s Microelectronics Division. O nome PIC inicialmente se referiu ao
controlador de interface periférica. As primeiras partes da família estavam disponíveis em 1976;
até 2013, a empresa enviou mais de doze bilhões de peças individuais, utilizadas em uma ampla
variedade de sistemas embarcados.
O PIC original foi destinado a ser usado com a nova unidade de processamento central
CP1600 de 16 bits da General Instrument (CPU). Enquanto a maioria das pessoas considerava
o CP1600 uma boa CPU, o mesmo tinha um desempenho de E/S deficiente e o PIC de 8 bits foi
desenvolvido em 1975 para melhorar o desempenho do sistema geral ao descarregar tarefas de
/S da CPU.
Em 1985, a General Instrument vendeu sua divisão de microeletrônica e os novos
proprietários cancelaram quase tudo o que, por esse momento, estava na maior parte desatualizado.
O PIC, no entanto, foi atualizado com uma EPROM interna para produzir um controlador de
canal programável.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Hoje, uma grande variedade de PICs estão disponíveis com vários periféricos on-board
(módulos de comunicação serial, UARTs, kernels de controle de motor, etc.) e memória de
programa de 256 palavras para 64K palavras e mais (uma “palavra” é uma instrução de linguagem
assembly, variando em comprimento de 8 a 16 bits, dependendo da família específica PIC micro).
PIC e PICmicro são marcas registradas da Microchip Technology. Geralmente, pensa-
se que o PIC é o controlador de interface periférica, embora o acrônimo original da General
Instruments para os dispositivos PIC1640 e PIC1650 iniciais seja “Controlador de interface
programável”. O acrônimo foi substituído rapidamente por “Computador Inteligente Programável”.
Basicamente todo o microcontrolador consiste em várias unidades principais, inclusive
o PIC:
• Portas de Entrada / Saída.

• Pinos de controle: reset, power, clock.

• Processador (CPU).

• Memória (RAM, ROM, EEPROM).

• Portas em série e paralelas.

• Temporizadores.

• Conversores analógicos para digitais (A/D) e digital para analógico (D/A).

• Características do sistema RISK (Reduzir controle de conjunto de instruções):

Conjunto de instruções de 35 comandos.


As instruções são realizadas em 2 ciclos de clock.
Você pode calcular o tempo de execução do comando de acordo com o relógio de
frequência (se o relógio de frequência for 20Mhz, o tempo de execução de um comando é 200 ns).

WWW.UNINGA.BR 96
ENSINO A DISTÂNCIA

Os microcontroladores PIC baseiam-se na arquitetura RISC avançada. Nesta arquitetura,


o conjunto de instruções de hardware é reduzido o que aumenta a taxa de execução (velocidade)
do sistema.
Os microcontroladores PIC seguem a arquitetura de Harvard para transferência interna
de dados. Esta arquitetura melhora a velocidade do sistema em relação à arquitetura de Von
Neumann em que o programa e os dados são obtidos da mesma memória usando o mesmo
barramento. Os controladores da série PIC18 baseiam-se no conjunto de instruções de 16 bits.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 8 - Microcontrolador PIC18. Fonte: Jameco (2017).

Alguns definem que o “PIC18 é um microcontrolador de 8 bits”, esta afirmação significa


que o núcleo da CPU pode receber / transmitir ou processar um máximo de dados de 8 bits
por vez. Por outro lado, a declaração “microcontroladores PIC18 baseiam-se em conjunto de
instruções de 16 bits” significa que os conjuntos de instruções de montagem são de 16 bits.

Figura 9 - Esquemático Arquitetura Harvard. Fonte: Macedo (2012).

Um dos mais utilizados microcontroladores da família PIC o PIC16F4A, pode ser visto
na Figura 10.

WWW.UNINGA.BR 97
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 10 - PIC 16F87. Fonte: DATASHEET (p. 3).

Vamos entender um pouco mais sobre a nomenclatura dos pinos.


Tabela 1 - Nomenclatura dos Pinos do PIC16F4A

WWW.UNINGA.BR 98
ENSINO A DISTÂNCIA

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4

Tabela 1 - Nomenclatura dos Pinos do PIC16F4A. Fonte: Antônio (2008, p. 3).

WWW.UNINGA.BR 99
ENSINO A DISTÂNCIA

Nesse material, não vamos focar o PIC. Para aplicar nossos conhecimentos de linguagem
C, utilizaremos o Arduino.

2. ARDUÍNO
Arduino é uma plataforma eletrônica de código aberto baseada em hardware e software
fáceis de usar. As placas Arduino são capazes de ler entradas - luz em um sensor, acionando
um botão ou uma mensagem do Twitter - e transformá-lo em uma saída - ativando um motor,
acendendo um LED, publicando algo online. Você pode informar ao seu microcontrolador o
que fazer, enviando um conjunto de instruções. Para fazer isso, basta conhecer um pouco da
linguagem de programação baseada em C e o software Arduino (IDE).
Ao longo dos anos, Arduino tem sido o cérebro de milhares de projetos, desde objetos
comuns até instrumentos científicos complexos. Uma comunidade mundial de fabricantes -

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


estudantes, hobistas, artistas, programadores e profissionais - se reuniu em torno desta plataforma
de código aberto, suas contribuições somaram uma incrível quantidade de conhecimento acessível
que pode ser de grande ajuda para novatos e especialistas.
Arduino nasceu no Ivrea Interaction Design Institute como uma ferramenta fácil para
prototipagem rápida, destinada a estudantes sem experiência em eletrônica e programação. Assim
que atingiu uma comunidade mais ampla, o painel Arduino começou a mudar para se adaptar às
novas necessidades e desafios, diferenciando sua oferta de placas simples de 8 bits para produtos
para aplicativos IoT (Internet of Things), impressão em 3D e ambientes incorporados. Todas
as placas Arduino são completamente open-source, capacitando os usuários para construí-las
de forma independente e eventualmente adaptá-las às suas necessidades específicas. O software,
também é de código aberto, e está crescendo por meio de contribuições de usuários em todo o
mundo.
O software Arduino é fácil de usar, ainda que flexível o suficiente para usuários
avançados. Ele é executado no Mac, Windows e Linux. Professores e alunos usam para construir
instrumentos científicos de baixo custo, para provar princípios de química e física, ou para iniciar
com programação em robótica. Designers e arquitetos criam protótipos interativos, músicos e
artistas usam para instalações e experimentam novos instrumentos musicais. Os fabricantes,
é claro, usam isso para construir muitos dos projetos exibidos na Maker Faire, por exemplo.
Arduino é uma ferramenta chave para aprender coisas novas. Qualquer um - crianças, artistas,
programadores - pode começar a mexer apenas seguindo as instruções passo a passo de um kit
ou compartilhar ideias online com outros membros da comunidade Arduino.
Existem muitos outros microcontroladores e plataformas de microcontroladores
disponíveis para computação física. Parallax Basic Stamp, o BX-24 da Netmedia, o Phidgets, o
Handyboard do MIT e muitos outros oferecem funcionalidades semelhantes. Arduino simplifica
o processo de trabalho com microcontroladores.
Barato - As placas Arduino são relativamente baratas em comparação com outras
plataformas de microcontroladores. A versão menos dispendiosa do módulo Arduino pode ser
montada manualmente e até mesmo os módulos Arduino pré-montados custam menos de US $
50.
Cross-platform - O Arduino Software (IDE) é executado em sistemas operacionais
Windows, Macintosh OSX e Linux. A maioria dos sistemas de microcontroladores são limitados
ao Windows.

WWW.UNINGA.BR 100
ENSINO A DISTÂNCIA

Ambiente de programação simples e claro - O Software Arduino (IDE) é fácil de usar para
iniciantes, ainda que flexível o suficiente para que os usuários avançados também aproveitem.
Software de código aberto e extensível - O software Arduino é publicado como ferramentas
de código aberto, disponível para extensão por programadores experientes. O idioma pode ser
expandido através de bibliotecas C ++ e as pessoas que desejam compreender os detalhes técnicos
podem fazer o salto do Arduino para a linguagem de programação AVR C em que se baseia. Da
mesma forma, você pode adicionar o código AVR-C diretamente aos seus programas se desejar.
Hardware aberto e extensível - Os planos das placas Arduino são publicados sob uma
licença Creative Commons, de modo que os designers de circuitos experientes podem fazer
sua própria versão do módulo, estendendo-a e melhorando. Mesmo os usuários relativamente
inexperientes podem construir a versão breadboard do módulo para entender como funciona e
economizar dinheiro.
A origem do projeto Arduino começou no Interaction Design Institute Ivrea (IDII) em
Ivrea, na Itália. Segundo Kushner (2011) naquela época, os alunos usavam um microcontrolador
BASIC Stamp com um custo de US $ 100, uma despesa considerável para muitos estudantes. Em
2003, Hernando Barragán criou a plataforma de desenvolvimento Wiring como um projeto de tese
de mestrado no IDII, sob a supervisão de Massimo Banzi e Casey Reas, conhecidos por trabalhar

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


na linguagem de processamento. O objetivo do projeto era criar ferramentas simples e de baixo
custo para criar projetos digitais por não engenheiros. A plataforma de prototipagem consistiu em
uma placa de circuito impresso (PCB) com um microcontrolador ATmega168, um IDE baseado
em funções de processamento e biblioteca para programar facilmente o microcontrolador.
Em 2003, Massimo Banzi, com David Mellis, outro estudante IDII e David Cuartielles,
acrescentou suporte para o microcontrolador ATmega8 mais barato para o protótipo. Mas, em
vez de continuar o trabalho, eles copiaram o código fonte e renomearam-no como um projeto
separado, chamado Arduino.
A equipe inicial do Arduino consistiu de Massimo Banzi, David Cuartielles, Tom Igoe,
Gianluca Martino e David Mellis, mas Barragán não foi convidado a participar. Após a conclusão
da plataforma, versões mais leves e menos dispendiosas foram distribuídas na comunidade de
fonte aberta.
Vamos ver o funcionamento do Hardware:

Figura 11 - Placa do Arduino UNO REV 3. Fonte: CDN Sparkfun (2017).

WWW.UNINGA.BR 101
ENSINO A DISTÂNCIA

• Power (USB / Barrel Jack):


Cada placa Arduino precisa de uma maneira para ser conectada a uma fonte de energia.
O Arduino UNO pode ser alimentado a partir de um cabo USB proveniente do seu computador
ou de uma fonte de alimentação. Na imagem acima, a conexão USB é rotulada (1) e o conector
para fonte é (2).
A conexão USB também serve para carregar o código.
NOTA: NÃO use uma fonte de alimentação superior a 20 Volts, pois você irá sobrecarregar
(e assim destruir) seu Arduino. A tensão recomendada para a maioria dos modelos Arduino é
entre 6 e 12 Volts.

• Pinos (5V, 3.3V, GND, Analógico, Digital, PWM, AREF): Os pinos no seu Arduino são
os lugares onde você conecta os fios para construir um circuito. Eles costumam ter cabeçotes de
plástico preto que permitem que você apenas conecte um fio diretamente na placa. O Arduino tem
vários tipos diferentes de pinos, cada um dos quais é rotulado na figura e usado para diferentes
funções.
I - GND (3): Short for ‘Ground’. Existem vários pinos GND no Arduino, qualquer um dos
quais pode ser usado para aterrar seu circuito.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


II- 5V (4) e 3.3V (5): Como você pode imaginar, o pino de 5V fornece 5 volts de energia
e o pino de 3.3V fornece 3.3 volts de energia. A maioria dos componentes simples usados ​​com o
Arduino corre felizmente de 5 ou 3.3 volts.

III- Analog (6): A área dos pinos na etiqueta “Analog In” (A0 a A5 na UNO) são
pinos analógicos. Esses pinos podem ler o sinal de um sensor analógico (como um sensor de
temperatura) e convertê-lo em um valor digital que podemos ler.

IV- Digital (7): Através dos pinos analógicos estão os pinos digitais (0 a 13 na UNO).
Esses pinos podem ser usados tanto
​​ para entrada digital (como dizer se um botão é pressionado)
e saída digital (como alimentar um LED).

V- PWM (8): Você pode ter notado o til (~) ao lado de alguns dos pinos digitais (3, 5,
6, 9, 10 e 11 na UNO). Esses pinos atuam como pinos digitais normais, mas também podem ser
usados ​​para algo chamado Modulação de largura de pulso (PWM). Pense nesses pinos como
capazes de simular a saída analógica.

VI- AREF (9): Significa “Analog Reference” (Referência Analógica). Na maioria das vezes
você pode deixar este pino sozinho. Às vezes, é usado para definir uma tensão de referência
externa (entre 0 e 5 Volts) como o limite superior para os pinos de entrada analógicos.

• Botão de reset: Assim como a Nintendo, o Arduino possui um botão de reinicialização


(10). Ao empurrar, ele reiniciará qualquer código carregado no Arduino. Isso pode ser muito
útil se o seu código não está funcionando adequadamente, ou se quer testá-lo várias vezes. Ao
contrário da Nintendo, soprar o Arduino geralmente não conserta problemas.

• Indicador LED de energia: Logo abaixo e à direita da palavra “UNO” na sua placa de
circuito, há um pequeno LED ao lado da palavra ‘ON’ (11). Este LED deve acender sempre que
ligar o Arduino a uma fonte de energia. Se esta luz não ligar, há uma boa chance de algo estar
errado.

WWW.UNINGA.BR 102
ENSINO A DISTÂNCIA

• TX RX LEDs: TX é para transmitir, o RX é para receber. Essas marcas aparecem um


pouco na eletrônica para indicar os pinos responsáveis ​​pela comunicação serial. No nosso caso,
há dois lugares no Arduino UNO onde TX e RX aparecem - uma vez pelos pinos digitais 0 e 1, e
uma segunda vez ao lado dos LED indicadores TX e RX (12). Esses LEDs nos darão algumas boas
indicações visuais sempre que nosso Arduino estiver recebendo ou transmitindo dados (como
quando estamos carregando um novo programa na placa).

• CI principal: Um chip preto com todas as pernas de metal é um CI, ou circuito integrado
(13). Pense nisso como o cérebro do nosso Arduino. Geralmente é da linha ATmega de CIs da
empresa ATMEL. Isso pode ser importante, pois talvez seja necessário conhecer o tipo de CI
(junto com o tipo de placa) antes de carregar um novo programa a partir do software Arduino.
Esta informação geralmente pode ser encontrada por escrito na parte superior do CI. Se você
quiser saber mais sobre a diferença entre vários CI’s, a leitura das folhas de dados (datasheet) é
muitas vezes uma boa idéia.

• Regulador de voltagem: O regulador de tensão (14) não é realmente algo com o qual
você pode (ou deve) interagir no Arduino. Mas é potencialmente útil saber que está lá e para

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


o que é. O regulador de tensão faz exatamente o que diz - ele controla a quantidade de tensão
que é deixada na placa Arduino. Pense nisso como um tipo de gatekeeper; isso irá afastar uma
tensão extra que pode prejudicar o circuito. Claro, tem seus limites, então não ligue seu Arduino
a qualquer coisa maior que 20 volts.
Os programas escritos usando Arduino Software (IDE) são chamados de esboços. Esses
esboços estão escritos no editor de texto e são salvos com a extensão de arquivo .ino. O editor
possui recursos para cortar / colar e para procurar / substituir texto. A área de mensagens dá
feedback ao salvar e exportar e também exibe erros. O console exibe saída de texto pelo Software
Arduino (IDE), incluindo mensagens de erro completas e outras informações. O canto inferior
direito da janela exibe a placa configurada e a porta serial. Os botões da barra de ferramentas
permitem verificar e fazer upload de programas, criar, abrir e salvar esboços e abrir o monitor
serial. A seguir na Figura 12, verá com detalhes o ambiente de programação.

Figura 12 - Ambiente de Programação (IDE). Fonte: CDN Sparkfun (2017).

WWW.UNINGA.BR 103
ENSINO A DISTÂNCIA

1 - Verifique: Compila e aprova seu código. Ele detectará erros na sintaxe (como
ponto-vírgula ou parênteses que faltam).

2 - Carregar: envia seu código para a placa.

3 - Novo: este botão abre uma nova guia de janela de código.

4 - Abrir: Este botão permitirá que você abra um esboço existente.

5 - Salvar: Isso salva o esboço atualmente ativo.

6 - Serial Monitor: Isso abrirá uma janela que exibirá qualquer informação serial
que sua placa está transmitindo. É muito útil para depuração.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


7 - Nome do esboço: mostra o nome do esboço no qual você está trabalhando
atualmente.

8 - Área de Código: Esta é a área onde você compõe o código para o seu esboço.

9 - Área da mensagem: é aqui que o IDE informa se houve algum erro no seu
código.

10 - Console de texto: o console de texto mostra mensagens de erro completas.


Ao depurar, o console de texto é muito útil.

11 - Placa e porta serial: mostra o quadro e as seleções da porta serial.

3. MICROCOMPUTADOR
3.1. Raspberry Pi
O Raspberry Pi é uma série de pequenos computadores de placa única desenvolvidos
no Reino Unido pela Fundação Raspberry Pi para promover o ensino da ciência da computação
básica nas escolas e nos países em desenvolvimento. O modelo original tornou-se muito mais
popular do que o previsto, vendendo fora do seu mercado-alvo para usos como a robótica. Os
periféricos (incluindo teclados, mouse e câmera) não estão incluídos no Raspberry Pi. Alguns
acessórios, no entanto, foram incluídos em vários pacotes oficiais e não oficiais.
De acordo com a Fundação Raspberry Pi, mais de 5 milhões de Raspberry ‘s foram
vendidas em janeiro de 2015, tornando-se o computador britânico mais vendido. Em novembro
de 2016 11 milhões de unidades foram vendidas, de acordo com o site oficial.

WWW.UNINGA.BR 104
ENSINO A DISTÂNCIA

O Raspberry Pi é um hardware aberto, com exceção do chip primário no Raspberry Pi, o


Broadcomm SoC (System on a Chip), que executa muitos dos principais componentes da placa-
CPU, gráficos, memória, controlador de USB, Etc. Muitos dos projetos feitos com um Raspberry
Pi são abertos e bem documentados e são coisas que você pode construir e modificar.
A Fundação Raspberry Pi acaba de lançar recentemente um novo modelo, o Raspberry Pi
2, que substitui alguns dos modelos anteriores, embora os mais antigos ainda sejam produzidos,
desde que haja demanda por eles. Geralmente os novos modelos são compatíveis com as versões
anteriores, portanto, todos os tutoriais ou projetos que você vê que foram criados para uma versão
anterior ainda devem funcionar.
Existem dois modelos de Raspberry, o A e o B, com o nome da BBC Micro, que também
foi lançado em um Modelo A e um Modelo B. O A vem com 256MB de RAM e uma porta USB.
É mais barato e usa menos energia do que o B. O modelo atual B vem com uma segunda porta
USB, uma porta ethernet para conexão a uma rede e 512MB de RAM.
As placas Raspberry Pi A e B foram atualizadas para os A+ e B+, respectivamente. Essas
atualizações fazem pequenas melhorias, como o aumento do número de portas USB e o melhor
consumo de energia, especialmente no B+.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 13 - Raspberry Pi modelo A e Modelo A+. Fonte: Into Robotics (2014).

Figura 14 - Raspberry Pi Modelo B e B+. Fonte: CDN Volumio (2014).

WWW.UNINGA.BR 105
ENSINO A DISTÂNCIA

O Raspberry Pi foi projetado para o sistema operacional Linux e muitas distribuições


Linux agora possuem uma versão otimizada para o Raspberry Pi.
Duas das opções mais populares são o Raspbian, que é baseado no sistema operacional
Debian, e a Pidora, que é baseada no sistema operacional Fedora. Para iniciantes, qualquer um
destes dois funciona bem; O que você escolhe usar é uma questão de preferência pessoal. Uma
boa prática pode ser com o que mais se parece a um sistema operacional com o qual você conhece,
em um ambiente de desktop ou servidor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 15 - Ambiente do sistema operacional Raspbian. Fonte: Domoticx (2017).

Figura 16 - Ambiente do sistema operacional Pidora. Fonte: Domoticx (2017).

WWW.UNINGA.BR 106
ENSINO A DISTÂNCIA

Se você gostaria de experimentar várias distribuições do Linux e não tem certeza qual
você deseja, ou apenas quer uma experiência mais fácil no caso de algo dar errado, experimente o
NOOB, que representa o software New Out Of Box. Quando você inicializa a partir do cartão SD,
você receberá um menu com várias distribuições (incluindo Raspbian e Pidora) para escolher. Se
você decidir tentar um diferente, ou se algo der errado no seu sistema, basta segurar a tecla Shift
no boot para retornar ao menu e começar novamente.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 17 - New Out Of Box (NOOB), para escolher o sistema operacional do seu Raspberry. Fonte: HTPC Begin-
ner (2013).

Há, é claro, muitas outras opções. OpenELEC e RaspBMC são ambas as distribuições
do sistema operacional baseadas no Linux que são direcionadas para usar o Raspberry Pi como
um centro de mídia. Existem também sistemas não-Linux, como o RISC OS, que são executados
no Pi. Alguns entusiastas até usaram o Raspberry Pi para aprender sobre sistemas operacionais,
criando o seu próprio.
O Raspberry Pi não é o único dispositivo de computação. Na verdade, existem muitas
outras opções disponíveis, como por exemplo o Allwinner e o Cubox:

Raspberry Pi Modelo A Allwinner A10/ CuBox


ARM Cortex A8
Preço $25 ($35 Modelo B) $15 $129
CPU 700 MHz ARM core 1.5 GHz Cortex A8 800Mhz Marvell
(ARM 11) ARM core Armada 510
processador (ARM7)
Vídeo 1080p, HDMI ou 2160p; interfaces 2 1080p; HDMI
composite RCA 24-pin RGB/TTL,
HDMI
GPU Broadcom VideoCore IV, MALI400MP OpenGL Embedded
OpenGL ES 2.0, 1080p30 OpenGL ES 2.0 GPU Standard 2.0 Graphics
h.264/MPEG-4 AVC Engine
high-profile decode

WWW.UNINGA.BR 107
ENSINO A DISTÂNCIA

RAM 128 MB RAM (256 MB até 1gb RAM 1 GB


no Modelo B)
Controlador Não Sim MicroSD suporta até
NAND Flash 64GB microSDXC
NAND
SDIO 1 4 Não — microSD (para
sistema operacional
vem com cartão de 2
GB)
Portas USB 1 (2 no Modelo B) 1 USB e 1 USB-OTG 2 e 1 microUSB

SATA Não 1 SATA-II 3 SATA-II

10/100 Modelo B apenas Sim Sim


Ethernet
Outros 2×13 pinos para GPIO, GPIO, I2C, PWM, Receptor

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


SPI, I²C, UART, +3.3 V, teclado (8x8), infravermelho,
+5 V controlador de tela microUSB para console
touchscreen de depuração

Tabela 2 - Modelos de microcomputadores. Fonte: Open Source (2017).

O Arduino é outra opção de hobby, que está voltado para aqueles que desejam construir
projetos eletrônicos. Mas, enquanto o Raspberry Pi é um computador Linux totalmente funcional,
o Arduino é apenas um microcontrolador. Isso significa que ele não executa um sistema
operacional, mas, em vez disso, pode ser de uso muito específico, pequenos blocos de código
escritos pela pessoa que usa o dispositivo. Outra opção é a série Beaglebone de placas, que são mais
parecidas com o Raspberry Pi, mas um pouco mais poderoso (e um pouco mais caro também).
Uma vantagem de usar o Raspberry Pi sobre outras alternativas é o tamanho da
comunidade. Se você tem uma pergunta sobre um projeto em que você está trabalhando, há
muitas pessoas que podem ajudá-lo por causa do grande alcance da comunidade.

WWW.UNINGA.BR 108
ENSINO A DISTÂNCIA

4. UTILIZAÇÃO DO SOFTWARE DE SIMULAÇÃO


Agora, vamos utilizar um simulador para programar nossos componentes no arduíno.
Vamos testar o ambiente de simulação em tempo real no navegador.
Primeiro passo: entre no seguinte endereço URL (Figura 18):

<https://www.tinkercad.com/>

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 18 - Tela inicial do Electronics Labs. Fonte: o autor.

Depois que entrar no site, de preferência utilizando o navegador Google Chrome, selecione
“comece a usar o Tinkercad”. Crie uma conta ou sincronize com seu Facebook (Figura 19).

Figura 19 - Ambiente para cadastrar. Fonte: o autor.

WWW.UNINGA.BR 109
ENSINO A DISTÂNCIA

Depois entre na aba “Circuits” de acordo com a Figura 20.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 20 - Ambiente de simulação. Fonte: o autor.

A seguir selecione “Create new Circuit ”

Figura 21 - Ambiente de Simulação EL (Electronics Lab). Fonte: o autor.

Depois criar um projeto, selecione a protoboard “Breadboard”.

WWW.UNINGA.BR 110
ENSINO A DISTÂNCIA

Figura 22 - Ambiente de Simulação criando projeto. Fonte: o autor.

Agora, você pode manipular os componentes e criar o seu próprio projeto, de acordo com
a Figura 23:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 23 - Ambiente de Simulação. Fonte: o autor.

Antes de iniciar nosso primeiro projeto, precisamos saber: você sabe utilizar uma
protoboard? Caso não saiba sugiro ler o link a seguir:
Como utilizar uma Protoboard, acesse: <https://www.robocore.net/tutoriais/
como-utilizar-uma-protoboard.html>.

Agora vamos iniciar nosso pequeno projeto:


Vá em “+ Components” e digite no local da buscar “Arduino”, selecione o “Arduino UNO
R3”, veja a Figura 24:

WWW.UNINGA.BR 111
ENSINO A DISTÂNCIA

Figura 24 - Selecionando o Arduino UNO R3. Fonte: o autor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Agora selecione “Code Editor”, você verá na parte de baixo uma programação de teste.

Figura 25 - Code Editor. Fonte: o autor.

Vamos entender essa programação:

WWW.UNINGA.BR 112
ENSINO A DISTÂNCIA

Figura 26 - Programação de teste Electronics Lab. Fonte: o autor.

O que podemos observar de semelhança com a linguagem C que aprendemos nas


unidades passadas?

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Na linha 3, temos a nomeação do pino 13 valor tipo inteiro, essa nomeação é similar ao C,
nesse caso foi dado um nome “led”. Uma das peculiaridades encontrada na programação Arduino
é a função “Void Setup ( )”, um tipo de função que executa comandos de funções ou, as vezes,
denominada chamada de função. Podemos observar, na linha 8, que “pinMode (led, OUTPUT)”
está inicializando o pino 13 ou led como saída.
Agora na linha 12, estamos em uma estrutura de controle em que o código vai ser
executado caso a condição seja verdadeira. Na linha 13, temos um comando “digitalWrite (led,
HIGH)”, em que será responsável de ligar o Led, ou seja, a saída vai estar em estado “alto” ligado.
Na linha seguinte temos o comando “Delay (1000)” ou seja, a cada 1000ms ele vai deixar o pino
13 em estado “HIGH”, lembrando que 1000ms equivale a 1 segundo. Nas linhas seguintes fica
evidente o funcionamento estado “LOW” delay de 1 segundo.
Em suma essa programação irá piscar o LED a cada segundo.
Vá em “+ Components” e procure um LED para colocar na protoboard e interligue apenas
“puxando” o fio até a protoboard de acordo com a figura 27 a seguir. Aperte “Start Simulation”:

Figura 27 - Simulando o primeiro projeto. Fonte: o autor.

WWW.UNINGA.BR 113
ENSINO A DISTÂNCIA

4.1. Acionamento Eletrônico por Meio do Serial Monitor


Agora iremos ver a utilidade do serial monitor, ou seja, utilizaremos o teclado para ligar
o LED e desligá-lo.
Veja o esquema e a programação:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 28 - Esquema de ligação de 3 leds, utilizando a porta digital 13, 12 e 11. Fonte: o autor.

Veja a programação a seguir:

Figura 29 - Programação para acionamento eletrônico. Fonte: o autor.

WWW.UNINGA.BR 114
ENSINO A DISTÂNCIA

Agora utilize o serial monitor para enviar comando para ligar e desligar, por exemplo
digite “1” para ligar o led vermelho e “A” para desligar.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 30 - Serial Monitor para enviar comandos. Fonte: o autor.

4.2 Sensor de Temperatura LM35



O LM35 é um sensor de circuito integrado, que pode ser usado para medir a temperatura
com uma saída elétrica proporcional à temperatura (em ° C). Podendo medir a temperatura com
mais precisão do que a utilização de um termistor. O circuito do sensor é selado e não está sujeito
a oxidação. O LM35 gera uma tensão de saída maior do que os termopares e pode não exigir que
a tensão de saída seja amplificada.
O LM35 não requer nenhuma calibração e mantém uma precisão de +/- 0,4 ° C à
temperatura ambiente e +/- 0,8 ° C sobre uma faixa de 0 ° C a + 100 ° C.

Caso queira saber mais como funciona esse tipo de sensor, sugiro ler o link: <http://
blog.novaeletronica.com.br/lm35-o-sensor-de-temperatura-mais-popular/>.

WWW.UNINGA.BR 115
ENSINO A DISTÂNCIA

Como vamos utilizar esse sensor para mostrar a temperatura? Utilizaremos o serial
monitor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 31 - Sensor de Temperatura LM35 conectado no Arduino UNO R3. Fonte: o autor.

Programação:

Figura 32 - Programação e Funcionamento (Serial Monitor). Fonte: o autor.

Utilizamos a saída analógica A1, lembrando que o sinal analógico no microcontrolador


varia de 0 a 1023, onde 0 corresponde a 0 Volts e 1023 a 5 V. De acordo com o Datasheet do sensor,
esse dispositivo varia linearmente, 1ºC equivale uma variação de 10mV. Logo, nossa fórmula fica:

Temperatura = [(Valor lido em A1)*(5/1023)]/10mV

WWW.UNINGA.BR 116
ENSINO A DISTÂNCIA

5. PONTE H COM L293D

A ponte H é um circuito de potência e seu funcionamento ocorre por meio de chaveamento,


nesse caso, quem vai fazer os chaveamentos é o circuito integrado.

Leia o funcionamento de uma ponte H, acesse: <http://www.sistemaembutido.


com.br/article.php?id=124>.

O objetivo desse projeto é programar a inversão de rotação de um motor CC, veja o

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


esquema e a programação:

Figura 33 - Esquema do funcionamento de circuito com ponte H e motor CC. Fonte: o autor.

WWW.UNINGA.BR 117
ENSINO A DISTÂNCIA

Figura 34 - Programação do motor CC com Ponto H. Fonte: o autor.

Nesta programação, a cada 2,5 segundos o motor inverte sua rotação, apenas para

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


demonstrar o funcionamento do CI. Também é possível utilizar circuitos integrados. Lembrando
que detalhes das ligações do CI podem ser encontrados no seu datasheet.

Figura 35 - Pinos do CI L293D. Fonte: Public Domain (2017).

5.1 Display LCD


Um método bastante popular para exibição de textos e símbolos é utilizando um display
de cristal líquido (LCD). Eles são tipicamente utilizados em despertadores ou calculadoras, e
muitos projetos interessantes o utilizam para mostrar informações sobre o processo. A criação
de projetos utilizando o LCD é simples por conta da biblioteca disponível no Arduino chamada
“LiquidCrystal.h”, que tem uma lista de excelentes recursos.

WWW.UNINGA.BR 118
ENSINO A DISTÂNCIA

Então vamos para o nosso projeto:

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 36 - LCD e Arduino. Fonte: o autor.

Programação a seguir:

Figura 37 - Programação LCD. Fonte: o autor.

WWW.UNINGA.BR 119
ENSINO A DISTÂNCIA

Evidentemente, graças a biblioteca “LiquidCrystal.h” podemos inserir alguns


comandos como “lcd.print” e “lcd.scrollDisplayLeft”, esse último é um efeito
interessante, você pode ver o conjunto de comando no link a seguir: <https://www.
arduino.cc/en/Reference/LiquidCrystal>.

6. INSTALANDO SO (SISTEMA OPERACIONAL) NO


RASPBERRY PI E TESTANDO O HARDWARE

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


A placa que utilizaremos é o Raspberry Pi B (Figura 38), mas você pode utilizar esse
mesmo procedimento no B+ sem problemas.

Figura 38 - Raspberry Pi B. Fonte: Public Domain (2017).

Para configuração e instalação necessitamos de periféricos:


• Teclado Usb.
• Mouse Usb.
• Monitor com entrada HDMI.
• Cartão SD vazio de pelo menos 8Gb.

WWW.UNINGA.BR 120
ENSINO A DISTÂNCIA

Para instalar o sistema operacional no Raspberry, devemos colocar a “imagem” do nosso


sistema no cartão SD, lembrando que o cartão deve ser formatado utilizando o sistema de arquivos
FAT32.
Depois de formatado o cartão SD em FAT32 baixe a imagem do seu sistema operacional
(Figura 39), vá no link a seguir: <https://www.raspberrypi.org/downloads/>.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 39 - Baixando a imagem NOOBS em Zip. Fonte: o autor.

Lembrando que o NOOB é uma plataforma que contém várias versões de SO. Depois que
você descompactar o arquivo, copie para seu cartão SD, basta inserir o seu cartão no raspberry
automaticamente e ele irá inicializar o NOOB.

Figura 40 - Tela inicial do NOOB para escolha do sistema operacional (recomendado é o Raspbian). Fonte: o
autor.

WWW.UNINGA.BR 121
ENSINO A DISTÂNCIA

A partir desse momento, o Raspbian irá ser instalado no seu Raspberry. Procedimento
demorado.
Basta seguir as instruções e o seu sistema operacional será instalado com sucesso, ver
Figura 41.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4


Figura 41 - Área de trabalho do Raspbian. Fonte: o autor.

Depois de instalado, devemos testar o hardware da placa. Para isso, utilizaremos um LED
e um resistor, conecte na GPIO, como mostrado a seguir na Figura 42.

Figura 42 - Testando hardware com um LED, resistor e miniprotoboard. Fonte: o autor.

Para programar utilizaremos outra linguagem de programação chamada Python, procure


IDLE3 na tela inicial do sistema operacional e carregue a interface de programação do Python
Shell, ver Figura 43.

WWW.UNINGA.BR 122
ENSINO A DISTÂNCIA

Figura 43 - Python Shell, vá em File e New Window e digite a programação. Fonte: o autor.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4

Pressione F5 para o programa ser executado, note que neste algoritmo tem algumas peculiaridades em relação à
linguagem C, infelizmente não vamos nos aprofundar nesse tipo de linguagem.

WWW.UNINGA.BR 123
ENSINO A DISTÂNCIA

Caso haja curiosidade vou deixar um link para você estudar um pouco da
linguagem de programação Python, acesse: < http://www.telecom.uff.br/pet/
petws/downloads/apostilas/PYTHON.pdf>.

Se houver um problema no procedimento de teste, verifique se os pinos estão


conectados corretamente na GPIO.

ALGORITMOS E PROGRAMAÇÃO APLICADA | UNIDADE 4

WWW.UNINGA.BR 124
ENSINO A DISTÂNCIA

REFERÊNCIAS
ANTONIO, M. Apostila De Programação De Microcontroladores Pic Usando Linguagem C.
CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO ESPIRITO SANTO. Vitório – ES,
2008.

CASAVELHA, E. Ponteiros em C. Disponível em: <http://linguagemc.com.br/ponteiros-em-c/>.


Acesso em: 18 maio 2017.

DATASHEET - MICROCHIP. PIC16F87XA. Disponível em: <http://ww1.microchip.com/


downloads/en/DeviceDoc/39582b.pdf>. Acesso em: 05 jun. 2017.

FREIRE, A. Operadores, Expressões e Funções Matemáticas. 2015. Disponível em: <http://


slideplayer.com.br/slide/1594602/5>. Acesso em: 05 jun. 2017.

HARRIS, David; HARRIS, Sarah. Digital Design and Computer Architecture. Second Edition,
2012.

HITOSHI. Introdução à Computação: passagem de parâmetros. Disponível em: <https://www.


ime.usp.br/~elo/IntroducaoComputacao/Funcoes%20passagem%20de%20parametros.htm>.
Acesso em: 18 mai. 2017.

KUSHNER, D. The Making of Arduino. IEEE Spectrum. 2011.

MACEDO, D. Arquitetura de Harvard. 2012. Disponível em: <http://www.diegomacedo.com.


br/wp-content/uploads/2012/07/arquitetura-de-Harvard.jpg>. Acesso em: 05 jul. 2017.

MAZZEI, D.; MONTELISCIANI, G. Changing the Programming Paradigm for the embedded
int the IoT Domain. Internet of Things. IEEE, 2015.

PEREIRA, S. L. Algoritmos e Lógica de Programação em C: Uma abordagem didática. 12. ed.


São Paulo: Érica, 2010.

RASPBERRY PI. Ten Millionth Raspberry PI new Kit. 2016. Disponível em: <https://www.
raspberrypi.org/blog/ten-millionth-raspberry-pi-new-kit/>. Acesso em: 05 jun. 2017.

STAMM et al. Oral History Panel on the Development and Promotion of the Intel 8048
Microcontroller. Computer History Museum. California, 2008.

STAN, Augarten. The Most Widely Used Computer on a Chip: The RMS 100. New York:
Ticknor & Fields, 1983.

UFSJ. Aula String Cpp. Disponível em: <https://ufsj.edu.br/portal2-repositorio/File/prof_


ngoulart/notas_aula/AEDS1/string_Cpp.pdf>. Acesso em: 05 jun. 2017.

WWW.UNINGA.BR 125

Você também pode gostar