Upload
cassio-reis
View
636
Download
0
Embed Size (px)
Citation preview
1
Tópicos Principais: 0. Estrutura de um programa 1. Resolução de problemas 1.1 Algoritmos 1.2 Diagrama de blocos 1.3 Portugol 2. Programa padrão 3. Saída de dados 4. Memória 5. Entrada de dados 6. Processamento 7. Resumo 8. Lista de Exercícios
2
Nesta aula, serão apresentados os principais conceitos de um programa, etapas de
resolução de problemas, estrutura básica de um programa, funções básicas de entrada, saída de
dados, uso de variáveis, processamento, resumo e exercícios.
0. Estrutura de um programa
Como já visto nas aulas passadas, o conceito que estrutura um programa segue
basicamente a própria organização do computador que pode ser resumida da seguinte forma:
A seqüência principal de execução é entrada -> processamento -> saída, MAS no
decorrer da execução podem ser necessários outros tipos de acesso como, por exemplo, a
necessidade ou não de armazenamento de dados temporários (memória) e, por fim o
armazenamento ou não fixo de maneira permanente no HD (entrada/saída).
1. Resolução de problemas
Para maior segurança no desenvolvimento de um programa geralmente são adotadas três
etapas:
1 – Elaboração do Algoritmo;
2 – Diagrama de bloco;
3 – Portugol.
1.1. Algoritmo
Como já visto nas aulas passadas, algoritmo é uma seqüência de passos finitos com o
objetivo de solucionar um problema. Pode também ser definido como uma seqüência de
instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou
problema. São exemplos de algoritmos: instruções de montagem, receitas, manuais de uso, etc.
Entrada Saída Processamento
Memória
Entrada/
Saída
3
Um algoritmo não é A solução do problema, pois, se assim fosse, cada problema teria um
único algoritmo; um algoritmo é UM CAMINHO para a solução de um problema. Em geral,
existem muitos (senão infinitos) caminhos que levam a uma solução satisfatória.
Um algoritmo não computacional é um algoritmo cuja seqüência de passos, a princípio,
não pode ser executada por um computador. Abaixo é apresentado um algoritmo NÃO
COMPUTACIONAL cujo objetivo é usar um telefone público.
1 – Retirar o telefone do gancho 2 – Esperar o sinal 3 – Colocar o cartão 4 – Discar o número 5 – Falar ao telefone 6 – Colocar o telefone no gancho
Provavelmente você “executou” o algoritmo deste exemplo diversas vezes. O termo
algoritmo está muito ligado à Ciência da Computação, mas, na realidade, ele pode ser aplicado a
qualquer problema cuja solução possa ser decomposta em um grupo de instruções.
1.2. Diagrama de bloco
O diagrama de bloco, também chamado de fluxo, é uma ferramenta usada e desenvolvida
pelo profissional que está envolvido diretamente com a programação, tendo como objetivo
descrever o método e a seqüência do processo dos planos num computador.
Essa ferramenta usa diversos símbolos geométricos, os quais estabelecerão as seqüências
de operações a serem executadas em um processamento computacional. Um exemplo de
diagrama é apresentado abaixo:
Observações: Os programas Word e VISIO permitem criar diagrama de blocos
facilmente. Ao longo do curso serão apresentados os principais símbolos.
Início
Fim
X
Diagrama de bloco
4
1.3 Portugol
Para que o algoritmo possa ser útil, é necessário ainda que quem faz uso dele conheça os
termos utilizados nas instruções. O algoritmo do exemplo só será útil para alguém que seja
fluente na língua portuguesa e conheça o significado dos verbos Retirar, Colocar, Esperar assim
como dos substantivos utilizados no contexto de uma receita culinária. Em outras palavras, é
preciso que a linguagem utilizada no algoritmo seja conhecida tanto por quem o escreveu quanto
por quem vai executá-lo.
Para que o algoritmo possa ser executado por uma máquina é importante que as
instruções sejam corretas e sem ambigüidades. Portanto, a forma especial de linguagem que
utilizaremos é bem mais restrita que o Português e com significados bem definidos para todos os
termos utilizados nas instruções. Essa linguagem é conhecida como Português Estruturado (às
vezes também chamada de Portugol).
O português estruturado é, na verdade, uma simplificação extrema do Português, limitada
a umas poucas palavras e estruturas que têm um significado muito bem definido. Ao conjunto de
palavras e regras que definem o formato das sentenças válidas chamamos sintaxe da
linguagem. Durante este texto, a sintaxe do Português Estruturado será apresentada
progressivamente e a utilizaremos em muitos exercícios de resolução de problemas.
Aprender as palavras e regras que fazem parte dessa sintaxe é fundamental; no entanto,
não é o maior objetivo deste curso. O que realmente exigirá um grande esforço por parte do
estudante é aprender a resolver problemas utilizando a linguagem. Para isso, há somente um
caminho: resolver muitos problemas. O processo é semelhante ao de tornar-se competente em
um jogo qualquer: aprender as regras do jogo (a sintaxe) é só o primeiro passo, tornar-se um bom
jogador (programador) exige tempo, muito exercício e dedicação.
Embora o Português Estruturado seja uma linguagem bastante simplificada, ela possui
todos os elementos básicos e uma estrutura semelhante à de uma linguagem típica para
programação de computadores. Além disso, resolver problemas com português estruturado pode
ser uma tarefa tão complexa quanto a de escrever um programa em uma linguagem de
programação qualquer. Portanto, neste curso, estaremos na verdade procurando desenvolver as
habilidades básicas que serão necessárias para adquirir-se competência na programação de
computadores.
5
Daqui para frente, serão apresentados exemplos de algoritmos, sua representação no
diagrama de blocos e, por fim, sua escrita em portugol.
O Programa VisuAlg permite testar os programas desenvolvidos em portugol
rapidamente. Pode ser encontrado no site de busca www.apoioinformatica.inf.br.
2. Programa padrão
Abra o programa VisuAlg. Observe que é gerado automaticamente o seguinte código:
Por enquanto não é necessário todo este código, desta forma, apague tudo o que está
depois do // e a palavra var, ficando da seguinte maneira:
Programa padrão:
TODO programa em portugol tem no mínimo a estrutura básica acima. Ele é composto
pela palavra-chave algoritmo seguido do nome do algoritmo entre aspas duplas, neste caso é
“básico”. Em seguida, tem-se a outra palavra-chave inicio e fimalgoritmo.
Sua representação em diagrama de bloco é demonstrada abaixo:
Para testarmos o algoritmo pressione o botão F9. Ao pressionar este botão será simulada
a compilação do código, isto é a transformação do código em Portugol para linguagem de
máquina. Preste ATENÇÃO! ISTO irá apenas SIMULAR. Pois o portugol não é uma linguagem
de programação realmente, apenas um português estruturado. Após isto, será aberta uma janela
preta. Este será o ambiente em que possibilitará a criação dos nossos programas. Feche-a.
algoritmo "basico"
inicio
fimalgoritmo
Início
Fim
Diagrama de bloco
algoritmo "semnome" // Função : // Autor : // Data : 15/02/2008 // Seção de Declarações var inicio // Seção de Comandos fimalgoritmo
6
3. Saída de dados: escreva e escreval
Lembra-se de entrada, processamento e saída? Pois bem, veremos primeiro a saída e não
a entrada, pois geralmente é necessário apresentar alguma informação para o usuário antes que o
mesmo possa entrar com os dados.
Para a apresentação de dados na tela, utiliza-se a palavra-chave escreva seguido do texto a
ser apresentado entre parêntesis. O símbolo do diagrama de blocos utilizado para apresentação
de dados na tela é o . .
Problema 1: Desenvolva um programa que mostre na tela a mensagem “Bem-vindo!”.
O primeiro passo é desenvolver o algoritmo.
3.1 Algoritmo:
Apresente a mensagem “Bem-vindo!”.
3.2 Diagrama de bloco:
3.3 Portugol
Em portugol ficaria da seguinte maneira:
Observações: Foram utilizados três espaços em branco antes do comando escreva, isto
não é obrigatório para o programa funcionar, MAS ajuda muito o entendimento por parte do
próprio programador e outros que quiserem entendê-lo. Esta técnica é chamada de endentação
e visa uma boa documentação do seu programa.
algoritmo "basico"
inicio
escreva ("Bem-vindo!")
fimalgoritmo
Diagrama de bloco
Início
Fim
“Bem-vindo”
7
Caso fosse necessário apresentar várias mensagens, bastaria utilizar o mesmo comando
diversas vezes. Outro comando que permite escrever um texto na tela é o escreval. Este possui a
mesma sintaxe que o escreva, a diferença é que após apresentar o texto ele permite escrever uma
nova linha após o texto desejado. Ex: escreval(“Teste”).
3.4 Exercício: Desenvolva um programa que apresente na tela “Estou começando a
conhecer Portugol!”, mas de forma que cada palavra fique em uma linha diferente! Faça
o algoritmo, diagrama de bloco e por fim, o portugol.
4. Memória
O conceito memória faz referência a variáveis. Uma das razões para o de uso de variáveis
é devido à necessidade de armazenar os dados que serão digitados pelo usuário.
Mas o que seria variável?
Variável é um local na memória principal (temporária), isto é um endereço que armazena
um conteúdo. Também pode ser considerada como tudo aquilo que é sujeito a variações, que é
incerto, instável ou inconstante. Por exemplo, a entrada de dados de um usuário é incerta, não
tem como saber exatamente o que um usuário irá digitar.
Uma variável irá armazenar dados de forma TEMPORÁRIA na memória do computador,
isto quer dizer que ao fechar o programa os dados serão PERDIDOS! Para utilizá-la, basta inserir
a palavra-chave var seguido do nome desta variável, dois pontos “:” e seu tipo sublinhado
(inteiro, real, caractere, lógico). Ex: var idade : inteiro.
Uma observação importante é que as variáveis não precisam ser representadas em
diagrama de blocos quando são criadas, mas apenas quando recebem valores.
Quando formos dar nomes às variáveis, se faz necessário seguirmos algumas regras:
a) O PRIMEIRO caractere DEVE ser uma letra. (Não podem ser números)
b) Se houver MAIS de um caractere, SÓ poderemos usar letras ou números. (Não
podem ser utilizados caracteres simbólicos como: -,+,!,@,#,$,&,*(,),?, etc.)
c) NENHUMA palavra reservada (ou palavra-chave) poderá ser nome de uma variável.
A seguir, é apresentada uma tabela com a lista de palavras reservadas que não podem ser
utilizadas para nomes de variáveis.
8
Lista de palavras reservadas
algoritmo
arquivo
ate
caractere
caso
cronometro
debug
enquanto
então
escolha
escreva
escreval
faca
falso
fimalgoritmo
fimenquanto
fimescolha
fimfuncao
fimpara
fimprocedimento
fimrepita
fimse
função
inicio
int
inteiro
interrompa
leia
limpatela
logico
mod
não
e
ou
outrocaso
para
passo
pausa
real
procedimento
repita
retorne
se
senão
timer
var
vetor
verdadeiro
xou
4.1 Tipo de dados
Os tipos de dados que podem ser armazenados em um computador são divididos em 4
categorias:
1 - Inteiros: correspondem aos dados numéricos positivos ou negativos que NÃO sejam
fracionários. Ex: ...-3, -2, -1, 0, 1, 2, 3... A palavra-chave para seu uso é inteiro.
2 – Reais: correspondem aos dados numéricos positivos ou negativos E fracionários.
Ex: ...-3.0, -2.1, -1.5, 0, 1, 2.4, 3... A palavra-chave para seu uso é real
3 – Caracteres: correspondem aos tipos de caracteres contendo letras, números e
símbolos especiais. Ex: “João”, “Rua 10”, “123”, etc. É também conhecido como alfanumérico,
string, literal ou cadeia. A palavra-chave é caractere.
4 – Lógicos: São os tipos de dados com valores verdadeiros e falsos, sendo possível
representar apenas um dos dois valores. Ex: Falso, F e N (para valor lógico falso) e
Verdadeiro, V e S (para o valor lógico verdadeiro). A palavra-chave é logico.
Problema 2: Desenvolver um programa para armazenar a idade do usuário.
Deve-se declarar uma variável com um nome fácil para saber seu significado (por
exemplo: idade) e o tipo (por exemplo: inteiro). Dos 4 tipos possíveis, o inteiro é o mais
adequado. Ficando da seguinte maneira: var idade : inteiro
Em portugol:
algoritmo "idade"
var
idade: inteiro
inicio
fimalgoritmo
9
A declaração de variáveis é feita antes das palavras-chave início e fimalgoritmo. Um dos
objetivos de se declarar uma variável no início do algoritmo é para que seja alocada (reservada)
uma área na memória (endereço de memória) para a variável.
Uma variável pode ser vista como uma caixa com um rótulo ou nome colado a ela, que
num dado instante guarda um determinado objeto. O conteúdo desta caixa não é algo fixo,
permanente. Na verdade, essa caixa pode ter seu conteúdo alterado diversas vezes.
Representação de uma variável
O conteúdo deve ser sempre do mesmo tipo. Na figura acima, a caixa (que é a variável)
foi rotulada como IDADE. Ela é do tipo inteiro, isto é, só é capaz de armazenar valores inteiros.
Quando se cria uma variável deve-se inicializá-la com algum valor. Geralmente é um valor
nulo, mas isto vai depender do problema a ser resolvido. Para iniciar a variável usa-se o símbolo
MENOR seguido de MENOS (<-). Exemplo: idade <- 0
A atribuição de valores para variável é representada no diagrama de blocos com um
retângulo. O diagrama de blocos ficará assim:
0 Valor qualquer
idade
Nome da
variável(rótulo)
i
n
t
e
i
r
o
Tipo
Início
Fim
Diagrama de bloco
idade <-0
10
A inicialização da variável é feita entre as palavras chaves início e fimalgoritmo, ficando
da seguinte maneira:
Caso a variável não fosse inicializada com zero, ela ficaria com um valor qualquer da
memória com computador, o que geralmente é chamado de lixo.
Agora que se declarou a variável, vamos conhecer o comando para receber os dados do
usuário e armazená-lo na variável.
5. Entrada de dados: leia
A palavra-chave para receber dados digitados pelo usuário é leia, seguida entre parêntesis
do nome da variável. O símbolo do diagrama de blocos utilizado para receber dados digitados
pelo usuário é .
O novo diagrama de blocos:
No caso do Portugol, ficaria: leia(idade).
Um exemplo completo:
algoritmo "idade"
var
idade: inteiro
inicio
leia(idade)
fimalgoritmo
Início
Fim
Diagrama de bloco
idade
algoritmo "idade"
var
idade: inteiro
inicio
idade <- 0
fimalgoritmo
idade <-0
11
Observa-se que instrução leia DEVE ficar entre o bloco início e fimalgoritmo.
Supondo que o usuário digite o valor 32 e pressione ENTER, veja como ficará a variável
com o seu conteúdo:
Repare que ao executar o programa, simplesmente fica um cursor piscando, obrigando o
usuário a adivinhar o que deve ser digitado. Desta maneira, é aconselhável mostrar uma
mensagem solicitando ao usuário que digite sua idade, por exemplo “Digite a sua idade:”.
Agora que foi possível receber os dados digitados pelo usuário, é interessante apresentá-
los na tela. Será utilizada a palavra-chave escreva seguido do nome da variável idade que foi
criada. Assim, qualquer valor do tipo inteiro que o usuário digitar será apresentado.
Até agora foi possível receber os dados, armazená-los na memória e apresentá-los na tela.
Não é algo muito útil. O principal mesmo é processar estes dados, o que será demonstrado no
próximo tópico.
algoritmo "idade" var idade: inteiro inicio escreva ("Digite sua idade:") leia(idade) fimalgoritmo
32 Dado digitado pelo
usuário
idade
Nome da
variável
i
n
t
e
i
r
o
Tipo
algoritmo "apresenta_idade" var idade: inteiro inicio escreva ("Digite sua idade:") leia(idade) escreva ("Sua idade é:") escreva (idade) fimalgoritmo
12
6. Processamento
O Conceito de processamento se refere aos cálculos, testes condicionais, etc. Serão
apresentados primeiramente os operadores básicos disponíveis. Os restantes serão vistos mais à
frente do curso.
6.1 Operações aritméticas básicas
As operações aritméticas são as mais básicas que um programador deve saber programar.
Os símbolos adotados na programação são basicamente os mesmos já conhecidos.
Operação Operador Adição + Subtração - Multiplicação * Divisão (com resultado real) / Divisão (com resultado inteiro) div Resto % ou mod Exponenciação ^
6.1.1 Adição e Subtração: Observa-se através da tabela acima o uso dos operadores de soma e
subtração da mesma maneira utilizados na matemática convencional.
Problema 3: Desenvolver o algoritmo, portugol e diagrama de blocos de um programa
que efetue a soma de dois números.
Algoritmo: 1 – Atribuir o valor zero às variáveis valorA, valorB e resultado; 2 – Apresente a mensagem “Digite o primeiro valor” 3 – Leia o valorA 4 – Apresente a mensagem “Digite o segundo valor” 5 - Leia o valorB 6 - Efetue a soma das variáveis valorA e valorB e atribua seu resultado à variável resultado; 7 – Apresentar o valor da variável resultado. Portugol:
algoritmo "soma" var valorA: inteiro valorB: inteiro resultado: inteiro inicio valorA <- 0 valorB <- 0 resultado <- 0 escreva("Digite o primeiro valor") leia(valorA) escreva("Digite o segundo valor") leia(valorB) resultado <- valorA + valorB escreva(resultado) fimalgoritmo
Tabela 1: Operadores aritméticos
13
Diagrama de bloco:
Exercício: Faça uma calculadora com as 4 operações básicas de soma, subtração,
multiplicação e divisão. Faça o algoritmo, diagrama de bloco e portugol.
6.1.2 Multiplicação - De acordo com a Tabela 1 apresentada, pode-se observar que na operação
de multiplicação é utilizado o “*” para representá-lo, ex: 5 * 3 = 15.
6.1.3 Divisão e resto - A divisão possui dois tipos: uma que retorna um valor do tipo REAL e
outra que retorna um valor do tipo INTEIRO.
Exemplos:
4 / 3 = 1,33 4 div 3 = 1 8 / 3 = 2,66 8 div 3 = 2
Início
Fim
Diagrama de bloco
valorA<-0
“Digite o primeiro valor”
valorA
resultado <- valorA + valorB
resultado
“Digite o segundo valor”
valorB
valorB<-0
resultado<-0
14
Quando 4 é dividido por 3 utilizando o operador “/” tem-se o valor REAL 1,33. MAS
quando utiliza-se 4 div 3 tem-se o valor INTEIRO 1. Quando 8 é dividido por 3 com o operador
“/” tem-se o valor 2,66 e ao utilizar o “div” tem-se o valor 2. Observe que toda a parte
fracionária é retirada, MAS não ocorre o arredondamento para cima.
Outra operação é chamada de RESTO e representada pelo operador “%”. É utilizado
quando se deseja encontrar o resto da divisão entre dois números inteiros.
Exemplos:
4 % 2 = 0 8 % 3 = 2 7 % 4 = 3 A seguir, será apresentado um uso típico em programas dos operadores div e %.
Problema 4 - Desenvolva um programa que leia um número de duas casas e imprima os
algarismos separados em cada linha.
Um número de duas casas possui o algarismo das dezenas e das unidades. Para a dezena
utilizou-se operador div ao invés de “/”, isto porque não será necessária a parte fracionária. No
caso das unidades utiliza-se o operador “%”, pois deseja-se apenas o resto.
Exercício: Desenvolva um programa que leia um número de 3 casas e imprima os
algarismos separados em cada linha.
6.1.4 Exponenciação e radiciação - A última operação chamada de exponenciação é
representada pelo operador “^”. Na matemática, representada pela base e por um expoente, Ex:
23 = 8.
algoritmo "Separa_Numeros" var valorA : inteiro resultado : real inicio valorA <- 0 resultado <- 0 escreval(" Entre com um numero inteiro de 2 casas: ") leia(valorA) resultado <- valorA div 10 escreval("Primeira casa: ", resultado) resultado <- valorA % 10 escreva("Segunda casa: ", resultado) fimalgoritmo
15
Exemplos: 2 ^ 2 = 4 2 ^ 3 = 8 4 ^ 2 = 16
Na matemática é possível utilizar a exponenciação para encontrar, por exemplo, a raiz
quadrada de um número.
Exemplos: √16 = 4 (raiz quadrada convencional) 16 ^ (1/2) = 4 (raiz quadrada com exponenciação) 3√8 = 2 (raiz cúbica) 8 ^ (1/3) (raiz cúbica com exponenciação) Problema 5 - Desenvolva um programa que leia o valor da base e o valor do expoente e
calcule a exponenciação.
Exercício: Desenvolva um programa que calcule a raiz quadrada e cúbica de um número
digitado pelo usuário.
algoritmo "expoente" var base : inteiro expoente : inteiro resultado : real inicio base <- 0 expoente <- 0 escreva("Entre com o valor da base: ") leia(base) escreva("Entre com o valor do expoente: ") leia(expoente) resultado <- base ^ expoente escreva(“Resultado”, resultado) fimalgoritmo
16
7. Resumo 1 - Todo programa escrito em potugol é composto no mínimo pela palavra-chave algoritmo
seguido do nome do algoritmo entre aspas duplas. Em seguida, tem-se a outra palavra-chave
inicio e fimalgoritmo, conforme abaixo:
2 - A declaração das variáveis devem estar entre o bloco algoritmo e início
3 – Comandos para saída de dados(apresentação de textos na tela): escreva, escreval 4 – Declaração de variáveis var idade : inteiro 5 – Comando para entrada de dados(leitura dos dados digitados pelo usuário): leia(idade) 6 – Operadores básicos: +, - , *, /, div, %, ^
8.0 Lista de Exercícios (valor: 10 pts) 8.1. Faça o algoritmo, diagrama de blocos e portugol dos exercícios abaixo(2 pts):
� Um programa que calcule a média de 5 notas de um aluno. � Um programa que calcule a área de um triângulo. (dica: fórmula para área de um triângulo é base * altura dividido por 2)
� Um programa que calcule a área de uma circunferência. (dica: fórmula para área de uma circunferência é 3,14 * raio ao quadrado.
� Um programa que efetue o cálculo do salário líquido de um professor. Dados necessários: valor da hora aula, número de horas trabalhadas no mês e percentual de desconto no INSS.
8.2. Faça um programa que receba o saldo de uma aplicação e imprima o valor aplicado e valor com rendimento de 5%(1 pt). 8.3. Entrar com um número no formato CDU(centena, dezena e unidade) e imprimir invertido: UDC. (exemplo: se entrar com o valor 123, sairá 321)(1 pt). 8.4. Faça um programa de cálculo de custo de energia de dois aparelhos de um estabelecimento comercial. O usuário entrará com o valor da potência do aparelho (em watts) e o tempo de utilização (em horas) diário de ambos os aparelhos. O programa deverá apresentar o nome do aparelho, o seu custo em reais por hora, por dia e por mês. (Obs: a CEMIG estabelece que um aparelho de 1000 watts de potência ligado por uma hora custa 0,642 reais para o estabelecimento)(1 pt).
algoritmo "basico"
inicio
fimalgoritmo
17
8.5 Faça um programa que leia a quantidade de fitas que uma locadora de vídeo possui e o valor que ela cobra por cada aluguel, mostrando as informações pedidas a seguir(1 pt): - sabendo que um terço das fitas são alugadas por mês, exiba o faturamento anual da locadora. - quando o cliente atrasa a entrega, é cobrada uma multa de 10% sobre o valor do aluguel. Sabendo que um décimo das fitas alugadas no mês são devolvidas com atraso, calcule o valor ganho com multas por mês. - sabendo ainda que 2% de fitas se estragam ao longo do ano, e um décimo do total é comprado para reposição, exiba a quantidade de fitas que a locadora terá no final do ano. 8.6 Faça um programa que, dado um número de conta corrente com três dígitos, retorne o seu dígito verificador, o qual é calculado da seguinte maneira(1 pt): Exemplo: número da conta: 235 - somar o número da conta com o seu inverso: 235 + 532 = 767 - multiplicar cada dígito pela sua ordem posicional e somar estes resultados: 7 6 7 x1 x2 x3 ----------------- -------------- -------------- 7 + 12 + 21 = 40 - o último dígito desse resultado é o dígito verificador da conta, isto é o número zero. 8.7. Faça um resumo do capítulo 1, 2 e 3 do Livro: Algoritmos – lógica para desenvolvimento de programação de computadores.(3 pts)