Buscar

Algoritmos I - Parte 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

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

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ê viu 3, do total de 13 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

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

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ê viu 6, do total de 13 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

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

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ê viu 9, do total de 13 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

Prévia do material em texto

UNIVERSIDADE COMUNITÁRIA DA REGIÃO DE CHAPECÓ 
ACEA 
CURSO DE CIÊNCIA DA COMPUTAÇÃO 
 
 
 
 
 
 
 
Algoritmos e Estrutura de Dados I 
 
 
 
Apostila da Disciplina – Parte 1 
 
 
 
 
 
 
 
 
Prof. José Carlos Toniazzo 
 
 
 
 
 
 
 
 
 
 
Chapecó, 2011 
Português Estruturado 
 
O português estruturado é uma notação (padrão de escrita) que utilizaremos para 
construirnossos primeiros algoritmos. 
 
1 - Operadores 
 
1.1 - Aritméticos 
São símbolos conectivos usados para efetuar algum cálculo numérico. 
Comparando-se com a matemática, utilizaremos um conjunto mais limitado de 
operadores, mas que será suficiente para a construção de diversos algoritmos. 
 
+ Soma de dois números 
- Subtração de dois números 
* Multiplicação de dois números 
/ Divisão real entre dois números 
 
Exemplos: 
 
2 + 3 é igual a 5 
7 * 4 é igual a 28 
3.2 * 9 é igual a 28.8 
5 / 2 é igual a 2.5 
2 – 9 é igual a -7 
8 / 0 não é possível, pois não existe divisão por 0 
8 * está sintaticamente errado, pois falta um elemento à direita do operador 
 
A diferença entre estes símbolos e aqueles usados na matemática é proposital, 
justamente porque em computação é mais comum trabalharmos com estes 
operadores (o asterisco, por exemplo, tem sido usado há anos como símbolo de 
multiplicação). 
 
1.2 – Operadores Relacionais 
 
Como o próprio nome indica, um operador relacional existe para estabelecer uma 
relação entre dois elementos, cujo resultado da comparação será sempre falso ou 
verdadeiro. 
 
= Igual a 
> Maior que 
< Menor que 
>= Maior ou igual a 
<= Menor ou igual a 
<> Diferente de 
 
Há diferenças entre estes símbolos e os usados na matemática. Todos os 
símbolos acima são encontrados nos teclados dos computadores, o que facilita 
seu uso nas linguagens de programação. 
 
Da mesma forma que os operadores aritméticos, os operadores relacionais 
também fazem “contas” com elementos em um par, mas o resultado não é um 
número, e sim o estado lógico Verdadeiro ou Falso. 
 
Exemplos: 
 
 3 > 4 é igual a falso 
10 >= 9 é igual a verdadeiro 
-1 > -2 é igual a verdadeiro 
7.3 <> 8.9 é igual a verdadeiro 
< 15 está sintaticamente errado, pois falta um elemento à esquerda do 
operador 
 
1.3 – Operadores Lógicos 
 
Estes operadores permitem estender o uso dos operadores relacionais, 
estabelecendo composições lógicas mais sofisticadas. 
 
e Conjunção de operação 
ou Disjunção de operação 
não Negação de operação (operador unário) 
 
Para entender como funciona cada um destes operadores, vamos 
apresentar a tabela verdade de cada um. Uma tabela-verdade é uma combinação 
de possibilidades a serem feias pelo operador, indicando cada tipo de resultado 
gerado. Se considerarmos X como o elemento à esquerda do operador e Y o da 
direita, as tabelas para cada operador fica com a seguinte forma: 
 
Tabela verdade do operador E 
 
X | Y | X e Y 
falso | falso | falso 
falso | verdadeiro | falso 
verdadeiro | falso | falso 
verdadeiro | verdadeiro | verdadeiro 
 
Tabela verdade do operador OU 
 
X | Y | X e Y 
falso | falso | falso 
falso | verdadeiro | verdadeiro 
verdadeiro | falso | verdadeiro 
verdadeiro | verdadeiro | verdadeiro 
Tabela verdade do operador Não 
 
X | Não X 
falso | verdadeiro 
verdadeiro | falso 
 
Estas tabelas são fixas. Com base nestas combinações, podemos formar 
expressões mais sofisticadas utilizando os outros operadores já vistos. 
 
Exemplos: 
 
8 > 3 e 10 > 4 
 
é igual a verdadeiro, pois ambas as relações são verdadeiras, e pela 
combinação da tabela-verdade do conectivo E, a resposta é verdadeira 
 
