Você está aqui: Cards de Engenharia Civil - Fundações |
||
|
||
|
|
||
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos |
Algorítmos Resolvidos de Java - A classe Retangulo (construtores, getters e setters, encapsulamento e static)Quantidade de visualizações: 16367 vezes |
|
Exercícios Resolvidos de Java - A classe Retangulo (construtores, getters e setters, encapsulamento e static) Pergunta/Tarefa: Escreva uma classe Retangulo para representar um retângulo. A classe deve conter: a) Dois campos de dados do tipo double chamados largura e altura que especificam a largura e a altura do retângulo. Os valores padrões são 1 tanto para a largura quanto para a altura. b) Um campo de dado do tipo String chamado cor que especifica a cor do retângulo. Para este exercício em particular, assuma que TODOS os retângulos possuirão a mesma cor. A cor padrão é branco. c) Um construtor sem argumentos que cria um retângulo padrão. d) Um construtor que cria um retângulo com a largura e altura especificadas. e) Métodos get() e set() para os três campos de dados da classe. f) Um método chamado getArea() que retorna a área do retângulo. g) Um método chamado getPerimetro() que retorna o perímetro do retângulo. Escreva um programa de teste que cria dois objetos da classe Retangulo. Sua saída deverá ser parecida com: ![]() Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: Retangulo.java
package estudos;
public class Retangulo {
private double largura; // largura do retângulo
private double altura; // altura do retângulo
// O exercício pede que TODOS os retângulos tenham a mesma cor
// consulte a dica http://www.arquivodecodigos.net/dicas/1158 para mais
// detalhes sobre o modificador static
private static String cor = "branco"; // cor do retângulo
// construtor sem argumentos
public Retangulo(){
this.largura = 1;
this.altura = 1;
}
// construtor que permite especificar a largura e a altura
public Retangulo(double largura, double altura){
this.largura = largura;
this.altura = altura;
}
// obtém a altura
public double getAltura() {
return altura;
}
// define a altura
public void setAltura(double altura){
this.altura = altura;
}
// obtém a largura
public double getLargura(){
return largura;
}
// define a largura
public void setLargura(double largura){
this.largura = largura;
}
// obtém a cor de TODOS os retângulos
public static String getCor(){
return cor;
}
// define a cor de TODOS os retângulos
public static void setCor(String cor){
Retangulo.cor = cor;
}
// este método retorna a área do retângulo (em metros quadrados)
public double getArea(){
return (this.largura * this.altura);
}
// este método retorna o perímetro do retângulo (em metros)
public double getPerimetro(){
return ((2 * this.largura) + (2 * this.altura));
}
}
Agora o teste no método main():
package estudos;
public class Estudos {
public static void main(String[] args) {
// vamos criar uma instância da classe Retangulo com
// os valores padrões
Retangulo a = new Retangulo();
// agora vamos informar a largura e a altura
Retangulo b = new Retangulo(10, 5);
// os dois retângulos terão a cor verde
Retangulo.setCor("verde");
// vamos mostrar os resultados do primeiro retângulo
System.out.println("Primeiro retângulo");
System.out.println("Largura: " + a.getLargura());
System.out.println("Altura: " + a.getAltura());
System.out.println("Cor: " + Retangulo.getCor());
System.out.println("Área: " + a.getArea() + " metros quadrados");
System.out.println("Perímetro: " + a.getPerimetro() + " metros");
// vamos mostrar os resultados do segundo retângulo
System.out.println("\nSegundo retângulo");
System.out.println("Largura: " + b.getLargura());
System.out.println("Altura: " + b.getAltura());
System.out.println("Cor: " + Retangulo.getCor());
System.out.println("Área: " + b.getArea() + " metros quadrados");
System.out.println("Perímetro: " + b.getPerimetro() + " metros");
}
}
|
Python ::: Dicas & Truques ::: Lista (List) |
Vetores e matrizes em Python - Como inserir itens em posições aleatórias de uma listaQuantidade de visualizações: 10061 vezes |
|
Este exemplo mostra como adicionar itens em posições aleatórias de uma lista Python. Note como usamos o método insert() da classe List passando um valor randômico para o índice no qual o novo elemento será inserido. Veja o código completo para a dica:
# vamos importar o módulo random
import random
def main():
# cria uma lista vazia
valores = []
# início do laço for
for i in range(1, 11):
valor = int(input("Informe um inteiro: "))
if(len(valores) == 0):
valores.insert(0, valor)
else:
# insere o valor em um posição aleatória
valores.insert(random.randrange(0,
len(valores)), valor)
# exibe os valores da lista
print("Valores na lista:", valores, "\n")
# fim do laço for
if __name__== "__main__":
main()
Ao executarmos este código Python nós teremos o seguinte resultado: Informe um inteiro: 9 Valores na lista: [9] Informe um inteiro: 3 Valores na lista: [3, 9] Informe um inteiro: 2 Valores na lista: [2, 3, 9] Informe um inteiro: 8 Valores na lista: [2, 3, 8, 9] Informe um inteiro: 10 Valores na lista: [10, 2, 3, 8, 9] Informe um inteiro: 18 Valores na lista: [18, 10, 2, 3, 8, 9] Informe um inteiro: 30 Valores na lista: [18, 10, 30, 2, 3, 8, 9] Informe um inteiro: 60 Valores na lista: [18, 10, 30, 2, 3, 8, 60, 9] Informe um inteiro: 67 Valores na lista: [18, 10, 67, 30, 2, 3, 8, 60, 9] Informe um inteiro: 82 Valores na lista: [18, 10, 67, 30, 2, 3, 8, 82, 60, 9] |
Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Projetos Java Programação Orientada a Objetos - Exemplos Java |
Sistema para Biblioteca usando Programação Orientada a Objetos em Java - Projeto completo com código fonte - Versão consoleQuantidade de visualizações: 16492 vezes |
|
Sistema para Gestão de Biblioteca usando Programação Orientada a Objetos em Java - Projeto completo com código fonte - Versão console Controle de Biblioteca - Sobre este projeto Java ![]() Nesta dica apresento a idéia de um Controle de Gestão de Biblioteca em Java usando Programação Orientada a Objetos. Trata-se de um programa com código fonte em duas versões console. Na primeira versão temos os dados sendo gerenciados por objetos ArrayList. Na segunda versão nós tiramos proveito dos métodos dos métodos readObject() e writeObject() e da interface Serializable para implementar a serialização de objetos em Java. Dessa forma, os dados do sistema podem ser salvos e carregados todas as vezes que o sistema for iniciado. Um Controle de Gestão de Biblioteca é um projeto ideal para dominar a programação orientada a objetos em Java, além de permitir colocar em prática várias coisas que estudamos na linguagem e não temos a oportunidade de implementar. Assim, este código, se bem estudado e bem entendido, pode render um controle de biblioteca pronto para ser vendido no mercado ou implementado em sua própria escola ou faculdade. Basta conectar as funcionalidades das classes a um banco de dados tal como o MySQL e adicionar mais alguns pequenos detalhes. O Diagrama de Classes Java Antes de falarmos mais sobre o projeto do Sistema de Biblioteca, dê uma boa olhada no seu diagrama de classes: ![]() Como a aplicação está estruturada? Como podemos ver no diagrama de classes, todo o controle do sistema é feito a partir da classe Biblioteca, que contém objetos da classe ArrayList para guardar objetos das classes Usuario, Autor, Editora, Livro, Emprestimo e Multa. O relacionamento entre os objetos das classes envolvidas está bem definido no código fonte, com comentários e menus individuais para o gerenciamento de cada parte que compõe o controle de biblioteca apresentado. Um empréstimo envolve um livro e um usuário, e pode gerar uma multa caso a devolução seja feita fora do prazo. A multa é gerada somente na devolução. Em sistemas reais, o usuário não pode fazer uma nova locação caso a multa não seja paga. Deixamos como sugestão e desafio, essa implementação no código. No entanto, já fizemos todo o restante do cálculo para você, ou seja, fizemos a diferença entre a data do empréstimo e sua devolução e geramos a multa, se houver, já com o devido valor a ser pago. Um livro está relacionado a um autor e a uma editora. Inicialmente o livro é cadastrado como disponível. Porém, esse status é alterado para indisponível quando ele está envolvido em um empréstimo, e novamente disponível quando é feita a devolução. Tudo isso é feito por meio de vários menus de opções, como mostro a seguir. As opções de menu para o gerencimento do sistema da biblioteca O menu principal foi escrito usando-se o seguinte código:
// método que exibe o menu principal do sistema
public void menuPrincipal(){
Scanner entrada = new Scanner(System.in);
while(true){
limparTela();
System.out.println("\n:: B I B L I O T E C A ::\n");
System.out.println("Bem-vindo(a) ao sistem.
Escolha a opção desejada");
System.out.println("1 - Livros");
System.out.println("2 - Autores");
System.out.println("3 - Editoras");
System.out.println("4 - Usuários");
System.out.println("5 - Empréstimos");
System.out.println("6 - Multas");
System.out.println("7 - Sair");
System.out.print("Sua opção: ");
// lê a opção do usuário
int opcao = Integer.parseInt(entrada.nextLine());
switch(opcao){
case 1:
// chama o menu de gerenciamento de livros
menuGerenciarLivros();
break;
case 2:
// chama o menu de gerenciamento de autores
menuGerenciarAutores();
break;
case 3:
// chama o menu de gerenciamento de editoras
menuGerenciarEditoras();
break;
case 4:
// chama o menu de gerenciamento de usuários
menuGerenciarUsuarios();
break;
case 5:
// chama o menu de gerenciamento de emprestimos
menuGerenciarEmprestimos();
break;
case 6:
// chama o menu de gerenciamento de multas
menuGerenciarMultas();
break;
case 7:
System.out.println("\nObrigado por usar o
Sistema de Biblioteca\n");
System.exit(0);
}
}
}
Note que cada case do switch do menu principal chama um método que será responsável por exibir um menu individual para o gerencimento da classe correspondente. Veja, por exemplo, o menu para cadastrar um novo usuário na biblioteca:
// menu para cadatrar, listar, pesquisar, excluir
// e atualizar os usuários da biblioteca
public int menuGerenciarUsuarios(){
Usuario temp; // serve para várias operações neste menu
// serve para as pesquisas dos usuários
String pesquisaUsuario;
Scanner entrada = new Scanner(System.in);
// mostra o menu de forma repetitiva até o usuário
// usar a opção de sair
while(true){
// tire caso não funcionar no seu sistema operacional
limparTela();
System.out.println("\n:: G E R E N C I A R U S U Á R I O S ::\n");
System.out.println("Escolha a opção desejada");
System.out.println("1 - Novo Usuário");
System.out.println("2 - Listar Usuários");
System.out.println("3 - Pesquisar Usuário");
System.out.println("4 - Excluir Usuário");
System.out.println("5 - Atualizar Usuário");
System.out.println("6 - Voltar Menu Anterior");
System.out.print("Sua opção: ");
// lê a opção do usuário
int opcao = Integer.parseInt(entrada.nextLine());
switch(opcao){
case 1: // vamos cadastrar um novo usuário
System.out.print("\nNome: ");
String nomeUsuario = entrada.nextLine();
System.out.print("Idade: ");
int idadeUsuario = Integer.parseInt(entrada.nextLine());
System.out.print("Sexo: ");
char sexoUsuario = entrada.nextLine().charAt(0);
// vamos incrementar o contador de usuários
Usuario.contadorUsuarios++;
// agora vamos criar um novo objeto da classe Usuario
Usuario u = new Usuario(Usuario.contadorUsuarios,
nomeUsuario, idadeUsuario, sexoUsuario);
// e o adicionamos no ArrayList de usuários
usuarios.add(u);
// e finalmente mostramos uma mensagem de sucesso.
System.out.println("\nO usuário foi cadastrado com sucesso");
salvarDadosArquivo(); // salva os dados no arquivo
break;
...
Devo usar ArrayList do Java para desenvolver o sistema? Sim, objetos da classe ArrayList são perfeitos quando precisamos representar relacionamentos um para muitos e muitos para um. É claro que poderíamos usar vetores de objetos (usando array), mas ficaríamos restritos a tamanhos fixos, enquanto o ArrayList nos permite cadastrar quantos usuários, livros, editoras, autores e empréstimos nós quisermos. Dessa forma, veja, por exemplo, o trecho de código que registra um novo empréstimo:
case 1: // vamos cadastrar um novo empréstimmo
// para registrar um novo empréstimo nós precisamos
// de um usuário
// o usuário que será relacionado a este empréstimo
Usuario usuario = null;
while(usuario == null){
System.out.print("\nInforme o id ou nome do usuário: ");
String pesquisaUsuario = entrada.nextLine();
// chamamos o método que pesquisa o usuario
usuario = pesquisarUsuario(pesquisaUsuario);
if(usuario == null){ // usuario não encotrado
System.out.print("\nUsuário não
encontrado.\n\nDigite 1 para pesquisar
novamente ou 2 para voltar ao menu anterior: ");
int opcaoTemp = Integer.parseInt(entrada.nextLine());
if(opcaoTemp == 2){
return 1; // saímos daqui e voltamos para o menu anterior
}
}
}
System.out.println("Usuário selecionado: " + usuario.getNome());
// fim para registrar um novo empréstimo nós
// precisamos de um usuário
// para registrar um novo empréstimo nós precisamos
// de um livro
Livro livro = null; // o livro que será relacionado
// a este empréstimo
while(livro == null){
System.out.print("Informe o id, título ou ISBN do livro: ");
String pesquisaLivro = entrada.nextLine();
// chamamos o método que pesquisa o livro
livro = pesquisarLivro(pesquisaLivro);
// livro não encontrado ou indisponível
if((livro == null) || (!livro.isDisponivel())){
System.out.print("\nLivro não encontrado
ou indisponível.\n\nDigite 1 para
pesquisar novamente ou 2 para voltar ao
menu anterior: ");
int opcaoTemp = Integer.parseInt(entrada.nextLine());
if(opcaoTemp == 2){
return 1; // saímos daqui e voltamos para o menu anterior
}
}
}
System.out.println("Livro selecionado: " + livro.getTitulo());
// fim para cadastrar um novo empréstimo nós
// precisamos de um livro
try{
System.out.print("Data do Empréstimo: ");
String dataEmprestimo = entrada.nextLine();
Date dataEmprestimoDate =
new SimpleDateFormat("dd/MM/yyyy").parse(dataEmprestimo);
System.out.print("Data de Devolução: ");
String dataDevolucao = entrada.nextLine();
Date dataDevolucaoDate =
new SimpleDateFormat("dd/MM/yyyy").parse(dataDevolucao);
// a data de devolução é menor que a data de empréstimo?
if(dataDevolucaoDate.getTime() <= dataEmprestimoDate.getTime()){
System.out.println("\nA data de devolução
deve ser maior que a data de empréstimo.\n");
}
else{
// vamos incrementar o contador de empréstimos
Emprestimo.contadorEmprestimos++;
// vamos marcar o livro escolhido como indisponível
livro.setDisponivel(false);
// agora vamos criar um novo objeto da classe Emprestimo
Emprestimo emprestimo = new Emprestimo(usuario,
livro, Emprestimo.contadorEmprestimos,
dataEmprestimoDate, dataDevolucaoDate,
null, false);
// e o adicionamos no ArrayList de empréstimos
emprestimos.add(emprestimo);
// e finalmente mostramos uma mensagem de sucesso.
System.out.println("\nO empréstimo foi registrado com sucesso");
salvarDadosArquivo(); // salva os dados no arquivo
}
}
catch(ParseException e){
System.out.println("\nAs datas informadas são inválidas.\n");
}
break;
Note que este trecho de código é parte do case da opção Novo Empréstimo do menu Gerenciar Empréstimos. Veja como usamos uma variável estática contadorEmprestimos da classe Emprestimo para criarmos um valor inteiro auto-incremento que nos permite identificadores únicos para cada empréstimo da biblioteca. Viu que código mais lindo? Note como a Programação Orientada a Objetos em Java nos permite desenvolver idéias de forma bem parecida mesmo ao mundo real. Como posso obter este código fonte? O código fonte desta aplicação é fornecido em duas versões: 1) SBIBLIOJCNB-A - Sistema de Gestão de Biblioteca em Java com Código Fonte Versão Console - NetBeans IDE ou Eclipse. 2) SBIBLIOJCNB-B - Sistema de Gestão de Biblioteca em Java com Código Fonte Versão Console - Lê e salva os dados em arquivo usando serialização (Serializable), ou seja, os métodos readObject() e writeObject() - NetBeans IDE ou Eclpse. Para adquirir, entre em contato conosco usando o WhatsApp ou e-mail indicados na lateral do site. Podemos combinar alterações e a adição de novas funcionalidades. Não se esqueça: Uma boa forma de estudar o código é fazendo pequenas alterações e rodando para ver os resultados. Outra opção é começar um projeto Java do zero e ir adicionando trechos do código fonte para melhor entendimento de suas partes. |
C ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar ponteiros void na linguagem C - Curso de Linguagem C para iniciantesQuantidade de visualizações: 17118 vezes |
Em dicas desta seção você aprendeu que é possível criar ponteiros para os mais diferentes tipos. Veja:int *ponteiro_int; float *ponteiro_float; double *ponteiro_double; Existe, porém, um tipo de ponteiro que pode ser usado com todos os tipos de dados existentes ou ainda a serem criados. Este tipo é conhecido como void, ou seja, um ponteiro genérico e pode ser declarado da seguinte forma: void *ponteiro; // ponteiro genérico Veja um trecho de código no qual usamos um ponteiro genéríco para apontar para variáveis de diferentes tipos:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int valor = 20;
float valor2 = 5.23;
void *ponteiro; // ponteiro genérico
ponteiro = &valor; // aponta para um inteiro
printf("%d\n", *(int *)ponteiro);
ponteiro = &valor2; // aponta para um float
printf("%0.2f\n", *(float *)ponteiro);
system("PAUSE");
return 0;
}
Uma observação importante é a necessidade de uma conversão explícita (cast) no momento de desreferenciar um ponteiro genéríco. Neste caso ele precisa ser convertido para o tipo de ponteiro sendo usado no momento. Veja:
printf("%d\n", *(int *)ponteiro);
A parte (int *)ponteiro converte o ponteiro genérico em um ponteiro do tipo int e o símbolo * externo é usado para desreferenciar. Se essa conversão não for feita teremos um aviso e erro na maioria dos compiladores. Veja:
printf("%d\n", *ponteiro);
[Warning] dereferencing 'void *' pointer
invalid use of void expression
Embora essa conversão seja necessária quando estamos desreferenciando um ponteiro genérico, podemos abrir mão dela na atribuição de um ponteiro genérico a um ponteiro de um tipo específico:
ponteiro = &valor; // aponta para um inteiro
int *ponteiro_int = ponteiro;
printf("%d\n", *ponteiro_int);
Para finalizar, saiba que as funções malloc() e calloc() retornam ponteiros void, ou seja, ponteiros genéricos que podem ser atribuídos a ponteiros de qualquer tipos. Neste caso, o ponteiro retornado por estas funções aponta para a primeira posição do bloco de memória requisitada. |
PHP ::: Dicas & Truques ::: Data e Hora |
Como gerar um calendário mensal completo para um determinado mês e ano usando PHPQuantidade de visualizações: 2 vezes |
|
Nesta dica eu mostro como podemos usar as principais funções de data e hora da linguagem PHP para montar um calendário PHP completo (com comentários e fácil de modificar). Basta passar um mês e ano e a função se encarrega do restante. Este código é muito útil em aplicações PHP para escolas, faculdades, sistemas financeiros, etc. Veja o resultado na imagem abaixo: ![]() E agora o código completo:
<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
<?php
// função que permite montar o calendário
function montar_calendario($mes, $ano){
// um vetor para guardar os meses
$meses = array(1 => 'Janeiro', 2 => 'Fevereiro',
3 => 'Março', 4 => 'Abril', 5 => 'Maio',
6 => 'Junho', 7 => 'Julho', 8 => 'Agosto',
9 => 'Setembro', 10 => 'Outubro', 11 => 'Novembro',
12 => 'Dezembro');
// um vetor com os dias da semana
$dias_semana = array('Dom', 'Seg', 'Ter', 'Qua',
'Qui', 'Sex', 'Sáb');
// vamos obter o primeiro dia do calendário
$primeiro_dia = mktime(0, 0, 0, $mes, 1, $ano);
// obtém a quantidade de dias no mês
$dias_mes = date('t', $primeiro_dia);
// dia da semana que o calendário inicia (começa em 0)
$dia_inicio = date('w', $primeiro_dia);
// cria a tabela HTML para o calendário
echo '<table border="1" cellspacing="0" cellpadding="4">
<tr><th colspan="7">'. $meses[$mes] . ' - ' .
$ano . '</th>
</tr>
<tr><td align="center">';
echo implode('</td><td align="center">', $dias_semana);
echo '</td></tr>';
// precisamos de células vazias até encontrarmos
// o dia inicial da semana
if($dia_inicio > 0){
for($i = 0; $i < $dia_inicio; $i++){
echo '<td> </td>';
}
}
// agora já podemos começar a preencher o
// calendário
for($dia = 1; $dia <= $dias_mes; $dia++ ){
if($dia_inicio == 0){
// vamos colorir o domingo de vermelho
$estilo = ' style="color: red"';
}
else{
$estilo = '';
}
// vamos colocar a data de hoje sublinhada
if(($dia == date("j")) && ($mes == date("n")) &&
($ano == date("Y"))){
echo '<td ' . $estilo . ' align="center"><u>'
. $dia . '</u></td>';
}
else{
echo '<td ' . $estilo . ' align="center">' .
$dia . '</td>';
}
// vamos incrementar o dia de referência
$dia_inicio++;
// já precisamos adicionar uma nova linha na tabela?
if($dia_inicio == 7){
$dia_inicio = 0;
echo "</tr>";
if($dia < $dias_mes){
echo '<tr>';
}
}
} // fim do laço for
// agora preenchemos as células restantes
if($dia_inicio > 0){
for($i = $dia_inicio; $i < 7; $i++){
echo '<td> </td>';
}
echo '</tr>';
}
echo '</table>';
}
// vamos montar o mês de março de 2021
montar_calendario(3, 2021);
?>
</body>
</html>
|
Desafios, Exercícios e Algoritmos Resolvidos de PHP |
Veja mais Dicas e truques de PHP |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |









