Você está aqui: Cards de Hidrostática |
||
|
||
|
|
||
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteirosQuantidade de visualizações: 9269 vezes |
|
Exercício Resolvido de Java - Um método recursivo que calcula o MDC (máximo divisor comum) entre dois números inteiros Pergunta/Tarefa: O máximo divisor comum ou MDC (mdc) entre dois ou mais números inteiros é o maior número inteiro que é fator de tais números. Por exemplo, os divisores comuns de 12 e 18 são 1, 2, 3 e 6, logo mdc(12, 18) = 6. A definição abrange qualquer número de termos, por exemplo mdc(10, 15, 25, 30) = 5. O cálculo do MDC entre x e y pode ser feito recursivamente da seguinte forma: Se y for igual a 0, então mdc(x, y) = x. Caso contrário, mdc(x, y) = mdc(y, x % y), no qual % é o operador de módulo (restante da divisão inteira). Escreva um método recursivo que receba dois inteiros e calcule o mdc. Seu método deverá possuir a seguinte assinatura:
public static int mdc(int x, int y){
// sua implementação aqui
}
Informe o primeiro inteiro: 12 Informe o segundo inteiro: 18 O MDC dos valores 12 e 18 é 6 Veja a resolução comentada deste exercício usando Java console:
package exercicio;
import java.util.Scanner;
public class Exercicio {
public static void main(String[] args) {
// cria um novo objeto da classe Scanner
Scanner entrada = new Scanner(System.in);
// vamos solicitar dois valores inteiros
System.out.print("Informe o primeiro inteiro: ");
// lê o primeiro inteiro
int a = Integer.parseInt(entrada.nextLine());
// solicita o segundo inteiro
System.out.print("Informe o segundo inteiro: ");
// lê o segundo inteiro
int b = Integer.parseInt(entrada.nextLine());
// mostra o resultado
System.out.print("O MDC dos valores " + a + " e " +
b + " é " + mdc(a, b));
System.out.println("\n");
}
// método recursivo que calcula o mdc de dois inteiros
public static int mdc(int x, int y){
// a recursividade é interrompida quando y for igual a 0
if(y == 0){
return x;
}
else{
return mdc(y, x % y); // efetua uma nova chamada recursiva
}
}
}
|
Java ::: Dicas & Truques ::: Entrada e Saída em Arquivos (File Input/Output - IO) |
Como ler o conteúdo de um arquivo uma linha de cada vez usando o método readLine() da classe RandomAccessFile da linguagem JavaQuantidade de visualizações: 13524 vezes |
|
Uma das operações mais frequentes em um programa é a leitura do conteúdo de arquivos. A classe RandomAccessFile nos fornece o método readLine() que é muito útil quando precisamos ler as linhas de conteúdo em um arquivo. O método readLine() lê bytes consecutivos do arquivo, começando na posição atual do ponteiro de arquivos até alcançar um caractere marcador de final de linha ou o fim do arquivo. Cada byte é convertido em um caractere tomando-se o valor do byte para os oito bits de menor ordem do caractere e definindo os oito bits de ordem alta do caractere como zero. Desta forma, este método não suporta Unicode completamente. Uma linha de texto é finalizada por um caractere de retorno de carro ("\r"), um caractere de nova linha ("\n"), um caractere de retorno de carro seguido por um caractere de nova linha, ou o final do arquivo. Caracteres de final de linha não são incluídos na string retornada pelo método. É importante observar que, a cada chamada ao método readLine(), o ponteiro de arquivo é avançado e posicionado para a leitura subsequente. Veja o exemplo:
import java.io.*;
public class Estudos{
public static void main(String[] args){
// uma instância de RandomAccessFile para leitura e escrita
try{
RandomAccessFile arquivo =
new RandomAccessFile("C:\\java\\conteudo.txt", "rw");
// vamos ler o conteúdo do arquivo uma linha de cada vez
String linha;
while((linha = arquivo.readLine()) != null){
System.out.println("Posição do ponteiro: " +
arquivo.getFilePointer());
System.out.println(linha);
}
arquivo.close();
}
catch(FileNotFoundException fnfe){
System.out.println(fnfe.getMessage());
}
catch(IOException ioe){
System.out.println(ioe.getMessage());
}
System.exit(0);
}
}
Ao executar este exemplo nós teremos o seguinte resultado: Posição do ponteiro: 27 Primeira linha do arquivo Posição do ponteiro: 53 Segunda linha do arquivo Posição do ponteiro: 78 Terceira linha do arquivo |
Java ::: Tratamento de Erros ::: Passos Iniciais |
Como usar try catch em Java - Aprenda a tratar erros em Java usando o bloco try...catchQuantidade de visualizações: 40278 vezes |
A forma mais comum de tratar e se recuperar de erros em uma aplicação Java é usando o bloco try...catch. Todo o código que apresenta a possibilidade de erros ou falhas é colocado em um bloco try. E o código a ser executado caso o erro ou falha aconteça é colocado em um bloco catch. Veja a sintáxe:
try{
// código que pode provocar erros
}
catch(Tipo_Exceção nome){
// tratamento do erro
}
A palavra-chave catch é seguida por uma declaração do tipo de exceção sendo lançada. É aqui que entram detalhes interessantes. Antes de tratar um erro, é preciso que você saiba qual erro estará tratando. Em Java temos três tipos de erros: runtime exceptions, checked exceptions e errors. Errors não precisam ser tratados com bloco try...catch, runtime exceptions (erros causados por códigos mal escritos ou mal testados) opcionalmente usam try...catch e checked exceptions (erros que fogem ao controle do programador) devem obrigatoriamente usar try...catch. Vamos ver um exemplo do uso de try...catch:
import java.io.*;
public class Estudos{
public static void main(String[] args){
try{
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream("conteudo.txt")));
while(in.available() != 0)
System.out.print((char) in.readByte());
}
catch(IOException e){
System.out.print(e.getMessage());
}
System.exit(0);
}
}
Neste trecho de código nós tentamos ler o conteúdo de um arquivo. O que aconteceria se o arquivo não existisse? O programa entraria em colapso. Além disso, todas as operações de entrada e saída (IO) estão suscetíveis a falhas externas. Por esta razão, o compilador nos força a usar try...catch nestas situações. Neste exemplo podemos ver que o bloco catch é seguido por uma definição da classe IOException. No entanto, este trecho de código pode também disparar a exceção FileNotFoundException. Olhando a documentação vemos que FileNotFoundException herda de IOException, que por sua vez herda de Exception. Isso nos mostra que, se não estivermos certos de qual exceção será lançada, podemos usar a superclasse Exception e usarmos o método getMessage() ou demais métodos para obter maiores informações sobre o erro. Vamos ver mais um exemplo de try...catch. Desta vez veremos como evitar uma exceção StringIndexOutOfBoundsException:
import java.util.*;
public class Estudos{
public static void main(String[] args){
String palavra = "Java";
Scanner in = new Scanner(System.in);
System.out.print("Informe um inteiro: ");
int indice = in.nextInt();
try{
System.out.println("O caractere no índice " +
"informado é " + palavra.charAt(indice));
}
catch(StringIndexOutOfBoundsException e){
System.out.println("Erro:" + e.getMessage());
}
}
}
Compile, execute este código e forneça um inteiro maior que 3 para ver o resultado. |
Java ::: Dicas & Truques ::: Data e Hora |
Como adicionar ou subtrair dias de uma data e hora usando o método add() da classe Calendar do JavaQuantidade de visualizações: 14118 vezes |
|
Este trecho de código mostra como usar o método add() da classe Calendar da linguagem Java para adicionar ou subtrair dias de uma data. Veja que este método requer o campo de calendário e um número inteiro. Para o nosso propósito, o campo de calendário pode ser DAY_OF_MONTH ou DATE. Um valor positivo adiciona dias enquanto um valor negativo subtrai. Veja o código completo:
package arquivodecodigos;
import java.util.*;
import java.text.*;
public class Estudos{
public static void main(String args[]){
Calendar agora = Calendar.getInstance();
// formata e exibe a data e hora atual
Format formato = new SimpleDateFormat(
"dd/MM/yyyy - HH:mm:ss");
System.out.println("Hoje é: " +
formato.format(agora.getTime()));
// vamos adicionar 5 dias a esta data
agora.add(Calendar.DAY_OF_MONTH, 5);
// o mesmo resultado pode ser obtido com
// agora.add(Calendar.DATE, 5);
// formata e exibe o resultado
formato = new SimpleDateFormat(
"dd/MM/yyyy - HH:mm:ss");
System.out.println("Daqui a 5 dias será: " +
formato.format(agora.getTime()));
}
}
Ao executar este código nós teremos o seguinte resultado: Hoje é: 19/03/2021 - 22:13:54 Daqui a 5 dias será: 24/03/2021 - 22:13:54 |
C++ ::: Win32 API (Windows API) ::: Strings e Caracteres |
Como converter caracteres individuais para letras maiúsculas usando a função CharUpper() da API do Windows a partir de seus códigos C++Quantidade de visualizações: 9896 vezes |
Pode usar a função CharUpper() da API do Windows para converter um caractere para seu correspondente em letra maiúscula. Veja o protótipo da função:LPTSTR CharUpper( LPTSTR lpsz ); Veja um exemplo no qual usamos esta função para converter uma letra minúscula em maiúscula:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]){
CHAR letra = 'a';
// vamos converter para letra maiúscula
CharUpper(&letra);
// vamos exibir o resultado
cout << letra << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Note que aqui nós fornecemos um ponteiro para o caractere que queremos transformar. Isso resulta em uma conversão sendo efetuada diretamente no caractere para o qual o ponteiro está apontando no momento. Podemos também obter o resultado da conversão em um outro ponteiro e usá-lo posteriormente. Veja:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]){
CHAR letra = 'a';
// vamos converter para letra maiúscula
CHAR *resultado = CharUpper(&letra);
// vamos exibir o resultado
cout << *resultado << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
|
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






