![]() |
|||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
|
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Como trabalhar com strings em Delphi - Como usar strings na linguagem DelphiQuantidade de visualizações: 28294 vezes |
Strings estão presentes em praticamente todos os programas que desenvolvemos, não importa a linguagem de programação usada. Sempre que queremos trabalhar com nomes de pessoas, nomes de cidades, palavras, frases e textos, as strings estão lá para nos auxiliar. Assim, para as linguagens de programação, as strings são apenas matrizes de caracteres (letras ou símbolos). Em Delphi podemos declarar e inicializar strings da seguinte forma: procedure TForm1.Button1Click(Sender: TObject); var nome: string; // declara uma variável do tipo string begin nome := 'Osmar J. Silva'; // inicializa a variável ShowMessage(nome); // exibe o conteúdo da string end; Quando declaramos uma string em Delphi usando a palavra-chave string, o compilador automaticamente assume o tipo UnicodeString, com uma capacidade de 2^30 caracteres (mais ou menos 1.073.741.824 caracteres) com uma capacidade variando de 4 bytes até 2GB. Além do tipo string, o Delphi suporta outros tipos que possibilitam também o trabalho com strings e caracteres. Entre eles podemos citar ShortString, AnsiString, WideString entre outros. Quando puder dê mais uma revisada nas minha dicas sobre strings e caracteres para aprender mais. É possível também usar o tipo string para criar strings com tamanhos pré-definidos. Veja: var nome: string[5]; // declara uma variável do tipo string // que guardará apenas 5 caracteres Aqui temos uma string que não suportará mais que cinco caracteres. Importante notar que, internamente, teremos agora uma string do tipo ShortString e não mais UnicodeString como anteriormente. Se tentarmos atribuir mais que cinco caracteres nesta variável, o restante será truncado: nome := 'Osmar J. Silva'; // inicializa a variável ShowMessage(nome); // mostrará apenas "Osmar" Para finalizar, veja como podemos solicitar ao usuário que informe seu nome e exibí-lo usando a função ShowMessage(): procedure TForm1.Button1Click(Sender: TObject); var nome: string; // declara uma variável do tipo string begin // vamos solicitar ao usuário que informe seu nome nome := Dialogs.InputBox('Nome', 'Informe seu nome:', ''); ShowMessage('Seu nome é: ' + nome); // mostrará apenas "Osmar" end; Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
LISP ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como converter radianos em graus em LISP - Trigonometria em LISPQuantidade de visualizações: 761 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 ::: Tratamento de Erros ::: Erros de Tempo de Execução |
Tratamento de erros em Java - Como tratar o erro ArrayIndexOutOfBoundsException em JavaQuantidade de visualizações: 18445 vezes |
A exceção ArrayIndexOutOfBoundsException é uma exceção (erro) que acontece quando fornecemos um índice fora dos limites permitidos para o acesso de elementos em um vetor ou matriz (array). Lembre-se de que os índices em Java começam em 0 e vão até a quantidade de elementos menos 1. Antes de vermos os exemplos, observe a posição da classe pública ArrayIndexOutOfBoundsException na hierarquia de classes da plataforma Java: java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.IndexOutOfBoundsException java.lang.ArrayIndexOutOfBoundsException Esta classe implementa a interface Serializable. Veja um exemplo no qual tentamos acessar um elemento de um vetor ou matriz usando um índice inválido: public class Estudos{ public static void main(String args[]){ // um array de quatro elementos int[] valores = {5, 23, 76, 3}; // vamos fornecer um índice inválido System.out.println(valores[4]); System.exit(0); } } Este código compila normalmente. Porém, ao tentarmos executá-lo, temos a seguinte mensagem de erro: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at Estudos.main(Estudos.java:7) A forma mais adequada de corrigir este erro é fornecendo um valor de índice que realmente esteja na faixa permitida. |
JavaScript ::: Dicas & Truques ::: Data e Hora |
Como subtrair dias de uma data em JavaScript - Data e horas em JavaScriptQuantidade de visualizações: 16801 vezes |
Em algumas situações, principalmente quando estamos desenvolvendo aplicações que envolvem datas, horas e calendários em JavaScript, nós precisamos subtrair dias de uma data. Nesta dica eu mostro como isso pode ser feito. Veja o código completo abaixo: <html> <head> <title>Estudando JavaScript</title> </head> <body> <script type="text/javascript"> function subtrairDias(data, dias){ return new Date(data.getTime() - (dias * 24 * 60 * 60 * 1000)); } document.write('Hoje é: ' + (new Date()).toLocaleDateString() + '<br>'); document.write('5 dias atrás era: ' + subtrairDias(new Date(), 5).toLocaleDateString()); </script> </body> </html> Ao executarmos este código nós teremos o seguinte resultado: Hoje é: 25/03/2021 5 dias atrás era: 20/03/2021 |
Java ::: Classes e Componentes ::: JButton |
Como definir a cor do texto de um botão JButton do Java SwingQuantidade de visualizações: 9552 vezes |
Nesta dica eu mostrarei como é possível definir a cor do texto de um componente JButton do Java Swing. Para isso nós usamos o método setForeground() da classe JButton, fornecendo a cor desejada, por exemplo, Color.RED. Veja um exemplo Java Swing completo: package arquivodecodigos; import java.awt.*; import javax.swing.*; public class Estudos extends JFrame{ public Estudos() { super("Estudos Swing"); Container c = getContentPane(); c.setLayout(new FlowLayout(FlowLayout.LEFT)); // Cria um JButton com a cor do texto vermelho JButton btn1 = new JButton("Clique Aqui!"); btn1.setForeground(Color.RED); // Cria um JButton com a cor de fundo verde JButton btn2 = new JButton("Clique Aqui!"); btn2.setForeground(Color.GREEN); // Adiciona os botões à janela c.add(btn1); c.add(btn2); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
Como renomear arquivos e diretórios em C++ usando a função MoveFile() da API do WindowsQuantidade de visualizações: 8811 vezes |
A função MoveFile() da API do Windows pode ser usada quando precisamos renomear um arquivo ou diretório. Veja seu protótipo:BOOL WINAPI MoveFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName ); Note que só precisamos fornecer o nome atual e o novo nome do arquivo ou diretório que queremos renomear. Se houver algum erro ao renomear o arquivo ou diretório, a função MoveFile() retornará o valor 0 (zero). Se a operação for efetuada com sucesso, um valor diferente de 0 (zero) será retornado. É sempre uma boa idéia usar a função GetLastError() para retornar o código do erro em caso de falha. Veja um trecho de código no qual renomeamos um arquivo: #include <cstdlib> #include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]){ // nome atual do arquivo CHAR nome_atual[] = "C:\\testes.txt"; // novo nome do arquivo CHAR nome_novo[] = "C:\\novo.txt"; // vamos renomear o arquivo if(MoveFile(nome_atual, nome_novo)){ cout << "Arquivo renomeado com sucesso." << endl; } else{ cout << "Erro ao renomear o arquivo: " << GetLastError() << endl; } system("PAUSE"); return EXIT_SUCCESS; } Aqui nós estamos alterando o nome do arquivo testes.txt para novo.txt. Os possíveis erros nesta operação são: a) ERROR_FILE_NOT_FOUND - Ocorre quando o arquivo fornecido como primeiro argumento para a função MoveFile() não existe. O código para este erro é 2 e a mensagem em português é "O sistema não pode encontrar o arquivo especificado (The system cannot find the file specified)". b) ERROR_ALREADY_EXISTS - Ocorre quando o arquivo fornecido como segundo argumento para a função MoveFile() já existe. O código para este erro é 183 e a mensagem em português é "Não é possível criar um arquivo já existente (Cannot create a file when that file already exists)". Veja agora um trecho de código no qual renomeamos um diretório: #include <cstdlib> #include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]){ // nome atual do diretório CHAR nome_atual[] = "C:\\imagens"; // novo nome do diretório CHAR nome_novo[] = "C:\\imagens2"; // vamos renomear o diretório if(MoveFile(nome_atual, nome_novo)){ cout << "Diretório renomeado com sucesso." << endl; } else{ cout << "Erro ao renomear o diretório: " << GetLastError() << endl; } system("PAUSE"); return EXIT_SUCCESS; } |
Python ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Python Insertion Sort - Como ordenar um vetor de inteiros usando a ordenação Insertion Sort (Ordenação por Inserção)Quantidade de visualizações: 4001 vezes |
Nesta dica veremos como implementar a ordenação Insertion Sort, Insertion-Sort, ou Ordenação por Inserção na linguagem Python. A ordenação Insertion Sort, Insertion-Sort, ou Ordenação por Inserção, possui uma complexidade de tempo de execução igual à ordenação Bubble Sort (Ordenação da Bolha), ou seja, O(n2). Embora mais rápido que o Bubble Sort, e ser um algorítmo de ordenação quadrática, a ordenação Insertion Sort é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação, porém, nunca recomendada para um grande conjunto de dados. A forma mais comum para o entendimento da ordenação Insertion Sort é compará-la com a forma pela qual algumas pessoas organizam um baralho num jogo de cartas. Imagine que você está jogando cartas. Você está com as cartas na mão e elas estão ordenadas. Você recebe uma nova carta e deve colocá-la na posição correta da sua mão de cartas, de forma que as cartas obedeçam à ordenação. A cada nova carta adicionada à sua mão de cartas, a nova carta pode ser menor que algumas das cartas que você já tem na mão ou maior, e assim, você começa a comparar a nova carta com todas as cartas na sua mão até encontrar sua posição correta. Você insere a nova carta na posição correta, e, novamente, a sua mão é composta de cartas totalmente ordenadas. Então, você recebe outra carta e repete o mesmo procedimento. Então outra carta, e outra, e assim por diante, até não receber mais cartas. Esta é a ideia por trás da ordenação por inserção. Percorra as posições do vetor (array), começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição. Vamos ver a implementação na linguagem Python agora? Observe o seguinte código, no qual temos um vetor de inteiros com os elementos {4, 6, 2, 8, 1, 9, 3, 0, 11}: # método que permite ordenar o vetor de inteiros # usando a ordenação Insertion Sort def insertionSort(vetor): # percorre todos os elementos do vetor começando # pelo segundo elemento for i in range(len(vetor)): atual = vetor[i] # o valor atual a ser inserido # começa a comparar com a célula à esquerda de i j = i - 1 # enquanto vetor[j] estiver fora de ordem em relação # a atual while((j >= 0) and (vetor[j] > atual)): # movemos vetor[j] para a direita e decrementamos j vetor[j + 1] = vetor[j] j = j - 1 # colocamos atual em seu devido lugar vetor[j + 1] = atual # função principal do programa def main(): # cria uma lista de inteiros valores = [4, 6, 2, 8, 1, 9, 3, 0, 11] # exibimos o vetor na ordem original print("Ordem original:\n") for i in range(len(valores)): print(valores[i], end = " ") # vamos ordenar o vetor agora insertionSort(valores) # exibimos o vetor ordenado print("\n\nOrdenado:\n") for i in range(len(valores)): print(valores[i], end = " ") if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: Sem ordenação: 4 6 2 8 1 9 3 0 11 Ordenada usando Insertion Sort: 0 1 2 3 4 6 8 9 11 |
Python ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular a apótema de um polígono regular de N lados em PythonQuantidade de visualizações: 740 vezes |
Uma das formas mais comuns de se obter a área de um polígono regular é usando a seguinte fórmula: \[\text{A} = \frac{1}{2} \cdot \text{p} \cdot \text{a} \] Onde: p = Perímetro, ou seja, a soma dos comprimentos de todos os lados. a = Apótema, isto é, uma parte que une o centro do polígono ao meio de qualquer lado que esteja perpendicular. Agora que já estamos alinhados, saiba que calcular a apótema de um polígono regular "na mão" é fácil, já que só precisamos medir a distância de dois lados opostos e dividir por dois ou traçar linhas cruzadas e medir a distância de um dos lados até a interseção dessas linhas. No entanto, em programação a coisa já é um pouco mais complicada. Nesta dica mostrarei como podemos realizar esta tarefa em Python. Para isso usaremos alguns truques de trigonometria. Comece analisando a seguinte imagem: ![]() Note que temos um pentágono com cada lado medindo 4 metros. Recorde que um pentágono é um polígono regular de 5 lados. Para deixar a dica mais didática eu coloquei também uma linha azul representando a apótema do polígono e as linhas cruzadas. Veja agora o código Python que recebe a quantidade de lados do polígono, o comprimento dos lados e retorna a apótema: # vamos importar o módulo Math import math # função que calcula e retorna a apótema de um # polítono regular def calcular_apotema(lados, comprimento): # a quantidade de lados e o comprimento deles # não podem ser negativos if lados < 0 or comprimento < 0: return -1 # calculamos a apótema return (comprimento / (2 * math.tan((180 / lados) * math.pi / 180))) # função principal do programa def main(): # vamos ler a quantidade de lados lados = int(input("Informe a quantidade de lados: ")) # vamos ler o comprimento dos lados comprimento = int(input("Informe o comprimento dos lados: ")) # e agora calculamos a apótema dos polígono apotema = calcular_apotema(lados, comprimento) # e mostramos o resultado print("A apótema do polígono é: {0}".format(apotema)) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: Informe a quantidade de lados: 5 Informe o comprimento dos lados: 4 A apótema do polígono é: 2.7527638409423476 |
Java ::: Dicas & Truques ::: Mouse e Teclado |
Java Swing para iniciantes - Como detectar eventos do teclado em uma janela JFrame do Java SwingQuantidade de visualizações: 13486 vezes |
Eventos do teclado podem ser detectados em uma janela JFrame do Java Swing por meio da interface KeyListener. Neste exemplo temos uma JFrame que estende essa interface e fornece implementação para o seu método keyPressed(). Temos também um controle JTextArea desabilitado, o qual usamos para exibir a letra e o código da tecla pressionada. Veja o resultado na imagem abaixo: ![]() E aqui está o código Java Swing completo para o exemplo: package arquivodecodigos; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Estudos extends JFrame implements KeyListener{ private JTextArea textArea; public Estudos(){ super("Eventos do Mouse e Teclado"); Container c = getContentPane(); FlowLayout layout = new FlowLayout(FlowLayout.LEFT); c.setLayout(layout); textArea = new JTextArea(100, 150); textArea.setEnabled(false); textArea.setDisabledTextColor(Color.BLACK); c.add(textArea); addKeyListener(this); setSize(350, 250); setVisible(true); } public void keyPressed(KeyEvent e){ textArea.setText( String.format("Tecla: %s - Código Unicode: %d", e.getKeyText(e.getKeyCode()), e.getKeyCode())); } public void keyReleased(KeyEvent e){ // sem implementação } public void keyTyped(KeyEvent e){ // sem implementação } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
PHP ::: Dicas & Truques ::: URLs, Documentos e Páginas |
PHP para iniciantes - Como obter uma lista completa das variáveis de ambiente disponíveis no servidorQuantidade 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 |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
MySQL - Como excluir a chave primária de uma tabela MySQL usando o comando ALTER TABLE DROP PRIMARY KEY PHP - Programação Orientada a Objetos em PHP - Aprenda a criar e usar métodos e classes abstratas em PHP C# - Como remover um elemento em uma determinada posição de uma List<T> do C# usando a função RemoveAt() |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |