Você está na página 1de 123

Algoritmos

Prof. Rodrigo Sena


Algoritmos
Prof. Rodrigo Sena

Planejamentos

1º etapa: 2º etapa:

Conceitos de algoritmo Estruturas condicionais e de seleção


Tipos de dados e Variáveis Estruturas de repetição
Manipulação de dados Arranjos dimensionais
Estrutura de algoritmos
Fluxogramas Linguagem de programação:
Pseudo-código (Portugol) Desenvolvimento com a Linguagem C
Algoritmos
Prof. Rodrigo Sena

Planejamentos

Avaliações:

A1:
Prova escrita – 10,0

A2:
Atividade prática – 7,0
Atividades avulsas – 3,0
Algoritmos
Prof. Rodrigo Sena

Plano de aula

O plano de aula está disponivel no sistema do aluno


Algoritmos
Prof. Rodrigo Sena

O que é um algoritmo?
Algoritmos
Prof. Rodrigo Sena

O que é um algoritmo?

Conjunto finito de instruções organizadas em seqüência que descrevem a


solução de algum problema.

Instrução = Verbo imperativo + complemento


Algoritmos
Prof. Rodrigo Sena

Problema

Análise
Como construir
Algoritmos Solução Alterações

Teste de qualidade

Produto final
Algoritmos
Prof. Rodrigo Sena

Testes de qualidade

Perfeitamente definido

Não ambíguo

Eficaz

Eficiente
Análise de algoritmo

Algoritmo lavar cabelo

1 –Molhe o cabelo

2 – Coloque o xampu

3 - Massageie

4 - Enxágüe

5 - Repita
Algoritmos
Prof. Rodrigo Sena

Análise de algoritmo

Solução:

Algoritmo lavar cabelo_Modificado

1 –Molhe o cabelo
2 – Repita 2 vezes
2.1 – Coloque a quantidade correspondente a uma tampa de xampu no cabelo
2.2 – Massageie o cabelo até fazer espuma
2.3 – Enxágüe até tirar o xampu
Algoritmos
Prof. Rodrigo Sena

Mas afinal, para que serve um algoritmo?

 Algumas aplicações práticas de algoritmos:


 Algoritmos criptográficos: usados por exemplo na Internet, transações
bancárias, celular etc.
 Projeto Genoma Humano: identificar todos os 100.000 genes do DNA
humano;
 Algoritmos Inteligentes: como exemplo, algoritmos de busca na
internet;
 Algoritmos numéricos: Simuladores;
 Na indústria: alocar recursos com maior eficiência, localizar poços
subterrâneos, inserção, atualização e busca numa base de dados, etc.
Algoritmos
Prof. Rodrigo Sena

Tipos de algoritmo:

Descrição narrativa

Fluxograma

Pseudo-Código

Programa
Algoritmos
Prof. Rodrigo Sena

Descrição narrativa

Exemplo:

Receita culinária

Dissolva a gelatina em água quente.


Bata o leite condensado, o limão e a gelatina no liquidificador.
Depois de tudo misturado acrescente as claras de ovo em neve e
misture delicadamente.
Unte uma fôrma com um pouco de óleo e despeje a mistura.
Leve para gelar até que fique firme.
Algoritmos
Prof. Rodrigo Sena

Fluxograma

Ligou? Sim Fim


Inicio Ligue a TV

Não

Conecte a Não Está na


Tomada. Tomada?

Sim

Assistência
técnica
Algoritmos
Prof. Rodrigo Sena

Pseudo-Código
Portugol

Algoritmo SomaValor

declare VALOR1, VALOR2, SOMA: inteiro

escreva “Digite o primeiro valor: “


leia VALOR1
escreva “Digite o segundo valor: “
leia VALOR2
SOMA VALOR1 + VALOR2
escreva “A soma dos valores é: “
escreva SOMA

fim algoritmo
Algoritmos
Prof. Rodrigo Sena

Processamento de algoritmos

Processamento sequencial

Exemplo:

Algoritmo Média
1 – Some as duas primeiras notas
2 – Some o resultado da instrução 1 com a terceira nota
3 – Some o resultado da instrução 2 com a quarta nota
4 – Some o resultado da instrução 3 com a quinta nota
5 – Divida o resultado da instrução 4 por 5
Algoritmos
Prof. Rodrigo Sena

Processamento condicional

Exemplo:

Algoritmo Média
1 – Some as duas primeiras notas
2 – Some o resultado da instrução 1 com a terceira nota
3 – Some o resultado da instrução 2 com a quarta nota
4 – Some o resultado da instrução 3 com a quinta nota
5 – Divida o resultado da instrução 4 por 5
6 – Se o resultado da instrução 5 for igual ou maior que 7
7– Aprove o aluno
8 - Se o resultado da instrução 5 for menor que 7
9– Reprove o aluno

IDENTAÇÃO
Algoritmos
Prof. Rodrigo Sena

Processamento com repetição

Exemplo:

Algoritmo Média
1 – Para cada aluno da sala faça
2– Some as duas primeiras notas
3– Some o resultado da instrução 2 com a terceira nota
4– Some o resultado da instrução 3 com a quarta nota
5– Some o resultado da instrução 4 com a quinta nota
6– Divida o resultado da instrução 5 por 5
Algoritmos
Prof. Rodrigo Sena

Ciclo de vida de um algoritmo

Ao ser executado, um algoritmo possui as seguintes fases:

1. Coleta das informações de que o algoritmo necessita (Entrada);


2. Processamento;
3. Apresentação dos resultados (Saída).
Algoritmos
Prof. Rodrigo Sena

Exemplos de algoritmos
Fluxogramas

1- Em uma escola, a média final é dada pela média aritmética de três notas. E a
mesma tem o seguinte esquema de avaliação:

0 – 4.9 Aluno em recuperação


