C# ::: Dicas & Truques ::: Matemática e Estatística

Apostila C# para iniciantes - Como calcular juros compostos e montante usando C#

Quantidade de visualizações: 14037 vezes
O regime de juros compostos é o mais comum no sistema financeiro e portanto, o mais útil para cálculos de problemas do dia-a-dia. Os juros gerados a cada período são incorporados ao principal para o cálculo dos juros do período seguinte.

Chamamos de capitalização o momento em que os juros são incorporados ao principal. Após três meses de capitalização, temos:

1º mês: M = P .(1 + i)
2º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i)
3º mês: o principal é igual ao montante do mês anterior: M = P x (1 + i) x (1 + i) x (1 + i)

Simplificando, obtemos a fórmula:

M = P . (1 + i)^n

Importante: a taxa i tem que ser expressa na mesma medida de tempo de n, ou seja, taxa de juros ao mês para n meses.

Para calcularmos apenas os juros basta diminuir o principal do montante ao final do período:

J = M - P

Vejamos um exemplo:

Considerando que uma pessoa empresta a outra a quantia de R$ 2.000,00, a juros compostos, pelo prazo de 3 meses, à taxa de 3% ao mês. Quanto deverá ser pago de juros?

Veja o código C# para a resolução:

static void Main(string[] args){
  double principal = 2000.00;
  double taxa = 0.03;
  int meses = 3;
  
  double montante = principal * Math.Pow((1 + taxa), meses);  
  double juros = montante - principal;

  Console.WriteLine("O total de juros a ser pago é: " 
      + juros);
  Console.WriteLine("O montante a ser pago é: " 
      + montante);

  Console.WriteLine("Pressione qualquer tecla para sair...");
  // pausa o programa
  Console.ReadKey();
}

Um outra aplicação interessante é mostrar mês a mês a evolução dos juros.

Veja o código a seguir:

static void Main(string[] args){
  double principal = 2000.00;
  double taxa = 0.03;
  int meses = 3;
  double anterior = 0.0;  

  for(int i = 1; i <= meses; i++){
    double montante = principal * Math.Pow((1 + taxa), i);
    double juros = montante - principal - anterior;
      
    anterior += juros;

    Console.WriteLine("Mês: " + i + " - Montante: " 
      + montante + " - Juros: " + juros);
  }  

  Console.WriteLine("Pressione qualquer tecla para sair...");
  // pausa o programa
  Console.ReadKey();
}



Revit C# ::: Dicas & Truques ::: Revit C# Windows Forms

Como criar um formulário Windows Forms a partir do Revit C#

Quantidade de visualizações: 750 vezes
Nesta dica mostrarei os passos necessários para se criar uma aplicação Revit C# contendo uma formulário Windows Forms. O objetivo é demonstrar como o usuário pode interagir com os elementos do formulário para acessar e manipular objetos do Revit a partir de códigos C#.

Antes de continuarmos, veja a janela Windows Forms que criamos logo abaixo:



Veja que temos um formulário contendo 6 Labels e 6 TextBox contendo as coordenadas inicias e finais de uma linha geométrica usada para criar um novo eixo na área de desenho do Revit. Ao informar as coordenadas e clicar o botão Desenhar Eixo, um novo objeto da classe Grid da Revit API é criado e desenhado no documento atual.

Este código é muito útil para iniciantes em programação Revit C# porque mostra como acessar o documento ativo usando ActiveUIDocument e em seguida passar este objeto para uma outra classe C#. De posse deste objeto nós podemos realizar várias tarefas, entre elas criar uma nova linha geométrica usando Line.CreateBound() e, em seguida, criar um novo Grid usando Grid.Create().

Veja o código completo para uma macro chamada Estudos do tipo Aplicativo. Se tiver dificuldades para executar, chama a gente nos contatos na parte superior do site que teremos prazer em ajudá-lo.

Eis a listagem do código C#:

