Sei sulla pagina 1di 112

Computadores Digitais 2

Prof. Rodrigo de Souza Couto

Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista


Informaes Gerais
Prof. Rodrigo de Souza Couto
E-mail: rodsouzacouto@ieee.org
Pgina da disciplina:
http://www.lee.uerj.br/~rodrigo/compdig2
Sala: 5019E
reas de Atuao (temas de pesquisa e desenvolvimento)
Virtualizao de Funes de Redes (NFV)
Redes Definidas por Software (SDN)
Computao em Nuvem
Internet das Coisas
Otimizao de Redes
Horrio das aulas
Quinta-feira: 8:50h s 11:30 5009
Sexta-feira: 8:50h s 10:30 LEE Sala 11 Janela
Contextualizao:
Nveis de Mquina
Alto Nvel

Baixo Nvel

Adaptado do livro Introduo a Arquitetura de Computadores, Miles Murdocca e Vincent Heuring, 2000.

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Contextualizao:
Nveis de Mquina
Alto Nvel
Linguagem C

Mdio Nvel

Redes de
Computadores

Baixo Nvel

Adaptado do livro Introduo a Arquitetura de Computadores, Miles Murdocca e Vincent Heuring, 2000.

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Viso geral do curso
O curso dividido em duas partes
Programao (linguagem C)
Comunicao em Redes de Computadores

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


ATENO
Esta apresentao baseada nos seguinte trabalhos:
Notas de aula do Prof. Miguel Campista da UFRJ
http://www.gta.ufrj.br/~miguel/lingprog.html
Notas de aula do Prof. Miguel Campista da UFRJ
http://www.gta.ufrj.br/~miguel/redes1.html
Notas de aula do Prof. Igor Monteiro Moraes da UFF
http://www2.ic.uff.br/~igor/cursos/redesI
Notas de aula do livro Jim Kurose e Keith Ross, Redes
de Computadores e a Internet Uma abordagem Top-
Down", 6 Edio, Editora Pearson, 2013

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Viso geral da Programao
em Linguagem C em
Comp. Dig. 2

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Programao em
Comp. Dig. 2
A linguagem de programao apenas uma
ferramenta!
O importante neste curso o aprendizado dos conceitos
de programao
Sero vistos conceitos bsicos/intermedirios da
linguagem C
O bom conhecimento de uma linguagem facilita o
aprendizado de outras
Basicamente a disciplina focar a soluo de problemas
por computadores

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Uso da programao em
Engenharia Eletrnica
Atualmente, muitos engenheiros eletrnicos
trabalham com Tecnologia da Informao (TI)
Desenvolvimento de aplicativos para smartphones
Redes de computadores
Sistemas de bancos de dados
Computao em nuvem
Entre outras reas

Nessas reas, nem sempre (apesar de ser muito comum) o


engenheiro eletrnico ir programar, mas o conhecimento
bsico de programao fundamental!

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Uso da programao em
Engenharia Eletrnica
Arduino
Placa de desenvolvimento
muito utilizada atualmente
Programao em C ou C++

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Uso da programao em
Engenharia Eletrnica
Outros (dentre muitos!) exemplos
MATLAB e Scilab
Aplicaes em Controle, Processamento de sinais, etc.
No C, mas o conhecimento dos conceitos deste curso
facilita a programao nessas ferramentas

Labview
Utilizao em instrumentao e automao
Programao grfica
Bem diferente do C, mas como disse.

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Uso da programao em
Engenharia Eletrnica
Outros (dentre muitos!) exemplos
MATLAB e Scilab
Aplicaes em Controle, Processamento de sinais, etc.
No C, mas o conhecimento dos conceitos deste curso
facilita a programao nessas ferramentas

Labview
Utilizao em instrumentao e automao
Programao grfica
Bem diferente do C, mas como disse.

O Importante aprender os conceitos de programao,


ensinando o computador a solucionar seus problemas reais!
Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto
Viso geral das Redes de
Comunicao em
Comp. Dig. 2

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Redes de Computadores
em Comp. Dig. 2
Internet: milhes de
dispositivos conectados
Sistemas finais
(smartphones, laptops, etc.)
Enlace de comunicao
Fibras pticas, cobre, rdio,
satlite
Comutadores de pacotes
Encaminham pacotes pela
rede
Pedaos de informao

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Redes de Computadores
em Comp. Dig. 2
Tecnologias de Acesso
Redes sem-fio (WiFi)

Internet

Redes a cabo
Redes Ethernet (redes
locais cabeadas)

