Buscar

GCC101 - Aula 3b- Elementos basicos de algoritmos (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Elementos básicos de algoritmos 
(estruturas sequenciais)
Profa. Marluce Rodrigues Pereira
Elementos Básicos de um Algoritmo
Um algoritmo deve expressar os principais elementos de 
um programa, a saber:
● Dados (constantes e variáveis);
● Tipos de Dados;
● Operadores;
● Comandos;
● Funções;
● Comentários.
Dado
Um dado é uma informação que um algoritmo recebe ou 
manipula. 
Ex: nomes, datas, valores (preços, notas, etc.) e condições 
(verdadeiro e falso)
Variáveis
Em diversas situações estamos interessados em 
armazenar e processar informações, como o saldo de 
uma conta bancária, a nota de um aluno, etc.
Essas informações são valores que variam com o 
contexto (donde o nome variável) e ocupam um 
espaço da memória do computador.
Variáveis podem representar quantidades (ex: valores) 
ou qualidades (ex: positivo/negativo).
Exemplo de algoritmo
Início
 A, B, C
AA>B
B>C
A>C
B
Sim Sim
Sim
NãoNão
Não
C
 Fim
A← A+10
B← B+10
C← C+10
Problema: Encontre o maior de 3 números com valores diferentes, 
some 10 ao valor desse número e imprima-o. 
Exemplo de algoritmo- linguagem 
natural
Início
 A, B, C
AA>B
B>C
A>C
B
Sim Sim
Sim
NãoNão
Não
C
 Fim
A← A+10
B← B+10
C← C+10
Problema: Encontre o maior de 3 números com valores diferentes, 
some 10 ao valor desse número e imprima-o. 
A, B e C 
são 
dados de 
entrada
Exemplo de algoritmo - linguagem 
de programação
#include <iostream>
using namespace std;
int main()
{
 int A, B, C;
 cin >> A >> >> C;
 if (A>B) { 
 if (A>C) {
 A = A+10; 
 cout << A; 
 } else {
 C = C+10;
 cout << C;
 }
 
 } else { 
 
 
 //} else { //continuação
 if (B>C){
 B = B+10;
 cout << B;
 }else {
 C = C+10;
 cout << C;
 }
 }
 
 
 return 0;
}
A, B e C 
armazena
m os 
dados de 
entrada
Tipos de dados
Todo dado é de um certo tipo que define sua natureza (p. 
ex., um nome é diferente de um valor), identificando seu 
uso, e define as operações que podem ser realizadas com 
o dado.
Exemplo de algoritmo - linguagem 
de programação
#include <iostream>
using namespace std;
int main()
{
 int A, B, C;
 cin >> A, B, C;
 if (A>B) { 
 if (A>C) {
 A = A+10; 
 cout << A; 
 } else {
 C = C+10;
 cout << C;
 }
 
 } else { 
 
 
 //} else { //continuação
 if (B>C){
 B = B+10;
 cout << B;
 }else {
 C = C+10;
 cout << C;
 }
 }
 
 
 return 0;
}
A, B e C 
são do 
tipo 
inteiro 
(int)
Características de uma variável
● Ocupa espaço na memória
● Existe apenas em tempo de execução
● Possui uma identificação (nome)
● Armazena um dado
● Possui um tipo (uma forma de dado, ex.: inteiro, texto, 
número de ponto flutuante, etc.)
Tipos de variáveis
Em geral, linguagens de programação permitem a 
representação de diferentes tipos de dados:
● Inteiros
● Números de ponto flutuante (para representação de 
números decimais e aproximações de números reais)
● Caracteres
● Textos
Variáveis numéricas
Inteiro: representa um número inteiro dentro de uma 
determinada faixa.
Ex: -1, 0, 1, e 26 são dados inteiros.
Ponto flutuante: também chamado erroneamente de real, 
representa um número racional ou em ponto flutuante.
Ex: 1,2; 0,0; 26,4, 8x10-4, 3,145x1014 e -2,49 são dados em 
ponto flutuante.
Cuidados com variáveis numéricas
No projeto de um algoritmo devemos utilizar o tipo 
numérico mais adequado, tomando cuidado com o tipo de 
dado que será utilizado na resolução para não haver 
conflitos, por exemplo, a declaração de uma variável inteira 
para tratamento de valores não inteiros.
Variáveis alfanuméricas - i
Dados que representam valores alfanuméricos unitários 
são do tipo caracter.
Ex: 'A', 'a', '*'
Dados alfanuméricos também podem ser tratados pelo tipo 
caracter e incluem letras, algarismos e símbolos.
Ex: '1' é um caracter se considerarmos apenas o símbolo 
'1' e não o valor 1.
Variáveis alfanuméricas - ii
Dados que representam valores alfanuméricos são do tipo 
caracter (char) ou cadeia de caracteres (string)
Ex: 'A', 'a', '*' (char)
“Casa”, “F-15” (string)
Diferença: operações e tamanho de memória utilizado
Variáveis lógicas
Dados lógicos podem assumir apenas dois valores: 
verdadeiro ou falso.
São usados para expressar uma condição:
Ex: o fato de que 10 > 9 é verdadeiro;
 
São também chamados booleanos (referência à teoria de 
George Boole).
Resumindo...
char letra = ‘A’ [0001]
int numero = 12 [0002-0005]
string palavra = “oi” [0006-0008]
bool condicao = true [0009] 
Nem sempre!
0001 0002 0003 0004 0005 0006 0007 0008 0009
memória
Tipos primitivos
Linguagens de programação possuem em geral um 
conjunto de tipos básicos (também chamados de 
primitivos) e tipos adicionais que possibilitam a definição 
de variáveis compostas ou extensão dos tipos básicos.
Em geral, os tipos primitivos permitem a representação de 
valores numéricos e textuais.
Tipificação Forte x Fraca
Algumas linguagens exigem que os tipos das variáveis 
sejam especificados e eles não podem ser modificados 
(tipificação forte).
Algumas linguagens permitem que uma variável represente 
dados de diferentes tipos.
Ex. Tipificação Fraca
Python 3.4.3 on Linux
>>> x = 8
>>> y = 2
>>> z = x + y
>>> z
10
>>> y = "oi"
>>> x = "oi"
>>> z = x + y
>>> z
'oioi'
É possível mudar os 
tipos de dados 
representados!
Ex. Tipificação Forte
C++
// teste.cpp
# include <iostream>
using namespace std;
int main() {
 int x;
 cin >> x;
 cout << "o valor de x é: " << x << endl;
 x = "oi"; // ERRO!!!
 return 0;
}
Tipos fundamentais em C++
* depende do compilador
** do ponto de vista teórico, uma string não é tipo primitivo, pois em geral sua implementação utiliza composição de 
outros tipos, por exemplo um vetor de caracteres; consideraremos como tipo fundamental por questões práticas.
char caracteres (na verdade inteiros entre -128 a 127) - 1 byte (unidade básica de 
representação em memória)
int inteiros (geralmente entre -2.147.483.648 e 2.147.483.647)* - 4 bytes
unsigned 
int
naturais (geralmente entre 0 a 4.294.967.295)* - 4 bytes
bool true / false - 1 byte
float valores em ponto flutuante (geralmente entre 1,2x10-38 a 3,4x1038)* - 4 bytes
double valores em ponto flutuante (geralmente entre 2,2x10-308 a 1,8x10308)* - 8 bytes
string textos**
Declaração de variáveis em C++
Podem ser declaradas com ou sem valor inicial (inicialização):
nomeDoTipo nomeDaVariável = valor;
Exemplos:
float numerador;
float denominador = n + 1;
Tentar usar o valor de variáveis que nunca ganharam valor é um erro 
comum.
Constantes
Constantes são valores que não se modificam durante a execução do código e 
ocupam local reservado em memória.
Ex:
const int x = 4;
Nesse caso, o valor de x não pode ser modificado!
Identificadores
Exceto casos muito especiais, duas variáveis diferentes não podem ter 
o mesmo nome
C++ diferencia maiúsculas e minúsculas. Os seguintes identificadores 
são diferentes: job, joB, jOb, jOB, Job, JoB, JOb, JOB
Pode-se usar underscore, ou misturar maiúsculas e minúsculas para 
melhorar a legibilidade:
valor_funcao, resultado_operacao, etc.
valorFuncao, resultadoOperacao, etc.
Palavras Reservadas
Algumas palavras são reservadas, e não podem ser 
usadas como identificadores, ex:
if, main, break, int, float, for, while, etc.
Atribuição
Para que uma variável possa ser utilizada em um programa, ela deve ter 
valores associados a ela. Esta associação é denominada atribuição. Em 
pseudocódigo, a atribuição geralmente é representada pelo operador '←'. 
Ex:
idade ← 21
nome ← 'Antonio'
salario ← 915,00
salario_total ← salario
Exemplo de atribuição - i
idade
nome
salario_total
salario
memória
21
memória
idade ← 21
Obs: regiõesde memória 
com 
tamanhos 
diferentes!
Exemplo de atribuição - ii
21
Antonio
915,00
idade
nome
salario_total
salario
memória
21
memória
nome ← 'Antonio'
salario ← 915,00
Exemplo de atribuição - iii
21
Antonio
915,00
915,00
idade
nome
salario_total
salario
memória
21
Antonio
915,00
memória
salario_total ← salario
Exemplo de atribuição - iii
21
Antonio
915,00
915,00
idade
nome
salario_total
salario
memória
21
Antonio
915,00
memória
salario_total ← salario
Valor de salario_total é 
separado de salario (caso 
salario seja alterado, 
salario_total continuará com 
valor anterior!
Entrada e saída - i
Um algoritmo geralmente recebe dados a serem manipulados. Tais dados 
podem ser fornecidos pelo usuário através do teclado ou mouse, por exemplo, 
ou ainda tais dados podem ser buscados no disco rígido, recebidos através de 
uma rede ou outros meios. Os resultados podem ser enviados para o monitor 
ou para uma impressora, por exemplo.
O recebimento de dados por uma algoritmo e a apresentação dos resultados, 
independente dos dispositivos utilizados, são denominadas operações de 
Entrada e Saída.
Entrada e saída - ii
Função Parâmetros Resultado
Leia (x) Variável de qualquer tipo 
básico
O valor digitado no teclado vai ser 
armazenado em x
Escreva (x) Variável, constante ou 
qualquer expressão de 
qualquer tipo básico
O valor armazenado em x será 
apresentado no monitor
Operações básicas em C++
Entrada e Saída
[entrada]
cin >> var1 >> var2 >> var3;
[saída]
cout << “texto” << var1 << “texto” << var2; 
Atribuição
variável = valor;
var1 = var2 + var3;
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Inclui biblioteca 
básica de entrada e 
saída
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Espaço de nomes 
utilizados (escopo)
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Função principal
main()
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Uso de entrada e saída
(apenas saída)
Olá, Mundo!
#include <iostream>
using namespace std;
 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Término da main()
return 0 indica 
sucesso do programa
Expressões
Expressões são combinações de constantes, variáveis e operadores 
para produzir valores.
As expressões mais simples são as variáveis e constantes. 
Expressões compostas aplicam operadores (+,-,*,/, etc) a operandos 
(que são outras expressões).
Em a+(b*c) o operador + é aplicado em a e (b*c), que são expressões 
por si próprias
Operadores aritméticos
Podem ser binários ou unários. Operadores unários requerem apenas um 
operando:
+a; -a; 
Operadores binários requerem dois operandos: 
a+b; a*b; a/b; a%b;
O operador % retorna o resto da divisão inteira entre dois números:
i = 23;
j = i%2; // j = i mod 2
Precedência entre operadores
Como a expressão i+j*k será avaliada?
(i+j)*k ou i+(j*k)?
Operações com maior 
precedência são realizadas 
primeiro
i+j*k → i+(j*k)
-i*-j → (-i)*(-j)
+i+j/k → (+i)+(j/k)
Ordem:
1) Operadores Unários 
(+ e -)
2) Multiplicação, divisão e resto 
(*, / e %)
3) Soma e subtração 
(+ e -)
Associatividade
Operadores com a mesma precedência são avaliados de acordo com a 
associatividade.
Em operadores associativos à esquerda (+ e - binários, *, /, e %), as 
operações mais à esquerda são executadas primeiro.
a*b/c*d → ((a*b)/c)*d)
Em operadores associativos à direita (- e + unários), as operações 
mais à direita são executadas primeiro
-+i → -(+i)
Exemplos
 
