Você está na página 1de 36

ECT2303 - Linguagem de Programação

Introdução à Linguagem C++: tipos básicos e


variáveis

Diego R. C. Silva
diego@ect.ufrn.br

15 de fevereiro de 2019

ECT2303 - Aula 02 1
Por que Aprender uma Linguagem de Programação?

ECT2303 - Aula 02 2
Por que Aprender uma Linguagem de Programação?

I Pensar algoritmicamente permitirá você solucionar


problemas mais rápido com o auxílio do computador.

ECT2303 - Aula 02 3
Por que Aprender uma Linguagem de Programação?

I Pensar algoritmicamente permitirá você solucionar


problemas mais rápido com o auxílio do computador.
I Uma linguagem de programação é uma ferramenta para
dizer ao computador qual tarefa deve ser feita.

ECT2303 - Aula 02 4
Por que Aprender uma Linguagem de Programação?

I Pensar algoritmicamente permitirá você solucionar


problemas mais rápido com o auxílio do computador.
I Uma linguagem de programação é uma ferramenta para
dizer ao computador qual tarefa deve ser feita.
I Um engenheiro que sabe usar o computador pode realizar
tarefas de 10× a 100× mais rápido do que um que não
sabe.

ECT2303 - Aula 02 5
Baixo Nível x Alto Nível

I Linguagens de Baixo Nível: estão muito próximas do


modelo de hardware do computador.
I Uma mudança no hardware provavelmente impactaria os
programas escritos na linguagem.
I Exemplos: Assembly ou Linguagem de montagem
I Linguagens de Alto Nível: não possuem uma relação
direta com o hardware.
I Uma mudança no hardware não implica que os programas
escritos na linguagem devem ser modificados.
I Exemplos: C, C++, Java, Python, Lua, PHP

ECT2303 - Aula 02 6
Exemplo de Assembly

section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)


int 0x80 ;call kernel

section .data
msg db ’Hello, world!’, 0xa ;our dear string
len equ $ - msg ;length of our dear string

ECT2303 - Aula 02 7
Exemplo de C++ (Programa Olá Mundo)

01 #include <iostream>
02
03 using namespace std;
04
05 int main()
06 {
07 cout << "Olá, mundo" << endl;
08 return 0;
09 }

ECT2303 - Aula 02 8
Vantagens da Linguagem de Alto Nível

I Facilidade para programar o algoritmo.


I Portabilidade.
I Manutenção do código.

ECT2303 - Aula 02 9
Forma de Programa em C++

I Um programa em C++ possui a seguinte estrutura:


I Diretivas do pré-processador e do compilador
I Definições
I Protótipos de funções
I Funções
I Todo programa em C++ deve ter uma função main, que
será a primeira função a ser executada.