5 – 6.9 Aluno em prova final
7 – 10 Aluno aprovado por média

Desenvolva um algoritmo que a partir da entrada das três notas mostre a situação
do aluno.
No caso do aluno em recuperação e prova final, mostre também quanto o aluno irá
precisar para passar.
No caso da recuperação a nota necessária para passar é dada por 10 – Média + 2
e na prova final é dado por 10 – Média.
Algoritmos
Prof. Rodrigo Sena

Exemplos de algoritmos
Fluxogramas
Algoritmos
Prof. Rodrigo Sena
Exemplos de algoritmos
Fluxogramas
Suponha as entradas A, B e C, como sendo 12, 5 e 9, respectivamente.
Algoritmos
Prof. Rodrigo Sena
Exemplos de algoritmos
Fluxogramas
Suponha as entradas A, B e C, como sendo 12, 5 e 9, respectivamente.

Assinale a alternativa que apresenta, para o algoritmo


apresentado no fluxograma, os valores de a, b e c
resultantes ao final da execução do algoritmo.

•a) 12, 0, 1.
•b) 12, 5, 0.
•c) 3, 5, 11.
•d) 3, 5, 9.
•e) 12, 5, 11.
Algoritmos
Prof. Rodrigo Sena

Variáveis

São espaços de memória reservados para armazenar os dados que


serão manipulados pelo algoritmo.

Possuem um endereço, um nome intuitivo, um tipo e são atribuídos


valores que são os dados.

Exemplo de endereço de memória: 10CF, 2A00, 0200 (Hexadecimal)

endereço Variável

10CF NOME_ALUNO
2B00 FALTAS
0200 MEDIA
Algoritmos
Prof. Rodrigo Sena

Tipos de variáveis

Inteiro: Para os números inteiros (Positivos e negativos)

Real: Para os números reais (Positivos e negativos)


Caracter: Para um conjunto Alfanumérico

Lógico ou Booleano: Para valores lógicos (verdadeiro ou falso)

endereço Variável Tipo Conteúdo

10CF NOME_ALUNO Caracter Maria


2B00 FALTAS Inteiro 5
0200 MEDIA Real 8,2
Algoritmos
Prof. Rodrigo Sena

Variáveis lógicas (Boolean)

São dados primitivos que aceitam somente 2 valores.


É um dado binário.

Verdadeiro ou falso
Algoritmos
Prof. Rodrigo Sena

Atribuição de conteúdo

<Nome_da_variavel> Expressão

Exemplo 1: Exemplo 2:

Sejam 2 variáveis A e B Seja A do tipo Inteiro e B


do tipo inteiro: do tipo Lógico:
A 2
A 2
B 5,6
B A
A B
B B+3 B Verdadeiro
Qual é o valor de A e B ao Diga que atribuições serão concluídas
Final do algoritmo? Com sucesso e quais apresentarão erro.
Algoritmos
Prof. Rodrigo Sena

Conceito de constante

É um dado armazenado na memória que não pode ser


modificado durante a execução do código ou programa.

Exemplo:

PI = 3,14
Declaração de constantes
Algumas linguagens de programação possuem métodos específicos para
declarar e atribuir valores em constantes, mas em geral pode-se tratar
como uma variável.

Exemplo: Ao atribuir o valor PI 3.14, sabe-se que a variável PI não


poderá ser modificada, pois isso geraria inconsistências em qualquer
resultado que utilizasse PI.
Algoritmos
Prof. Rodrigo Sena

Declarações

Antes de qualquer algoritmo é preciso declarar, isto é, tornar


conhecido para o sistema os espaços de memória que serão
utilizados pelo programa e como identifica-los.

Cada linguagem possui sua sintaxe:

Var
a:inteiro
b,c: real

declare
a:inteiro
b,c: real
Algoritmos
Prof. Rodrigo Sena

Exercício:

Reescreva o algoritmo média utilizando constantes e variáveis.


Atribua valores para testar o algoritmo.

Algoritmo Média
1 – Some as duas primeiras notas
2 – Some o resultado da instrução 1 com a terceira nota
3 – Some o resultado da instrução 2 com a quarta nota
4 – Some o resultado da instrução 3 com a quinta nota
5 – Divida o resultado da instrução 4 por 5
Algoritmos
Prof. Rodrigo Sena

Possível resultado:

Algoritmo Média

VAR
NOTA1, NOTA2, NOTA3, NOTA4, NOTA5, MEDIA: Real
DIVIDE: inteiro (Variavel que não terá seu dado alterado)

DIVIDE 5

1 – Some NOTA1 e NOTA2


2 – Some o resultado da instrução 1 com a NOTA3
3 – Some o resultado da instrução 2 NOTA4
4 – Some o resultado da instrução 3 NOTA5
5 – Divida o resultado da instrução 4 por DIVIDE
Algoritmos
Prof. Rodrigo Sena

Expressões e operandos

Aritméticos Relacionais Lógicos

Adição + Igual = E
Subtração - Diferente <> OU
Multiplicação * Maior >
Divisão / Menor <
Exponenciação ^ Maior ou igual >=
Menor ou igual <=
Algoritmos
Prof. Rodrigo Sena

Metodologia para desenvolvimento de algoritmos

passo 1: leia cuidadosamente a especificação do problema até o final.


(fazer anotações)
passo 2: levantar e analisar todas as entradas citadas na especificação do
problema;
passo 3: levantar e analisar todas as saídas exigidas na especificação do problema;
passo 4: verificar se é necessário gerar valores internamente ao algoritmo e levantar
as variáveis necessárias e os valores iniciais de cada uma (comentar);
passo 5: levantar e analisar todas as transformações necessárias para, dadas as
entradas e valores gerados internamente, produzir as saídas especificadas (comentar);
passo 6: testar cada passo do algoritmo, verificando se as transformações
Intermediárias executadas estão conduzindo aos objetivos desejados. Utilizar, sempre
que possível, valores de teste que permitam prever os resultados a priori;
Algoritmos
Prof. Rodrigo Sena