8 > 3 e 10 < 4 
 
é igual a falso, pois a primeira comparação é verdadeira e a segunda é 
falsa, e pela combinação da tabela-verdade do conectivo E, a resposta é 
falsa. 
 
não 4=4 
 
é igual a falso, pois a negação da comparação 4=4 (que é verdade) dá 
falso 
 
2 – Expressões 
 
Assim como na matemática, pode ser necessário fazer combinações entre 
os operadores. Além dos operadores, uma expressão pode conter também os 
símbolos de parênteses, para mudar a prioridade do cálculo. 
A tabela a seguir apresenta a prioridade assumida para o cálculo das 
expressões: 
 
1º lugar Parênteses mais internos 
2º lugar Funções 
3º lugar Operadores aritméticos 
 
1º lugar * / 
2º lugar + - 
3º lugar Operadores relacionais 
4º lugar Operadores lógicos 
 
1º lugar não 
2º lugar e 
3º lugar ou 
 
Havendo algum empate em uma expressão, deve-se fazer primeiro o cálculo da 
esquerda. Caso não exista um operador na expressão a ser avaliada, basta 
passar para o próximo, seguindo a prioridade. 
 
Exemplo 1: 3 + 4 * 9 
4 * 9 = 36 
3 + 36 = 39 
 
Exemplo 2: (3 + 4) * 9 
 3 + 4 = 7 
 7 * 9 = 63 
 
Exemplo 3: 10 > 9 e 5 + 4 > 14 
1º 5 + 4 = 9 
2º 10 > 9 = verdadeiro 
3º 9 > 14 = falso 
4º verdadeiro e falso = falso 
 
3 – Conversão de Notação 
 
Com base nos operadores apresentados, passamos a usar uma notação 
algorítmica diferente daquela feita com as fórmulas matemáticas. Estas 
conversões permitem que as expressões sejam encaixadas corretamente em 
comandos nos algoritmos. Todas as chaves e colchetes matemáticos são 
convertidos em parênteses. 
 
a + b / c * d 
 
Ela inclui uma conta de adição, uma de divisão e outra de multiplicação. 
Assumindo que os valores são reais, a expressão algorítmica equivalente será: 
 
(a + b) / c * d 
 
4 – Algoritmos 
 
� Utiliza um conjunto de comandos mais limitado do que a língua natural. No 
entanto estes comandos podem ser combinados entre si para resolver problemas 
complexos; 
 
� Promove maior rigor na construção para evitar a ambigüidade; 
 
o Ambigüidade = qualidade daquilo que pode tomar mais de um sentido 
 
� Torna o algoritmo uma lista ordenada de comandos combinados, cuja 
seqüência de execução é a solução do problema. 
 
4.1 – Sintaxe e Semântica 
 
� Sintaxe: é o nome dado ao conjunto de regras a serem seguidas para a escrita 
dos algoritmos. 
 
� Semântica: refere-se ao que é efetuado pelo computador quando ele encontra 
um comando. 
 
Portanto: se a sintaxe está relacionada à forma de um comando, a semântica 
está relacionada ao seu conteúdo. 
 
4.2 - Estrutura de um algoritmo 
 
Exemplo de algoritmo: 
 
// Algoritmo para calcular a idade de uma pessoa a partir do ano de seu nascimento 
 
Variáveis 
 
ANO_NASCIMENTO, IDADE, ANO_ATUAL : inteiro; 
 
Início 
 
ANO_ATUAL = 2008; 
ler ANO_NASCIMENTO; 
IDADE = ANO_ATUAL – ANO_NASCIMENTO; 
escrever IDADE; 
 
Fim. 
 
ler = quando o programa pergunta alguma coisa para o usuário 
escrever = quando o programa mostra alguma coisa para o usuário 
 
4.2.1 - Componentes de um algoritmo: 
 
// = comentário 
 