using System;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace Estudos {
  [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.
    TransactionMode.Manual)]
  [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")]
  public partial class ThisApplication {
    private void Module_Startup(object sender, EventArgs e) {
      JanelaPrincipal janela = new JanelaPrincipal();
      janela.uidoc = this.ActiveUIDocument;
      janela.ShowDialog();
    }

    private void Module_Shutdown(object sender, EventArgs e) {
      // para fazer alguma limpeza de memória ou algo assim
    }

    #region Revit Macros generated code
    private void InternalStartup() {
    this.Startup += new System.EventHandler(Module_Startup);
    this.Shutdown += new System.EventHandler(Module_Shutdown);
    }
    #endregion
  }
  
  // classe para representar o formulário
  public class JanelaPrincipal : System.Windows.Forms.Form {
    public UIDocument uidoc;
    public System.Windows.Forms.TextBox txtX0;
    public System.Windows.Forms.TextBox txtY0;    
    public System.Windows.Forms.TextBox txtZ0;
    public System.Windows.Forms.TextBox txtX1;
    public System.Windows.Forms.TextBox txtY1;    
    public System.Windows.Forms.TextBox txtZ1;
    
    // construtor da classe
    public JanelaPrincipal() {
      this.Text = "Meu Formulário Revit C# Windows Forms"; // título da janela 
      this.Width = 390; // largura da janela
      this.Height = 240; // altura da janela
      // define a posição atual da janela
      this.StartPosition = FormStartPosition.CenterScreen;
      
      // vamos criar quatro labels e quatro caixas de texto
      Label label1 = new Label();
      label1.Text = "X Inicial:";
      label1.Location = new System.Drawing.Point(20, 20);
      label1.Height = 15;
      label1.Width = 80;

      Label label2 = new Label();
      label2.Text = "Y Inicial:";
      label2.Location = new System.Drawing.Point(120, 20);
      label2.Height = 15;
      label2.Width = 80;
      
      Label label3 = new Label();
      label3.Text = "Z Inicial:";
      label3.Location = new System.Drawing.Point(220, 20);
      label3.Height = 15;
      label3.Width = 80;
      
      txtX0 = new System.Windows.Forms.TextBox();   
      txtX0.Location = new System.Drawing.Point(20, 40);
      txtX0.Width = 80;
      txtX0.Height = 15;
      
      txtY0 = new System.Windows.Forms.TextBox();   
      txtY0.Location = new System.Drawing.Point(120, 40);
      txtY0.Width = 80;
      txtY0.Height = 15;
      
      txtZ0 = new System.Windows.Forms.TextBox();   
      txtZ0.Location = new System.Drawing.Point(220, 40);
      txtZ0.Width = 80;
      txtZ0.Height = 15;
      
      Label label4 = new Label();
      label4.Text = "X Final:";
      label4.Location = new System.Drawing.Point(20, 80);
      label4.Height = 15;
      label4.Width = 80;

      Label label5 = new Label();
      label5.Text = "Y Final:";
      label5.Location = new System.Drawing.Point(120, 80);
      label5.Height = 15;
      label5.Width = 80;
      
      Label label6 = new Label();
      label6.Text = "Z Final:";
      label6.Location = new System.Drawing.Point(220, 80);
      label6.Height = 15;
      label6.Width = 80;
      
      txtX1 = new System.Windows.Forms.TextBox();   
      txtX1.Location = new System.Drawing.Point(20, 97);
      txtX1.Width = 80;
      txtX1.Height = 15;
      
      txtY1 = new System.Windows.Forms.TextBox();   
      txtY1.Location = new System.Drawing.Point(120, 97);
      txtY1.Width = 80;
      txtY1.Height = 15;
      
      txtZ1 = new System.Windows.Forms.TextBox();   
      txtZ1.Location = new System.Drawing.Point(220, 97);
      txtZ1.Width = 80;
      txtZ1.Height = 15;
      
      // botão que desenha o eixo nas coordenadas indicadas      
      Button button1 = new Button();
      button1.Text = "Desenhar Eixo";
      button1.Location = new System.Drawing.Point(95, 160);
      button1.Width = 150;
      button1.Click += new System.EventHandler(DesenharEixo);
                
      // botão que fecha a janela      
      Button button2 = new Button();
      button2.Text = "Fechar";
      button2.Location = new System.Drawing.Point(265, 160);
      button2.Width = 80;
      button2.Click += new System.EventHandler(FecharJanela);
      
      // adiciona os controles à janela
      this.Controls.Add(label1);
      this.Controls.Add(label2);
      this.Controls.Add(label3);
      this.Controls.Add(label4);
      this.Controls.Add(label5);
      this.Controls.Add(label6);
      this.Controls.Add(txtX0);
      this.Controls.Add(txtY0);
      this.Controls.Add(txtZ0);
      this.Controls.Add(txtX1);
      this.Controls.Add(txtY1);
      this.Controls.Add(txtZ1);
      this.Controls.Add(button1);
      this.Controls.Add(button2);
    }
    
    // função usada para desenhar um novo eixo no documento atual
    private void DesenharEixo(object sender, System.EventArgs e) {
      // primeiro obtemos uma referência ao documento atual
      Document doc = uidoc.Document;
			
      // criamos a linha geométrica para posicionar o eixo 	
      XYZ inicio = new XYZ(Double.Parse(txtX0.Text), Double.Parse(txtY0.Text),
        Double.Parse(txtZ0.Text));
      XYZ final = new XYZ(Double.Parse(txtX1.Text), Double.Parse(txtY1.Text),
        Double.Parse(txtZ1.Text));
     
      // construímos a linha
      Line linhaGeometrica = Line.CreateBound(inicio, final);

      // iniciamos uma nova transação
      using(Transaction t= new Transaction(doc)) {
	t.Start("Criar um novo Grid");
	Grid grid = Grid.Create(doc, linhaGeometrica);
	t.Commit();
      }
    }
    
    // função usada para fechar a janela
    private void FecharJanela(object sender, System.EventArgs e) {
      this.Close();  
    }
  }
}