Recomendação
Tentar decorar a precedência de operadores é uma má 
ideia.
Sempre use parênteses para garantir que a operação 
será executada na ordem desejada.
Inteiros e Ponto Flutuante
Com exceção do operador %, os demais permitem que os operandos 
sejam inteiros ou em ponto flutuante.
Quando inteiros e reais são misturados, o resultado será sempre 
ponto-flutuante:
9+2,5 terá valor 11,5
6,7/2 terá valor 3,35
Importante: a divisão de dois números inteiros resultará em um número 
inteiro!
7/2 terá valor 3
Atribuição Composta
Considere a atribuição
i = i + 2;
Esta operação pode ser simplificada
i += 2;
O operador += adiciona o valor à direita à variável da esquerda
Outros operadores compostos:
-=, *=, /=, %=
Incremento e decremento
Uma das operações mais comuns em programas é aumentar ou 
diminuir o valor de uma variável em uma unidade 
(i = i+1) ou (i = i-1).
Com o operador composto, isto fica:
i += 1; ou i -= 1;
O mais comum é usar os operadores ++ e --
i++; ou i--;
Biblioteca <cmath>
#include <cmath>
habilita os seguintes recursos:
Potenciação (pow(base, expoente), sqrt)
Trigonometria (cos, sin, tan, acos, asin, atan)
Arredondamento (ceil, floor)
Valor absoluto / módulo (abs)
π (M_PI)
http://www.cplusplus.com/reference/cmath/ 
http://www.cplusplus.com/reference/cmath/
Comentários
Comentários são textos que aparecem no programa, mas não são 
executados, servindo para que possamos colocar lembretes e outras 
informações no código. 
São utilizados para descrever um algoritmo ou parte dele.
São importantes para aumentar a legibilidade ou entendimento da 
solução expressa por um algoritmo.
Podem ser usados para indicar o significado das variáveis e 
constantes utilizadas.
Comentários em C++
Opção 1: começam com /* e terminam com */. 
/* Comentários 
 desse tipo 
 podem ter várias linhas.*/
