Você está na página 1de 63

DCC205 - Programação Estruturada

Aula 02 - Noções de algoritmos.


Variáveis, atribuição e estrutura
básica programa.
Prof. Msc. Acauan C. Ribeiro
Roteiro aula
1. Algoritmos
a. Definição
b. Caracterização
2. Organização de um computador
3. Variáveis
4. Constantes
5. Atribuição
6. Estrutura de um Programa em C
7. Algumas Informações Extras
8. Exercício

2
Algoritmo - Conceito
“É uma sequência de passos que visa atingir um
objetivo bem definido” (FORBELLONE, 1999)

“ É uma sequencia finita de instrução cuja


execução, em tempo finito, resolve um
problema computacional, qualquer que seja
sua instância.” (SALVETTI, 1999)

“É a descrição de uma sequência de passos que


deve ser seguida para realização de uma tarefa”
(ASCÊNCIO, 1999)
3
Algoritmo: Definição
● Receita para resolver um determinado problema
● Ou seja, uma sequência finita de passos, precisos e
bem definidos, para a realização de uma tarefa, em
que detalhes e formalismos dependem do ‘leitor’
(abstração).

Exemplo de Algoritmo
Como você descreveria os passos para
preparar um macarrão instantâneo?

4
Algoritmo: Definição
Algoritmo do macarrão instantâneo:
1. ir até a cozinha.
2. procurar pelas embalagens de macarrão.
3. repetir, para cada embalagem:
a. ferver 2 copos de água em uma panela.
b. abrir a embalagem.
c. colocar o macarrão na panela e cozinhar por 3
minutos.
d. mexer para soltar os fios do macarrão.
e. retirar do fogo, deixar escorrer a água e juntar em
uma travessa.
4. acrescentar tempero pronto do macarrão
5. servir.

5
Algoritmo: Definição
Objetos de entrada:
● macarrão instantâneo.
● tempero pronto
● água
Objetos auxiliares:
● panela.
● travessa.
● fogão.
● cozinheiro.
Objeto de saída:
● macarrão cozido.
Objeto de controle:
● receita (algoritmo).
6
Algoritmo: Definição
Passo 1 - Formar uma cruz
no topo
Passo 2 - Organizar as
peças do canto superior
Passo 3 - Organizar as
peças no meio, formando 2ª
camada
Passo 4 - ...

SAÍDA
ENTRADA

7
Algoritmo: Definição

Um pouco de história
Os historiadores da palavra algoritmo encontraram
a origem no sobrenome, Al-Khwarizmi, do
matemático persa do século IX Mohamed ben
Musa, cujas obras foram traduzidas no ocidente
cristão no século XII, tendo uma delas recebido o
nome Algorithmi de numero indorum, sobre os
algoritmos usando o sistema de numeração
decimal (indiano).
Fonte: pt.wikipedia.org/wiki/Algoritmo.

8
Algoritmo: Definição
Um exemplo com números...

Problema:
Encontrar máximo divisor comum ou MDC entre
dois números inteiros positivos. Lembre-se de
que MDC é o maior número inteiro que é fator
de ambos os números. Assim, por exemplo,
como os divisores comuns entre 12 e 18 são 1,2,3
e 6, o MDC deles é igual à 6.

Ideia:
?????
9
Algoritmo: Definição
Um exemplo com números...

Ideia
Utilizar o algoritmo de Euclides, como nos
tempos do colégio :)

Mas, antes, uma pergunta:


Quais são nossos objetos auxiliares, de
entrada e saída para este problema?

10
Algoritmo: Definição
Um exemplo com números…

Objetos de entrada:
● dois números inteiros positivos M e N

Objetos auxiliares:
● lápis, papel, borracha e você

Objeto de saída:
● um números inteiro positivo Z com o resultado do
MDC de M e N.

11
Algoritmo: Definição
Um exemplo com números...

Algoritmo de Euclides

1. Se M é igual N, então MDC, Z, é M (ou N); pare!