Não se esqueça de adicionar referências a System.Windows.Forms e System.Drawing. Basta, dentro do SharpDevelop, ir no menu Projeto -> Adicionar Referência.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercício Resolvido de Java - Escreva um programa Java que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor B

Quantidade de visualizações: 415 vezes
Pergunta/Tarefa:

Escreva um programa Java que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor B com seus elementos distribuídos da seguinte forma:

Vetor A = [8, 5, 4, 1, 2, 3, 4, 6, 9, 7]
Vetor B = [24, 10, 12, 2, 6, 6, 12, 12, 27, 14]

Note que os elementos do vetor B seguem um padrão. Se o elemento do vetor A estiver em uma posição par, então o elemento do vetor B será o triplo do elemento do vetor A. Caso contrário o elemento do vetor B será o dobro do elemento do vetor A.

Neste exercício a primeira posição/índice dos vetores é assumida como sendo zero. Em algumas linguagens de programação o primeiro índice é um e não zero.

Sua saída deverá ser parecida com:

Informe o valor do 1.o elemento: 8
Informe o valor do 2.o elemento: 5
Informe o valor do 3.o elemento: 4
Informe o valor do 4.o elemento: 1
Informe o valor do 5.o elemento: 2
Informe o valor do 6.o elemento: 3
Informe o valor do 7.o elemento: 4
Informe o valor do 8.o elemento: 6
Informe o valor do 9.o elemento: 9
Informe o valor do 10.o elemento: 7

Elementos do vetor A:

8,  5,  4,  1,  2,  3,  4,  6,  9,  7  

Elementos do vetor B:

24,  10,  12,  2,  6,  6,  12,  12,  27,  14
Resposta/Solução:

Veja a resolução comentada deste exercício em Java:

package estudos;

import java.util.Scanner;
 
public class Estudos {
  public static void main(String[] args) {
    // vamos fazer a leitura usando a classe Scanner
    Scanner entrada = new Scanner(System.in);
       
    // vamos declarar e construir dois vetores de 10 inteiros
    int vetor_a[] = new int[10];
    int vetor_b[] = new int[10];
    
    // agora vamos pedir para o usuário informar os valores
    // dos elementos do vetor A
    for(int i = 0; i < vetor_a.length; i++){
      System.out.print("Informe o valor do " + (i + 1) +
        ".o elemento: ");
      vetor_a[i] = Integer.parseInt(entrada.nextLine());
    }
    
    // vamos construir o vetor B
    for(int i = 0; i < vetor_a.length; i++){
      // o índice atual é par?
      if(i % 2 == 0){
        vetor_b[i] = vetor_a[i] * 3;
      }
      else{
        vetor_b[i] = vetor_a[i] * 2;
      }
    }
      
    // vamos mostrar os elementos do vetor A
    System.out.println("\nElementos do vetor A:\n");
    for(int i = 0; i < vetor_a.length; i++){
      System.out.print(vetor_a[i] + ",  ");
    }
    
    // vamos mostrar os elementos do vetor B
    System.out.println("\n\nElementos do vetor B:\n");
    for(int i = 0; i < vetor_b.length; i++){
      System.out.print(vetor_b[i] + ",  ");
    }
    System.out.println();
  }
}



Java ::: Coleções (Collections) ::: ArrayList

Como inserir um item em uma determinada posição da ArrayList do Java usando o método add()

Quantidade de visualizações: 14903 vezes
Nesta dica mostrarei como é possível usar o método add() da classe ArrayList do Java para inserir um elemento em uma determinada posição, ou seja, em um determinado índice da lista. Para isso nós só precisamos usar a assinatura do método add() que aceita também o índice no qual o novo elemento será inserido. Veja:

public void add(int index, E element)

Você deve ter em mente, claro, que este método pode disparar uma exceção do tipo IndexOutOfBoundsException se o índice informado estiver fora da faixa permitida.

Veja agora o código Java completo para o exemplo:

package estudos;

import java.util.ArrayList;

public class Estudos{
  public static void main(String[] args){
    // cria uma ArrayList que conterá strings
    ArrayList<String> pessoas = new ArrayList<>();
    
    // adiciona itens na lista
    pessoas.add("Alberto");
    pessoas.add("Victor");
    pessoas.add("João");
    	
    // adiciona um item na posição 2, depois de Victor    
    pessoas.add(2, "Ricardo");
   
    // exibe os itens da lista	
    for(int i = 0; i < pessoas.size(); i++){
      System.out.println(pessoas.get(i));
    }  

    System.exit(0);
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Alberto
Victor
Ricardo
João


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos

Exercício Resolvido de Java - A classe Produto (construtores, métodos, getters e setters e encapsulamento)

Quantidade de visualizações: 17367 vezes
Pergunta/Tarefa:

Crie uma classe Produto para representar um produto do mundo real. Sua classe deverá conter os seguintes atributos e métodos:

1) Um campo de dados privado do tipo String chamado nome, que representará o nome do produto.

2) Um campo de dados privado do tipo double chamado precoCusto, que guardará o preço de custo do produto.

3) Um campo de dados privado do tipo double chamado precoVenda, que guardará o preço de venda do produto.

4) Um campo de dados privado do tipo double chamado margemLucro, que guardará a margem de lucro do produto.

5) Métodos públicos get() e set() para os atributos acima. Modifique o método setPrecoVenda() para que o preço de venda não seja inferior ao preço de compra. Caso isso aconteça, exiba uma mensagem alertando o usuário.

6) Crie um método chamado calcularMargemLucro() que calculará a margem de lucro do produto.

7) Crie um método chamado getMargemLucroPorcentagem() que retornará a margem de lucro como percentual.

Para finalizar, no método main() da classe de teste, crie um novo objeto da classe Produto, peça para o usuário informar os preços de custo e de venda e exiba a margem de lucro em moeda e em percentual. Sua saída deverá ser algo parecido com o mostrado na imagem abaixo:

Informe o preço de custo: 120
Informe o preço de venda: 195
Preço de custo: 120.0
Preço de Venda: 195.0
Margem de Lucro: 75.0
Margem de Lucro Percentual (%): 62.5
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Produto.java:

package estudos;

public class Produto{
  private String nome; // nome do produto
  private double precoCusto; // preço de custo do produto
  private double precoVenda; // preço de venda do produto
  private double margemLucro; // margem de lucro do produto

  // obtém a margem de lucro
  public double getMargemLucro(){
    return margemLucro;
  }

  // define a margem de lucro
  public void setMargemLucro(double margemLucro){
    this.margemLucro = margemLucro;
  }

  // obtém o nome do produto
  public String getNome(){
    return nome;
  }

  // define o nome do produto
  public void setNome(String nome){
    this.nome = nome;
  }

  // obtém o preço de custo
  public double getPrecoCusto(){
    return precoCusto;
  }

  // define o preço de custo
  public void setPrecoCusto(double precoCusto){
    this.precoCusto = precoCusto;
  }

  // obtém o preço de venda
  public double getPrecoVenda(){
    return precoVenda;
  }

  // define o preço de venda
  public void setPrecoVenda(double precoVenda){
    // o preço de venda não pode ser menor que o preço de custo
    if(precoVenda < this.precoCusto){
      System.out.println("O preço de venda não pode ser inferior ao de custo");  
    }
    else{
      this.precoVenda = precoVenda;
    }
  }
  
  // calcula a margem de lucro
  public void calcularMargemLucro(){
    this.margemLucro = this.precoVenda - this.precoCusto;
  }
  
  // retorna a margem de lucro em porcentagem
  public double getMargemLucroPorcentagem(){
    return (this.margemLucro / this.precoCusto) * 100;
  }
}

Veja agora o método main() que nos permite testar a funcionalidade da classe Produto:

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    
    // vamos criar um novo objeto da classe Produto
    Produto p = new Produto();
    
    // vamos ler o preço de custo
    System.out.print("Informe o preço de custo: ");
    p.setPrecoCusto(Double.parseDouble(entrada.nextLine()));
    
    // vamos ler o preço de venda
    System.out.print("Informe o preço de venda: ");
    p.setPrecoVenda(Double.parseDouble(entrada.nextLine()));
    
    // vamos calcular a margem de lucro
    p.calcularMargemLucro();
    
    // vamos exibir os resultados
    System.out.println("Preço de custo: " + p.getPrecoCusto());
    System.out.println("Preço de Venda: " + p.getPrecoVenda());
    System.out.println("Margem de Lucro: " + p.getMargemLucro());
    System.out.println("Margem de Lucro Percentual (%): " + 
      p.getMargemLucroPorcentagem());
  }
}



LISP ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como converter radianos em graus em LISP - Trigonometria em LISP

Quantidade de visualizações: 706 vezes
Todas as funções trigonométricas em Common Lisp (ou AutoLISP, para programadores AutoCAD) recebem seus argumentos em radianos, em vez de graus. Um exemplo disso é a função sin(). Esta função recebe o ângulo em radianos e retorna o seu seno.

No entanto, há momentos nos quais precisamos retornar alguns valores como graus. Para isso é importante sabermos fazer a conversão de radianos para graus. Veja a fórmula abaixo:

\[Graus = Radianos \times \frac{180}{\pi}\]

Agora veja como esta fórmula pode ser escrita em código LISP:

; programa LISP que converte radianos em graus
(let((radianos)(graus))
  ; valor em radianos
  (setq radianos 1.5)
  ; obtém o valor em graus
  (setq graus (* radianos (/ 180 pi)))
  
  ; mostra o resultado
  (format t "~F radianos em graus é ~F" radianos
    graus)
)

Ao executarmos este código LISP nós teremos o seguinte resultado:

1.5 radianos convertidos para graus é 85.94366926962348

Para fins de memorização, 1 radiano equivale a 57,2957795 graus.


Java ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas

Como calcular a equação reduzida da reta em Java dados dois pontos pertencentes à reta

Quantidade de visualizações: 1348 vezes
Nesta dica de Java veremos como calcular a equação reduzida da reta quando temos dois pontos pertencentes à esta reta. Não, nessa dica não vamos calcular a equação geral da reta, apenas a equação reduzida. Em outras dicas do site você encontra como como isso pode ser feito.

Para relembrar: a equação reduzida da reta é y = mx + n, em que x e y são, respectivamente, a variável independente e a variável dependente; m é o coeficiente angular, e n é o coeficiente linear. Além disso, m e n são números reais. Com a equação reduzida da reta, é possível calcular quais são os pontos que pertencem a essa reta e quais não pertencem.