Regras básicas da construção de algoritmos

1. Algoritmos devem ser feitos para serem lidos por seres humanos.

2. Procure incorporar comentários no algoritmo no momento de sua construção


sempre dando significado aos comentários.
3. Use comentários no prólogo para informações gerais sobre o algoritmo.

4. Escolha nomes de variáveis que sejam significativos.

5. Procure alinhar os comandos de acordo com o nível a que pertençam (Identação).

6. Utilize espaços em branco e parênteses para melhorar a legibilidade e evitar erros.


Algoritmos
Prof. Rodrigo Sena

Algoritmo Genérico (Pseudocódigo)

Portugol

Pseudocódigo é uma forma genérica de escrever um


algoritmo, utilizando uma linguagem simples (nativa a quem o
escreve, de forma a ser entendida por qualquer pessoa) sem
necessidade de conhecer a sintaxe de nenhuma linguagem
de programação.
Algoritmos
Prof. Rodrigo Sena

Estrutura de um algoritmo (Portugol)

algoritmo MeuAlgoritmo

var
{Declaração de variáveis}

inicio

{Instruções}

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Saída de dados

É a apresentação dos dados em um dispositivo de saída


(Monitor, impressora, etc.)

A saída de dados pode ser:

Uma informação ao usuário


Uma solicitação de dados ou pergunta ao usuário
O resultado de algum problema

Usa-se a instrução escreva:

escreva (variável) - Será exibido na tela, o dado armazenado dentro da variável.


escreva (“Informação”) – Será exibida na tela, a palavra ou frase entre aspas.
Algoritmos
Prof. Rodrigo Sena

Saída de dados

A instrução escreva pode ser estruturada para exibir múltiplos dados:

Suponha que se deseja escrever uma informação ao usuário seguida


de um dado que está armazenado em uma variável.

PI 3.14

escreva (“O valor de PI é: “, PI)

Separando por virgulas, pode-se criar quantas seções que achar


necessário, misturando informação com dados em variáveis.
Algoritmos
Prof. Rodrigo Sena

Saída de dados

Exemplo:

Construa o seu primeiro algoritmo.


Ao ser executado, exibirá a mensagem “Alô, mundo!” na tela
Algoritmos
Prof. Rodrigo Sena

Saída de dados

Exemplo:

Construa o seu primeiro algoritmo.


Ao ser executado, exibirá a mensagem “Alô, mundo!” na tela

Algoritmo “alomundo”

Var

Inicio

escreva (“Alô, mundo!”)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Entrada de dados

Para que existam dados para ser manipulados, é preciso que o usuário
informa algum valor que deverá ser armazenado nas variáveis.

Esse processo é executado por meio da instrução leia.

A instrução leia terá como parâmetro, simplesmente, a variável que deverá


ser preenchida.
Quando o algoritmo executa uma instrução leia, ele interrompe seu fluxo e
apresenta um prompt na tela, aguardando que o usuário digite algum dado e
pressiona ENTER. Assim o dado será inserido na variável em questão.

Sintaxe: leia (variável)

Ex.: leia (NOME)


Algoritmos
Prof. Rodrigo Sena

Muitas vezes as instruções de entrada e saída serão utilizadas em conjunto


durante a entrada de dados, pois é preciso informar ao usuário o que ele
precisa digitar quando a instrução leia for executada.

Ex.:
escreva (“Digite seu nome: “)
leia (NOME)

Aprimore o seu primeiro algoritmo de forma que ele solicite seu nome e a
saída seja:

Alô, <seu nome>!


Alô, mundo!
Algoritmos
Prof. Rodrigo Sena

Algoritmo “alomundo”

Var
NOME: caracter

Inicio

escreva (“Digite seu nome: “)


leia (NOME)

escreva (“Alô, “, NOME, “!”)


escreva (“Alô, mundo!”)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Para que a saída seja organizada em linhas diferentes, pode-se usar uma
variação da instrução escreva. O escreval.

Essa instrução irá aplicar uma quebra de linha ao término da sua execução.
Dessa forma, pode-se reescrever o algoritmo assim:

Algoritmo “alomundo”

Var
NOME: caracter

Inicio

escreva (“Digite seu nome: “) É possível usar o escreval


leia (NOME) para deixar linhas em
branco na sua saída:
escreval (“Alô, “, NOME, “!”)
escreva (“Alô, mundo!”)
escreval (“ “)
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Comentários

Os recurso de comentários é bastante recomendado e utilizado para deixar


informações extras sobre o seu algoritmo.

Pode dar informações sobre nome do autor, data de criação, empresa ou


instituição, etc.
Pode ainda deixar informações no fluxo do código para dar informações aos
programadores ou qualquer um que leia o algoritmo.
Informações mais técnicas sobre variáveis ou sobre o funcionamento do
algoritmo, etc.
Pode ser designado em qualquer parte do algoritmo.

Para criar um comentário, basta usar o símbolo //


Algoritmos
Prof. Rodrigo Sena

Exemplo

Aproveite o exemplo da média e construa um algoritmo em pseudo-código para


que sejam solicitadas 2 notas de alunos e seja exibida como saída a média
dessas 2 notas.

Utilize comentários no seu código.


Algoritmos
Prof. Rodrigo Sena

algoritmo MediaAluno
Solução:
var
NOTA1,NOTA2, MEDIA: real
DIVIDE: inteiro

inicio
DIVIDE 2
escreva (“Digite a primeira nota: “)
leia (NOTA1)
escreva (“Digite a segunda nota: “)
leia (NOTA2)
MEDIA  (NOTA1 + NOTA2) / DIVIDE
escreva (“A média do aluno é: “, MEDIA)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