2. Caso contrário:
a. se M é maior que N, então substitua M por
(M-N) e repita a partir do passo 1
b. se N é maior que M, então substitua N por
(N-M) e repita a partir do passo 1

E ai, funciona?
Como testamos isso?
12
Simulando o código

Simulação

● Eventualmente, simplesmente olhar o código


pode não trazer a tona o erro ou ser suficiente
para executar o código.
● Por isso, utiliza-se uma técnica de simulação do
código
○ Pode ser automatizada (utilizando um
debugger)
○ Pode ser feita manualmente, utilizando papel
e caneta (teste de mesa).
13
Simulando Manual

Simulando código
● Bem simples: Existem apenas dois passos.
○ “Reservar” os espaços para os nossos
objetos
○ “Executar” em sequência cada um dos
passos do algoritmo.

14
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Reservando espaço para os objetos
Após executar a linha 1.

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 10 6 ?
15
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Execução
Após executar a linha 3.a.

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 4 6 ?
16
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Execução
Após executar a linha 3.b.

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 4 2 ?
17
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Execução
Após executar a linha 3.a.

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 2 2 ?
18
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Execução
Após executar a linha 2.

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 2 2 2
19
Simulando
Algoritmo de Euclides
1. Defina M igual à 10 e N igual à 6.
2. Se M é igual N, então MDC, Z, é M (ou N); pare!
3. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e
repita a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e
repita a partir do passo 2
Execução
Opa! Terminamos...

Tipo inteiro positivo inteiro positivo inteiro positivo

Nome M N Z

Valor 2 2 2
20
Simulação Manual

Simulando código
Simule o algoritmo para M igual à 36 e N igual à 21.

21
Algoritmos: caracterização
Recapitulando...
● Sequência finita de passos, precisos e bem
definidos, para a resolução de um problema.

Isto implica que:


1. o número de passos é finito.
2. o texto deve ser uma receita metódica,
passo-a-passo, que inclui um passo inicial, um
passo final e o passo seguinte em qualquer
instante da execução.
3. cada passo contém uma instrução elementar
para o leitor. Por exemplo,

22
Algoritmos: caracterização
Recapitulando...
● Sequência finita de passos, precisos e bem
definidos, para a resolução de um problema.

Isto implica que:

1. o número de passos é finito.


2. o texto deve ser uma receita metódica, passo-a-passo,
que inclui um passo inicial, um passo final e o passo
seguinte em qualquer instante da execução.
3. cada passo contém uma instrução elementar para o
leitor. Por exemplo,

“... juntar dois ovos ...” é elementar para um cozinheiro


23
Algoritmos: caracterização
Recapitulando...
● Sequência finita de passos, precisos e bem
definidos, para a resolução de um problema.

Isto implica que:


1. o número de passos é finito.
2. o texto deve ser uma receita metódica, passo-a-passo,
que inclui um passo inicial, um passo final e o passo
seguinte em qualquer instante da execução.
3. cada passo contém uma instrução elementar para o
leitor. Por exemplo,

“... se hoje você puder provar que a cotação do dólar vai


subir 10% no próximo mês, compre $1.000,00 ...” não é
elementar para muitas pessoas. :) 24
Algoritmos: caracterização
A parte difícil de garantir
● partindo de objetos de entrada válidos, o
algoritmo termina.
● partindo de objetos de entrada inválidos, o
algoritmo pode produzir lixo e não terminar.

Exemplo
O algoritmo para o problema do MDC sempre
termina.
25
Simulando
Algoritmo de Euclides
1. Se M é igual N, então MDC, Z, é M (ou N); pare!
2. Caso contrário:
a. se M é maior que N, então substitua M por (M-N) e repita
a partir do passo 2
b. se N é maior que M, então substitua N por (N-M) e repita
a partir do passo 2

Exemplo
Quando M e N são positivos, temos que:
1. a cada execução M ou N sempre diminuem.
2. M e N sempre são positivos, pois
a. M - N é maior que 1, se M é maior que N;
b. N - M é maior que 1, se N é maior que M;
3. Não podemos passar de M igual à N igual à 1.
Logo, o algoritmo termina!! 26
Resolvendo problemas