Redes pticas

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Redes de Computadores
em Comp. Dig. 2
Algumas perguntas a serem respondidas em Comp. Dig. 2
Como funcionam os elementos bsicos de redes?
Comutadores, roteadores, HUBs, etc.
Como dispositivos sem-fio utilizam o mesmo roteador
WiFi sem interferncia na comunicao?
Protocolos de acesso ao meio
Como os dispositivos conseguem ser encontrados na
Internet?
Endereamento IP
Como consigo me conectar a um servidor web (p.ex. site
do Facebook)?
Protocolos de transporte

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Ementa do Curso
Programao (linguagem C aplicado ao Arduino)
Conceitos Bsicos
Expresses A princpio, este
Controle de Fluxo semestre o curso vai
ser reduzido, com
Funes nfase na aplicao de
Cadeias de caracteres (strings) C em Arduino

Vetores
Programao (lingaguem C em um contexto geral)
Alocao dinmica Se der tempo,
Matrizes veremos outros
aspectos de C, em um
Listas encadeadas contexto mais geral
Arquivos
Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto
Ementa do Curso
Comunicao em Redes de Computadores
Princpios bsicos de redes de computadores
Infraestrutura fsica de redes
Redes IEEE 802
Ethernet e WiFi
Arquitetura TCP/IP Ainda necessrio ver
como esta ementa
ser adequada ao
calendrio.

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Simulador de Arduino
Utilizado
Utilizaremos o seguinte simulador online de Arduino
https://circuits.io/
Utilizaremos a funo Electronics Lab
Faam o cadastro do site e comecem a ver os
elementos
Exemplo:
Relgio com Arduino
https://circuits.io/circuits/2258116-star-trek-clock
rvore de Natal no Arduino
https://circuits.io/circuits/1392613-christmas-tree

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Bibliografia
Slides de aula sero disponibilizados online

Programao em C
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel,
Introduo a Estruturas de Dados, Editora Campus,
2004
Simon Monk, Programao com Arduino II: Passos
Avanados com Sketches, 2015

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Bibliografia
Comunicao em Redes de Computadores
Andrew S. Tanenbaum, David J. Wheterall, "Redes
de Computadores", 5 Edio, Editora Pearson,
2011
Jim Kurose e Keith Ross, Redes de Computadores e a
Internet Uma abordagem Top-Down", 6 Edio,
Editora Pearson, 2013

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Avaliaes PLANEJADAS
Trabalhos de Programao
Avaliao da parte Programao em C
Mdia dos trabalhos ponderada de acordo com o nvel
de dificuldade de cada um
Mais difceis valem mais!

Uma prova no fim do perodo (P1)


Avaliao da parte Comunicao em Redes de
Computadores

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Avaliaes PLANEJADAS
Segunda chamada
Se necessria, data ser combinada
S pode ser realizada por alunos que comprovem
doena, viagem a servio ou trabalho extraordinrio
Prazo mximo de 7 dias corridos aps cada prova

Prova Final
Matria TODA

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Data das Provas
P1- 06/07/2016
PF - 13/07/2016
Segunda chamada a combinar

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Critrios de Avaliao
Mdia Semestral = (Mdia dos trabalhos + P1)/2
Se Mdia Semestral 7
Mdia Final = Mdia Semestral
Aprovado(a)!!!!
Se 4 Mdia Semestral < 7
Prova Final (PF)
Aps prova final
Mdia Final = (Mdia Semestral + PF)/2
Aprovado(a) se Mdia Final 5
Se Mdia Final < 4
Mdia Final = Mdia Semestral
Reprovado(a)

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Aviso
No haver aula nos dias 18/05 e 19/05

Motivo: Participao no SBRC (Simpsio Brasileiro de


Redes de Computadores e Sistemas Distribudos)
http://sbrc2017.ufpa.br/

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Aula de Hoje
Expresses
Variveis
Operadores
Bsico de entrada e sada

Controle de Fluxo
Tomada de deciso
Construes com laos
Seleo

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Parte 1