algoritmo MediaAluno
// Algoritmo que calcula a média de 2 notas de um aluno
// Autor: Rodrigo Sena

var
NOTA1,NOTA2, MEDIA: real // Variáveis que armazenam as notas e o resultado
DIVIDE: inteiro // variável com o fator de divisão para calcular a média

inicio
DIVIDE  2
escreva (“Digite a primeira nota: “)
leia (NOTA1) // Solicita a NOTA1 ao usuário
escreva (“Digite a segunda nota: “)
leia (NOTA2) // Solicita a NOTA2 ao usuário
MEDIA  (NOTA1 + NOTA2) / DIVIDE // Realiza o cálculo da média
escreva (“A média do aluno é: “, MEDIA) // Apresentação do resultado

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

algoritmo MediaAluno
Otimização de variáveis
var
NOTA1,NOTA2: real
DIVIDE: inteiro

inicio
DIVIDE 2
escreva (“Digite a primeira nota: “)
leia (NOTA1)
escreva (“Digite a segunda nota: “)
leia (NOTA2)
NOTA1  (NOTA1 + NOTA2) / DIVIDE
escreva (“A média do aluno é: “, NOTA1)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Exercício

Faça um algoritmo que leia uma temperatura em Celsius, calcule e escreva


essa temperatura em Fahrenheit.

Sabe-se que F = (C * 1.8) + 32


Algoritmos
Prof. Rodrigo Sena

algoritmo ConverteTemperatura

var
C, F: real

inicio

Escreva (“Informe a temperatura em Celsius: “)


Leia ( C )
F  (C * 1.8) + 32

Escreva (“A temperatura em Fahrenheit é: “, F)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Modularização de algoritmos
Desvios sequenciais - Procedimentos e funções

São desvios sequenciais, ou chamadas de rotinas previamente criadas


que serão executadas como se fizessem parte da sequencia.
São como sub-programas executados dentro de um programa principal.

Se retornarem algum valor ou dado, são chamadas de Funções.


Caso contrário, são procedimentos.

Para que as funções retornem algum valor, é necessário que seja


informado algum dado que será utilizado para os cálculos realizados na
execução da função. Esses dados são fornecidos através da Passagem
de parametros.
Algoritmos
Prof. Rodrigo Sena

Modularização de algoritmos
Desvios sequenciais – Fluxo de execução
Algoritmos
Prof. Rodrigo Sena

algoritmo "Teste_procedimento"
Procedimentos
var
Não retornam valor, executando
simplesmente alguma tarefa. procedimento Msgfinal

No entanto ao utilizar variáveis var

globais, é possível realizar inicio


cálculos utilizando
proceidmentos. escreva ("isso é um teste")

fimprocedimento

inicio

Msgfinal

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Escopo de variáveis

Ao utilizar uma linguagem de programação procedural, ou seja, que


permita a criação de procedimentos e funções, as váriaveis poderão ser
Globais ou Locais.

Isso afetará se a váriavel será visivel em todo o código ou só em


determinada rotina.
Curso de graduação em Sistemas de Informação
Paradigmas de linguagens
Prof. Rodrigo Sena

Escopo de variáveis

Assembly Fortran Pascal, C


Algoritmos
Prof. Rodrigo Sena algoritmo "Teste_funcao"

var
valor1,valor2,resfinal:real

Funções funcao soma (a,b:real):real


var
result:real
Dados são enviados por inicio
passagem de parametro e a
função retorna um valor. result <- a + b
retorne result

Trabalham com variáveis locais. fimfuncao

inicio

escreva ("digite o primeiro valor: ")


leia (valor1)
escreva ("digite o segundo valor: ")
leia (valor2)

resfinal <- soma(valor1,valor2)

escreva (resfinal)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Estruturas condicionais

A ação a ser executada dependerá de uma inspeção ou teste.

Notação:

se <Condição> entao

<Ação>

fimse
Algoritmos
Prof. Rodrigo Sena

Estrutura condicional simples:

se A > B então

AA–B

fim se
Algoritmos
Prof. Rodrigo Sena

Estrutura condicional composta:

se A > B entao

AA–B

senao

AB-A

fim se
Algoritmos
Prof. Rodrigo Sena

Desenvolva um algoritmo que leia a idade


Exemplo de aplicação:
de uma pessoa e informe ao usuário se ele
nasceu antes ou depois do ano 2000.

algoritmo SUA_IDADE
Var
IDADE, NASC: inteiro
Inicio
escreva ( “Digite a sua idade: “)
leia (IDADE)
NASC  2016 – IDADE
se NASC < 2000 entao
escreva ( “Você nasceu antes do ano 2000”)
senao
escreva ( “Você nasceu depois do ano 2000”)
fimse
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Desenvolva um algoritmo que leia a idade


Exemplo de aplicação:
de uma pessoa e informe ao usuário se ele
nasceu antes ou depois do ano 2000.

algoritmo SUA_IDADE
Var Que problema
IDADE, NASC: inteiro pode-se
Inicio observar no
escreva ( “Digite a sua idade: “) resultado desse
leia (IDADE) algoritmo?
NASC  2016 – IDADE
se NASC < 2000 entao
escreva ( “Você nasceu antes do ano 2000”)
senao
escreva ( “Você nasceu depois do ano 2000”)
fimse
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Exercício:

Faça um algoritmo que leia 2 notas de um aluno, calcule a média aritmética


e informe ao usuário a média final e o status de aprovação de acordo com as
regras abaixo:

O aluno teve média acima ou igual a 7.0: Aprovado


O aluno teve média abaixo de 7.0: Reprovado
Algoritmos
Prof. Rodrigo Sena