Exercício
Considere a seguinte situação hipotética. Há três
pequenas caixas lacradas em uma sala. Você sabe
que elas estão cheias de ouro em pó, mas não
conhece a quantidade exata de cada uma delas.
● Como você faria para ordenar as tais caixas de
acordo com sua quantidade de ouro utilizando
uma balança de pratos?
● Quantas vezes a balança foi utilizada?

27
De algoritmos para programas
● Como transformar um algoritmo em linguagem
que o computador entenda?

● Deve ser capaz de expressar tudo o que o


computador pode fazer.

● O computador/compilador é o ‘leitor’ de nosso


‘algoritmo’.

● Não pode ser ambígua.

28
O que é um computador?
● Computador: o que computa, calculador,
calculista. (dicionário Houaiss).

● Os primeiros “computadores” eram humanos que


calculavam tabelas de logaritmos ou trajetórias
para canhões, seguindo procedimentos bem
definidos.

● Um computador é uma máquina que, a partir de


uma entrada, realiza cálculos matemáticos e
lógicos, gerando uma saída.

29
Programando computadores
● Como usuários, interagimos com os programas
de aplicação.

● Neste curso iremos descer nesta hierarquia, para


construirmos novos programas de aplicação.

● Estaremos interessados em algoritmos e em


linguagens de programação, particularmente a
linguagem C.

30
Linguagens de Programação

O que são linguagens de programação?


São padrões de codificação binária, com sintaxe e
semânticas específicas. Desta forma, capazes de
criar instruções para máquinas. Graças a esses
conjuntos de códigos e recursos, é possível criar
programas e sistemas para resolver os mais
diversos problemas do cotidiano.

31
Linguagens de Programação
Paradigma de Programação
É a forma utilizada para resolver um problema computacional.
Linguagens podem suportar mais de um paradigma (linguagens
multiparadigma), este a ser escolhido conforme o problema a ser
resolvido.

Paradigma Procedural ou Imperativo


Conceito de programação que define softwares como uma sequência de
comandos para o computador executar. O nome do paradigma, Imperativo, está
ligado ao tempo verbal, onde repassamos “ordens” ao computador: faça isso,
depois isso e depois aquilo.
Paradigma Orientado a Objetos
Paradigma mais popular atualmente, trata-se de um conceito de programação
baseado no uso de componentes individuais. Estes são chamados objetos e fazem
parte da composição do software.
32
Alto ou baixo nível
As linguagens também são classificadas
em níveis (alto ou baixo). Existem
aquelas em que a sintaxe se aproxima
a uma linguagem humana, por isso
entram na categoria das linguagens de
alto nível.
Por outro lado, existem as linguagens
que possuem sintaxe e semântica
próximas ao código de máquina,
portanto, classificadas como
linguagens de baixo nível.
33
Exemplos de Linguagens

34
Qual a melhor linguagem?
Não há! Entenda que não existe uma linguagem melhor
que outra, cada uma tem suas características que a
tornam mais adequada para cada projeto.

● Para desenvolvedores front-end: JavaScript


● Para desenvolvedores back-end: Java, PHP, C, C++,
Python, Ruby, C# e por aí vai
● Para desenvolvedores mobile: Java, Swift,
Objective-C e JavaScript
● Para Cientistas de Dados: Python ou R
● Para iniciantes: Python, Ruby ou C

35
Recapitulando...
Nos concentramos em alguns aspectos relacionados
com ‘conteúdo’ e aprendemos

● que um algoritmo, quando executado, associa


objetos de entrada com objetos de saída,
utilizando objetos auxiliares e de controle.

● a identificar estes objetos.

● a especificar nossas ‘receitas’ utilizando-os.

36
Forma Vs Conteúdo

● como estes objetos são definidos, especificados e


manipulados na linguagem C.

Os objetos de entrada e saída, tal como vimos


conceitualmente, são conhecidos nas linguagens de
programação como ‘variáveis’...

