Professional Documents
Culture Documents
Tcnico em Informtica
para Internet
Tcnicas de Programao
Jos Marcio Benite Ramos
Liluyoud Cury de Lacerda
Sara Luize Oliveira Duarte
Cuiab-MT
2013
Campus Porto Velho Zona Norte
Coordenao Institucional
Carlos Rinaldi
Direo-Geral
Miguel Fabrcio Zamberlan
Designer Educacional
Claudinet Antnio Coltri Jnior
Designer Master
Neure Rejane Alves da Silva
Ilustrao
Tatiane Hirata
Diagramao
Tatiane Hirata
Reviso de Lngua Portuguesa
Ewerton Viegas Romeo Miranda
Reviso Final
Claudinet Antonio Coltri Junior
Projeto Grfico
Rede e-Tec Brasil / UFMT
Dados Internacionais de Catalogao na Publicao (CIP)
Indicao de cones
Os cones so elementos grficos utilizados para ampliar as formas de
linguagem e facilitar a organizao e a leitura hipertextual.
Ateno: indica pontos de maior relevncia no texto.
Contents
Indicao de cones
Apresentao da Disciplina
11
Sumrio
13
15
17
17
19
23
25
2.2 Variveis
26
2.3 Constantes
27
28
28
29
33
34
39
47
4.1 Mdulo
48
49
50
50
53
54
Apresentao da Disciplina
A disciplina de Tcnicas de Programao compreende os conceitos e boas
prticas para a criao de programas de computadores, atravs de tcnicas e
recursos como: variveis, tipos de dados, modularizao, estruturas de controle, funes e procedimentos e recursividade.
Veremos que a construo de programas deve possuir caractersticas como
correo, flexibilidade, eficincia e facilidade de compreenso.
O entendimento e utilizao das variveis, tipos de dados, modularizao,
estruturas de controle, funes, procedimentos e recursividade, so essenciais formao do(a) profissional da rea de tecnologias da informao.
Ao final desta disciplina voc dever possuir habilidades para desenvolver programas de computador, seguindo as especificaes e paradigmas
da lgica de programao e das linguagens de programao. Voc ser
preparado(a) para utilizar as tcnicas de refinamento sucessivo, recursividade
e modularizao, alm dos conceitos de manipulao de dados na memria
do computador. Com isso, ser capaz de criar programas utilizando recursos
de tipos de dados, funes e procedimentos, os quais possibilitaro mais
eficincia e melhor desempenho dos programas criados.
essencial que voc relembre os conceitos utilizados em disciplinas anteriores para um melhor aproveitamento desta disciplina.
As aulas esto estruturadas de forma a conduzi-lo(a) s tcnicas de programao e dar a viso para utilizao dos recursos mais adequados para
criao de programas de computadores.
11
Sumrio
Aula 1. Conceitos bsicos de programao
15
17
17
19
23
25
2.2 Variveis
26
2.3 Constantes
27
28
28
29
33
34
39
47
4.1 Mdulo
48
49
50
50
53
54
5.2 Procedimentos
54
5.3 Funes
56
Aula 6. Recursividade
61
6.1 Recurso
63
64
13
Palavras Finais
67
Guia de Solues
68
Referncias
81
82
14
Objetivos:
entender o que um algoritmo;
criar uma aplicao;
reconhecer o conceito de compilao de aplicaes; e
conceituar entrada e sada de dados.
15
Receita de bolo
Misture os ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Se houve coco ralado ento despeje
sobre a mistura
Leve a forma ao forno
Enquanto no corar deixe a forma no
forno
Retire do forno
Deixe esfriar
Figura 01: esquema de um algoritmo em linguagem natural.
Fonte: Internet - http://www.vivaolinux.com.br/artigo/Otimizacao-de-algoritmos?pagina=2, acessado em 05/05/2013.
16
Tcnicas de Programao
System.out.println(Ol Mundo!);
}
}
17
javac OlaMundo.java
java HelloWorld
Para que voc compreenda melhor, a seguir faremos uma breve descrio
dos comandos utilizados no exemplo anterior.
a) comentrios:
// Comentrio de uma linha, todo o restante da linha ignorado.
/* Insira aqui o texto a ser ignorado */
18
Tcnicas de Programao
19
a) Sada: fornece os resultados obtidos. A sada para a tela (console da aplicao) usa a seguinte estrutura:
System.out.println(Imprime algo na tela");
b) Entrada: operao de recepo dos dados. Utilizaremos a classe Scanner para a leitura dos dados informados pelo usurio e os armazenaremos
em uma varivel.
Exemplo:
import java.util.Scanner;
A primeira linha do exemplo define que iremos utilizar os recursos disponibilizados pela classe Scanner, presente na biblioteca java.util.
A classe Scanner tem como uma das vantagens a implementao de operaes de entrada e sada de dados pelo teclado na console da aplicao.
Podemos obter outros tipos de valores da console atravs dos seguintes comandos:
20
Tcnicas de Programao
Resumo
O sucesso da execuo de uma tarefa depende da forma como vamos execut-la. Se planejarmos previamente as aes que sero realizadas, teremos
maior chance de concluirmos a tarefa de forma mais eficiente. Vimos nessa
aula que os computadores necessitam de instrues adequadas para resolver
nossos problemas. Essas instrues devem ser escritas em uma linguagem
que possa ser convertida de maneira que os computadores passem a entender nossas instrues. Os programas devem ser escritos e posteriormente
compilados, processo necessrio para podermos execut-los. As informaes
que passamos ao programa so chamadas de Entradas e as informaes
que o programa nos fornece so chamadas de Sadas.
Atividades de aprendizagem
1. Dado o algoritmo abaixo, Calcular Valor Pedido, identifique os dados
de entrada, qual o processamento e os dados de sada:
Leia o cdigo do item.
Leia o valor do item.
Leia a quantidade do item.
Calcule o valor total do pedido (quantidade * valor do item).
Escreva o valor total do pedido.
2. Crie um programa que leia o nome do usurio e sua idade, depois escreva
os valores obtidos.
3. Faa um programa que leia dois valores inteiros e armazene cada um em
uma varivel, depois troque os valores das duas variveis entre si. Como sa-
21
22
Tcnicas de Programao
Objetivos:
conceituar tipos de dados;
identificar o conceito de variveis;
reconhecer o que so constantes;
atribuir valores variveis e constantes; e
definir o que so tipos de dados primitivos.
23
Programa de computador
pode ser considerado como
um conjunto de instrues
(comandos) que descrevem
uma tarefa a ser realizada pelo
computador.
Nesta aula voc ver que os computadores devem ser preparados para receberem as informaes que sero fornecidas, apresentadas e tratadas pelos
programas, atravs da utilizao de variveis. Os programas de computadores que sero desenvolvidos devem estabelecer um contrato com o sistema operacional do computador. As informaes que sero tratadas devem
respeitar os tipos definidos nesse contrato, isto , quando voc definir que
ir trabalhar com nmeros em um determinado momento, apenas valores
numricos (existem vrios tipos numricos) devero ser informados.
Para tanto, voc ser apresentado(a) aos tipos mais comuns de dados suportados pela linguagem de programao (ser utilizado o JAVA), como caracteres, nmeros, datas, valores booleanos, e ver tambm como as informaes so representadas em um programa e armazenadas na memria do
computador atravs de variveis.
24
Tcnicas de Programao
Concatenar consiste em
unir conjuntos de caracteres
transformando-os em um s.
25
Um compilador um programa
que converte um cdigo descrito
em uma linguagem de alto nvel
para um programa em linguagem simblica compreensvel
pelo processador.
2.2 Variveis
As variveis so utilizadas pelos programas para armazenarem as informaes manipuladas durante suas execues. Elas representam espaos na memria RAM e, atravs delas, os programas podem acess-las e/ou modific-las.
Hexadecimal um sistema de
numerao que representa os
nmeros em base 16 (0, 1, 2, 3,
4, 5, 6, 7, 8, 9, A, B, C, D, E, F).
A memria principal (RAM) de um computador dividida em pequenos pedaos, e cada um identificado por um endereo (valor em hexadecimal).
Todas as informaes que sero manipuladas pelo programa devem ser armazenadas na memria.
Quando os programas necessitam usar as informaes, eles devem se referenciar ao endereo onde elas esto armazenadas. Atualmente, as memrias
podem possuir bilhes de endereos, todos representados em hexadecimal.
Trabalhar com valores hexadecimais muito complexo, assim usamos um
apelido (nome) para uma posio na memria, a varivel.
Apresentaremos a seguir algumas caractersticas que devem ser observadas
ao criarmos uma varivel:
26
Tcnicas de Programao
Tipo: tipo de dados que ser armazenado nas variveis. Como visto anteriormente, podem ser nmeros: 12, 2,5; caracteres: ol, abcd;
datas 12/12/2012, entre outros, que sero apresentados mais a frente.
2.3 Constantes
Constantes so endereos de memria destinados a armazenar informaes
fixas, inalterveis, durante a execuo do programa.
As constantes diferem das variveis, pois estas podem ter seus valores alterados, j as constantes, como o prprio nome diz, no.
Toda constante representa um dado, portanto necessrio declarar seu tipo.
Para declararmos uma constante, utilizamos a palavra chave final. Uma
constante global (declarada no corpo da classe) deve ser precedida da palavra chave static.
27
Representao:
static final int op1;
final int op2;
float raio
float comprimento
int nota
String nome
28
Tcnicas de Programao
a = 2;
b = 3;
c = a + b;
Exemplos:
Como vimos anteriormente, as constantes tm valores eternamente iguais.
Para atribuio usamos o sinal de =.
Exemplos:
PI = 3.14;
Variveis podem ser atribudas em forma de expresses, como:
int x, y, z;
x = y = z = 0;
29
Esses tipos so conhecidos como tipos primitivos, pois so suportados diretamente pelo compilador, e so utilizados durante a codificao na definio
de variveis.
Tipo
Descrio
Tamanho
boolean
1 bit
Char
16 bits
Byte
8 bits
Short
16 bits
Int
32 bits
Long
64 bits
Float
32 bits
double
64 bits
Resumo
Vimos nessa aula que existem vrios tipos de dados, os quais so utilizados
para especificar que tipo de informao ser armazenado em uma varivel. A
manipulao de informaes depende das especificaes corretas dos tipos
de dados. O tipo de dado informa ao compilador que tipo de informao
est sendo tratada, isto , se os valores binrios armazenados representam
nmeros, caracteres ou outros valores e permite que uma poro correta
da memria seja reservada para o armazenamento da informao. Vimos
tambm como manipulamos as variveis, como atribumos valores a uma
varivel e como podemos recuper-los.
Atividades de aprendizagem
1. Informe qual o valor da varivel resultado, em cada linha, aps a execuo
das seguintes operaes:
a) resultado = 3 + 6; x = 2; y = 3;
b) resultado = resultado / y x;
30
Tcnicas de Programao
c) resultado = 4; x = 2;
d) resultado = resultado * x;
2. Faa um programa que calcule a mdia de trs valores informados pelo
usurio.
3. Faa um programa que, dado uma temperatura em graus Celsius, converta-a para Fahrenheit, conforme a frmula:
F = (1.8 * C) + 32
E ento, fez todos os exerccios propostos? Consegui resolv-los? Espero que
sim. Assim terminamos o nosso segundo encontro. Espero por voc na nossa
terceira aula. At l!
31
Ol! Estamos chegando metade da nossa disciplina! Nesta aula, voc ser
apresentado(a) s vrias estruturas da linguagem utilizadas para mudar o
fluxo sequencial de execuo das instrues nos programas. Sero apresentadas estruturas de desvios (condicionais) que quebraro o fluxo das instrues, permitindo que o programa siga por um caminho ou outro e estruturas
de repetio que possibilitaro que um conjunto de instrues possa ser
executado repetidas vezes.
Muitas vezes nos deparamos com situaes em que devemos escolher um
caminho, entre vrios, para podermos prosseguir. Se estivermos diante de
uma bifurcao, em nosso caminho, devemos fazer uma escolha entre seguir por um ou outro lado.
Normalmente ponderamos
os prs e contras para essa
escolha e seguimos em
frente. As execues dos
programas de computador
tambm necessitam realizar escolhas para a correta
resoluo dos problemas,
nesse caso os caminhos
seriam as sequncias de
Figura 08: Escolha de um caminho
aes que devem ser exeFonte: Internet - http://www.vivaazul.com.br/artigo_op.php, acessado
cutadas.
em 30/04/2013.
33
Os programas de computadores so basicamente compostos por uma sequncia de comandos (instrues) organizados de tal maneira a resolver um
problema proposto.
Essa forma de execuo, em sequncia, denominada fluxo sequencial de
execuo.
Em muitos casos, so necessrias alternativas no fluxo de execuo (bifurcao-seleo) ou a repetio de instrues (comandos) para a resoluo de
um problema.
34
Tcnicas de Programao
Ninhos de Se; e
Caso.
Vamos aprender um pouco mais sobre cada um desses comandos.
3.1.1 Comando SE
Estrutura de deciso mais comum nos programas. Este comando realiza o
desvio da sequncia de instrues, permite a execuo de uma instruo,
ou bloco de instrues, somente se a condio de verificao, atribuda ao
comando, for verdadeira. Em caso contrrio, condio falsa, as instrues
no sero executadas.
Sintaxe:
if (<condio>) comando;
Exemplo:
if (x > 0)
System.out.println(X maior que zero.);
Exemplos:
if (x > 0)
System.out.println(X maior que zero.);
else
System.out.println(X menor que zero.);
35
No exemplo acima, a sada para a console (X maior que zero.) ser escrita se o valor de x for maior que zero e a sada para a console (X menor
que zero.) ser escrita se o valor de x for menor que zero.
import java.util.Scanner;
36
Tcnicas de Programao
Exemplos:
if (x == 0)
System.out.println(X zero.);
else if (x == 1)
System.out.println(X um.);
else
System.out.println(X no zero nem um.);
37
38
Tcnicas de Programao
import java.util.Scanner;
39
40
Tcnicas de Programao
o REPITA.
4. Aps executar o ltimo comando do bloco, volta ao passo 1.
Sintaxe:
while (condio) {
<comando>
}
Exemplo: realizar a somatria dos salrios informados pelo usurio. A repetio ser interrompida quando o valor informado para o salrio for menor
que zero.
import java.util.Scanner;
Obs.: de acordo com exemplo acima, podemos verificar que a repetio termina quando um valor negativo atribudo para o salrio.
41
Funcionamento:
1. Execuo dos comandos dentro do bloco REPITA.
2. Testa a condio de parada.
3. Se a condio for verdadeira, volta ao passo 1.
4. Se a condio for falsa, ento sai da repetio. Executa o prximo comando aps o REPITA.
Sintaxe:
do {
<comando>
}
while (condio)
42
Tcnicas de Programao
43
Resumo
Vimos nessa aula que os programas de computador so compostos por blocos de comando, sequncia de instrues que tem como objetivo resolver
um determinado problema. Porm, o fluxo sequencial de execuo, em muitos casos, no suficiente para termos uma soluo eficiente. Nesses casos,
necessria a utilizao de estruturas que permitam a quebra desse fluxo,
permitindo caminhos alternativos e, quando algumas instrues devem ser
executadas mais de uma vez, podemos utilizar comandos de repetio. Vimos os comandos de deciso SE (e suas variantes) e CASO, que nos permite
realizar desvios no fluxo de comandos. Vimos tambm os comandos ENQUANTO, REPITA e PARA, que possibilitam uma repetio, controlada, de
blocos de comandos, tornando nosso cdigo mais limpo e eficiente.
Atividades de aprendizagem
1. O IBIS Futebol Clube deseja aumentar o salrio de seus jogadores. O reajuste deve obedecer seguinte tabela:
SALRIO ATUAL (R$)
AUMENTO
0,00 a 1.000,00
20%
1.000,01 a 5.000,00
10%
acima de 5.000,00
0%
44
Tcnicas de Programao
45
47
4.1 Mdulo
Os mdulos so unidades bem definidas, contendo blocos de instrues que
visam cumprir uma tarefa. Cada mdulo tem como funcionalidade retornar
uma resposta a ser utilizada como parte ou subsdio da resoluo do problema, portanto ele uma parte do conjunto soluo.
48
Tcnicas de Programao
49
50
Tcnicas de Programao
Resumo
medida que avanamos no curso, os problemas tornam-se cada vez mais
complexos, tornando suas resolues cada vez mais complicadas. Tratar esses problemas sem uma abordagem eficiente poder se transformar numa
tarefa impossvel de se realizar. Vimos que dividir um problema longo e complexo em tarefas menores poder facilitar a resoluo do todo. Problemas
menores tendem a ser mais simples e tambm mais fceis de ser compreendidos.
A modularizao dos programas uma das tcnicas de programao que
do maior clareza ao cdigo, possibilitam que blocos modularizados possam
ser utilizados na resoluo de outros problemas e possibilitam, ainda, uma
facilidade maior na manuteno do cdigo.
Atividades de aprendizagem
1. Utilizando o exemplo de modularizao apresentado anteriormente, descreva os mdulos necessrios para resoluo do seguinte problema: dados
dois nmeros, identificar o maior e verificar se o mesmo par ou mpar.
2. Ainda utilizando as definies acima, resolva o seguinte problema: dada
uma sequncia de nmeros, arranj-los em ordem crescente e decrescente.
3. Dado um nmero, identificar se ele primo, se par ou mpar e se um
ano bissexto.
Estamos entrando na reta final da nossa disciplina. Faltam apenas duas aulas
para chegarmos ao final. Vamos para a nossa quinta aula? At l!
51
53
5.2 Procedimentos
Os procedimentos so partes de um programa (mdulo), compostos por um
conjunto de comandos, utilizados para realizar a resoluo de uma determinada tarefa.
Os procedimentos so independentes e normalmente so utilizados para
criar um produto.
Procedimentos em JAVA so declarados pelo comando void seguido do
nome do procedimento.
54
Tcnicas de Programao
Sintaxe:
visibilidade void NomeDoProcedimento(<parmetros>)
{
<comandos>
}
Onde:
visibilidade: ser melhor explicada na disciplina Orientao a Objeto.
Por enquanto utilizaremos a palavra reservada public;
void: especifica um procedimento;
Nome do procedimento: conjunto de caracteres que identifica o procedimento;
<parmetros>: conjunto de variveis que recebero as informaes passadas ao procedimento. Veremos de forma mais esclarecida a utilizao
de parmetros no decorrer deste captulo;
<comandos>: bloco de comandos executados pelo procedimento.
5.2.1 Parmetros
Os parmetros (argumentos) so a porta de entrada dos procedimentos e
funes. Atravs deles podemos passar uma informao a qual ser utilizada no processo (bloco de comandos). Os parmetros se comportam como
variveis no procedimento.
Sintaxe:
(TipoDeDado nomeDoParmetro1, TipoDeDado nomeDoParmetro2, ...)
55
Onde:
TipoDeDado: tipo de dado referente ao valor atribudo ao parmetro.
Os parmetros so opcionais e quando h a necessidade de utilizar mais
de um, cria-se uma lista separada por vrgula.
Exemplo: procedimento para escrever uma mensagem na console.
import java.util.Scanner;
public class Procedimento {
public static void main(String args[]) throws IOException {
Scanner entrada = new Scanner(System.in);
String texto;
System.out.print("Digite algo:");
texto = entrada.nextLine();
Imprime(entrada);
}
public static void Imprime (String texto) {
System.out.print(texto);
}
}
5.3 Funes
O que so funes?
Funes so instrumentos que tm como objetivo retornar um valor ou uma
informao.
Uma funo definida na linguagem de programao JAVA de maneira
semelhante conhecida na Matemtica. As funes recebem valores que
so passados como argumentos (parmetros) e, aps um processamento,
retorna um valor como resultado.
56
Tcnicas de Programao
57
Procedimento
58
Funo
Tcnicas de Programao
Resumo
A diviso de uma tarefa em tarefas menores (mdulos) facilita a resoluo de
um problema complexo e extenso. Essa diviso, em programao, conhecida como modularizao. Vimos nessa aula como realizar a modularizao de
um programa atravs da utilizao de funes e procedimentos. Identificamos as diferenas entre as funes e procedimentos. Vimos tambm como
passar informaes para serem utilizadas internamente nessas estruturas
atravs dos conceitos de parmetros.
Atividades de aprendizagem
1. Crie um procedimento que receba um valor inteiro e positivo entre 0 e
10 e escreva na console seu valor por extenso, isto , para 0 escreva zero,
para 1 escreva um e assim respectivamente para os demais.
2. Implemente uma funo que verifique se um valor perfeito. Um valor
considerado perfeito quando ele igual soma dos seus divisores excetuando ele prprio. (Ex.: 6 perfeito, 6 = 1 + 2 + 3, que so seus divisores). A
funo deve retornar um valor booleano.
3. Faa uma funo que receba a idade de um atleta e retorne sua categoria,
conforme a tabela abaixo:
Idade
Categoria
5 a 7 anos
Infantil A
8 a 10 anos
Infantil B
11-13 anos
Juvenil A
14-17 anos
Juvenil B
Adulto
4. Faa uma funo que receba um valor inteiro e verifique se o mesmo par
ou mpar. A funo deve retornar par quando o valor for par e mpar
quando for mpar.
Assim terminamos o nosso quinto e penltimo encontro. Espero que esteja
aproveitando a nossa disciplina. At a nossa sexta e ltima aula!
59
Aula 6. Recursividade
Objetivos:
utilizar a tcnica da recursividade; e
identificar as vantagens e desvantagens da tcnica da recursividade.
Estamos chegando ao final da nossa disciplina. Com ela, voc j teve contato com uma srie de conceitos sobre tcnicas de programao. Agora falta
pouco. Vamos em frente?
Pois bem, voc j teve a curiosidade de colocar um espelho na frente de
outro? Vemos uma infinidade de imagens refletidas. As imagens repetidas
que aparecem quando os dois espelhos so dispostos dessa maneira so
denominadas recursivas.
Aula 6 - Recursividade
61
Assim temos:
fatorial(5)
fatorial(4)
fatorial(3)
fatorial(2)
fatorial(1)
fatorial(0)
fatorial(1)
fatorial(2)
fatorial(3)
fatorial(4)
fatorial(5)
=
=
=
=
=
=
=
=
=
=
=
5
4
3
2
1
1
1
2
3
4
5
*
*
*
*
*
fatorial(4)
fatorial(3)
fatorial(2)
fatorial(1)
fatorial(0)
*
*
*
*
*
1 = 1
1 = 2
2 = 6
6 = 24
24 = 120
62
Tcnicas de Programao
6.1 Recurso
Ento, o que recurso?
A recurso uma tcnica que consiste em dividir problemas maiores em vrios problemas menores, mais fceis de serem resolvidos, os quais fornecem
a resoluo para o problema original.
Abordagem geral:
1. Dividir um problema em pequenos problemas semelhantes, subproblemas;
2. Repetir at que os subproblemas se tornem triviais;
a) Problema "trivial" pode ser resolvido sem clculo, um clculo simples ou
por fora bruta;
3. Recombinar as solues dos subproblemas em uma soluo para o problema original.
Onde:
Encontrada a soluo do subproblema trivial no passo 2, vamos cham-lo de funo base, o processo recursivo termina.
Recursividade dos passos 1 e 3:
Simplifica um problema em pequenos subproblemas similares, funo recursiva. Garantir que a funo decresa a cada passo de repetio, permitindo que a soluo trivial seja atingida.
Recursivamente aplica-se o algoritmo para os subproblemas.
Combina as solues dos subproblemas numa soluo completa.
Aula 6 - Recursividade
63
Assim temos:
f(5)
f(4)
f(3)
f(2)
f(1)
f(0)
=
=
=
=
=
=
5
4
3
2
1
0
+
+
+
+
+
f(4)
f(3)
f(2)
f(1)
f(0)
=
=
=
=
=
1
2
3
4
5
+
+
+
+
+
0 = 1
1 = 3
3 = 6
6 = 10
10 = 15
ento, resolva-o;
seno,
reduza-o a um problema menor (subproblema), semelhante (funo
recursiva),
64
Tcnicas de Programao
Resumo
Vimos nessa aula que problemas complexos, extensos, podem ser resolvidos
atravs da diviso em problemas menores, subproblemas, com as mesmas
caractersticas. Essa tcnica denominada recursividade e aplicada atravs da utilizao de funes (funo recursiva) que so chamadas por elas
mesmas (recurso). Cada vez que a funo invocada, o problema torna-se
menor at atingir uma soluo trivial, que possui um valor conhecido ou de
fcil clculo, chamada de funo base.
Aula 6 - Recursividade
65
Atividades de aprendizagem
1. Considere a seguinte funo recursiva e o valor de x sempre menor que
100:
Descreva o que essa funo calcula.
2. Desenvolva um programa, atravs de recursividade, para resolver o problema proposto no exemplo dessa aula. O usurio dever entrar com um
int Funcao(int x) {
if ( x > 100 )
return 0;
else
return x + Funcao(x + 1);
}
66
Tcnicas de Programao
Palavras Finais
Caro(a) estudante,
Meus parabns por completar mais esta etapa. Chegamos ao final da disciplina. Durante nossa caminhada adquirimos conhecimento, pudemos realizar trocas de experincias e de ideias. Estamos mais preparados para seguir,
para enfrentar novos desafios. Este um ponto de partida para um aprendizado maior que vir com o tempo, com a experincia.
Sabemos que no fcil chegar at aqui, acredito que em muitas vezes voc
se desanimou, as dificuldades e a fadiga foram obstculos cruis, mas sua
determinao e persistncia fizeram com que voc vencesse.
No podemos esquecer que a busca pelo conhecimento no termina aqui,
ela cclica, portanto, devemos continuar procurando novos desafios. Como
criar um site de relacionamento? Qual estrutura mais adequada? Como
manipular tantas informaes? Esses so apenas alguns dos problemas enfrentados pelos programadores, e podemos sim encar-los e resolv-los.
Para isso, temos que manter nossa disposio em continuar.
Aula 6 - Recursividade
67
Guia de Solues
Aula 1
1. Dado o algoritmo abaixo, Calcular Valor Pedido, identifique os dados
de entrada, qual o processamento e os dados de sada:
Leia o cdigo do item.
Leia o valor do item.
Leia a quantidade do item.
Calcule o valor total do pedido (quantidade * valor do item).
Escreva o valor total do pedido.
a) Dados de entrada: cdigo do item, valor do item e quantidade do item
b) Processamento: quantidade * valor do item
c) Dados de sada: valor total do pedido
2. Crie um programa que leia o nome do usurio e sua idade, depois escreva
os valores obtidos.
import java.util.Scanner;
public class Ex02 {
public static void main(String[] args) {
String nome;
int idade = 0;
Scanner s = new Scanner(System.in);
System.out.println("Digite o seu nome:
");
nome = s.next();
System.out.print("Digite o sua idade:
");
idade = s.nextInt();
System.out.println("Seu nome : " +
nome);
System.out.print("Sua idade : " +
idade);
}
}
68
Tcnicas de Programao
Aula 2
1. Informe qual o valor da varivel resultado, em cada linha, aps a execuo
das seguintes operaes:
a) resultado = 3 + 6; x = 2; y = 3;
resultado = 9
b) resultado = resultado / y x;
resultado = 1
c) resultado = 4; x = 2;
resultado = 4
d) resultado = resultado * x;
Aula 6 - Recursividade
69
resultado = 8
2. Faa um programa que calcule a mdia de trs valores informados pelo
usurio.
import java.util.Scanner;
public class Ex0202 {
public static void main(String[] args) {
int x, y, z;
double media;
Scanner s = new Scanner(System.in);
System.out.println("Digite o primeiro
valor: ");
x = s.nextInt();
System.out.print("Digite o segundo valor: ");
y = s.nextInt();
System.out.print("Digite o terceiro valor: ");
z = s.nextInt();
media = (x + y + z) / 3;
System.out.println("A mdia : " + media);
}
}
3. Faa um programa que, dada uma temperatura em graus Celsius, converta-a para Fahrenheit, conforme a frmula:
F = (1.8 * C) + 32
import java.util.Scanner;
public class Ex0203 {
public static void main(String[] args) {
double c, f;
Scanner s = new Scanner(System.in);
System.out.println("Informe a temperatura em Celcius: ");
c = s.nextDouble();
f = (1.8 * c) + 32;
System.out.println("A temperatura em
Fahrenheit : " + f);
}
}
70
Tcnicas de Programao
Aula 3
1. O IBIS Futebol Clube deseja aumentar o salrio de seus jogadores. O reajuste deve obedecer a seguinte tabela:
SALRIO ATUAL (R$)
AUMENTO
0,00 a 1.000,00
20%
1.000,01 a 5.000,00
10%
acima de 5.000,00
0%
Aula 6 - Recursividade
71
Para a soluo do problema, no utilizaremos vetores, os quais sero apresentados na disciplina Estrutura de Dados.
import java.util.Scanner;
public class Ex0302 {
public static void main(String[] args) {
int x1, x2, x3, x4, x5;
int maior, menor;
Scanner s = new Scanner(System.in);
System.out.println("Informe o primeiro
nmero: ");
x1 = s.nextInt();
System.out.println("Informe o segundo
nmero: ");
x2 = s.nextInt();
System.out.println("Informe o terceiro
nmero: ");
x3 = s.nextInt();
System.out.println("Informe o quarto
nmero: ");
x4 = s.nextInt();
System.out.println("Informe o quinto
nmero: ");
x5 = s.nextInt();
//Verificar o maior
maior = x1;
if (x2 > maior)
maior = x2;
if (x3 > maior)
maior = x3;
if (x4 > maior)
maior = x4;
if (x5 > maior)
maior = x5;
//Verificar o menor
menor = x1;
if (x2 < menor)
menor = x2;
if (x3 < menor)
menor = x3;
if (x4 < menor)
menor = x4;
if (x5 < menor)
menor = x5;
System.out.println("O maior valor : " +
maior);
System.out.println("O menor valor : " +
menor);
}
}
72
Tcnicas de Programao
Aula 6 - Recursividade
73
import java.util.Scanner;
public class Ex0304 {
public static void main(String[] args) {
int val1, val2;
int result, cont;
Scanner s = new Scanner(System.in);
System.out.println("Informe o primeiro
valor: ");
val1 = s.nextInt();
System.out.println("Informe o segundo
valor: ");
val2 = s.nextInt();
result = 0;
cont = 0;
while(cont < val2){
result = result + val1;
cont = cont + 1;
}
if (val2 == 0)
result = 1;
System.out.println("O resultado da multiplicao : " + result);
}
}
Aula 4
1. Utilizando o exemplo de modularizao apresentado anteriormente, descreva os mdulos necessrios para resoluo do seguinte problema: dados
dois nmeros, identificar o maior e verificar se o mesmo par ou mpar.
Aqui temos duas situaes: identificar o maior e verificar se o mesmo par
ou mpar
Principal(){
chama Maior();
chama Par() informando o valor de maior;
se maior for par escreve par;
caso contrrio escreve impar;
}
Maior(){
aes para verificar o maior valor;
}
Par(){
aes para verificar se par;
}
74
Tcnicas de Programao
Podemos ter outras solues semelhantes, tambm vlidas, j que no temos uma regra especfica para escrevermos esses comandos.
2. Ainda utilizando as definies acima, resolva o seguinte problema: dada
uma sequncia de nmeros, arranj-los em ordem crescente e decrescente.
Principal(){
chama Crescente();
escreve os nmeros;
chama Decrescente();
escreve os nmeros;
}
Crescente(){
aes para arranjar os nmeros em ordem crescente;
}
Crescente(){
aes para arranjar os nmeros em ordem decrescente;
}
75
Aula 5
1. Crie um procedimento que receba um valor inteiro e positivo entre 0 e
10 e escreva na console seu valor por extenso, isto , para 0 escreva zero,
para 1 escreva um e assim respectivamente para os demais.
import java.util.Scanner;
public class Ex0501 {
public static String Extenso(int num){
String extenso;
switch(num){
case 0: extenso = "Zero"; break;
case 1: extenso = "Um"; break;
case 2: extenso = "Dois"; break;
case 3: extenso = "Trs"; break;
case 4: extenso = "Quatro"; break;
case 5: extenso = "Cinco"; break;
case 6: extenso = "Seis"; break;
case 7: extenso = "Sete"; break;
case 8: extenso = "Oito"; break;
case 9: extenso = "Nove"; break;
case 10: extenso = "Dez"; break;
default: extenso = "nmero
invlido";break;
}
return extenso;
}
public static void main(String[] args) {
int num;
Scanner s = new Scanner(System.in);
System.out.println("Informe um nmero de
0 a 10: ");
num = s.nextInt();
System.out.println("O extenso : " +
Extenso(num));
}
}
76
Tcnicas de Programao
import java.util.Scanner;
public class Ex0502 {
public static Boolean Perfeito(int num){
Boolean perfeito = false;
int soma = 0;
for(int i=1; i<num; i++){
if(num%i==0)
soma = soma + i;
}
if (soma == num)
perfeito = true;
return perfeito;
}
public static void main(String[] args) {
int num;
Scanner s = new Scanner(System.in);
System.out.println("Informe um nmero:
");
num = s.nextInt();
if(Perfeito(num))
System.out.println("O nmero
perfeito.");
else
System.out.println("O nmero no
perfeito.");
}
}
3. Faa uma funo que receba a idade de um atleta e retorne sua categoria,
conforme a tabela abaixo:
Idade
Categoria
5 a 7 anos
Infantil A
8 a 10 anos
Infantil B
11-13 anos
Juvenil A
14-17 anos
Juvenil B
Adulto
77
import java.util.Scanner;
public class Ex0503 {
public static String Categoria(int idade){
String categoria = "invlida";
if(idade >= 5 && idade <= 7)
categoria = "infantil A";
else if(idade >= 8 && idade <= 10)
categoria = "infantil B";
else if(idade >= 11 && idade <= 13)
categoria = "juvenil A";
else if(idade >= 14 && idade <= 17)
categoria = "juvenil B";
else if(idade >= 18)
categoria = "adulto";
return categoria;
}
public static void main(String[] args) {
int idade;
Scanner s = new Scanner(System.in);
System.out.println("Informe a idade do
atleta: ");
idade = s.nextInt();
System.out.println("Sua categoria : " +
Categoria(idade));
}
}
4. Faa uma funo que receba um valor inteiro e verifique se o mesmo par
ou mpar. A funo deve retornar par quando o valor for par e mpar
quando for mpar.
78
Tcnicas de Programao
import java.util.Scanner;
public class Ex0504 {
public static String ParImpar(int num){
String result;
if(num%2==0)
result = "par";
else
result= "mpar";
return result;
}
public static void main(String[] args) {
int num;
Scanner s = new Scanner(System.in);
System.out.println("Informe um nmero:
");
num = s.nextInt();
System.out.println("O nmero : " +
ParImpar(num));
}
}
Aula 6
1. Considere a seguinte funo recursiva e o valor de x sempre menor que
100:
int Funcao(int x) {
if ( x > 100 )
return 0;
else
return x + Funcao(x + 1);
}
79
import java.util.Scanner;
public class Ex0602 {
public static int Somatorio(int x){
if ( x <= 0 )
return 0;
else
return x + Somatorio(x - 1);
}
public static void main(String[] args) {
int num;
Scanner s = new Scanner(System.in);
System.out.println("Informe um nmero:
");
num = s.nextInt();
System.out.println("O resultado : " +
Somatorio(num));
}
}
80
Tcnicas de Programao
Referncias
ARAJO, Everton Coimbra. Algoritmos: Fundamento e Prtica. 3 ed. So Paulo: Visual
Books, 2007.
CARBONI, Irenice de Ftima. Lgica de Programao. So Paulo: Thomson, 2003.
FORBELLONE, Andr Luiz Villar. Lgica de programao: a construo de algoritmos e
estrutura de dados. 3 ed. So Paulo: Brochura, 2005.
LOPES, Anita; GARCIA, Guto. Introduo Programao: 500 Algoritmos Resolvidos.
Rio de Janeiro: Campus, 2002.
SOARES, Mrcio Vieira; GOMES, Marcelo Marques; Souza, Marco Antnio. Algoritmos e
Lgica de Programao. 2. ed. So Paulo: Cengage Learning, 2011.
Bibliografia Bsica
CORMEN, Thomas H.; RIVEST, Ronald L.; STEIN, Clifford; LEISERSON, Charles E.
Algoritmos: teoria e prtica. 3.ed. So Paulo: rica, 2012.
FARRELL, Joyce. Lgica e Design de Programao. So Paulo: Cengage Learning,
2009.
MANZANO, Jos Augusto N G; OLIVEIRA, Jayr Figueiredo de. Algoritmos: Lgica para
Desenvolvimento de Programao de Computadores. 22 ed. So Paulo. Editora rica,
2009.
81
82
Tcnicas de Programao
83