algoritmo MediaAluno
var
NOTA1,NOTA2, MEDIA: real
inicio
escreva (“Digite a primeira nota: “)
leia (NOTA1)
escreva (“Digite a segunda nota: “)
leia (NOTA2)
MEDIA  (NOTA1 + NOTA2) / 2
escreva (“A média do aluno é: “, MEDIA)
se MEDIA >= 7 entao
escreva ( “Aluno Aprovado.”)
senao
escreva ( “Aluno Reprovado.”)
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena
Estruturas condicionais com
conectivos lógicos
Variáveis lógicas (Boolean)
Cálculo proposicional
As expressões com variáveis lógicas se valem do cálculo
proposicional para determinar se uma expressão é válida.

Lógica dedutiva

 Todo metal é dilatado pelo calor. (Premissa maior)


Ora, a prata é um metal. (Premissa menor)
Logo, a prata é dilatada pelo calor. (Conclusão)

 Todo brasileiro é sul-americano. (Premissa maior)


Ora, todo paulista é brasileiro. (Premissa menor)
Logo, todo paulista é sul-americano. (Conclusão)

Silogismos
Algoritmos
Prof. Rodrigo Sena

Variáveis lógicas (Boolean)


Cálculo proposicional

O Cálculo proposicional se vale de um sistema formal composto


de proposições que podem ser formadas por proposições
atômicas ligadas por conectivos lógicos

Para isso podemos utilizar as Tabelas-verdade


Algoritmos
Prof. Rodrigo Sena

Tabela verdade e Conectivos lógicos

Negação Conjunção (E) Disjunção (OU)


A ~A A B A^B A B AvB
V F V V V V V V
F V V F F V F V
F V F F V V
F F F F F F
Algoritmos
Prof. Rodrigo Sena

Estruturas condicionais com conectivos lógicos

se (Metal é dilatado pelo calor) E (Prata é metal) então


Prata é dilatado pelo calor
fimse

Aplicando a notação de variáveis:

se (TEMPERATURA = calor) E (ELEMENTO = Metal) então


ELEMENTO = Dilatado
fimse
Algoritmos
Prof. Rodrigo Sena

Estruturas condicionais com conectivos lógicos

Muito útil para determinar intervalos:

se (IDADE < 18) então


FXETARIA = Menor
fimse

se (IDADE >= 18) E (IDADE < 65) então


FXETARIA = Adulto
fimse

se (IDADE >= 65) então


FXETARIA = Idoso
fimse
Algoritmos
Prof. Rodrigo Sena

Comando de seleção Múltipla

Estrutura condicional onde possibilita ao usuário uma escolha de opção.

Escolha <variável>
Estrutura:
Caso <condição>,<condição>...
<ação a ser realizada>

Caso <condição>,<condição>...
<ação a ser realizada>

Outrocaso
<ação a ser realizada>

fimescolha
Algoritmos
Prof. Rodrigo Sena

Comando de seleção Múltipla

Calculadora simples
Digite o primeiro valor:
Digite o segundo valor:
1 – Somar
2 – Subtrair
3 – Multiplicar
4 – Dividir

Escolha a operação:
Resultado:
Algoritmos
Prof. Rodrigo Sena

Comando de seleção Múltipla

Algoritmo Calculadora //Segundo quadro:


VAR //Montar menu
Valor1, Valor2, Result: real
OP: inteiro Escreva (“1 – Somar”)
Escreva (“2 – Subtrair”)
inicio Escreva (“3 – Multiplicar”)
//Primeiro quadro - Coletar entradas Escreva (“4- Dividir”)
escreva (“Digite o primeiro valor: ”)
leia (Valor1) //Coletar entrada – Operação
escreva (“Digite o segundo valor: ”)
leia (Valor2) Escreva (“Escolha a operação: “)
Leia (OP)
Algoritmos
Prof. Rodrigo Sena

Comando de seleção Múltipla

Escolha OP
Caso 1
Result  Valor1 + Valor2

Caso 2
Result  Valor1 - Valor2

Caso 3
Result  Valor1 * Valor2

Caso 4
Result  Valor2 / Valor3

outrocaso
escreva (“Valor invalido”)
Fimescolha
Fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Comando de seleção Múltipla

O valor da variavel de controle pode ser de qualquer tipo.


Será feita uma comparação entre o que foi digitado como
opção e os casos descritos dentro da estrutura Escolha.

Cada caso pode possuir ainda multiplas possibilidades de


comparação em suas condições, reduzindo a complexidade
da estrutura condicional.
Algoritmos
Prof. Rodrigo Sena

Usando o comando de seleção múltipla, faça um algoritmo que


Exemplo:
leia o nome de um time de futebol e diga de que estado ele é.
Obs: Use somente 4 times de 2 estados.

algoritmo "Times"
var time: caractere
inicio
escreva ("Entre com o nome de um time de futebol: ")
leia (time)
escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
escreval ("É um time carioca.")
caso "São Paulo", "Palmeiras", "Santos", "Corínthians"
escreval ("É um time paulista.")
outrocaso
escreval ("É de outro estado.")
fimescolha
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Exercício: algoritmo “Estados"