Vamos começar então analisando a seguinte figura, na qual temos dois pontos que pertencem à uma reta:



Note que a reta da figura passa pelos pontos A(5, 5) e B(9, 2). Então, uma vez que já temos os dois pontos, já podemos calcular a equação reduzida da reta. Veja o código Java completo para esta tarefa:

package estudos;

import java.util.Scanner;

public class Estudos{
  public static void main(String[] args){
    // vamos usar a classe Scanner para ler os dados
    Scanner entrada = new Scanner(System.in);
    
    // vamos ler as coordenadas do primeiro ponto
    System.out.print("Coordenada x do primeiro ponto: ");
    double x1 = Double.parseDouble(entrada.nextLine());
    System.out.print("Coordenada y do primeiro ponto: ");
    double y1 = Double.parseDouble(entrada.nextLine());
    
    // vamos ler as coordenadas do segundo ponto
    System.out.print("Coordenada x do segundo ponto: ");
    double x2 = Double.parseDouble(entrada.nextLine());
    System.out.print("Coordenada y do segundo ponto: ");
    double y2 = Double.parseDouble(entrada.nextLine());
    
    String sinal = "+";
    // vamos calcular o coeficiente angular da reta
    double m = (y2 - y1) / (x2 - x1);
    // vamos calcular o coeficiente linear
    double n = y1 - (m * x1);
 
    // coeficiente linear menor que zero? O sinal será negativo
    if (n < 0){
      sinal = "-";
      n = n * -1;
    }
  
    // mostra a equação reduzida da reta
    System.out.println("Equação reduzida: y = " + m + "x" 
      + " " + sinal + " " + n);
    
    System.exit(0);
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

Coordenada x do primeiro ponto: 5
Coordenada y do primeiro ponto: 5
Coordenada x do segundo ponto: 9
Coordenada y do segundo ponto: 2
Equação reduzida: y = -0,75x + 8,75

Para testarmos se nossa equação reduzida da reta está realmente correta, considere o valor 3 para o eixo x da imagem acima. Ao efetuarmos o cálculo:

>> y = (-0.75 * 3) + 8.75
y = 6.5000

temos o valor 6.5 para o eixo y, o que faz com que o novo ponto caia exatamente em cima da reta considerada na imagem.


VisuAlg ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas

Como calcular o coeficiente angular de uma reta em VisuAlg dados dois pontos no plano cartesiano

Quantidade de visualizações: 604 vezes
O Coeficiente Angular de uma reta é a variação, na vertical, ou seja, no eixo y, pela variação horizontal, no eixo x. Sim, isso mesmo. O coeficiente angular de uma reta tem tudo a ver com a derivada, que nada mais é que a taxa de variação de y em relação a x.

Vamos começar analisando o seguinte gráfico, no qual temos dois pontos distintos no plano cartesiano:



Veja que o segmento de reta AB passa pelos pontos A (x=3, y=6) e B (x=9, y=10). Dessa forma, a fórmula para obtenção do coeficiente angular m dessa reta é:

\[\ \text{m} = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x} = tg \theta \]

Note que __$\Delta y__$ e __$\Delta x__$ são as variações dos valores no eixo das abscissas e no eixo das ordenadas. No triângulo retângulo que desenhei acima, a variação __$\Delta y__$ se refere ao comprimento do cateto oposto e a variação __$\Delta y__$ se refere ao comprimento do cateto adjascente.

Veja agora o trecho de código na linguagem VisuAlg que solicita as coordenadas x e y dos dois pontos, efetua o cálculo e mostra o coeficiente angular m da reta que passa pelos dois pontos:

algoritmo "Calcular o coeficiente angular de uma reta em VisuAlg"

var
  // coordenadas dos dois pontos
  x1, y1, x2, y2: real
  // guarda o coeficiente angular
  m: real

inicio
  // x e y do primeiro ponto
  escreva("Coordenada x do primeiro ponto: ")
  leia(x1)
  escreva("Coordenada y do primeiro ponto: ")
  leia(y1)

  // x e y do segundo ponto
  escreva("Coordenada x do segundo ponto: ")
  leia(x2)
  escreva("Coordenada y do segundo ponto: ")
  leia(y2)