Opção 2: começam com //. 
// Este tipo de comentário 
// termina automaticamente no fim da linha.
Comentários - Exemplo
#include <iostream>
/* Meu primeiro programa 
 de IALG */
// by Sicrano Fulano, 2015
using namespace std; 
int main() {
 cout << "Olá, Mundo!" << endl;
 return 0;
}
Linhas em branco e indentação
São utilizados aumentar a legibilidade de um algoritmo;
São utilizados para delimitar blocos de comandos, facilitando 
entendimento da lógica empregada;
Estruturas condicionais devem sempre ser indentadas para facilitar o 
entendimento de quais comandos serão executados por cada 
alternativa possível.
Exemplo - indentação
#include <iostream>
using namespace std; 
int main( ) {
 int x;
 cin >> x;
 cout << "Exemplo de indentação" << endl;
 if ( x > 10 ) {
 cout << "Outro exemplo de indentação" << endl;
 } 
 return 0;
}
Indentação: tabs ou espaços?
Indentação pode ser conseguida com uso de tabulação 
(tabs) ou espaços.
Maioria dos desenvolvedores preferem espaços, pois fica 
independente do editor. Esta é a recomendação dos 
professores.
Como configurar indentação no 
Geany
● Vá em “Documento” e selecione “Indentação Automática”;
● Em seguida, ainda em “Documento”, vá em “Tipo de Indentação” e 
selecione “Espaços”.
● Depois de selecionar o tipo de indentação, é necessário indicar o 
tamanho. Em “Documento”, vá em “Largura da Indentação” e 
escolha quantos espaços você quer que sejam usados para a 
indentação. Em geral, são utilizados quatro espaços.
● Caso tenha recebido documento com tabulação, você pode ainda 
em “Documento” utilizar “Substituir tabs por espaços”.
Dicas adicionais antes de começar
➢ Desenvolva o algoritmo em etapas;
➢ Procure usar nomes de variáveis significativos, auto-explicativos, mesmo 
que fiquem longos;
➢ Identifique se os passos individuais são suficientes independentes um dos 
outros;
➢ Revise o algoritmo em busca de possíveis erros lógicos e exceções que 
possam ser tratados.
Exemplo - calcular a média de 
duas notas
Algoritmo Calcula_Media
nome : cadeia de caracteres;
nota1, nota2, media : real;
Inicio
 escreva (“Digite o nome do aluno:”);
 leia (nome);
 escreva (“Digite as notas N1 e N2 do aluno:”);leia (nota1, nota2);
 media ← nota1 + nota2 / 2;
 escreva(“A média do aluno ”, nome, “ é ”, media);
