Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.
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 Apenas R$ 19,90
Delphi ::: Dicas & Truques ::: Arquivos e Diretórios

Como verificar se um arquivo existe usando a função FileExists() da unit SysUtils do Delphi

Quantidade de visualizações: 20005 vezes
Quando estamos trabalhando com arquivos, é sempre uma boa idéia checar se um arquivo já existe antes de permitir que nosso código tente criar outro arquivo com o mesmo nome. Em Delphi a existência de um arquivo pode ser verificada por meio do uso da função FileExists(), na unit SysUtils. Esta função recebe o caminho e nome do arquivo e retorna true se ele existir, e false caso contrário.

Veja um trecho de código no qual testamos se um determinado aqui já existe no sistema:

procedure TForm1.Button1Click(Sender: TObject);
var
  arquivo: string;
begin
  // diretorio e nome do arquivo
  arquivo := 'C:\arquivo de codigos\dados.txt';

  // vamos verificar se o arquivo existe no caminho especificado
  if FileExists(arquivo) then
    ShowMessage('O arquivo existe')
  else
    ShowMessage('O arquivo NÃO existe');
end;

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


VB.NET ::: VB.NET para Engenharia ::: Geometria Analítica e Álgebra Linear

Como somar os elementos da diagonal principal de uma matriz em VB.NET

Quantidade de visualizações: 306 vezes
A Matriz quadrada é um tipo especial de matriz que possui o mesmo número de linhas e o mesmo número de colunas, ou seja, dada uma matriz Anxm, ela será uma matriz quadrada se, e somente se, n = m, onde n é o número de linhas e m é o número de colunas.

Em geral as matrizes quadradas são chamadas de Matrizes de Ordem n, onde n é o número de linhas e colunas. Dessa forma, uma matriz de ordem 4 é uma matriz que possui 4 linhas e quatro colunas.

Toda matriz quadrada possui duas diagonais, e elas são muito exploradas tanto na matemática quanto na construção de algorítmos. Essas duas diagonais são chamadas de
Diagonal Principal e Diagonal Secundária.

A diagonal principal de uma matriz quadrada une o seu canto superior esquerdo ao canto inferior direito. Veja:



Nesta dica veremos como calcular a soma dos valores dos elementos da diagonal principal de uma matriz usando VB.NET. Para isso, só precisamos manter em mente que a diagonal principal de uma matriz A é a coleção das entradas Aij em que i é igual a j. Assim, tudo que temos a fazer é converter essa regra para código VB.NET.

Veja um trecho de código VB.NET completo no qual pedimos para o usuário informar os elementos da matriz e em seguida mostramos a soma dos elementos da diagonal superior:

Imports System

