![]() |
|
||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
PHP ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o coeficiente angular de uma reta em PHP dados dois pontos no plano cartesianoQuantidade de visualizações: 1360 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 PHP 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: <?php // x e y do primeiro ponto $x1 = 3; $y1 = 6; // x e y do segundo ponto $x2 = 9; $y2 = 10; $m = ($y2 - $y1) / ($x2 - $x1); // mostramos o resultado echo "O coeficiente angular é: " . $m; ?> Ao executar este código PHP nós teremos o seguinte resultado: O coeficiente angular é: 0.66666666666667 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__$): <?php // x e y do primeiro ponto $x1 = 3; $y1 = 6; // x e y do segundo ponto $x2 = 9; $y2 = 10; // 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 = atan2($cateto_oposto, $cateto_adjascente); // e finalmente usamos a tangente desse ângulo para calcular // o coeficiente angular $tangente = tan($tetha); // mostramos o resultado echo "O coeficiente angular é: " . $tangente; ?> 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. |
Python ::: Dicas & Truques ::: Formatação de datas, strings e números |
Como formatar inteiros com uma determinada quantidade de zeros à esquerda usando PythonQuantidade de visualizações: 11406 vezes |
Nesta dica eu mostro como formatar um valor inteiro com uma determinada quantidade de zeros à sua esquerda. Note que aqui eu estou combinando a função print() com o operador de módulo (%) para indicar os valores que serão formatados. Esta técnica foi muito usada na época do Python 2.5 e ainda está disponível no Python 3.0 (e creio que deverá continuar por muito tempo ainda). Veja o trecho de código completo: # função principal do programa def main(): valor1 = 343 valor2 = 3 # exibirá 000342 print("O valor é %06d" % (valor1)) # exibirá 0342 e 00000003 print("Os valor sao %04d e %08d" % (valor1, valor2)) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O valor é 000343 Os valor são 0343 e 00000003 |
Android Java ::: androidx.appcompat.app ::: AppCompatActivity |
Como usar o método startActivity() da classe Activity ou AppCompatActivity do Android para mudar de telasQuantidade de visualizações: 2127 vezes |
Por mais simples que nossas aplicações Android sejam, elas serão compostas de duas ou mais telas, ou seja, duas ou mais Activity ou AppCompatActivity. Nesta dica mostrarei como usar o método startActivity() dessas duas classes para levar o usuário da primeira tela para a segunda. Lembre-se de que AppCompatActivity herda de Activity e, nos dias atuais, é a classe preferida para representar as telas individuais das aplicações Android. Comece criando um novo projeto no Android Studio. Escolha Empty Activity e dê o nome "App Duas Telas" ao projeto. Observe que o Android Studio já criou uma Activity ou AppCompatActivity com o nome MainActivity.java. Vamos nos certificar de que esta Activity é de fato a tela principal da aplicação. Abra o arquivo AndroidManifest.xml e veja se seu elemento <activity> se parece com o que temos abaixo: <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> Se tudo estiver Ok, vamos agora criar a segunda tela. Clique com o botão direito em cima do pacote "com.example.appduastelas" e escolha New -> Activity -> Empty Activity. Dê o nome "SegundaTela", desmarque a opção Launcher Activity e clique o botão Finish. Se você observar o arquivo AndroidManifest.xml novamente, você verá que a segunda tela já foi adicionada lá. Agora vamos examinar o arquivo XML de layout para a primeira tela (layout\activity_main.xml): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:orientation="vertical" tools:context="com.example.appduastelas.MainActivity"> <Button android:id="@+id/abrir_tela" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:onClick="abrirSegundaTela" android:text="@string/abrir_tela" /> </LinearLayout> Note que temos um elemento <LinearLayout> e, dentro dele, um elemento <Button>. No botão nós declaramos o método abrirSegundaTela para seu atributo onClick. Não esqueça de atualizar o arquivo strings.xml para refletir o texto do botão "@string/abrir_tela". Pronto. Agora vamos ver o arquivo XML de layout para a segunda tela (layout\activity_segunda_tela.xml): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:orientation="vertical" tools:context="com.example.appduastelas.SegundaTela"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sou a segunda tela."/> </LinearLayout> Nesse layout nós temos um elemento <LinearLayout> e, dentro dele, um elemento <TextView>, que serve apenas para exibir um texto qualquer na segunda tela. Para finalizar, só precisamos escrever o método abrirSegundaTela() na MainActivity.java. Veja o código completo: package com.example.appduastelas; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // método usado para abrir a segunda tela public void abrirSegundaTela(View view) { Intent intent = new Intent(this, SegundaTela.class); startActivity(intent); } } Veja que dentro do método abrirSegundaTela(), que recebe uma View com parâmetro, nós criamos um novo objeto da classe Intent e fornecemos o nome da segunda tela. Em seguida fazemos uma chamada ao método startActivity() passando o Intent recém-criado como argumento. Pronto! É só isso. Execute a aplicação, clique no botão e veja a segunda tela ser exibida. Pressione o botão Voltar e repita quantas vezes quiser. Agora é só criar mais telas e desenvolver vários e vários apps Android. |
C++ ::: STL (Standard Template Library) ::: Vector C++ |
Como criar um vector de strings em C++, inserir alguns nomes usando a função push_back() e percorrê-los usando um iteradorQuantidade de visualizações: 11195 vezes |
Se você tem pouca experiência com a classe container vector da STL (Standard Template Library), este exemplo o ajudará um pouco. Aqui eu mostro como criar um vector de strings em C++, inserir alguns nomes nele usando a função push_back() e depois percorrê-los individualmente usando um iterador. Veja o código C++ completo para o exemplo: #include <iostream> #include <vector> using namespace std; int main(int argc, char *argv[]){ // um vector vazio que conterá strings vector<string> nomes; // vamos inserir três nomes nomes.push_back("Osmar J. Silva"); nomes.push_back("Carlos de Souza"); nomes.push_back("Maria Dias de Carvalho"); // vamos percorrer o vector e exibir os nomes vector<string>::iterator it; for(it = nomes.begin(); it < nomes.end(); it++){ cout << *it << endl; } cout << "\n" << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Osmar J. Silva Carlos de Souza Maria Dias de Carvalho |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercícios Resolvidos de C++ - Como calcular e exibir os 50 primeiros números primos em C++Quantidade de visualizações: 9922 vezes |
Pergunta/Tarefa: Um inteiro é um número primo se ele for divisível somente por 1 e por ele mesmo. Assim, 2, 3, 5 e 7 são primos, enquanto 4, 6, 8 e 9 não são. Note que o número 1 não é primo. Escreva um programa C++ que usa um laço for, while ou do...while para calcular e exibir os 50 primeiros números primos. A saída do programa deverá ser parecida com: 50 primeiros números primos: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 Veja a resolução comentada deste exercício em C++: #include <cstdlib> #include <iostream> #include <iomanip> using namespace std; int main(int argc, char *argv[]){ int quantidade = 50; // quantidade de números primos int contador = 0; // quantidade de números primos encontrados int numero = 0; // inteiro inicial // Lembre-se! O número 1 não é primo cout << quantidade << " primeiros numeros primos:\n" << endl; // laço while será executado até encontrar os 50 primeiros números primos while(contador < quantidade){ bool primo = true; // se o valor de i for 7, a variável j do laço contará // de 2 até 7 / 2 (divisão inteira), ou seja, 3. Se o // módulo de 7 por qualquer um dos valores neste intervalo // for igual a 0, então o número não é primo for(int j = 2; j <= (numero / 2); j++){ if(numero % j == 0){ primo = false; // não é primo break; } } if((primo) && (numero > 1)){ cout << setw(6) << numero; contador++; // encontramos um número primo if(contador % 10 == 0){ cout << "\n"; } } numero++; } cout << "\n\n"; system("PAUSE"); return EXIT_SUCCESS; } |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como usar a função isdigit() do header ctype.h da linguagem C para verificar se um caractere é um dígito de 0 a 9Quantidade de visualizações: 15246 vezes |
Em algumas situações podemos precisar verificar se um dado caractere é um dígito (número) de 0 a 9. Isso pode ser feito com o auxílio da função isdigit() no header ctype.h. Esta função recebe um caractere e retorna um valor diferente de 0 se o caractere testado for um dígito de 0 a 9. Caso contrário o retorno é 0. Veja um exemplo completo de seu uso:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main(int argc, char *argv[]){ char caractere; // vamos ler o caractere informado pelo usuário printf("Informe um caractere e tecle ENTER: "); scanf("%c", &caractere); // vamos verificar se o usuário informou um dígito // de 0 a 9 if(isdigit(caractere)) printf("Voce informou um digito de 0 a 9"); else printf("Voce NAO informou um digito de 0 a 9"); puts("\n\n"); system("PAUSE"); return 0; } |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como criar colunas persistentes o controle TDBGrid do DelphiQuantidade de visualizações: 11742 vezes |
Quando conectamos um TDBGrid a uma fonte de dados TDataSource, automaticamente ocorre a criação de colunas no grid, cada uma correspondendo a um dos campos da tabela para a qual o TDataSet (e suas classes derivadas) está apontando. Estas colunas criadas automaticamente são chamadas de DINÂMICAS, ou contrário das colunas PERSISTENTES. Porém, na maioria das vezes, nós queremos personalizar a aparência das colunas em tempo de design (o que também pode ser feito em tempo de execução). Queremos alinhar ou alterar os títulos, mudar a fonte e cores, etc. Fazemos isso clicando com o botão direito no controle DBGrid e acessando a opção Columns Editor (ou dando duplo clique na propriedade Columns). Isso fará com que a propriedade State do objeto TDBGridColumns do DBGrid seja mudada para csCustomized, o que indica que o Delphi montará as colunas baseado em nossas configurações e não mais automaticamente de acordo com os nomes dos campos da tabela. Siga os seguintes passos para criar colunas persistentes para o controle DBGrid: a) Selecione o DBGrid no formulário; b) Acesse o editor Columns dando duplo-clique na propriedade Columns no Object Inspector; Isso bastará para que o list box de Columns exiba as colunas persistentes já existentes. Quando o editor Columns é mostrado pela primeira vez, esta lista estará vazia porque o grid está em seu estado padrão, contendo apenas colunas dinâmicas. Podemos criar colunas persistentes para todos os campos do dataset de uma só vez, ou podemos criar as colunas persistentes para cada campo individualmente. Siga os passos abaixo para criar colunas persistentes para todos os campos: a) Chame o editor Columns e escolha a opção Add All Fields. Note que se o grid não estiver associado a nenhum data source, a opção Add All Fields estará desabilitada. Associe o grid com o data source que estiver conectado a um dataset ativo antes de escolher a apção Add All Fields. b) Se o grid já possuir colunas persistentes, uma caixa de diálogo perguntará se você quer excluir as colunas existentes ou apenas acrescentar as novas colunas. Se você escolher Yes, todas as colunas persistentes serão removidas e todos os campos do dataset atual serão inseridos como colunas, obedecendo sua ordem no dataset. Neste caso os títulos das colunas serão os nomes dos campos na tabela. Se você escolher No, as colunas persistentes serão mantidas e as novas colunas serão adicionadas. C) Clique o botão Close para aplicar as colunas persistentes no DBGrid e fechar a caixa de diálogo. Siga os passos abaixo para criar colunas persistentes individualmente: a) Escolha o botão Add no editor Columns. A nova columa será selecionada na list box. Esta nova coluna receberá um número sequencial e um nome padrão (por exemplo, 0 - TColumn). Para associar um campo da tabela com esta nova coluna, ajuste sua propriedade FieldName no Object Inspector. b) Para definir o título para a nova coluna, expanda a propriedade Title no Object Inspector e ajuste sua propriedade Caption. c) Feche o editor Columns para aplicar as colunas persistentes no grid e fechar a caixa de diálogo. Se o um DBGrid possui apenas colunas dinâmicas, nós podemos excluí-las em tempo de execução simplesmente mudando o valor da propriedade Columns.State para csCustomized. Veja: procedure TForm3.Button3Click(Sender: TObject); begin // vamos alterar o valor da propriedade State para csCustomized DBGrid1.Columns.State := csCustomized; end; Este trecho de código faz com que as colunas dinâmicas sejam excluídas e colunas persistentes sejam criadas para cada um dos campos do dataset ao qual o grid está ligado. Após isso, novas colunas podem ser adicionadas em tempo de execução usando código parecido com: procedure TForm3.Button3Click(Sender: TObject); begin // vamos alterar o valor da propriedade State para csCustomized DBGrid1.Columns.State := csCustomized; // vamos adicionar uma nova coluna DBGrid1.Columns.Add; end; Esta dica foi escrita e testada no Delphi 2009. |
Python ::: Dicas & Truques ::: Data e Hora |
Como calcular a diferença de dias entre duas datas em PythonQuantidade de visualizações: 1602 vezes |
Nesta dica mostrarei como podemos usar retornar a diferença de dias entre duas datas na linguagem Python usando o objeto Date, do módulo DateTime. Note o uso do construtor date() para construir as duas datas e em seguida passamos estas duas datas para uma função personalizada numero_dias(), que retorna a quantidade de dias entre elas. Veja o código completo para o exemplo: # vamos importar o objeto Date from datetime import date def main(): # vamos criar a data inicial e a data final d1 = date(2022, 11, 10) d2 = date(2022, 12, 23) # vamos calcular a diferença de dias diferenca = numero_dias(d1, d2) # e mostramos o resultado print("A primeira data é: {0}".format(d1)) print("A segunda data é: {0}".format(d2)) print("A diferença de dias entre as duas datas é: {0} dias".format( diferenca)) # função que recebe duas datas e retorna a diferença # de dias entre elas def numero_dias(data1, data2): return (data2 - data1).days if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: A primeira data é: 2022-11-10 A segunda data é: 2022-12-23 A diferença de dias entre as duas datas é: 43 dias |
C++ ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar ponteiros em C++ - Apostila de C++ para iniciantesQuantidade de visualizações: 8163 vezes |
Antes de pensarmos em ponteiros, é importante nos lembrarmos de alguns aspectos referentes à variáveis. Dependendo do seu conhecimento de programação, você deve saber que variáveis possuem nomes que as identificam durante a execução do programa. Você deve saber também que uma variável armazena um valor (que pode ser fixo, no caso de uma constante, ou pode mudar durante a execução de seus códigos). O que poucos programadores se lembram é que uma variável possui um endereço, e que o nome da variável não é nada mais que um apelido para a localização deste endereço. Desta forma, um ponteiro não é nada mais que um tipo especial de variável que armazena o endereço de outra. Veja um exemplo: #include <iostream> using namespace std; int main(int argc, char *argv[]){ // variável do tipo int int valor = 10; // ponteiro para uma variável do tipo int int *p = &valor; // exibe o valor da variável "valor", apontada // pelo ponteiro p cout << *p << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Neste código nós temos a declaração e definição de duas variáveis: int valor = 10; int *p = &valor; A primeira variável é uma variável do tipo int e a segunda é um ponteiro para uma variável do tipo int. Veja que devemos sempre usar "*" antes do nome de um ponteiro em sua declaração. O símbolo "&" serve para indicar que estamos acessando o endereço de uma variável e não o seu conteúdo. O resultado destas duas linhas é que agora temos um ponteiro que nos permite acessar e manipular a variável valor. Observe a linha: cout << *p << endl; Aqui nós estamos acessando o valor da variável apontada por p. Veja o uso do símbolo "*" para acessar o valor da variável. Isso é chamado de desreferenciamento de ponteiros. Pareceu complicado? Veja uma linha de código que altera indiretamente o valor da variável valor para 30: *p = 30; Ponteiros são ferramentas muito importantes na programação em C++. No entanto, é preciso ter muito cuidado ao lidar com eles. A primeira coisa a ter em mente é que um ponteiro não está apontando para nenhum lugar até que atribuimos a ele o endereço de uma outra variável. E é aí que mora o perigo. Um programa entra em colapso absoluto se tentarmos acessar um ponteiro que aponta para um local de memória que já foi liberado novamente ao sistema. No caso menos grave, estaremos tentando acessar locais de memória inválidos ou reservados a outros programas ou tarefas do sistema operacional. Isso me lembra os velhos tempos da tela azul de morte. |
Java ::: Pacote java.lang ::: StringBuffer |
Java do básico ao avançado - Como usar o método append() para adicionar mais conteúdo ao final de um StringBufferQuantidade de visualizações: 9543 vezes |
O método append() da classe StringBuffer se torna útil quando precisamos adicionar mais conteúdo ao final de um objeto desta classe. Este método possui, no Java 7, as seguintes sobrecargas: public StringBuffer append(Object obj) public StringBuffer append(String str) public StringBuffer append(StringBuffer sb) public StringBuffer append(CharSequence s) public StringBuffer append(CharSequence s, int start, int end) public StringBuffer append(char[] str) public StringBuffer append(char[] str, int offset, int len) public StringBuffer append(boolean b) public StringBuffer append(char c) public StringBuffer append(int i) public StringBuffer append(long lng) public StringBuffer append(float f) public StringBuffer append(double d) Note que em todas as sobrecargas do método, o retorno é um objeto da classe StringBuffer. Mas, não é um novo objeto StringBuffer. É uma referência ao objeto StringBuffer já existente. Veja um exemplo no qual usamos este método para adicionar mais duas palavras ao conteúdo do StringBuffer: package estudos; public class Estudos{ public static void main(String[] args) { // um StringBuffer contendo uma frase StringBuffer frase = new StringBuffer("Gosto muito de programar"); // vamos adicionar mais duas palavras ao final do StringBuffer frase.append(" em"); frase.append(" Java"); // agora mostramos o resultado System.out.println(frase); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: Gosto muito de programar em Java |
Você também poderá gostar das dicas e truques de programação abaixo |
Python - Como repetir os elementos de um vetor ou matriz usando a função repeat() da NumPy do Python JavaScript - Como arredondar um valor numérico de ponto-flutuante para cima usando a função ceil() do objeto Math do JavaScript CSS - Como definir uma imagem de fundo para um botão HTML usando a propriedade background-image do CSS GNU Octave - Como calcular o coeficiente angular de uma reta em GNU Octave dados dois pontos no plano cartesiano |
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 |