  // vamos calcular o coeficiente angular
  m <- (y2 - y1) / (x2 - x1)

  // mostramos o resultado
  escreva("O coeficiente angular é: ", m)

fimalgoritmo 

Ao executar este código VisuAlg nós teremos o seguinte resultado:

Coordenada x do primeiro ponto: 3
Coordenada y do primeiro ponto: 6
Coordenada x do segundo ponto: 9
Coordenada y do segundo ponto: 10
O coeficiente angular é: 0.6666666666666666

Veja agora como podemos calcular o coeficiente angular da reta que passa pelos dois pontos usando o Teorema de Pitágoras. Note que agora nós estamos tirando proveito da tangente do ângulo Theta (__$\theta__$), também chamado de ângulo Alfa ou Alpha (__$\alpha__$):

algoritmo "Calcular o coeficiente angular de uma reta em VisuAlg"

var
  // coordenadas dos dois pontos
  x1, y1, x2, y2: real
  // guarda os comprimentos dos catetos oposto e adjascente
  cateto_oposto, cateto_adjascente: real
  // guarda o ângulo tetha (em radianos) e a tangente
  tetha, tangente: real

inicio
  // x e y do primeiro ponto
  escreva("Coordenada x do primeiro ponto: ")
  leia(x1)
  escreva("Coordenada y do primeiro ponto: ")
  leia(y1)

  // x e y do segundo ponto
  escreva("Coordenada x do segundo ponto: ")
  leia(x2)
  escreva("Coordenada y do segundo ponto: ")
  leia(y2)

  // vamos obter o comprimento do cateto oposto
  cateto_oposto <- y2 - y1
  // e agora o cateto adjascente
  cateto_adjascente <- x2 - x1
  // vamos obter o ângulo tetha, ou seja, a inclinação da hipetunesa
  // (em radianos, não se esqueça)
  tetha <- ArcTan(cateto_oposto / cateto_adjascente)
  // e finalmente usamos a tangente desse ângulo para calcular
  // o coeficiente angular
  tangente <- Tan(tetha)

  // mostramos o resultado
  escreva("O coeficiente angular é: ", tangente)

fimalgoritmo 

Ao executar este código você verá que o resultado é o mesmo. No entanto, fique atento às propriedades do coeficiente angular da reta:

1) O coeficiente angular é positivo quando a reta for crescente, ou seja, m > 0;

2) O coeficiente angular é negativo quando a reta for decrescente, ou seja, m < 0;

3) Se a reta estiver na horizontal, ou seja, paralela ao eixo x, seu coeficiente angular é zero (0).

4) Se a reta estiver na vertical, ou seja, paralela ao eixo y, o coeficiente angular não existe.


Ruby ::: Dicas & Truques ::: Data e Hora

Como usar a classe DateTime da linguagem Ruby

Quantidade de visualizações: 7314 vezes
A classe DateTime da linguagem Ruby extende a classe Date e inclui horas, minutos, segundos e frações de segundo. Além disso, esta classe fornece suporte básico a fuso horários.

Fuso horários são representados como uma diferença do UTC (Universal Coordinated Time) em fração de um dia. Esta diferença é quanto a hora local é mais cedo ou mais tarde que o UTC. Uma diferença de UTC 0 está centralizada na Inglaterra (também conhecido como GMT). À medida que viajamos para o leste, a diferença aumenta até que alcancemos a linha de separação de data no meio do Oceano Pacífico. Quando viajamos para o oeste, a diferença diminui. Esta diferença é abreviada como "of" na classe Date.

Veja um trecho de código no qual usamos a classe DateTime para obter a data e hora atual:

# importa o módulo date
require "date"

# obtém a data e hora atual
agora = DateTime::now

# exibe o resultado
puts "Agora é " + agora.strftime("%e/%m/%Y - %H:%M:%S")

Ao executar este código Ruby nós teremos o seguinte resultado:

Agora é 5/04/2022 - 11:51:06


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 console

Quantidade de visualizações: 15399 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.

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 33 usuários muito felizes estudando em nosso site.