var
Faça um algoritmo que leia a sigla sigla: caractere
do estado de origem da pessoa e inicio
diga se ela é carioca (RJ), se ela escreva ("Entre com a sigla do seu estado: ")
é paulista (SP), se ela é mineira leia (sigla)
(MG) ou se é de outro estado. escolha sigla
caso “RJ”
escreval (“Você é carioca.")
caso “SP"
escreval (“Você é paulista.")
caso “MG"
escreval (“Você é mineiro.")
outrocaso
escreval (“Você é de outro estado.")
fimescolha
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Vetores

Estrutura que armazena dados que possuem semelhanças em tipo.


Estruturas de dados homogêneas.

Exemplo: Uma lista de médias de alunos de uma mesma classe

Declaração de variável: <NOME>: vetor [x..y] de tipo

Os dados são armazenados de acordo com uma posição do vetor

pos 0 1 2 3 4 5
MEDIA: vetor[0..5] de real
Dados 5.6 6.0 7.5 10.0 8.5 6.8
Algoritmos
Prof. Rodrigo Sena

Matrizes
Estrutura que armazena dados de um mesmo tipo, onde são necessários
Mais de um parâmetro ou índice para identificar um dado em particular.
Estrutura de dados homogênea multidimensional

Exemplo: Quantidade de produtos armazenados em um determinado número de


armazéns de uma empresa.

Declaração de variável: <NOME>: vetor [x..xn,y..yn] de tipo

Armazém Armazém Armazém


Os dados são armazenados
1 2 3
como se fosse uma tabela
Produto 1

Produto 2
DEPOSITO: vetor[1..3,1..3] de inteiro
Produto 3
Algoritmos
Prof. Rodrigo Sena

Estruturas de repetição
Cria um ciclo de repetição de um bloco de instruções até que uma determinada
condição seja cumprida.

Podem ser de 3 tipos:

Repetição com teste no inicio

Repetição com teste no final

Repetição com variável de controle


Algoritmos
Prof. Rodrigo Sena

Repetição com teste no início

Exemplo:
Estrutura:
algoritmo "Números de 1 a 10"
var
enquanto <condição> faca j: inteiro
inicio
<Seqüência de comandos>
j1
fimenquanto
enquanto j <= 10 faca
escreva (j:3)
jj+1
fimenquanto

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Exercício: Faça um algoritmo que preencha um vetor de caracteres com


10 nomes de alunos (Somente o primeiro nome) usando o enquanto.

algoritmo "NOME_ALUNO"

var
NOME:vetor[1..10] de caracter
I:inteiro
inicio
I1
enquanto I<=10 faca
escreval ("Digite o nome: ")
leia(NOME[i])
I  I+1
fimenquanto
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

algoritmo "NOME_ALUNO"
var
NOME:vetor[1..10] de caracter
I:inteiro

inicio
I<-1
enquanto I<=10 faca
escreval ("Digite o nome: ")
leia(NOME[I])
I I+1
fimenquanto
I1
escreval ("Alunos:")
enquanto I<=10 faca
escreval (NOME[I])
I I+1
fimenquanto
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Repetição com teste no final

Exemplo:
Estrutura:
algoritmo "Números de 1 a 10"
var
repita j: inteiro
inicio
<Seqüência de comandos>
j1
ate <condição>
repita
escreva (j:3)
jj+1
ate j > 10

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Exercício: Faça um algoritmo que preencha um vetor de caracteres com


10 nomes de alunos (Somente o primeiro nome) usando o repita.

algoritmo "NOME_ALUNO"

var
NOME:vetor[1..10] de caracter
I:inteiro
inicio
I1
repita
escreval ("Digite o nome: ")
leia(NOME[i])
I  I+1
ate j>10
fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Repetição com variável de controle

Estrutura:
para <variável> de <valor-inicial> ate <valor-limite> passo <incremento> faca

<seqüência-de-comandos>
algoritmo "Números de 1 a 10"
fimpara var
j: inteiro
inicio
Exemplo:
para j de 1 ate 10 faca
escreva (j:3)
fimpara

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Faça um algoritmo que escreva os números pares contidos


Exemplo 2:
entre 1 e 10.

algoritmo "Números pares de 1 a 10"


var
j: inteiro
inicio

para j de 0 ate 10 passo 2 faca


escreva (j:3)
fimpara

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

Faça um algoritmo que escreva os números de 1 a 10 em


Exemplo 3:
ordem decrescente.

algoritmo "Números 10 a 1"


var
j: inteiro
inicio

para j de 10 ate 1 passo -1 faca


escreva (j:3)
fimpara

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

algoritmo "Número Maior"


var
Exemplo 4: j, num, maior: inteiro

inicio
Faça um algoritmo
Maior <- 0
que leia 5 números e
informe qual foi o para i de 1 ate 5 faca
maior.
escreva (“Digite um número: “)
leia (Num)

Se (num > Maior) entao


Maior <- Num
fimse

fimpara

escreva (“Número maior: “, maior)

fimalgoritmo
Algoritmos
Prof. Rodrigo Sena

A linguagem C

C é uma linguagem de programação compilada de propósito


geral, estruturada, imperativa, procedural, padronizada pela ISO e criada em 1972,
por Dennis Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional Unix
que foi originalmente escrito em Assembly).

A linguagem foi chamada "C", porque suas características foram obtidas a partir
de uma linguagem anteriormente chamado de " B", que de acordo com a
Ken Thompson era versão reduzida da linguagem de programação BCPL.

Mais informações:
http://pt.wikipedia.org/wiki/C_%28linguagem_de_programa%C3%A7%C3%A3o%29
Algoritmos
Prof. Rodrigo Sena

A linguagem C

A estrutura básica de programação utilizando a linguagem C, segue um


paradigma semelhante à utilizada no portugol, pois ambas seguem a
técnica de programação estruturada.

As diferenças estão nas sintaxes, que vão variar de acordo com a


linguagem utilizada.
Algoritmos
Prof. Rodrigo Sena

A linguagem C

Bibliotecas

Para que a linguagem realize o processamento, é necessário que ele reconheça


os comandos que estão expressos nas instruções.

A linguagem C não possui por padrão palavras-chave que representem esses


comandos.

Para que ele traduza as instruções precisa buscar o significado dos comandos
para que o código seja compilado e executado.

Isso é realizado através da Biblioteca padrão do C (LibC)


Algoritmos
Prof. Rodrigo Sena

A linguagem C

Bibliotecas

Antes de iniciar o código, é necessário carregar na memória o cabeçalho da


biblioteca que contem as palavras-chave necessárias para que as instruções
possam ser executadas.

Para isso é utilizado o seguinte comando:

Sintaxe: #include <nome_biblio>

Exemplo: #include <stdio.h>


Algoritmos
Prof. Rodrigo Sena

Alguns exemplos de Bibliotecas

Funções matemáticas comuns em


<math.h>
computação.

<stdio.h> Manipulação de entrada/saída.

Diversas operações, incluindo


conversão, geração de números
<stdlib.h> pseudo-aleatórios, alocação de
memória, controle de processo, sinais,
busca e ordenação.

<string.h> Tratamento de cadeia de caracteres.

Conversão de tipos de dado de data e


<time.h>
horário.
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Principais comandos
Comparações com o portugol

Tipos de dados: Em portugol, os dados são declarados em uma seção específica


e sempre na sequencia VARIAVEL: TIPO.
Em C, as variáveis são declaradas junto com as instruções, podendo ser
declaradas no meio do código, desde que antes de serem utilizadas. A sintaxe
tambem é diferente.

Sintaxe: Tipo Nome_VAR;

Exemplo: int NOTA1;

Inteiro: int As cadeias de caracteres


Real: float ou double Requerem uma atenção especial
Caracter: char
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Principais comandos
Comparações com o portugol

Os dados de caractere são do tipo Char, mas esse tipo, armazena um único
caractere.
Para armazenar uma palavra é preciso criar uma cadeia de caracteres (Strings).

Funciona como se fosse um arranjo unidimensional (Vetor).

Sintaxe declaração: Tipo Nome_VAR [tamanho];


Exemplo: char NOME[20];
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Principais comandos
Comparações com o portugol

Saída de dados: Realiza a função do comando ‘escreva (“informação”, VAR)’

Sintaxe: printf (“informação +FLAG”, VAR);

Exemplo: printf (“A media do aluno foi %f”, MEDIA);

A FLAG é um símbolo que irá representar o dado inserido na varíavel. Dessa


forma o valor será inserido no local que a flag estiver posicionada.
Para cada tipo de dado, existe uma flag diferente.

%d: Inteiro Para realizar a função do escreval,


%f: Float utiliza-se o ‘\n’ no final da instrução.
%c: Caracter Printf (“ir para a proxima linha.\n”)
%s: Strings
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Principais comandos
Comparações com o portugol

Estrada de dados: Realiza a função do comando ‘leia (VAR)’

Sintaxe: Scanf (“FLAG”, &VAR);

Exemplo: Scanf (“%d”, &IDADE);

O Simbolo %d representa o dado inserido e o & comercial busca o endereço de


memória da variável.
Para Strings não é preciso usar o &.

Exemplo: Scanf (“%s”,NOME); Uma forma fácil de receber strings


É usar a instrução gets (variável);
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de um programa

A linguagem C é estruturada e procedural.


Isso significa que ela funciona com procedimentos e funções, que estarão
organizados dentro de seções.

Todo programa estará dentro de uma seção principal, que conterá ou não outras
seções, as funções.
Um programa é composto de uma seção principal e seções de função, que
serão chamadas para execução de dentro da seção principal.

Neste curso trabalharemos somente com a seção principal.


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de um programa

Toda função da linguagem C possui a seguinte sintaxe:

Tipo_de_retorno Nome_função (Parametros)

Exemplo: int SOMA (int num1,int num2);

Uma função que não retorna valor para o programa se inicia com a palavra ‘void’
e não possui parametros.

A seção principal é uma função que não retorna valor.


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de um programa

A função principal é chamada de ‘Main’.

Toda função é delimitada por { } para determinar seu inicio e fim.


Os comandos que requerem sub-rotinas também serão delimitadas da mesma
forma.

A estrutura da função principal será a seguinte:

void Main () No DEV C++ A função


{ principal funciona sem a
palavra VOID. Chamaremos
} somente Main() { }
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de um programa

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

void Main ()
{

Printf (“Alo, mundo!”)

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura sequencial em C

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

void Main ()
{
float NOTA1, NOTA2, MEDIA;
Int DIVIDE;
A Quantidade de casas
DIVIDE = 2;
Printf (“Digite a primeira nota: ”); decimais após a virgula é
scanf (“%f”, &NOTA1); definida na Flag.
Printf (“Digite a segunda nota: ”);
scanf (“%f”, &NOTA2); Para 2 casas decimais:
MEDIA = (NOTA1 + NOTA2) / DIVIDE; %.2f
printf (“A media do aluno e %.2f”, MEDIA);
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura sequencial em C
Exemplo de um programa manipulando Strings

#include <stdio.h>

main() {

char nome[21], sobrenome[21];

printf("Primeiro nome: ");


scanf("%s", nome);
printf("Ultimo sobrenome: ");
gets(sobrenome);
printf("Ola senhor %s, %s. Bem-vindo ao curso de Algoritmos.\n", nome,
sobrenome);

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura sequencial em C

Escolha 2 exercícios da lista de exercícios 1 e desenvolva o programa na linguagem C.

Utilize o algoritmos já criado para ajudar na construção do programa.


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Modularização em C
#include <stdio.h> main()
#include <stdlib.h> {
int v1;
int soma(int a, int b) int v2;
{ int result;
int resultado;
resultado = a + b; printf("v1: ");
return resultado; scanf ("%d",&v1);
}
printf("v2: ");
Void msg () scanf ("%d",&v2);

{ result = soma(v1,v2);

Printf (“Soma realizada!”) printf ("%d",result)

} msg()

system(pause);

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais

A linguagem C utiliza muitos caracteres para executar ações especiais, tais como o ‘\n’
para quebrar a linha ou o ‘\t’ para fazer uma tabulação na linha.

Esses comandos são precedidos do símbolo ‘\’. Isso porque este caracter é reconhecido
pela linguagem como um caracter especial.

Então como exibir o caracter ‘\’?


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais

Printf (“Isso é um teste: \\”)

Inserindo mais uma barra antes, a linguagem reconhece que precisa exibir aquele caracter.

Isso pode ocorrer tb com as aspas.

Printf (“ \”teste de aspas\” “);

Outros exemplos:

Printf (“Para quebrar a linha use \\n. \n”);


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais

Os acentos também precisam ser tratados no código de programação.

Pode-se fazer de 2 formas:

Utilizando a Tabela ASCII

ou

Através da biblioteca <locale.h>


Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais
Tabela ASCII

Utilizando um caracter especial no lugar da letra acentuada ou símbolo.

É a forma mais antiga de se programar.

Utilizando a Tabela Octal:

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

Main()
{
Printf (“Al\223, mundo!”);
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais
Tabela ASCII

Também pode-se utilizar uma flag para caracter.

Dessa forma se utiliza a tabela decimal.

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

Main()
{
Printf (“Al%c, mundo!”,147);
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais
Tabela ASCII (Octal)

Á = \665 á = \240
à = \707 ã = \706
 = \666 â = \203
É = \220 é = \202
Ê = \722 ê = \210
Í = \726 í = \641
Ó = \740 ó = \242
Ô = \742 ô = \223
Õ = \745 õ = \744
Ú = \751 ú = \243
Ç = \200 ç = \207
Algoritmos A linguagem C
Prof. Rodrigo Sena Caracteres especiais
Tabela ASCII (Decimal)
Algoritmos
Prof. Rodrigo Sena A linguagem C
Caracteres especiais
Tabela ASCII Extendida
(Decimal)
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Caracteres especiais
Biblioteca <Locale.h>

Incluir uma biblioteca que entenda os caracteres do português.


É preciso incluir a biblioteca e ativar o idioma.

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

Main()
{ No entanto, não é
setlocale(LC_ALL, "Portuguese"); possível utilizar
caracteres ASCII.
Printf (“Alô, mundo!”);
printf (“Testando caracteres: á ã â ç”);

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
#include <stdio.h> Estrutura condicional em C
#include <stdlib.h>
#include <locale.h>

Main () Lembre-se que no C o


{ sinal de igual ‘=‘ funciona
setlocale(LC_ALL, "Portuguese"); para atribuição. Para
Int idade;
comparação usa-se ‘==‘.
printf(“Digite sua idade: “);
scanf (“%d”, &idade); Para diferente use !=
If (idade >= 18)
{ Conectivos lógicos:
printf (“Acesso autorizado.”); && (E)
} || (OU)
else
{
printf (“Voce possui menos de 18 anos.\n”);
printf (“Acesso não autorizado.”);
}
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
#include <stdio.h>
#include <stdlib.h> Estrutura condicional em C
#include <locale.h> (SWITCH)
Main ()
{
setlocale(LC_ALL, "Portuguese");
Int op;

printf(“Digite a opção: “);


scanf (“%d”, &op);

switch (op)
{
case1:
printf (“voce escolheu a opção 1.”);
break;

case2:
printf (“voce escolheu a opção 1.”);
break;

default:
printf (“voce escolheu a opção 1.”);
break;
}
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura condicional em C

Escolha 2 exercícios da lista de exercícios 2, que envolvam condições simples e


compostas e desenvolva o programa na linguagem C.

Escolha 1 exercício da lista de exercícios 2, que envolva condições multiplas e desenvolva


o programa na linguagem C.

Utilize o algoritmos já criado para ajudar na construção do programa.

Tente modularizar, criando procedimentos e funções nos programas.


Algoritmos
Prof. Rodrigo Sena

A linguagem C
#include <stdio.h> Estrutura de repetição em C
#include <stdlib.h>
#include <locale.h>

Main ()
{
setlocale (LC_ALL, “portuguese”);
A instrução enquanto
Int i;
do portugol será
i=1;
simplesmente
while (i != 0)
traduzida para o inglês
{
while e seguirá as
printf (“Digite um numero: “);
mesmas regras das
scanf (“%d”, &i);
demais estruturas;
printf (“Você digitou %d\n”,i);
}

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
#include <stdio.h> Estrutura de repetição em C
#include <stdlib.h>
#include <locale.h>

Main ()
{
A instrução repita do portugol
setlocale (LC_ALL, “portuguese”);
será substituída pela
Int i;
instrução do while e terá uma
i=1;
sintaxe diferente das demais.
do
No entanto ela se torna
{
idêntica ao while na
printf (“Digite um numero: “);
construção de sua condição.
scanf (“%d”, &i);
A diferença é que essa
printf (“Você digitou %d\n”,i);
estrutura executa o código ao
} while (i != 0);
menos uma vez.
}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de repetição em C

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

Main ()
{
Int i;
i=1;
for (i==1;i<=10;i++)
{
printf (“%d\n”, i)
}

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de repetição em C (Vetor)
#include <stdio.h>
#include <stdlib.h>

main ()
{

int i;
int num[10];
i=0;
for (i==0;i<=9;i++)
{
printf ("Digite um n\243mero: ");
scanf ("%d",&num[i]);

i=0;
for (i==0;i<=9;i++)
{
printf ("O %d%c n\243mero digitado foi: %d\n",i+1,167,num[i]);

}
Algoritmos
Prof. Rodrigo Sena

A linguagem C
Estrutura de repetição em C

Escolha 2 exercícios da lista de exercícios 3, que envolvam estruturas de repetição e


desenvolva o programa na linguagem C.

Utilize o algoritmos já criado para ajudar na construção do programa.


Algoritmos
Prof. Rodrigo Sena

Atividade prática final

Construa um programa aplicativo em C que tenha uma utilidade real com tema
livre.

O programa deverá coletar dados que serão processados internamente e


gerar uma saída que apoie algum tipo de atividade.

Será apresentado o programa aplicativo funcionando (.exe) e o código fonte


do programa feito em um compilador C (Dev C++).

Lembre-se: Busque soluções para algum problema de aplicação real