ECT2303 - Aula 02 10
Exemplo de Programa em C++
01 #include <iostream>
02 using namespace std;
03
04 /* Nenhuma definição de tipo */
05
06 int x;
07 /* Protótipo de Função */
08 int somaValores (int v1, int v2);
09 //Funções
10 int main() {
11 {
12 cout << "Soma = " << somaValores(4, 5) << endl;
13 return 0;
14 }
15
16 int somaValores (int v1, int v2) {
17 return v1 + v2;
18 }
ECT2303 - Aula 02 11
A diretiva #include

I #include é uma diretiva que permite incluir definições que


estão em outros arquivos e são usadas pelo nosso
programa
I #include <iostream> importa as funcionalidades de
entrada e saída de dados
I Nos compiladores antigos, é necessário usar a extensão
.h
I #include <iostream.h>

ECT2303 - Aula 02 12
Espaço de Nomes

I Usado na organização dos módulos da linguagem.


I Ao importar o espaço de nomes std podemos referenciar
diretamente todos os identificadores que estão na
biblioteca padrão (standard) de C++.
I Não é preciso importar o espaço de nomes em
compiladores antigos.

ECT2303 - Aula 02 13
Espaço de Nomes

I Você pode importar do espaço de nomes std somente os


identificadores que vai usar em seu programa:
01 #include <iostream>
02
03 using std::cout;
04 using std::endl;
05
06 int main()
07 {
08 cout << "Alô, mundo" << endl;
09 return 0;
10 }

ECT2303 - Aula 02 14
Espaço de Nomes

I Também é possível escrever explicitamente em qual


espaço de nomes um identificador está:
01 #include <iostream>
02
03 int main()
04 {
05 std::cout << "Alô, mundo" << std::endl;
06 return 0;
07 }

ECT2303 - Aula 02 15
A função main

I Todo programa C++ precisa ter uma função principal.


I Quando rodamos um programa, ele começa executando
os comandos no início da função main.
I A forma geral da função main deve ser:
01 int main ()
02 {
03 ...
04 return 0;
05 }

ECT2303 - Aula 02 16
Saída de Dados: cout e endl

I Vamos usar cout para imprimir os dados dos nossos


programas e endl para imprimir uma nova linha na saída
01 #include <iostream>
02
03 using std::cout;
04 using std::endl;
05
06 int main()
07 {
08 cout << "Alô, mundo" << endl;
09 return 0;
10 }

ECT2303 - Aula 02 17
Convenções

I Por questão de espaço, os programas apresentados no


quadro ou nos slides irão assumir que:
I Incluímos iostream.
I Importamos os identificadores necessários do espaço de
nomes std.
01 int main()
02 {
03 cout << "Alô, mundo" << endl;
04 return 0;
05 }

ECT2303 - Aula 02 18
Espaços

I Espaços em branco (espaços, tabulações, quebras de


linha) podem ser inseridos em qualquer parte de um
programa C++:
01 int main() {
02 cout << "Alô, mundo" << endl;
03
04 return 0;
05 }
I Espaçamento é muito importante para a legibilidade de um
programa:
01 int main() {
02 cout << "Alô, mundo"
03 << endl;
04 return 0 ;
05 }

ECT2303 - Aula 02 19
Comentários

I Assim como espaços em branco, comentários podem ser


inseridos em qualquer parte de um programa C++ e
podem melhorar a legibilidade de um programa.
I Usados para explicar ou para desabilitar trechos de um
programa.
I Existem dois tipos de comentários em C++:
I O comentário de linha, iniciado por //
I O comentário de múltiplas linhas, que começa com /* e
termina com */

ECT2303 - Aula 02 20
Comentários

01 //Programa que imprime "Olá, mundo"


02
03 int main()
04 {
05 cout << "Olá, mundo" /* Ainda falta a quebra
06 de linha */
07 << endl;
08 // cout << "Não vai imprimir" << endl;
09 return 0;
10 }

ECT2303 - Aula 02 21
Como o Programa Roda?

I O computador entende o que o nosso programa deve


fazer?

ECT2303 - Aula 02 22
Como o Programa Roda?

I O computador entende o que o nosso programa deve


fazer?
I Não
I O computador entende binário (0s e 1s)
I Duas estratégias para executar o código no computador:
I Interpretador
I Compilador

ECT2303 - Aula 02 23
Interpretador

I Mais fácil de implementar


I Não precisamos entender da máquina
I Execução do programa é mais lenta

ECT2303 - Aula 02 24
Compilador

I Mais difícil de implementar (gera código para a máquina)


I Execução do programa é mais eficiente

ECT2303 - Aula 02 25
Processo de Compilação

ECT2303 - Aula 02 26
Variáveis
I Uma variável associa um nome (identificador) a um
espaço da memória do computador onde podemos
guardar informação.
I Devemos associar um tipo a uma variável de acordo com
a informação que desejamos guardar:

01 int main () {
02 int x; // Variável inteira
03 double y; // Variável de ponto flutuante
04
05 x = 3.14;
06 y = 3.14;
07
08 cout << "x = " << x << " e y = " << y << endl;
09 return 0;
10 }

ECT2303 - Aula 02 27
Tipos de Variáveis

I char: representa um número inteiro que está associado a


um determinado caractere
I int: representa um número inteiro
I bool: representa um valor boolenao (verdadeiro ou falso)
I float: representa um número real com precisão simples
I double: representa um número real com precisão dupla
I void: usado em funções sem valor de retorno ou ponteiros
genéricos.

ECT2303 - Aula 02 28
Qual tipo usar?

I Qual é a importância de informar ao compilador o tipo de


informação que será armazenada na memória?

ECT2303 - Aula 02 29
Qual tipo usar?

I Qual é a importância de informar ao compilador o tipo de


informação que será armazenada na memória?
I Informações diferentes necessitam de espaços de
memória diferentes e são organizados de maneira
diferente.
I Escolher o tipo adequado para representar uma
informação é importante para a corretude do problema,
evitando erros de overflow e underflow, e pode economizar
ajudar a economizar memória.

ECT2303 - Aula 02 30
Até onde vai um tipo?

I Será que com o tipo inteiro podemos representar todos


os números do conjunto Z (o conjunto dos números
inteiros)?
I 1234 + 1 = 1235
I 15400 + 1 = 15401
I 2147483647 + 1 = 2147483648

ECT2303 - Aula 02 31
Até onde vai um tipo?

I Será que com o tipo inteiro podemos representar todos


os números do conjunto Z (o conjunto dos números
inteiros)?
I 1234 + 1 = 1235
I 15400 + 1 = 15401
I 2147483647 + 1 = 2147483648
01 int main () {
02 cout << 1234 + 1 << endl; //1235
03 cout << 15400 + 1 << endl; //15401
04 cout << 2147483647 + 1 << endl; //-2147483648
05 return 0;
06 }

ECT2303 - Aula 02 32
Um overflow pode sair caro

I Ariane 5:
https://www.youtube.com/watch?v=kYUrqdUyEpI
I Prejuízo de US$ 370 milhões!

ECT2303 - Aula 02 33
Outro exemplo curioso

I Quanto é 0, 1 + 0, 2?
01 int main () {
02 cout.precision(20);
03 cout.setf(ios::fixed, ios::floatfield);
04
05 cout << 0.1 + 0.2 << endl; //0.30000000000000004441
06 return 0;
07 }
I O tipo float representa valores que são uma aproximação
dos valores no conjunto R (o conjunto dos números reais)

ECT2303 - Aula 02 34
Tamanho dos Tipos de Variáveis em C++

Tipo Bytes Escala


bool 1 true e false (ou 0 e 1)
char 1 −128 a 127
int 4 ≈ −2 bilhões a ≈ 2 bilhões
float 4 ±3, 4 e−38 a ±3, 4 e38
double 8 ±1, 7 e−308 a ±1, 7 e308

ECT2303 - Aula 02 35
Exercício

I Escreva um programa que lê a idade de duas pessoas e


imprime a média da idade delas.

ECT2303 - Aula 02 36