Escolar Documentos
Profissional Documentos
Cultura Documentos
Lubango 2020
2020
1
1. Algoritmos sequenciais
Problema:
Implementar um algoritmo que faz o carregamento de dois números inteiros pelo teclado e
mostrar na tela a soma e seu produto.
Análise
Código fonte:
pakage SomaProduto;
import java.util.*;
2
Esquema geral dum algoritmo condicional simples, existe um losango o que indica uma estrutura
condicional, onde temos que tomas uma decisão
Problema:
Desenvolva um algoritmo para resolver o problema a seguir.
Ingressar o salário de uma pessoa, se o mesmo supera os 30000 Kz, mostrar uma mensagem na tela
indicando que deve pagar impostos
Análise
Variáveis de entrada: salário
Variáveis de saída: não
Decisões: sim, mostrar uma SMS se o salário introduzido for superior ou igual a 30000Kz
Código fonte
pakage salario;
import java.util.*;
public class Salario {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
float salário;
System.out.println("Ingresse o salário:");
salário=teclado.nextFloat();
if (salário>30000) {
System.out.println("Esta pessoa deve pagar impostos");
}
}
}
3
Problema:
Escrever um algoritmo que permita ingressar dois números distintos pelo teclado e apresente na tela o
maior deles. Estamos em presença dum algoritmo CONDICIONAL COMPOSTO
Algoritmo:
Código fonte:
pakage números;
import java.util.*;
public class Numeros {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int num1,num2;
System.out.println("Ingresse primeiro valor:");
num1=teclado.nextInt();
System.out.println("Ingresse segundo valor:");
num2=teclado.nextInt();
if (num1>num2) { // condição se
System.out.println(num1);
} else { // condição se não
System.out.println(num2);
}
}
}
2.2 Algoritmos condicionais que utilizam operadores lógicos (&& significa (e), || significa (ou)).
Escreva um algoritmo que permita a leitura de três números distintos e mostre o maior.
Algoritmo:
4
Código fonte:
pakage maior;
import java.util.*;
public class Maior {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int num1,num2,num3;
System.out.print("Ingresse o primeiro valor:");
num1=teclado.nextInt();
System.out.print("Ingresse segundo valor:");
num2=teclado.nextInt();
System.out.print("Ingresse o terceiro valor:");
num3=teclado.nextInt();
if (num1>num2 && num1>num3) {
System.out.print(num1);
} else {
if (num2>num3) {
System.out.print(num2);
}else {
System.out.print(num3);
}
}
}
}
Teste este código no NerBeans
2.2.1 Algoritmos condicionais que utilizam operadores lógicos (&& significa (e), || significa (ou)).
Escrever um algoritmo que permita que solicitar uma data (día, mês e ano) e mostrar uma mensagem se a mesma
corresponde ao primeiro trimestre do ano (janeiro, fevereiro ou março). Carregar pelo teclado o valor numérico do
día, mês e o ano.
5
Algoritmo:
Neste algoritmo a condição o que diz é que se o mês é 1, ou o mês é 2 ou o mês é 3, então a condição é verdadeira,
se qualquer de aqueles três for verdadeira, então a condição geral também é verdadeira, a diferença com ocaso 2.2
onde ambas tem que ser verdadeiras para considerar a condição geral verdadeira, caso contrário seria falsa.
3. Algoritmos recursivos
3.1 algoritmo recursivo while
Agora temos que apontar que em todos os casos anteriores as variáveis de entrada sempre são entre um e três
valores, facto que simplifica o algoritmo em tempo de execução, mas se em lugar de esta pequena quantidade de
número for necessário introduzir uma elevada quantidade de números, por exemplo 10000 valores de entrada ou
ainda muito menos do que isto, converteria no algoritmo muito ineficiente além de ser cansativo para o utilizador,
por tal razão quando há muitas operações repetitivas, então é mais apropriado utilizar um algoritmo cíclico.
Funcionamento: primeiro verifica-se a condição, se a mesma resulta verdadeira se executam as operações indicadas
pelo ramo do Verdadeiro. No caso que a condição seja falsa continua pelo ramo do Falso e sai da estrutura repetitiva
para continuar com a execução do algoritmo. O bloco se repete ENQUANTO QUE a condição for Verdadeira.
6
Problema:
Escreva um algoritmo que perita solicitar ingressar um valor positivo e apresente todos os números desde 1 até o
valor ingressado, em ordem crescente. Exemplo: Se ingressamos 30 se deve mostrar os números de 1 até 30.
Algoritmo:
Código fonte:
Ppakage intervaloNumero;
import java.util.*;
public class IntervaloNumero {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int n,x;
System.out.println("Ingresse um valor :");
n=teclado.nextInt();
x=1;
while (x<=n) {
System.out.println(x);
System.out.println(" - ");
x = x + 1;
}
}
}
Teste o código anterior com o NetBeans
O algoritmo anterior, após de cada ciclo, volta avaliar a condição e este facto faz diminuir a eficiência do mesmo em
tempo de execução, pelo que quando são muitos dados, é preferível procurar um outro algoritmo que evite es
proceder para conseguir melhorar a eficiência. (Ver documento onde se trata a introdução ao analise de algoritmos)
O algoritmo do while é outra estrutura recursiva, a qual executa-se pelo menos uma vez seu bloco repetitivo, a
diferença de while ou do algoritmo for que poderiam não executar o bloco dependendo da condição.
7
Problema :
Desenvolver um algoritmo que permita ingressar o peso (em kilogramas) das peças produzidas por uma fábrica. O
processo termina quando ingressamos o valor 0. Deve-se informar as seguintes mensagens:
a). Quantas peças tem um peso entre 9,8 Kg. e 10,2 Kg.?, quantas com mais de 10,2 Kg.? e quantas com menos de 9,8
Kg.?
b) A quantidade total de peças processadas
Algoritmo :
8
Código fonte_
package peças;
import java.util.*;
public class Peças {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int quant1,quant2,quant3,soma;
float peso;
quant1=0;
quant2=0;
quant3=0;
do {
System.out.print("Ingresse o peso da peca (0 pera finalizar):");
peso=teclado.nextFloat();
if (peso>10.2) {
quant1++;
} else {
if (peso>=9.8) {
quant2++;
} else {
if (peso>0) {
quant3++;
}
}
}
} while(peso!=0);
soma=quant1+quant2+quant3;
System.out.println("Pecas aptas:" + quant2);
System.out.print("Pecas com um peso superior a 10.2:" + quant1);
System.out.print("Pecas com um peso inferior a 9.8:"+ quant3);
}
}
Teste o código anterior com o NetBeans
ou
Problema :
Desenvolva um algoritmo que solicite ingressar 10 valores e mostre posteriormente a soma dos valores ingressados
e a média. (Estrutura for).
Análise:
9
Variáveis de entrada: valor,
Variáveis de saída: soma, média
A soma está escrita como frequência acumulada porque vai-se somando o valor que fosse introduzindo
soma=soma+valor;
Processos: cálculo da soma e a média
Decisões: continuar a execução até que f for menor ou igual a 10, caso contrário terminar ciclo e continuar o fluxo
Variáveis de saída: soma e média
Algoritmo:
Código fonte:
package estruturaRepetitivaFor1;
import java.util.*;
10
System.out.println("a média e:");
System.out.println(média);
}
}
Pegue o código anterior e execute-o no NetBeans e observe o resultado
Problema :
Escrever uma classe que leia 10 números inteiros elo teclado e logo mostre quantos valores ingressados foram
múltiplos de 3 e quantos de 5, devemos ter em conta que há números que são múltiplos de 3 e de 5
Análise:
Variáveis de entrada: valor,
Variáveis de saída: múltiplos de 3, múltiplos de 5, Frequências acumuladas: 2, que são mul3=mult3+1 ; mul5=mult5+1, as mesmas
devem ser inicializadas em zero
Processos: cálculo da soma das 2 frequências acumuladas
Decisões: Sim, se o resto da divisão inteira por 3 é Zero então é múltiplo de 3 e soma 1 para a frequência acumulada mul3, se o resto
da divisão inteira por 5 é zero, soma 1 na frequência acumulada mul5 e repetir o ciclo quando f menor ou igual a 10, caso contrário
sair do ciclo e continuar o fluxo, neste caso mostrando o resultado e logo terminar.
Algoritmo:
Código fonte
package estruturaRepetitivaFor2;
import java.util.*;
public class EstruturaRepetitivaFor2 {
public static void main(String[] args) {
Scanner teclado=new Scanner(System.in);
int mul3,mul5,valor,f;
mul3=0; // isto significa que há que inicializar esta variável pois quando náo se digitou
//nehum número ele tem valor Zero,
11
mul5=0;
for(f=1;f<=10;f++) {
System.out.print("ingresse un valor:");
valor=teclado.nextInt();
if (valor%3==0) {
mul3=mul3+1;
}
if (valor%5==0) {
mul5=mul5+1;
}
}
System.out.print("Quantidade de valores ingressados múltiplos de 3:");
System.out.println(mul3);
System.out.print("Quantidade de valores ingressados múltiplos de 5:");
System.out.print(mul5);
}
}
Código fonte:
package estruturaRepetitivaFor3
import java.util.*;
public class EstruturaRepetitivaFor3 {
public static void main(String[] args) {
12
Scanner teclado=new Scanner(System.in);
int quantidade,n,f,valor;
quantidade=0;
System.out.println("Quantos valores ingressará:");
n=teclado.nextInt();
for(f=1;f<=n;f++) {
System.out.println("Ingresse o valor:");
valor=teclado.nextInt();
if (valor>=1000) {
quantidade=quantidade+1;
}
}
System.out.println("a quantidade de valores ingressados maiores ou iguais a 1000 são:");
System.out.print(quantidade);
}
}
Pegue o código anterior e execute-o no NetBeans e observe o resultado
13