Module Program
  ' função principal do programa VB.NET
  Sub Main(args As String())
    ' vamos declarar e construir uma matriz de três linhas
    ' e três colunas
    Dim matriz(2, 2) As Integer
    ' guarda a soma dos elementos na diagonal principal
    Dim soma_diagonal As Integer = 0

    For i As Integer = 0 To matriz.GetUpperBound(0)
      For j As Integer = 0 To matriz.GetUpperBound(1)
        Console.Write("Informe o valor para a linha " & i & " e coluna " _
          & j & ": ")
        ' lê o número e guarda na linha e coluna especificadas
        matriz(i, j) = Integer.Parse(Console.ReadLine())
      Next
    Next

    ' vamos mostrar a matriz da forma que ela foi informada
    Console.WriteLine(vbCrLf & "Valores na matriz: " & vbCrLf)

    For i As Integer = 0 To matriz.GetUpperBound(0)
      For j As Integer = 0 To matriz.GetUpperBound(1)
        Console.Write(matriz(i, j).ToString().PadLeft(5) & "  ")
      Next
      ' passa para a próxima linha
      Console.WriteLine()
    Next

    ' vamos calcular a soma dos elementos da diagonal   
    ' principal
    For i As Integer = 0 To matriz.GetUpperBound(0)
      For j As Integer = 0 To matriz.GetUpperBound(1)
        If i = j Then
          soma_diagonal = soma_diagonal + matriz(i, j)
        End If
      Next
    Next

    ' finalmente mostramos a soma da diagonal principal
    Console.WriteLine(vbCrLf & "A soma dos elementos da diagonal principal é: " _
      & soma_diagonal)

    Console.WriteLine(vbCrLf & vbCrLf & "Pressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub

End Module

Ao executar este código VB.NET nós teremos o seguinte resultado:

Informe o valor para a linha 0 e coluna 0: 3
Informe o valor para a linha 0 e coluna 1: 7
Informe o valor para a linha 0 e coluna 2: 9
Informe o valor para a linha 1 e coluna 0: 2
Informe o valor para a linha 1 e coluna 1: 4
Informe o valor para a linha 1 e coluna 2: 1
Informe o valor para a linha 2 e coluna 0: 5
Informe o valor para a linha 2 e coluna 1: 6
Informe o valor para a linha 2 e coluna 2: 8

   3   7   9
   2   4   1
   5   6   8

A soma dos elementos da diagonal principal é: 15



C ::: C para Engenharia ::: Geometria Analítica e Álgebra Linear

Como calcular a transposta de uma matriz em C - Curso de C para Geometria Analítica e Álgebra Linear

Quantidade de visualizações: 1172 vezes
A matriz transposta de uma matriz A é a matriz AT. Tal matriz é obtida quando copiamos os elementos da matriz A para uma outra matriz (ou para ela mesma) e trocamos de posição as linhas e colunas. Dessa forma, a primeira linha da matriz A se transforma na primeira coluna da matriz transposta, a segunda linha da matriz A se transforma na segunda coluna da matriz transposta e assim por diante.

Em termos de notação, podemos dizer, de forma algébrica, que:

ATji = Aij

Onde i representa as linhas e j representa as colunas, tanto na matriz original quanto na matriz transposta.

É importante estar atento à quantidade de linhas e colunas na matriz original e na matriz transposta equivalente. Assim, se a matriz original for 3x2, a matriz transposta será 2x3.

Antes de vermos o código C, dê uma olhada na seguinte matriz de duas linhas e três colunas:

\[A = \left[\begin{matrix} 3 & 5 & 7 \\ 1 & 2 & 9 \end{matrix}\right] \]

Sua matriz transposta correspondente é:

\[A^T = \left[\begin{matrix} 3 & 1 \\ 5 & 2 \\ 7 & 9 \end{matrix}\right] \]

E agora veja o código C que declara uma matriz 2x3 e gera a matriz transposta 3x2:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português
	
  // vamos declarar e construir uma matrix
  // 2x3 (duas linhas e três colunas
  int matriz[2][3] = {{3, 5, 7}, {1, 2, 9}};
  int i, j;  
    
  // vamos exibir os valores da matriz
  printf("Elementos da matriz:\n");
  for(i = 0; i < 2; i++){
    for(j = 0; j < 3; j++){
      printf("%5d  ", matriz[i][j]);
    }
    printf("\n");
  }
    
  // como temos uma matriz 2x3, a transposta deverá ser
  // 3x2, ou seja, três linhas e duas colunas
  int linhas = 3; // linhas da matriz original
  int colunas = 2; // colunas da matriz original
  int transposta[linhas][colunas]; 
    
  // e agora vamos preencher a matriz transposta
  for(i = 0; i < 2; i++){
    for(j = 0; j < 3; j++){
      transposta[j][i] = matriz[i][j];
    }
  }
    
  // vamos exibir os valores da matriz transposta
  printf("Elementos da matriz transposta:\n");
  for(i = 0; i < 3; i++){
    for(j = 0; j < 2; j++){
      printf("%5d  ", transposta[i][j]);
    }
    printf("\n");
  }
  
  printf("\n\n");
  system("PAUSE");	
  return 0;
}

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

Elementos da matriz:
    3      5      7  
    1      2      9  
Elementos da matriz transposta:
    3      1  
    5      2  
    7      9  



C# ::: Namespace System.Drawing ::: Image

Como usar o método FromFile() da classe Image do C# para criar um objeto desta classe a partir de um arquivo de imagem JPG, GIF, PNG, BMP, etc

Quantidade de visualizações: 7471 vezes
Em algumas situações precisamos criar um objeto Image a partir de um arquivo de imagem JPG, GIF, PNG, BMP, etc. Isso pode ser feito por meio do método estático FromFile() da classe Image. Veja sua assinatura:

public static Image FromFile(string filename)
Note que o método recebe uma string identificando o nome do arquivo da imagem e retorna um objeto da classe Image.

Veja um trecho de código no qual usamos o método FromFile() para criar um objeto Image a partir de uma imagem JPG em um determinado diretório. Em seguida usamos a Image construída para exibir a imagem em um PictureBox:

private void button1_Click_1(object sender, EventArgs e){
  // constrói um objeto Image a partir do endereço da image
  Image imagem = Image.FromFile(@"C:\estudos_csharp_wf\logo.jpg");
  // atribui a imagem construída à propriedade Image
  pictureBox1.Image = imagem;
}

É importante observar que o método FromFile() pode disparar as seguintes exceções:

a) OutOfMemoryException - O arquivo não contém um formato de imagem válido ou o GDI+ não suporta o formato de pixel para o arquivo.

b) FileNotFoundException - O arquivo de imagem indicado não existe.

Assim, é sempre uma boa idéia colocar o código acima em um bloco try..catch. Veja como isso pode ser feito:

private void button1_Click_1(object sender, EventArgs e){
  try{
    // constrói um objeto Image a partir do endereço da image
    Image imagem = Image.FromFile(@"C:\estudos_csharp_wf\logoi.jpg");
    // atribui a imagem construída à propriedade Image
    pictureBox1.Image = imagem;
  }
  catch (Exception ex){
    MessageBox.Show("Houve um erro ao carregar a imagem: " +
      ex.Message.ToString());
  }
}

Há uma sobrecarga do método FromFile() com a seguinte assinatura:

public static Image FromFile(string filename,
  bool useEmbeddedColorManagement)
O parâmetro useEmbeddedColorManagement, quando true, indica que o objeto Image retornado aplicará a correção de cores de acordo com as informações de gerenciamento de cores contidas no arquivo de imagem. As informações contidas no arquivo de imagem podem incluir perfis International Color Consortium (ICC), valores gama e informações de cromaticidade.


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

Como usar a classe Date do Ruby em seus programas

Quantidade de visualizações: 7729 vezes
A classe Date da linguagem Ruby representa datas. Ela o faz trabalhando com anos, meses, semanas e dias. Tenha em mente que, ao usar a classe Date não temos acesso a nada relacionado a horas, minutos ou segundos.

Internamente, uma data é representada como um número: ajd (Astronomical Julian Day Number). O dia da reforma do calendário (Day of Calendar Reform), sg, também é armazenado, para conversões para outros formatos de datas (há também um campo chamado "of" para a diferença de fuso horário, mas este é usado somente na subclasse DateTime).

Um novo objeto Date é criado usando-se um dos métodos de criação de objetos da classe. E tais métodos recebem nomes de acordo com o formato de data. Além disso, os argumentos fornecidos devem obedecer ao formato de data desejado, por exemplo, Date::civil() (apelido para Date::new()) com ano, mês e dia do ano, ou Date::ordinal() com ano e dia do ano. Todos estes métodos de criação de objetos da classe também aceitam o dia da reforma do calendário (Day of Calendar Reform) como um argumento opcional.

Objetos Date são imutáveis após sua criação.

Após criarmos um objeto Date, valores de data podem ser obtidos para os diferentes formatos de data suportados usando métodos de instância. Por exemplo, mon() retorna o mês civil, cwday() retorna o dia comercial da semana, e yday() retorna o dia ordinal do ano. Valores Date podem ser obtidos em qualquer formato, independente de qual formato foi usado para criar a instância do objeto.

A classe Date inclui o módulo Comparable, o que permite que objetos Date possam ser comparados e ordenados, faixas de datas possam ser criadas e assim por diante.

Veja no trecho de código abaixo como podemos criar um objeto Date representando a data atual:

# importa o módulo date
require 'date'

# obtém a data de hoje
hoje = Date.today

# exibe o resultado
puts "Hoje é " + hoje.strftime("%e/%m/%Y")



C ::: C para Engenharia ::: Física - Mecânica

Como calcular a velocidade da queda livre de um corpo dado o intervalo de tempo (e a aceleração da gravidade) em C

Quantidade de visualizações: 2602 vezes
A Queda Livre é um Movimento Uniformemente Variado, na qual um objeto em queda livre tem a sua velocidade aumentada a taxas constantes. Abandonado em alturas próximas da terra, a velocidade com que um corpo cai aumenta a uma taxa de aproximadamente 9,8m/s. Isso é o mesmo que dizer que a aceleração da gravidade terrestre é de 9,8m/s2, o que aumenta a velocidade do objeto em 35,28km/h a cada segundo.

Assim, a fórmula da velocidade de um objeto em queda livre é:

\[ \text{v} = \text{g} \cdot \text{t} \]

Onde:

v ? velocidade de queda (m/s)

g ? aceleração da gravidade (m/s2)

t ? intervalo de tempo (s)

Vamos ver um exemplo? Veja o seguinte enunciado:

1) Um corpo é abandonado a uma altura qualquer no tempo 0s e está em queda livre. Calcule a sua velocidade no tempo 15s.

Como sabemos que o intervalo de tempo é 15s, só precisamos jogar na fórmula. Veja o código C completo para o cálculo:

#include <stdio.h>
#include <stdlib.h>
     
int main(int argc, char *argv[]){
  // gravidade terrestre em m/s2
  float gravidade = 9.80665;
  // intervalo de tempo da queda livre (em segundos)
  float tempo = 15.00; // em segundos
  // velocidade da queda nesse intervalo
  float velocidade = gravidade * tempo;
  
  // mostramos o resultado
  printf("A velocidade da queda livre é: %fm/s",
    velocidade);
    
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

A velocidade da queda livre é: 147.099747m/s

Se quisermos saber a velocidade em km/h, basta multiplicar o resultado por 3.6, o que dará 529.56km/h.

Vamos tornar o experimento mais interessante? Veja uma modificação no código C que mostra a velocidade da queda nos 10 primeiros segundos, de forma individual:

#include <stdio.h>
#include <stdlib.h>
     
int main(int argc, char *argv[]){
  int i; // variável de controle do laço
  // gravidade terrestre em m/s2
  float gravidade = 9.80665;
  // intervalo de tempo da queda livre (em segundos)
  int tempo;
  // velocidade da queda nesse intervalo
  float velocidade;
  
  // um laço for que repete 10 vezes
  for(i = 1; i <= 10; i++){
    tempo = i; // inicialmente será um segundo
    velocidade = gravidade * tempo;
    printf("A velocidade no tempo %d: %fm/s\n",
      tempo, velocidade);
  }
    
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

A velocidade no tempo 1: 9.806650m/s
A velocidade no tempo 2: 19.613300m/s
A velocidade no tempo 3: 29.419950m/s
A velocidade no tempo 4: 39.226601m/s
A velocidade no tempo 5: 49.033249m/s
A velocidade no tempo 6: 58.839901m/s
A velocidade no tempo 7: 68.646553m/s
A velocidade no tempo 8: 78.453201m/s
A velocidade no tempo 9: 88.259850m/s
A velocidade no tempo 10: 98.066498m/s


CSS ::: Dicas & Truques ::: Barras de Navegação, Menus e Dropdowns

Como criar uma barra de menus na horizontal usando CSS e o valor inline-block para a propriedade display

Quantidade de visualizações: 571 vezes
Nesta dica mostrarei como podemos criar uma barra de menus horizontal usando CSS. Para isso cada item de menu será um elemento <li>, contidos dentro de um elemento <ul>. O truque é definir o valor inline-block para a propriedade display de cada elemento <li>.

Veja a página HTML e CSS completa para o exemplo:

<!doctype html>
<html>
<head>
  <title>Estudos CSS</title>
  
<style>
  #menu{
    background-color: #eeeeee; 
    list-style-type: none;
    text-align: center;
    margin: 0;
    padding: 0;
  }

  #menu li {
    display: inline-block;
    font-size: 20px;
    padding: 20px;
    text-decoration: none;
  }
  
  #menu li a{
    text-decoration: none;
  }
</style>

</head>
  
<body>

<h1>Exemplo de Barra de Menu Horizontal</h1>

<p>Veja como podemos usar o valor inline-block para
  a propriedade display do CSS para criar uma barra
  de menu na horizontal</p>

<ul id="menu">
  <li><a href="index.php">Início</a></li>
  <li><a href="servicos.php">Serviços</a></li>
  <li><a href="produtos.php">Produtos</a></li>  
  <li><a href="contatos.php">Contatos</a></li>
</ul>
  
</body>
</html>



PHP ::: Dicas & Truques ::: URLs, Documentos e Páginas

PHP para iniciantes - Como obter uma lista completa das variáveis de ambiente disponíveis no servidor

Quantidade de visualizações: 10407 vezes
Nesta dica mostrarei como é possível combinar o vetor de variáveis de ambiente $_SERVER e o laço foreach() da linguagem PHP para obter uma lista completa das variáveis de ambiente disponíveis no servidor web a partir do qual nossos códigos PHP estão sendo executados. Esta técnica é excelente para depuração (debugging) de código PHP.

Veja o código PHP completo para o exemplo:

<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
 
<?php
  foreach($_SERVER as $env => $valor){
    echo $env . " = " . $valor . "<br>";
  }
?>

</body>
</html>