37
Variáveis
Definição
Variáveis são locais onde armazenamos valores. Toda
variável é caracterizada por um nome, que a identifica
em um programa e por um tipo, que determina o que
pode ser armazenado naquela variável.

● Durante a execução do programa, um pedacinho


da memória corresponde a variável.

38
Declarando uma variável
Declara-se da seguinte forma: <tipo_variável>
<nome_variável> ;

Exemplos corretos
● int soma;
● float preco_abacaxi;
● char resposta;

Exemplos incorretos
● soma int;
● float preco_abacaxi

39
Variáveis inteiras
Variáveis inteiras são utilizadas para armazenar valores
inteiros, em formato binário.
● Exemplo: 13 10 = 1101 2

Exemplos corretos
● int: Inteiro cujo comprimento depende do computador.
É o inteiro mais utilizado. Em computadores Pentium,
ocupa 32 bits e pode armazenar valores de
-2.147.483.648 a 2.147.483.647.

● unsigned int: Inteiro cujo comprimento depende do


computador e que armazena somente valores positivos.
Em computadores Pentium, ocupa 32 bits e pode
armazenar valores de 0 a 4.294.967.295.
40
Variáveis inteiras

Mais tipos inteiros em linguagem C


● long int: Inteiro que ocupa 32 bits e pode armazenar
valores de -2.147.483.648 a 2.147.483.647, independente
do computador.

● unsigned long int: Inteiro que ocupa 32 bits e pode


armazenar valores de 0 a 4.294.967.295, independente
do computador.

● short int: Inteiro que ocupa 16 bits e pode armazenar


valores de -32.768 a 32.767.

● unsigned short int: Inteiro que ocupa 16 bits e pode


armazenar valores de 0 a 65.535.
41
Variáveis de tipo caractere
Variáveis utilizadas para armazenar letras e outros
símbolos existentes em textos.
Exemplos: ‘a’ , ‘A’ , ‘8’ , ‘,’ , ‘ ’ , ‘$’ , ...

Tipo de caractere em linguagem C


● char: Tipo caracter. Guarda apenas um caracter.

42
Variáveis de tipo Ponto Flutuante
Armazenam valores reais, da seguinte forma de um
produto e uma potência:
(−1) sinal · mantissa · 2 expoente . (Norma IEEE754)

● Exemplo:
Binário: 0,5 = (−1) 0 · 1 · 2 −1

Decimal:

● Para o programador, funciona como se ele


armazenasse números na forma decimal.

● Possuem problemas de precisão (arredondamento).


43
Variáveis de tipo Ponto Flutuante

Tipo de ponto (vírgula) flutuante em C


● float: Utiliza 32 bits, sendo 1 para o sinal, 8 para o
expoente e 23 para a mantissa. Pode armazenar
valores de ±10 −38 a ±10 38

● double: Utiliza 64 bits, sendo 1 para o sinal, 11


para o expoente e 52 para a mantissa. Pode
armazenar valores de ±10 −308 a ±10 308

44
Regras para nomes de variáveis em C

● Deve começar com uma letra ou subcrito(_).

● Nunca pode começar com um número.

● Pode conter letras maiúsculas, minúsculas,


números e subscrito.

● Não se pode utilizar como parte do nome de uma