Fim
Exemplo - calcular a média de 
duas notas
Algoritmo Calcula_Media
nome : cadeia de caracteres;
nota1, nota2, media : real;
Inicio
 escreva (“Digite o nome do aluno:”);
 leia (nome);
 escreva (“Digite as notas N1 e N2 do aluno:”);
 leia (nota1, nota2);
 media ← ( nota1 + nota2 ) / 2;
 escreva(“A média do aluno ”, nome, “ é ”, media);
Fim
Definição - Estrutura Sequencial
Pseudocódigo
comando 1;
comando 2;
comando 3;
...
comando N;
Fluxograma
comando 1
comando N
ESTRUTURA SEQUENCIAL
Passos executados em 
uma seqüência 
pré-definida.
comando 2
comando 3
Exemplo de estrutura sequencial
Calcular a área de 
um triângulo dados 
seus três lados.
programa AREA_TRIANGULO
A,B,C : inteiros; 
Inicio
 leia(A, B, C)
P ← (A + B + C)/2
AREA ← RAIZQ(P*(P−A)*(P−B)*(P−C))
escreva(AREA)
fim
Sobre este material
Material produzido coletivamente, principalmente pelos seguintes 
professores do DCC/UFLA:
● Janderson Rodrigo de Oliveira
● Joaquim Quinteiro Uchôa
● Juliana Galvani Greghi
● Renato Ramos da Silva
● Marluce Rodrigues Pereira
Inclui contribuições de outros professores do setor de Fundamentos de 
Programação do DCC/UFLA.
Esta obra está licenciado com uma Licença Creative Commons Atribuição 4.0 Internacional.
http://creativecommons.org/licenses/by/4.0/

Continue navegando