Os comentários são textos incluídos na listagem do algoritmo para documentar as 
explicações do programador. São ignorados pela máquina, sendo úteis apenas 
para a pessoa que está lendo o algoritmo. Todo comentário no português 
estruturado começa por duas barras seguidas (//). 
 
O corpo do algoritmo é identificado pelas palavras início e fim. 
 
= = Comando de atribuição 
 
Chamamos de atribuição ao comando que permite armazenar o resultado de uma 
expressão dentro de uma variável, sendo considerada a instrução mais simples 
que podemos solicitar à máquina. 
 
Sintaxe (como escrever) do comando de atribuição: 
 
<nome da variável> = <expressão> 
 
Expressão pode incluir números, operadores, parênteses e nomes de variáveis, 
desde que respeitada a sintaxe de montagem das expressões. 
 
A indentação presenteno algoritmo acima é um recuo à direita em relação ao que 
seria a “margem” do algoritmo. A indentação também é ignorada pela máquina; 
sua utilidade é mostrar, para quem está lendo, que existe uma dependência 
daquele comando em relação ao item anterior. Veremos mais à frente que 
também é possível termos mais de um nível de 
indentação no algoritmo. 
 
OBS: Identação ou Indentação é FUNDAMENTAL para o correto entendimento do 
algoritmo, e será cobrada constantemente ao longo da disciplina. 
 
Uma variável é um local com um nome dentro da memória do computador, criado 
em um algoritmo para se armazenar um determinado dado. 
 
4.3 – Variável 
 
Talvez o conceito de variável seja o mais importante na construção de 
algoritmos. Dificilmente um algoritmo é feito sem que sejam utilizadas variáveis; é 
muito importante, pois, compreender o que são e como devemos usá-las. 
 
Seguindo nosso exemplo acima, percebemos que para calcularmos a idade 
de alguém, é preciso fazer o seguinte cálculo: ano_atual – ano_nascimento. 
Este cálculo produzirá o resultado esperado pelo algoritmo. No entanto, 
precisamos mostrar esta informação na tela do computador e isso só é possível se 
guardarmos o resultado em um espaço de memória do computador que 
chamamos de IDADE. 
 
Assim o programa armazenará o resultado e podemos em seguida com o 
comando escrever, mostrar a idade na tela do computador. 
 
ANO_ATUAL = 2008 
ANO_NASCIMENTO = 1971 
IDADE = 37 
 
Outro exemplo no mesmo algoritmo é a variável ANO_ATUAL. Neste algoritmo 
optamos por armazenar o ano atual em uma variável, ao invés de colocá-lo 
diretamente no cálculo da idade. 
 
Outra forma seria: IDADE = ANO_ATUAL – 2008. 
 
Uma variável é como uma caixinha dentro da memória do computador. Esta 
caixa tem a capacidade de guardar um dado. A variável possui um nome que pode 
ser considerada como uma etiqueta colada na caixinha. 
 
O conceito de variável em algoritmos não é o mesmo da matemática. O 
nome variável é utilizado porque o valor que é armazenado pode ser modificado 
“variado” durante a execução do algoritmo pela máquina. 
 
As variáveis são criadas e existem na memória durante a execução do 
algoritmo. Quando ele termina, é como se todos os dados fossem apagados, e as 
caixas destruídas. No exemplo do algoritmo acima, nós temos as seguintes 
variáveis: 
 
IDADE, ANO_NASCIMENTO, ANO_ATUAL 
 
4.3.1 – Nome de variáveis 
 
Toda variável precisa ter um nome definido pelo programador, que deve ser 
único dentro de um mesmo algoritmo; com este nome o programador poderá 
fazer referências à variável no português estruturado. 
 
Na sintaxe do português estruturado que usaremos nesta disciplina, o nome 
da variável deverá começar por uma letra, e depois deve incluir apenas letras, 
dígitos ou ainda o sinal de sublinhado (“_”). Em programação, estes e outros 
nomes que são inventados pelo programador são chamados de identificadores. 
 
Nos nossos algoritmos os identificadores não poderão conter acentos, nem 
podem ter o mesmo nome de uma palavra usada como parte deum comando 
(veremos adiante que existe um comando LER, de modo que uma variável não 
pode se chamar LER). 
 
Veja alguns exemplos de nomes de variável válidos: 
 
• valor_pago 
• soma 
• aa 
• k 
• num 
• precofinal 
• litros 
• nome_do_funcionario 
• idade 
 
 
 
 
Exemplos de nomes de variáveis inválidos: 
 
• 1nota -> não começa por uma letra 
• médaarit -> possui um acento 
• quantidade inicial -> possui um espaço 
• valor_em_R$ -> possui um caractere inválido ($) 
 
A regra que estamos estabelecendo para a formação de um identificador é 
muito parecida com aquelas utilizadas em programação, por isto, você deve se 
acostumar a criar variáveis com os nomes neste formato. 
 
4.2 – Tipos de variáveis 
 
Quando criamos uma variável estamos separando um espaço na memória 
do computador para armazenar alguma informação. Para que este espaço possa 
ser separado, temos que informar o tipo de dado que queremos armazenar. 
Veja alguns exemplos: 
 
�� Queremos armazenar o preço de uma blusa em um algoritmo par uma loja 
de roupas. 
 
Podemos criar uma variável chamada PRECO_PRODUTO, e o tipo de 
dado que ela vai guardar é real; 
 
�� Uma variável que vai armazenar a quantidade de latas de cerveja no 
estoque de um bar. 
 
Podemos criar uma variável chamada QUANT_LATAS, e o tipo de dado 
que ela vai guardar é inteiro; 
 
�� Uma variável que guarde a primeira letra do nome de um livro. 
 
O identificador pode ser LETRALIVRO, e ela é do tipo caractere; 
 
�� Uma variável que vai armazenar o nome do cliente de um supermercado. 
 
Podemos definir uma variável chamada NOME_CLIENTE, e o seu tipo de 
dado será uma cadeia de caracteres. 
 
 
5 – Tipos de Dados 
 
Devemos considerar o que deve ser armazenado para atingir a solução do 
problema (algoritmo). 
 
Toda a fundamentação da construção do algoritmo é feita a partir do dado. 
Um dado é alguma informação em estado primitivo, uma representação de uma 
situação ou idéia, cujo processamento pode gerar uma informação útil. 
 
Exemplo: 
 
� O número 8,5 pode ser um dado a ser utilizado em um algoritmo. Pode 
representar uma nota obtida por um aluno em um algoritmo para o cálculo da sua 
média final. 
 
Neste caso, o número 8,5 é uma informação. Em outro problema, ele também 
poderia representar a temperatura em uma noite fria de inverno, mudando 
totalmente a informação nele embutida; 
 
� A letra A, isoladamente, é um dado bruto. Num algoritmo, contudo, ela pode 
representar uma opção escolhida por alguém para “A”lterar o preço de um 
produto; 
 
� O valor 18 pode representar a informação de que uma pessoa tem 18 anos. 
Também poderia ser a quantidade de caixas de refrigerante no estoque de um 
bar. 
 
Um tipo de dado representa o conjunto de valores possíveis para um dado. 
 
Usaremos cinco tipos de dados: 
 
5.1 – Inteiro 
 
Representa qualquer valor contido no conjunto dos números inteiros, como 
18, 45, 32, -10, 0, 5200, etc. Utilizamos dados inteiros para representar 
informações que, por sua natureza, não têm parte fracionária. 
 
Exemplo: 
 
� A quantidade de funcionários em uma empresa é um dado inteiro, pois não 
existe parte fracionária (não há, por exemplo, uma ½ pessoa...); 
 
� O número de cheques emitidos por um correntista também é um dado inteiro, 
pois não há como emitir uma quantidade fracionária de cheques; 
 
� O número de automóveis fabricados por uma empresa é um tipo de dado 
inteiro, também porque não há frações de carros. 
 
5.2 – Real 
 
O tipo real é mais abrangente, pois representa qualquer valor contido no 
conjunto dos números reais, tendo ou não parte fracionária. Ex.: 8.5, 3.14, 10, -
0,30, etc. Repare que o 
separador da parte decimal é um ponto; no nosso português estruturado, 
usaremos o ponto para acostumar o leitor a utilizar uma notação próxima a das 
linguagens de programação (quase todas usam o ponto decimal como separador). 
Veja alguns exemplos de tipos de dados reais: 
 
� O valor a pagar por uma compra em uma loja: real, pois representa um valor 
monetário que pode incluir centavos (uma compra pode até resultar em um valor 
exato, como R$100,00, mas a natureza do dado continua sendo real). 
 
� Litros abastecidos em um posto de gasolina é um tipo de dado real, pois é 
possível fazer um abastecimento de uma quantidade fracionária de litros (23.7, por 
exemplo); 
 
� Altura de uma pessoa em metros: também é real, pois normalmente medimos a 
altura com duas casas decimais (por exemplo, 1.83). 
 
5.3 – Lógico 
 
Os tipos inteiro e real são utilizados para representar dados numéricos. Há 
situações, contudo, em que um algoritmo precisa armazenar na memória um dado 
que representaum estado, uma situação que só pode ser verdadeira ou falsa (e 
nenhuma outra a mais). Dizemos então que o tipo de dado é lógico (ou booleano, 
por ter sido desenvolvido na álgebra de Boole). Veja alguns exemplos: 
 
� Um cheque emitido pode ou não ter fundos: se quisermos armazenar a situação 
deste cheque (não o valor, mas o seu estado) o tipo é lógico, já que ter fundos é 
uma situação que só pode ser verdadeira ou falsa; 
 
� Estado de funcionamento de um automóvel: lógico, pois o automóvel só pode 
estar ligado ou desligado; 
 
� Estado de funcionamento de um chuveiro: lógico, uma vez que ele pode estar 
aberto ou fechado. 
 
5.4 – Caractere 
 
Representa um caractere a ser armazenado na memória. Um caractere 
pode ser uma letra (A,F,K...) um dígito (7,4,0...) ou outro símbolo ($, @, %, um 
espaço em branco...). Acompanhe cós exemplos a seguir: 
 
� A opção escolhida por um aluno numa questão de múltipla escolha é um 
caractere, se considerarmos que ele pode escolher entre A e E; 
 
� O símbolo de uma operação aritmética escolhido pelo usuário em uma conta, 
por exemplo, + ou -, também é um dado do tipo caractere.; 
 
� O sinal de pontuação no final de uma frase é um dado do tipo caractere, pois 
pode ser o sinal “.” ou ainda “?” ou “!”. 
 
5.5 – Cadeia de caracteres- String 
 
Representa um conjunto de caracteres a ser armazenado na memória, que 
pode ser composto por letras, dígitos ou outros símbolos. Veja os exemplos: 
 
� O nome do vendedor em uma loja: é uma cadeia, pois o nome é composto por 
letras e espaços (por exemplo, CARLA DA ROSA); 
 
� Um telefone de um cliente de uma corretora: também é uma cadeia. Observe 
que o telefone poderia se, por exemplo, 5555-1234 (uma cadeia composta por 
dígitos e o símbolo de traço). Mesmo que se imagine apenas dígitos (5551234), a 
sua natureza é ser uma cadeia de caracteres – ele não é um valor numérico; 
 
� Endereço de entrega de um produto: é uma cadeia. Ex: RUA DAS FLORES, 23 
– Grupo 8. 
 
Observações sobre tipos de dados: 
 
Em algoritmos, sempre que quisermos escrever uma cadeia de caracteres, 
ou apenas um caractere, estes serão envolvidos por aspas simples (‘). Esta 
sintaxe será útil para não haver confusão com nomes que serão criados pelo 
programador. 
 
Assim, nos exemplos anteriores, teríamos as cadeias ‘CARLA DA ROSA’, 
‘555-1234’, ‘B’ ou ainda ‘RUA DAS FLORES, 23 –Grupo 8’. 
 
Quando formos escrever um número, só usaremos dígitos, ponto decimal e 
sinal de mais ou de menos; qualquer outra escrita do número será considerada um 
erro de sintaxe. 
Ex: se tivermos que utilizar o valor R$20,50, referente a uma compra, 
escreveremos apenas o número 20.50, simplesmente (retirando o símbolo 
monetário e trocando a vírgula pelo ponto). 
 
Observações Importantes: 
 
� Os valores das variáveis que são dos tipos de dados caracter e cadeia de 
caracteres sempre deverão estar entre aspas simples. Ex.: ‘A’ ou ‘Sistemas de 
Informação’. 
 
� O separador usado para identificar as casas decimais será sempre o ponto. Ex.: 
12.35 ou 1.5; 
 
 
 
 
6– Sintaxe: 
 
• Entrada: 
 
o Sintaxe: ler <VARIÁVEL>; 
 
o Ex.: ler NUM1; 
 
• Saída: 
 
o Sintaxe: escrever <VARIÁVEL> , <expressão> , <mensagem>, ...; 
 
o Ex.: escrever NUM1; 
o Ex.: escrever “Ciência da Computação”; 
o Ex.: escrever NOME , “Ciência da Computação”; 
 
Exemplo: 
 
// Algoritmo para mostrar a soma de dois números 
Variáveis 
NUM1, NUM2, SOMA: inteiro; 
 
Início 
ler NUM1; 
ler NUM2; 
SOMA = NUM1 + NUM2; 
escrever SOMA; 
Fim 
 
 
Variáveis 
Início 
Fim 
 
Palavras que estruturam o algoritmo 
 
inteiro 
Tipo da variável 
 
ler 
escrever 
Comandos de entrada e de saída 
 
 
; Indica o fim de um comando 
 
 
= + Atribuição de valores e sinal de operação 
 
 
// Comentário para documentar o algoritmo 
 
Continua...

Outros materiais