Ao executar este código PHP nós teremos um resultado parecido com:

SERVER_SOFTWARE = Apache/2.4.46 (Win64) OpenSSL/1.1.1h PHP/8.0.0
SERVER_NAME = localhost
SERVER_ADDR = ::1
SERVER_PORT = 80
REMOTE_ADDR = ::1
DOCUMENT_ROOT = C:/xampp/htdocs
REQUEST_SCHEME = http
CONTEXT_PREFIX =
CONTEXT_DOCUMENT_ROOT = C:/xampp/htdocs
SERVER_ADMIN = postmaster@localhost
SCRIPT_FILENAME = C:/xampp/htdocs/estudos/index.php
REMOTE_PORT = 61618
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
REQUEST_METHOD = GET
QUERY_STRING =
REQUEST_URI = /estudos/index.php
SCRIPT_NAME = /estudos/index.php
PHP_SELF = /estudos/index.php
REQUEST_TIME_FLOAT = 1618495343.0591
REQUEST_TIME = 1618495343


PostgreSQL ::: Dicas & Truques ::: Comandos DDL (Data Definition Language - Linguagem de Definição de Dados)

Como excluir uma tabela no PostgreSQL usando o comando DDL DROP TABLE

Quantidade de visualizações: 8026 vezes
Em algumas situações precisamos excluir uma tabela em uma base de dados PostgreSQL. Isso pode ser feito por meio do comando DDL DROP TABLE. Este comando remove a tabela da base de dados completamente, incluindo índices, regras (rules), triggers e restrições (constraints). Para disparar um comando DROP TABLE, você precisa ser um super usuário ou possuir privilégios sobre a tabela e o schema na qual ela reside.

Em geral excluímos tabelas usando a ferramenta pgAdmin. No entanto, é importante conhecer e dominar este comando de forma a conseguirmos excluir tabelas a partir da janela de Query do pgAdmin, do SQL Shell (psql) ou usando uma linguagem de programação.

Veja um comando DDL DROP TABLE usado para excluir uma tabela chamada produtos:

DROP TABLE produtos;

Se o comando for executado com sucesso, o PostgreSQL nos exibirá a seguinte mensagem:

Query returned successfully with no result in 31 ms.
Se tentarmos excluir uma tabela que não existe na base de dados, o PostgreSQL abortará a operação com a seguinte mensagem de erro:

ERRO:  tabela "produtos" não existe

********** Error **********

ERRO: tabela "produtos" não existe
SQL state: 42P01
Por este motivo, é interessante usar a cláusula IF EXISTS em conjunto com o comando DROP TABLE. Veja:

DROP TABLE IF EXISTS produtos;

Agora o PostgreSQL trocará a mensagem de erro por uma mensagem de advertência:

NOTA:  tabela "produtos" não existe, ignorando

Query returned successfully with no result in 14 ms.



JavaScript ::: Dicas & Truques ::: Matemática e Estatística

Como calcular juros simples e montante usando JavaScript

Quantidade de visualizações: 16855 vezes
O regime de juros será simples quando o percentual de juros incidir apenas sobre o valor principal. Sobre os juros gerados a cada período não incidirão novos juros. Valor Principal ou simplesmente principal é o valor inicial emprestado ou aplicado, antes de somarmos os juros. Transformando em fórmula temos:

J = P . i . n

Onde:

J = juros
P = principal (capital)
i = taxa de juros
n = número de períodos

Imaginemos uma dívida de R$ 2.000,00 que deverá ser paga com juros de 5% a.m. pelo regime de juros simples e o prazo para o pagamento é de 2 meses. O cálculo em JavaScript pode ser feito assim:

<script type="text/javascript">
  var principal = 2000.00;
  var taxa = 0.08;
  var meses = 2;
  
  var juros = principal * taxa * meses;
  
  document.write("O total de juros a ser pago é: " 
    + juros);
</script>

O montante da dívida pode ser obtido das seguintes formas:

a) Montante = Principal + Juros
b) Montante = Principal + (Principal x Taxa de juros x Número de períodos)

M = P . (1 + (i . n))

Veja o código:

<script type="text/javascript">
  var principal = 2000.00;
  var taxa = 0.08;
  var meses = 2;
  
  var juros = principal * taxa * meses;
  var montante = principal + juros;
  
  document.write("O total de juros a ser pago é: " 
    + juros + "<br>");
  document.write("O montante da dívida é: "  + montante);
</script>


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á 22 usuários muito felizes estudando em nosso site.