variável:
{ ( +- * / \ ; . , ?

● Letras maiúsculas e minúsculas são diferentes:


int c;
int C; 45
Regras para nomes de variáveis em C

As seguintes palavras já tem um significado na


linguagem C e por esse motivo não podem ser
utilizadas como nome de variáveis: (são palavras
reservadas)

46
Constantes
É um valor que não se altera durante a execução do
programa.

Existem 3 maneiras para criar constantes:


1. #define
2. [const] [tipo da variável][nome da variável]
3. enumerations
const int tamanho = 100;
Exemplos: const char tabul = '\t';
#define identificador valor const int codigo = 12440;
#define PI 3.14159265
#define NEWLINE "\n"
Com o prefixo "const", dizemos que a
variável não poderá alterar o seu
valor.
47
Comando de atribuição
● O comando de atribuição em C é o sinal =

● A sintaxe do uso do comando é:


variável = valor ;

Exemplos
int a;
float c;
a = 5;
c = 3,14159265358979323846;

48
Comando de atribuição
● O comando de atribuição pode conter expressões do lado
direito:
variável = expressão ;

● Atribuir um valor de uma expressão a uma variável


significa calcular o valor daquela expressão e copiar aquele
valor para uma determinada variável.

Exemplos
int a;
float c;
a = 5+5+10;
c = 3,14 + 8 - 9;
49
Comando de atribuição
No exemplo abaixo, a variável soma recebe o valor
calculado da expressão a+b

50
Atribuição
● O operador de atribuição é o sinal de igual (=)

À direita, deve
À esquerda do haver uma
operador de expressão cujo
atribuição deve valor será
existir somente o = calculado e
nome de uma armazenado na
variável. variável

51
Exemplos de atribuição
Sempre que uma variável for usada, ela deve ter sido
declarada antes, ou declarada e atribuído valor na mesma
linha.

int a, b;
float f, g;
char h = ‘g’;

a = 10;
b = -15;
f = 10.0;

a = b;
f = a;
a = (b+f+a);
52
Estrutura básica de um Programa em C

Declaração de bibliotecas Usadas

Declaração de variáveis

int main(){
Declaração de variáveis
Comandos

Comandos
return 0;
}

53
Estrutura básica de um Programa em C

54
Informações Extras: Constantes Inteiras

● Um número na forma decimal é escrito


normalmente
Ex: 10, 145, 1000000

● Um número na forma hexadecimal (base 16) é


precedido de 0x
Ex: 0xA (A 16 = 10), 0x100 (100 16 = 256)

● Um número na forma octal (base 8) é precedido


de 0
Ex: 010 (10 8 = 8)

55
Informações Extras: Constantes do tipo
ponto flutuante

● Em C, um número só é considerado ponto


flutuante ou fracionário se tiver uma parte “não
inteira”, mesmo que essa parte tenha valor zero.
Utilizamos o ponto para separação:
Ex: 10.0 , 5.2 , 3569.22565845

● Um número inteiro ou decimal seguido da letra e


e um número é interpretado como:
numero · 10 expoente

Ex: 2e2 = 2 · 10 2 = 200.0

56
Informações Extras: Caracter
● Caracteres são, na verdade, variáveis inteiras que
armazenam umnúmero associado ao símbolo. A
convenção normalmente adota é a tabela ASCII (American
Standard Code for Information Interchang), mas existem
outras (EBCDIC, Unicode etc.).

● char: Armazena um símbolo (no caso, o inteiro


correspondente).
Seu valor pode ir de -128 a 127.

● unsigned char: Armazena um símbolo (no caso, o inteiro


correspondente). Seu valor pode ir de 0 a 255.

● Toda constante do tipo caracter pode ser usada como


uma constante do tipo inteiro. Nesse caso, o valor atribuído
será o valor daquela letra na tabela ASCII. 57
58
Informações Extras: Obtendo o
tamanho de um tipo
O comando sizeof(tipo) retorna o tamanho, em
bytes, de um determinado tipo. (Um byte
corresponde a 8 bits).

printf ("%d", sizeof(int));


Escreve 4 na tela.

59
Exercício 2.1
Complete e/ou corrija o código abaixo.

60
Exercício 2.2
Escreva um programa que calcula o resultado das
frações:
● 2/3
● 5/2

Quantas variáveis você utilizaria? De quais tipos?

61
Exercício 2.3
Simule o código abaixo e encontre os problemas.

62
Exercício 2.4
Implemente o algoritmo de Euclides:

Algoritmo de Euclides

1. Se M é igual N, então MDC, Z, é M (ou N); pare!


2. Caso contrário:
a. se M é maior que N, então substitua M por
(M-N) e repita a partir do passo 1
b. se N é maior que M, então substitua N por
(N-M) e repita a partir do passo 1

63