Programao (linguagem C)
Introduo Geral

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Por que a Linguagem C?
Permite o desenvolvimento de programas menores e
mais rpidos
Programador possui controle maior sobre o cdigo
Programador deve:
Definir onde armazenar as variveis na memria
Alocar e liberar a memria
Trabalhar com endereos de memria
Em compensao, a programao mais detalhada
Detalhes que no so preocupaes em linguagens de
mais alto nvel como: Linguagens de scripts, Java e Python
Possui sintaxe simples
No possui muitas funes embutidas

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
Formato para apresentao dos programas em
linguagens estruturadas
Blocos so conjuntos de comandos com uma funo bem
definida
Servem para definir os limites onde as variveis declaras
em seu interior so definidas
So delimitadas (por chaves no C)
Incio representado por {
Fim representado por }
Um bloco contido em outro nunca deve terminar antes que
o bloco anterior
Identao (Dentear)
Serve para facilitar a identificao dos blocos

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
#include <stdio.h>
main() {
int n = 3;
IF (n > 5) {
imprimir n > 5;
}
IF (n <= 5) {
imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
#include <stdio.h>
main() {
int n = 3;
IF (n > 5) {
Bloco A imprimir n > 5;
}
IF (n <= 5) {
Bloco B imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
#include <stdio.h>
main() {
int n = 3;
IF (n > 5) {
Bloco A imprimir n > 5;
} Bloco Principal
IF (n <= 5) {
Bloco B imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
Incio dos blocos
#include <stdio.h>
main() {
int n = 3;
IF (n > 5) {
Bloco A imprimir n > 5;
} Bloco Principal
IF (n <= 5) {
Bloco B imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
Final dos blocos
#include <stdio.h>
main() {
int n = 3;
IF (n > 5) {
Bloco A imprimir n > 5;
} Bloco Principal
IF (n <= 5) {
Bloco B imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
#include <stdio.h>
Identao:
Diferencia os
main() {
blocos dos seus contedos
int n = 3;
Diferencia o bloco IF (n > 5) {
principal dos
blocos internos imprimir n > 5;
}
IF (n <= 5) {
imprimir n <= 5;
}
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Estrutura de Blocos e
Identao
#include <stdio.h>
Identao:
Diferencia os
main() {
blocos dos seus contedos
int n = 3;
IF (n > 5) {
imprimir n > 5;
}
Diferencia os IF (n <= 5) {
blocos internos imprimir n <= 5;
dos seus
contedos }
}
A boa prtica da
programao exige
Computadores Digitais II DETEL-FEN/UERJ
identao...
Prof. Rodrigo de Souza Couto
Parte 1

Programao (linguagem C)
Expresses

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


/* Programa para converter altura em metros para ps e pol*/

#include <stdio.h>
int main(void) {
int f; /* nmero de ps */
float p; /* nmero de polegadas */
float h = 1.45f; /* altura em metros */ No final da aula
conseguiremos
/* Captura a altura em metros */ compreender esse
printf(Digite a altura em metros); cdigo!!!!
scanf(%f,&h);

/* Calcula a altura em ps e polegadas */


h = 100*h;
f = (int) (h/30.48);
p = (h-f*20.48)/2.54;

/* Exibe a altura convertida */


printf(Altura: %d ps %f polegadas\n,f,p);

return 0;
}
/* Programa para converter altura em metros para ps e pol*/

#include <stdio.h>
Parte principal do
int main(void) {
cdigo em C
int f; /* nmero de ps */ Mais detalhes na aula
float p; /* nmero de polegadas */ de Funes
float h = 1.45f; /* altura em metros */

/* Captura a altura em metros */ Veremos que no


printf(Digite a altura em metros); Arduino essa estrutura
scanf(%f,&h); muda um pouco

/* Calcula a altura em ps e polegadas */


h = 100*h;
f = (int) (h/30.48);
p = (h-f*20.48)/2.54;

/* Exibe a altura convertida */


printf(Altura: %d ps %f polegadas\n,f,p);

return 0;
}
/* Programa para converter altura em metros para ps e pol*/

#include <stdio.h>
int main(void) {
int f; /* nmero de ps */
float p; /* nmero de polegadas */
float h = 1.45f; /* altura em metros */ Comentrios:
Ignorados pelo
/* Captura a altura em metros */ compilador
printf(Digite a altura em metros);
scanf(%f,&h);

/* Calcula a altura em ps e polegadas */


h = 100*h;
f = (int) (h/30.48);
p = (h-f*20.48)/2.54;

/* Exibe a altura convertida */


printf(Altura: %d ps %f polegadas\n,f,p);

return 0;
}
Variveis
Espao da memria para armazenar um dado
Possui um tipo e um nome
Nome da varivel uma referncia ao dado armazenado
na memria

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


/* Programa para converter altura em metros para ps e pol*/

#include <stdio.h>
int main(void) {
int f; Declarao de
float p; Variveis
float h = 1.45f;

printf(Digite a altura em metros);


scanf(%f,&h);

h = 100*h;
f = (int) (h/30.48);
p = (h-f*20.48)/2.54;

printf(Altura: %d ft %f pol\n,f,p);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Variveis Contedo da
Memria

int main(void) {
int f; Nome
float p;
Tipo float h = 1.45f;
f XXXXXXX
return 0;
p XXXXXX
}

h 1.45f

Ateno! Essa apenas uma


simplificao da organizao da
memria de um Computador!!

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Variveis Contedo da
Memria

int main(void) {
int f;
float p;
float h = 1.45f;
f XXXXXXX
return 0;
Contedo inicial p XXXXXX
} (no obrigatrio)

h 1.45f

Variveis sem
contedo inicial so
iniciadas com lixo

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tipos bsicos
Tipo Tamanho* Menor Valor Maior Valor
char 1 byte -128 +127
unsigned char 1 byte 0 +255
short int (short) 2 bytes -32.768 +32.768
unsigned short int 2 bytes 0 +65.535
int 4 bytes -2.147.483.648 +2.147.483.648
long int (long) 4 bytes -2.147.483.648 +2.147.483.648
unsigned long int 4 bytes 0 +4.294.967.295
float 4 bytes -1038 +1038
double 8 bytes -10308 +10308

*O tamanho pode variar dependendo da arquitetura da mquina. A


tabela acima para um PC comum. O Arduino, por exemplo, possui
int com 2 bytes e float com 4 bytes.

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Declarao de variveis
Em C todas as variveis precisam ser declaradas
Linguagem fortemente tipada
O tipo da varivel sempre deve ser especificado
int main(void) {
int a; Variveis do mesmo
int b,c; tipo podem ser
float d; declaradas juntas

a = 5;
b = 10;
c = 20;
d = 5.3;

return 0;
}
Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto
Declarao de variveis
Como visto antes, o contedo pode ser atribudo na
prpria declarao

int main(void) {
int a = 5;
int b = 10 , c = 20;
float d = 5.3;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Declarao de variveis
Qual o valor de c no final da execuo ?

int main(void) {
int a = 2;
int b, c;

c = a + b;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Declarao de variveis
Qual o valor de c no final da execuo ?
No possvel determinar
O contedo de b lixo
int main(void) {
int a = 2; Erro comum em
int b, c; programao!

c = a + b;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Declarao de variveis
Como C fortemente tipada, s possvel armazenar
valores do mesmo tipo declarado

int main(void) {
int a;
Qual o valor
a = 4.3; armazenado na
varivel a ?
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Declarao de variveis
Como C fortemente tipada, s possvel armazenar
valores do mesmo tipo declarado

int main(void) { Qual o valor


int a; armazenado na
varivel a ?
a = 4.3;
Resposta: 4
return 0;
Alguns compiladores
} exibem advertncias
(warnings) nesse caso

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Constante
Valor que no alterado em tempo de execuo
Tambm armazenado na memria
int main(void) {
float real;
Variveis double realDupla,realDupla2;
int inteira;

real = 12.45f;
realDupla = 12.45; Constantes
realDupla2 = 1245e-2;
inteira = 12;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores
Aritmticos
Atribuio
Incremento e decremento
Relacionais e lgicos
Tamanho da varivel
Converso de tipo

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores Aritmticos
Operadores
Adio (+)
Subtrao (-)
Multiplicao (*)
Diviso (/)
Mdulo (%)
Resto da diviso entre variveis do tipo int
Operaes so feitas na preciso dos operandos
O operando com tipo de menor expressividade
convertido para o tipo de maior expressividade
Ex. operando int se torna double
Diviso entre inteiros trunca a parte fracionria

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores Aritmticos
int main(void) {
int inteira;
double realDuplaA,realDuplaB;
Qual o valor de cada varivel no
final do programa ?
inteira = 3.5;
realDuplaA = inteira / 2.0;
realDuplaB = 1/3 + realDuplaA;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores Aritmticos
int main(void) {
int inteira;
double realDuplaA,realDuplaB;
Qual o valor de cada varivel no
final do programa ?
inteira = 3.5;
realDuplaA = inteira / 2.0;
inteira = 3
realDuplaB = 1/3 + realDuplaA;
realDuplaA = 3.0/2.0 = 1.5
realDuplaB = 0 + 1.5 = 1.5
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores Aritmticos
Operador mdulo (%)
Resto da diviso
Utilizado, por exemplo, para verificar se um inteiro
par
x%2
Se resultados for 0, x par
Se resultado for 1, x impar

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de Atribuio
Simples (=)
Compostos
Soma (+=)
a += b equivale a a = a + b
Subtrao (-=)
a -= b equivale a a = a - b
Multiplicao (*=)
a *= b equivale a a = a * b
Diviso (/=)
a /= b equivale a a = a / b
Mdulo (%=)
a %= b equivale a a = a % b

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de Atribuio
Regra geral para operadores compostos
varivel op= expresso equivale a:
varivel = varivel op (expresso)

ATENO
x *= y + 1 equivale a x = x *(y+1)

E NO a x = x * y + 1

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de
Incremento e Decremento
Soma (++)
Subtrao (--)

Incrementam ou decrementam em uma unidade o valor


de uma varivel
No se aplicam a expresses!
Apenas a variveis
Incremento/Decremento pode ser antes ou depois da
utilizao da varivel
x = variavel++, x recebe a varivel antes do incremento
x = ++variavel , x recebe a varivel depois do incremento

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de
Incremento e Decremento
int main(void) {
int m = 10;
int x,y;

m++; /* Aps esta linha, m=11 */


++m; /* Aps esta linha, m=12 */
m--; /* Aps esta linha, m=11 */

/* Aps prxima linha, m=12 e x=11 */


x = m++;
/* Aps prxima linha, m=13 e y=13 */
y = ++m;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de
Incremento e Decremento

int main(void) {
Qual o valor de cada varivel no
int m = 10 , n = 12;
final do programa ?
int x,y;

x = m++ * 2;

y = --n * 2;

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores de
Incremento e Decremento

int main(void) {
Qual o valor de cada varivel no
int m = 10 , n = 12;
final do programa ?
int x,y;
x = 20
x = m++ * 2;
y = 22
m = 11
y = --n * 2;
n = 11
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores
Relacionais e Lgicos
Relacionais
Comparam dois valores
Resultado 0 (falso) ou 1 (verdadeiro)
Linguagem C NO possui tipo booleano
Ateno: Arduino possui um tipo boolean
Menor que ( < )
Maior que ( > )
Menor ou igual que ( <= )
Maior ou igual que ( >= )
Igual a ( == )
Diferente de ( != )

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores
Relacionais e Lgicos
Operadores lgicos
Operador E ( && )
AND
Operador OU ( || )
OR
Operador de Negao ( ! )
NOT
Avaliao da esquerda para a direita
Avaliao para quando o resultado pode ser conhecido
Exemplo:
Se c=23 e d =30, a expresso (c < 20) && ( d >c ) j
retorna 0 na expresso (c < 20)

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores
Relacionais e Lgicos
int main(void) {
int a = 50 , b = 70 , c = 80;
Quais so os valores de w, x, y e z?
int w,x,y,z;

w = ( a > 50 ) || ( c == 80);
x = ( a > 100) && ( c < 90);
y = !(( a <= 50 ) && ( c < 85));
z = ( w != x);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Operadores
Relacionais e Lgicos
int main(void) {
int a = 50 , b = 70 , c = 80;
Quais so os valores de w, x, y e z?
int w,x,y,z;
w=1
w = ( a > 50 ) || ( c == 80);
x=0
x = ( a > 100) && ( c < 90);
y=0
y = !(( a <= 50 ) && ( c < 85));
z =1
z = ( w != x);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tamanho da Varivel
sizeof()
Retorna um inteiro com o tamanho (em bytes) de uma
varivel

Utilizaremos mais tarde para alocao dinmica de memria

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tamanho da Varivel
int main(void) {
int a,tamanhoA,tamanhoB;
double b;
possvel aplicar sizeof em int tamanhoAtipo,tamanhoBtipo;
uma varivel ou no prprio tipo
No fim do programa: tamanhoA = sizeof(a);
tamanhoA = 4 tamanhoB = sizeof(b);
tamanhoB = 8
tamanhoAtipo = 4 tamanhoAtipo = sizeof(int);
tamanhoBtipo = 8 tamanhoBtipo = sizeof(double);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Converso de Tipo
Em C h converso automtica de tipo
Ex:int a = 3.5;
a ser igual a 3
Compilador pode emitir advertncias (warnings)
Conversor de tipo (type cast) pode explicitamente
converter variveis
Compilador no emite advertncias
int main(void) {
int a,b;
Conversor para inteiro a = (int) 3.5;
b = (int) 3.5 % 2;
return 0;
}
Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto
Entrada e Sada
Bsicas
Utilizam a biblioteca padro do C stdio.h
Mais detalhes da biblioteca sero mostrados em aulas
futuras
#include <stdio.h>

Incluso do arquivo de int main(void) {


cabealho da float h;
biblioteca padro.
/* Captura a altura em metros */
Mais informaes printf(Digite a altura em metros);
sobre cabealhos scanf(%f,&h);
sero fornecidas na printf(Altura: %g metros\n,h);
aula de Funes!!
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Entrada e Sada
Bsicas
Utilizam a biblioteca padro do C stdio.h
Mais detalhes da biblioteca sero mostrados em aulas
futuras
#include <stdio.h>
int main(void) {
float h;

/* Captura a altura em metros */


Funo de Sada printf(Digite a altura em metros);
scanf(%f,&h);
printf(Altura: %g metros\n,h);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Entrada e Sada
Bsicas
Utilizam a biblioteca padro do C stdio.h
Mais detalhes da biblioteca sero mostrados em aulas
futuras
#include <stdio.h>
int main(void) {
float h;

/* Captura a altura em metros */


printf(Digite a altura em metros);
Funo de Entrada scanf(%f,&h);
printf(Altura: %g metros\n,h);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Entrada e Sada
Bsicas
Utilizam a biblioteca padro do C stdio.h
Mais detalhes da biblioteca sero mostrados em aulas
futuras
#include <stdio.h>
int main(void) {
float h;

No Arduino a Entrada /* Captura a altura em metros */


e Sada so printf(Digite a altura em metros);
realizadas de formas scanf(%f,&h);
distintas, vistas mais printf(Altura: %g metros\n,h);
tarde!!
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


printf
Possibilita sada de valores segundo um determinado
formato
printf (formato, lista de
constantes/variveis/expresses...);
Formato -> cadeia de caracteres (string)
Especificado entre aspas
Especifica onde entra cada valor
Especificadores de formato precedido por %
Exemplo printf(Inteiro = %d Real = %g \n,33,5.3)
Sada na tela: Inteiro = 33 Real = 5.3

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


printf
Alguns especificadores de formato
%c especifica um char
%d especifica um int
%u especifica um unsigned int
%f especifica um double (ou float)
%e especifica um double (ou float) no formato cientfico
%g especifica um double (ou float) no formato mais
apropriado (%f ou %e)
%s especifica uma cadeia de caractere (string)
String -> sequncia de char
%% - escreve o smbolo %

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


printf
Alguns caracteres especiais
\n Caractere de nova linha
\t Caractere de tabulao
\r Caractere de retrocesso
\ Caractere
\\ - Caractere \

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


printf

#include <stdio.h>
int main(void) {
Sada na Tela:
double h = 1.45;
int i = 2 ; j = 4;
Valor de H = 1.45
I=2J=4
printf(Valor de H = %g \n,h);
Tchau!
printf(I = %d ,i);
printf(J = %d \n,j);
printf(Tchau!);

return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


scanf
Permite capturar valores via teclado e armazen-los
em variveis
scanf (formato, lista de endereos das variveis...);
Especificadores de formato semelhantes ao do printf
%c especifica um char
Especificadores
%d especifica um int diferentes do printf
%u especifica um unsigned int para os tipos float e
%f,%e,%g especifica um float double

%lf,%le,%lg especifica um double formato cientfico


%s especifica uma cadeia de caractere (string)
scanf
Formato deve ser seguido pelo endereo da varivel
E no pelo contedo da varivel como no printf
Especificador de endereo &
n se refere ao contedo de n
&n se refere ao endereo da varivel n na memria
Detalhado na aula sobre ponteiro (aula de Funes)
#include <stdio.h>
int main(void) {
Funo termina a leitura int n;
de um nmero quando
ENTER teclado aps a printf(Digite um nmero\n);
insero do nmero scanf (%d, &n);

return 0;
}
/* Programa para converter altura em metros para ps e pol*/

#include <stdio.h>
int main(void) {
int f; /* nmero de ps */
float p; /* nmero de polegadas */
float h = 1.45f; /* altura em metros */

/* Captura a altura em metros */


printf(Digite a altura em metros);
scanf(%f,&h);

/* Calcula a altura em ps e polegadas */


h = 100*h;
f = (int) (h/30.48);
p = (h-f*20.48)/2.54;

/* Exibe a altura convertida */


printf(Altura: %d ps %f polegadas\n,f,p);

return 0;
}
Parte 1

Programao (linguagem C)
Controle de fluxo

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Comando if
Estrutura bsica para tomada de decises em C

if (expr) {
bloco de comandos 1
...
}

Se expr != 0, o bloco
de comandos 1 ser
executado

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Comando if
Estrutura bsica para tomada de decises em C

if (expr) {
bloco de comandos 1
...
}
else {
bloco de comandos 2
}

Se expr != 0, o bloco Seno, o bloco de


de comandos 1 ser comandos 2 ser
executado executado

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Exemplo
#include <stdio.h>
int main(void) {
int a;
printf(Digite um numero inteiro\n);
scanf(%d,&a);
if (a%2 == 0){
printf(Par!\n);
}
else {
printf(Impar!\n);
}
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Exemplo
#include <stdio.h>
int main(void) {
int a;
printf(Digite um numero inteiro\n);
scanf(%d,&a);
if (a%2 == 0){
printf(Par!\n);
Lembrem-se da
}
indentao!!
else {
Ela no obrigatria
printf(Impar!\n);
mas deixa o cdigo
}
mais claro!!!
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Exemplo
#include <stdio.h>
int main(void) {
int a;
printf(Digite um numero inteiro\n);
scanf(%d,&a);
if (a%2 == 0){ Pssima escolha de nome!
printf(Par!\n); Nomes devem fazer sentido!
} (aqui na aula sero utilizados
else { nome assim para deixar o cdigo
printf(Impar!\n); mais conciso).
} Sugesto de nome:
return 0; numeroInserido
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Comandos if podem ser aninhados
#include <stdio.h>
int main(void) {
int a,b;
printf(Digite dois nmeros\n);
scanf(%d%d,&a,&b);
if ((a >= 0) && (b >= 0)){
printf(Os dois sao positivos ou zero!\n);
if ((a == 0) || (b == 0)) {
printf(Um deles eh zero!\n);
}
}
else {
printf(Um deles eh negativo !\n);
}
return 0;
}
Tomada de Deciso
Quando h apenas 1 comando associado ao if, no
necessria a criao dos blocos ({...})
#include <stdio.h>
int main(void) {
int a;
printf(Digite um numero inteiro );
scanf(%d,&a);
if (a%2 == 0) Isso pode gerar
printf(Par!\n); confuso quando tem
else um if dentro de outro
printf(Impar!\n); if. Nesse caso,
return 0; melhor usar as
chaves!
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Tomada de Deciso
Escada if-else-if
/*Decisao sobre a temperatura (versao 3)*/
#include <stdio.h>
int main(void) {
int temp;
printf(Digite a temperatura: \n);
scanf(%d,&temp);
if (temp < 10)
printf(Temperatura Muito Fria!\n);
else if (temp < 20)
printf(Temperatura Fria!\n);
else if (temp < 30)
printf(Temperatura Agradavel!\n);
else
printf(Temperatura Muito Quente!\n);

return 0;
}
Estruturas de Bloco
Declaraes de variveis podem ocorrer no incio do
corpo da funo ou no incio de um bloco
Varivel s existe dentro do bloco ou funo
#include <stdio.h>
Incio de funo
int main(void) {
int temp;
printf(Digite a temperatura: );
scanf(%d,&temp);
if (temp < 30){ Incio de bloco
int teste;
teste = temp;
printf(Temperatura Agradavel!\n);
}
/*Variavel teste nao existe neste ponto do programa
temp += 1;
return 0;
}
Estruturas de Bloco
Declaraes de variveis podem ocorrer no incio do
corpo da funo ou no incio de um bloco
Varivel s existe dentro do bloco ou funo
#include <stdio.h>
int main(void) { Boa prtica de
int temp; programao: declarar
printf(Digite a temperatura: ); variveis o mais
scanf(%d,&temp); prximas possvel de
if (temp < 30){ seus usos
int teste;
teste = temp;
printf(Temperatura Agradavel!\n);
}
/*Variavel teste nao existe neste ponto do programa
temp += 1;
return 0;
}
Construes com laos
Procedimentos iterativos so muito comuns em
programas computacionais

Exemplo: Clculo do fatorial n!


n! = n x (n-1) x (n-2) x (n-3) 3 x 2 x 1
0! = 1

Podemos fazer esse clculo utilizando um lao


while
(podemos fazer tambm com recursividade, mas isso
assunto para outra aula!)

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Lao while
Bloco executado se expr for diferente de zero
Ao final do bloco, expr volta a ser avaliada
Bloco executado repetidamente at expr assumir
valor zero

while (expr) {
bloco de comandos
...
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Complete o programa abaixo para receber do usurio
um nmero inteiro n e imprimir seu fatorial
Utilizando while
#include <stdio.h>
int main(void) {
...

int n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */

...

printf (Fatorial = %d :\n,fatorial);


return 0;
}
Construes com laos
#include <stdio.h>
int main(void) {
int i, n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */
fatorial = 1;
i = 1;
while ( i <= n ) {
fatorial *= i;
i++;
}
printf (Fatorial = %d :\n,fatorial);
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Lao for

for (exprInicializao; exprCondio; exprIncremento){


bloco de comandos
...
}

exprInicializao
while (exprCondio) {
bloco de comandos
...
exprIncremento
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Como alterar o programa de clculo de fatorial para
utilizar for ao invs de while?

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
#include <stdio.h>
int main(void) {
int i, n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */
for ( fatorial = 1 , i = 1 ; i <= n ; i++ ) {
fatorial *= i;
}
printf (Fatorial = %d :\n,fatorial);
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
#include <stdio.h>
int main(void) {
int i, n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */
for ( fatorial = 1 , i = 1 ; i <= n ; i++ ) {
fatorial *= i;
}
printf (Fatorial = %d :\n,fatorial);
return 0;
} Reparem que posso
usar a vrgula para
inicializar mais de uma
varivel!

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
#include <stdio.h>
int main(void) {
int i, n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */
for ( fatorial = 1 , i = 1 ; i <= n ; i++ ) {
fatorial *= i;
}
printf (Fatorial = %d :\n,fatorial);
return 0;
} Tambm poderia usar
a vrgula no
incremento. E na
condio?

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
#include <stdio.h>
int main(void) {
int i, n, fatorial;
printf(Digite um numero inteiro nao negativo:);
scanf(%d,&n);

/* calcula fatorial */
for ( fatorial = 1 , i = 1 ; i <= n ; i++ ) {
fatorial *= i;
}
printf (Fatorial = %d :\n,fatorial);
return 0;
} Na condio devo formar estruturas
com operadores lgicos
Ex: ((i <= n) && (j < 30))

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Lao do-while
Bloco executado inicialmente independentemente das
condies
Ao final do bloco, expr avaliada
Bloco executado repetidamente at expr assumir
valor zero

do {
bloco de comandos
...
} while (expr)

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Interrupes com break e continue
Interrupo antecipada de um lao
break: interrompe e termina a execuo do lao

#include <stdio.h>
int main(void) {
int i;
for ( i = 0 ; i < 10 ; i++ ) {
if (i == 5)
break;
printf (%d ,i);
}
printf (fim \n); Sada:
return 0; 0 1 2 3 4 fim
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Interrupes com break e continue
Interrupo antecipada de um lao
continue: interrompe e termina a execuo do lao e
passa para a prxima iterao
#include <stdio.h>
int main(void) {
int i;
for ( i = 0 ; i < 10 ; i++ ) {
if (i == 5)
continue;
printf (%d ,i);
}
printf (fim \n); Sada:
return 0; 0 1 2 3 4 6 7 8 9 fim
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Qual a sada do programa abaixo?
#include <stdio.h>
int main(void) {
int i = 0;
while ( i < 10) {
if (i == 5)
continue;
printf (%d ,i);
i++;
}
printf (fim \n);
return 0;
}

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Qual a sada do programa abaixo?
#include <stdio.h>
int main(void) {
int i = 0;
while ( i < 10) {
if (i == 5)
continue;
printf (%d ,i);
i++;
}
printf (fim \n);
return 0;
} O programa nunca termina!
Use com cuidado o comando
continue

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


Construes com laos
Seleo com o comando switch
switch (expr) {
case op1:
... /*Comandos executados se expr == op1*/
break;
case op2:
... /*Comandos executados se expr == op2*/
break;
case op3:
... /*Comandos executados se expr == op3*/
break;
default:
... /*executado se expr for diferente de todos*/
break;
...
}
Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto
Construes com laos
Seleo com o comando switch
op1, op2, op3, etc. devem ser nmeros inteiros ou
caracteres
Comandos seguintes ao caso verdadeiro so executados
at encontrar um break
Bloco default opcional e executado se expr for
diferente de todos os casos enumerados

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto


#include <stdio.h>
int main(void) {
float num1, num2;
char op;
printf (Digite: numero op numero \n);
scanf (%f %c %f,&num1,&op,&num2);
switch (op) {
case +:
printf ( = %f\n, num1+num2);
break;
case -:
printf ( = %f\n, num1-num2);
break;
case *:
printf ( = %f\n, num1*num2);
break;
case /:
printf ( = %f\n, num1/num2);
break;
default:
printf (Operador Invalido\n);
break;
}
return 0;
}
Atividades de fixao
Mexer na interface do simulador do Arduino para se
familiarizar

Rodar os exemplo da aula no Dev C++


IDE para desenvolver programas em C no PC
http://sourceforge.net/projects/orwelldevcpp/files/la
test/download

Computadores Digitais II DETEL-FEN/UERJ Prof. Rodrigo de Souza Couto

Potrebbero piacerti anche