LISP ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular MMC em Lisp - Como calcular o Mínimo Múltiplo Comum na linguagem LispQuantidade de visualizações: 892 vezes |
O Mínimo Múltiplo Comum (MMC), ou LCM (Least Common Multiple) é um tipo de operação matemática utilizada para encontrar o menor número positivo, diferente de 0 (zero), que é múltiplo ao mesmo tempo de dois ou mais números. O MMC é utilizado, por exemplo, na soma e subtração de frações - quando é necessário um denominador comum. Nesta dica mostrarei como podemos calcular o MMC de dois números inteiros informados pelo usuário. Veja o código Common Lisp completo: ; variáveis que vamos usar no programa (let ((num1)(num2)(maior)(mmc)) ; Vamos ler o primeiro número (princ "Informe o primeiro número: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável num1 (setq num1 (read)) ; Vamos ler o segundo número (princ "Informe o segundo número: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável num2 (setq num2 (read)) ; agora escolhemos o maior número (cond ((> num1 num2)(setq maior num1)) (t (setq maior num2)) ) ; e entramos em um laço loop (loop ; testa se o maior é divisível por num1 e por num2 (cond ((and (= 0 (rem maior num1))(= 0 (rem maior num2))) ; mmc recebe o maior e sai do laço (setq mmc maior)(return))) ; incrementa o valor da variável maior (setq maior (+ maior 1)) ) ; mostra o resultado (format t "O MMC dos dois números é ~D" mmc) ) Ao executarmos este código Common Lisp nós teremos o seguinte resultado: Informe o primeiro número: 6 Informe o segundo número: 3 O MMC dos dois números é: 6 Note que a linguagem Common Lisp possui uma função LCM() que permite calcular o MMC de dois ou mais números. Minha intenção com essa dica foi mostrar como o cálculo do MMC é feito em Common Lisp. |
Delphi ::: VCL - Visual Component Library ::: TListBox |
Como retornar o item selecionado em uma ListBox do Delphi usando a propriedade ItemIndexQuantidade de visualizações: 20413 vezes |
O item selecionado em uma TListBox pode ser obtido fornecendo-se o índice do ítem selecionado como índice para a propriedade Items (do tipo TStrings) da ListBox. Veja como isso é feito no trecho de código abaixo:procedure TForm1.Button1Click(Sender: TObject); var item_selecionado: String; begin // vamos obter o item selecionado na ListBox item_selecionado := ListBox1.Items[ListBox1.ItemIndex]; // mostra o resultado ShowMessage('O item selecionado é: ' + item_selecionado); end; Contudo, este código provocará uma exceção do tipo EStringListError com a mensagem "List index out of bonds(-1)" se nenhum item estiver selecionado na ListBox. Para evitar tal erro, certifique-se de verificar se algum item foi selecionado antes de tentar obtê-lo. Veja: procedure TForm1.Button1Click(Sender: TObject); var item_selecionado: String; begin // vamos obter o item selecionado na ListBox if ListBox1.ItemIndex > -1 then begin item_selecionado := ListBox1.Items[ListBox1.ItemIndex]; // mostra o resultado ShowMessage('O item selecionado é: ' + item_selecionado); end else ShowMessage('Nenhum item selecionado.'); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Strings e Caracteres |
Exercício Resolvido de Python - Como testar se duas palavras são anagramas uma da outra - Solução usando dicionário/hash tableQuantidade de visualizações: 2562 vezes |
Exercícios Resolvidos de Python - Como testar se duas palavras são anagramas uma da outra - Solução usando dicionário/hash table Pergunta/Tarefa: Dadas duas palavras p1 e p2, escreva um código Python que informa se uma palavra é anagrama da outra. Um anagrama é uma espécie de jogo de palavras criado com a reorganização das letras de uma palavra ou expressão para produzir outras palavras ou expressões, utilizando todas as letras originais exatamente uma vez. Para esta solução você deverá, obrigatoriamente, usar um dicionário Python, ou seja, um objeto dict. O objetivo é construir duas tabelas de frequências dos caracteres de cada palavra. Dicionários em Python são similares às tabelas hash (hash tables) em outras linguagens de programação. Seu programa deverá exibir a seguinte saída: ![]() Resposta/Solução: Veja a resolução com código comentado em Python: # método que recebe duas palavras e retorna # verdadeiro se uma palavra for anagrama da # outra def anagramas(palavra1, palavra2): # o primeiro passo é verificar se os comprimentos das duas # palavras são iguais if(len(palavra1) != len(palavra2)): return False # agora criamos dois dictionaries para as frequencias de # cada uma das palavras freq_p1 = {} freq_p2 = {} # agora registramos as frequências de letras na primeira # palavra for letra in palavra1: # a letra já está no dicionário? if letra in freq_p1: freq_p1[letra] += 1 # aumenta a frequêcia desta letra else: freq_p1[letra] = 1 # ainda não estava no dicionário # agora registramos as frequências de letras na segunda # palavra for letra in palavra2: # a letra já está no dicionário? if letra in freq_p2: freq_p2[letra] += 1 # aumenta a frequêcia desta letra else: freq_p2[letra] = 1 # ainda não estava no dicionário # registradas as frequências de letras das duas palavras, # chegou a hora de compararmos os dois dicionários for chave in freq_p1: # esta chave não está no segundo dicionário ou # possui valores diferentes? if chave not in freq_p2 or freq_p1[chave] != freq_p2[chave]: return False # se chegou até aqui então uma palavra é anagrama da outra return True def main(): # vamos ler duas palavras e verificar se uma é anagrama da outra palavra1 = input("Informe a primeira palavra: ") palavra2 = input("Informe a segunda palavra: ") # vamos chamar o método que faz a verificação if(anagramas(palavra1, palavra2)): print("As duas palavras são anagramas") else: print("As duas palavras não são anagramas") if __name__== "__main__": main() |
Java ::: Tratamento de Erros ::: Erros de Tempo de Execução |
Como tratar o erro IndexOutOfBoundsException do Java - A exceção IndexOutOfBoundsException da linguagem JavaQuantidade de visualizações: 17608 vezes |
A exceção IndexOutOfBoundsException é uma exceção (erro) que acontece quando fornecemos um índice fora dos limites permitidos para o acesso de elementos em um vetor, matriz, string ou demais coleções. 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 IndexOutOfBoundsException na hierarquia de classes da plataforma Java: java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.IndexOutOfBoundsException Esta classe implementa a interface Serializable e possui duas sub-classes conhecidas: ArrayIndexOutOfBoundsException e StringIndexOutOfBoundsException. Veja um exemplo no qual tentamos acessar um elemento de um vetor 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. Veja agora o mesmo trecho de código usando uma string: public class Estudos{ public static void main(String args[]){ String nome = "Java"; // vamos fornecer um índice inválido System.out.println(nome.charAt(4)); System.exit(0); } } Compile este código e execute-o. Você verá a seguinte mensagem de erro: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 at java.lang.String.charAt(Unknown Source) at Estudos.main(Estudos.java:6) Vamos fazer o mesmo usando uma ArrayList: import java.util.ArrayList; public class Estudos{ public static void main(String[] args){ // cria uma ArrayList que conterá strings ArrayList<String> nomes = new ArrayList<String>(); // adiciona itens na lista nomes.add("Carlos"); nomes.add("Maria"); nomes.add("Fernanda"); nomes.add("Osmar"); // fornecemos um índica inválido String nome = nomes.get(4); System.out.println("O valor obtido foi: " + nome); System.exit(0); } } Compile, execute e veja a mensagem de erro: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at Estudos.main(Estudos.java:15) Veja que no caso do vetor, a exceção lançada foi ArrayIndexOutOfBoundsException, no caso da string a exceção foi StringIndexOutOfBoundsException e no caso do ArrayList tivemos IndexOutOfBoundsException. Resolvemos abordar estas três exceções em apenas uma anotação para que você perceba a semelhança entre elas. |
PHP ::: Dicas & Truques ::: Gráficos e Cores |
Gráficos em PHP - Como verificar se a extensão GD está disponível na sua instalação do PHPQuantidade de visualizações: 10466 vezes |
Gráficos em PHP são gerados a partir da biblioteca (ou extensão) GD. É claro que você pode usar outras bibliotecas, mas esta é a mais comumente usada e disponível nas hospedagens compartilhadas. Antes de começar a gerar gráficos e imagens, porém, você precisa verificar se a GD está disponível no seu interpretador. A melhor forma de verificar isso é usar a página phpinfo() e procurar a seção "GD". Você deverá ter algo assim: GD Support enabled GD Version 2.0 or higher FreeType Support enabled FreeType Linkage with freetype JPG Support enabled PNG Support enabled WBMP Support enabled A partir da versão 4.3 do PHP, uma versão da GD (equivalente à GD 2.0 ou mais recente) já vem instalada por padrão. Isso dispensa a instalação da biblioteca. |
HTML5 ::: Dicas & Truques ::: Meta Tags |
HTML5 para iniciantes - Como usar a meta tag viewport para controlar o layout de suas páginas HTMLQuantidade de visualizações: 6050 vezes |
Quando estamos aprendendo HTML5 e queremos desenvolver páginas web responsivas, ou design responsivo, uma das primeiras tags que temos que entender e dominar bem, é a tag viewport, incluinda com a especificação do HTML5. Mas o que é a tag viewport? Esta meta tag foi originalmente apresentada no navegador Safari Mobile, e é usada para definir a largura e escala de apresentação do conteúdo da página HTML. Dessa forma, viewport é a área da página web na qual o conteúdo é exibido para o usuário. Como sabemos, uma página web pode ser acessada por dispositivos variados. A tela do laptop é muito maior se comparada à tela de um smartphone ou tablet. A meta tag viewport é adicionada na seção <head> da página HTML e pode conter os seguintes elementos: width: É a largura do viewport virtual no dispositivo. height: É a altura do viewport virtual do dispositivo. initial-scale: É o nível de zoom quando a página é acessada. maximum-scale: É o limite máximo de zoom que pode ser aplicado à página. user-scalable: Uma flag que indica se o usuário pode ou não aplicar zoom à página. Os valores permitidos são yes ou no. Veja, por exemplo, como definir um viewport de 980px e escala inicial de zoom de 1: <meta name="viewport" content="width=980, initial-scale=1"> No entanto, se nossa intenção é desenvolver um design responsivo, devemos passar o valor device-width para o atributo width do viewport. Isso faz com que a largura do viewport seja igual à largura do dispositivo que está acessando a página. Veja uma página HTML completa usando esta abordagem: <html> <head> <title>Estudando HTML5</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <h1>Java Avançado - Como obter a largura e altura da tela do seu computador em pixels usando o método getScreenSize() da classe Toolkit do Java</h1> <p>A classe Toolkit da linguagem Java nos fornece o método getScreenSize(), que retorna um objeto da classe Dimension contendo a largura e a altura da tela do nosso computador, em pixels. Veja o código Java completo para o exemplo:</p> </body> </html> Note que o elementos dentro do atributo content são separados por vírgulas, juntamente com seus valores individuais. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Como testar se um número é positivo ou negativo em JavaQuantidade de visualizações: 13318 vezes |
Pergunta/Tarefa: Escreva um programa Java que pede para o usuário informar um número inteiro. Em seguida seu código deverá informar se o número informado é positivo, negativo ou neutro. O zero não é um número positivo nem negativo, já que não é maior nem menor que si mesmo. Por essa razão dizemos que ele é um número neutro. Sua saída deve ser parecida com: Informe um número inteiro: 3 O número 3 é positivo. Informe um número inteiro: -5 O número -5 é negativo. Informe um número inteiro: 0 O número 0 é neutro. Veja a solução comentada deste exercício usando a linguagem Java: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos ler o número System.out.print("Informe um número inteiro: "); int numero = Integer.parseInt(entrada.nextLine()); // o número é positivo? if(numero > 0){ System.out.println("O número " + numero + " é positivo."); } // o número é negativo? else if(numero < 0){ System.out.println("O número " + numero + " é negativo."); } else{ // o número é neutro System.out.println("O número " + numero + " é neutro."); } } } |
C++ ::: Dicas & Truques ::: Strings e Caracteres |
Como pesquisar uma substring em uma string C++ usando o método find() e retornar o índice do primeiro caractereQuantidade de visualizações: 10332 vezes |
Nesta dica mostrarei como podemos usar a função find() da classe String do C++ para pesquisar parte de uma palavra, frase ou texto. Se a substring for encontrada, o índice do seu primeiro caractere é retornado. Caso contrário o valor npos é retornado. Veja o código C++ completo para o exemplo: #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // vamos criar uma string string frase = "Gosto de Java e C++"; cout << "A string informada foi: " << frase << endl; // agora vamos checar a existência da substring size_t pos = frase.find("Java"); // a substring foi encontrada? if(pos == string::npos){ cout << "A substring nao foi encontrada." << endl; } else{ cout << "A substring foi encontrada" << " no indice " << pos << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: A string informada foi: Gosto de Java e C++ A substring foi encontrada no indice 9 |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como abrir ou criar arquivos em C usando a função fopen()Quantidade de visualizações: 66559 vezes |
Há muitas situações nas quais precisamos ler ou gravar dados em arquivos a partir de nossos programas C. O primeiro passo para esta tarefa é aprender a usar a função fopen(). Esta função é a responsável por conectar um ponteiro de arquivos ao arquivo que queremos manipular. Veja sua assinatura:FILE *fopen(const char *nome, const char *modo); O parâmetro nome é uma string que indica o nome do arquivo a ser aberto ou criado. O parâmetro modo indica se o arquivo será aberto para leitura, escrita ou ambos. Antes de continuarmos, veja um trecho de código que tenta abrir um arquivo chamado "testes.txt" localizado no diretório "c:\": #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *arquivo = fopen("c:\\testes.txt", "r"); // testa se o arquivo foi aberto com sucesso if(arquivo != NULL) printf("Arquivo foi aberto com sucesso."); else printf("Nao foi possivel abrir o arquivo."); printf("\n\n"); system("PAUSE"); return 0; } Veja que a primeira linha declara um ponteiro para a estrutura FILE e atribui a este ponteiro o resultado de uma chamada à função fopen(). Se o arquivo for aberto com sucesso, poderemos manipulá-lo a partir do ponteiro *arquivo. Do contrário, o valor NULL será retornado. A linguagem C padrão permite a definição dos seguintes modos de abertura de arquivos: a - abre um arquivo para inserção. Se o arquivo não existir, o sistema operacional tentará criá-lo. r - abre um arquivo existente para leitura. w - abre um arquivo para escrita. Se o arquivo não existir, o sistema operacional tentará criá-lo. Se o arquivo existir, todo o seu conteúdo será substituído pelo novo conteúdo. r+ - abre um arquivo existente para leitura e gravação. w+ - abre um arquivo para leitura e escrita. Se o arquivo não existir, o sistema operacional tentará criá-lo. Se o arquivo existir, todo o seu conteúdo será substituído pelo novo conteúdo. a+ - abre um arquivo para inserção e leitura. Se o arquivo não existir, o sistema operacional tentará criá-lo. |
AutoLISP ::: Dicas & Truques ::: Passos Iniciais |
O que é AutoLISP e como escrever seu primeiro programa nessa linguagem de programaçãoQuantidade de visualizações: 1431 vezes |
O que é AutoLISP? Se você chegou até este artigo vindo de um mecanismo de busca, é bem provável que você já saiba o que é a AutoLISP e para que ela serve. No entanto, é sempre bom reforçar. A AutoLISP é um dialeto, ou seja, uma derivação, da linguagem de programação LISP. LISP vem de LISt Processing (Processamento de listas, vetores, matrizes, etc). Imagina-se que a LISP seja a linguagem de programação de alto nível mais antiga que se conhece, perdendo apenas para o FORTRAN. Embutida por padrão no AutoCAD, a LISP é a linguagem preferida para inteligência artificial em robótica. Para que serve a AutoLISP no AutoCAD? A AutoLISP, como mencionei acima, é linguagem de programação padrão do AutoCAD e já vem embutida nele, da mesma forma que a linguagem Python já vem embutida no FreeCAD. É claro que podemos manipular os objetos do AutoCAD usando VBA (Visual Basic for Applications), mas esta opção já não vem mais embutida por padrão na ferramenta. No AutoCAD, a AutoLISP é usada para automatizar tarefas e tornar menos tediosos os desenhos com detalhes muito repetitivos. Um programa AutoLISP nos permite, entre outras coisas, desenhar linhas, círculos, retângulos, polígonos, etc, selecionar objetos no GA (área de desenho do AutoCAD), solicitar entrada do usuário, exibir saída, ler e escrever em arquivos e muitas outras funcionalidades. Como escrever e executar um programa AutoLISP no AutoCAD Agora que já sabemos o que é a AutoLISP e seus objetivos, vamos escrever nosso primeiro programa. Abra o seu editor de código favorito (aqui eu usei o Notepad++) e digite a seguinte listagem: ; Este programa é usado para desenhar uma ; linha a partir de dois pontos indicados ; pelo usuário (defun desenharLinha() ; Vamos obter o primeiro ponto e guardar suas ; coordenadas na variável p (setq p (getpoint "Clique primeiro ponto na GA")) ; Vamos obter o segundo ponto e guardar suas ; coordenadas na variável q (setq q (getpoint "\nClique segundo ponto na GA")) ; Agora chamamos o comando LINE passando os ; dois pontos geométricos obtidos (command "LINE" p q "") ) Veja que, já no início do código, nós temos uma função chamada desenharLinha(). Dessa forma, salve o arquivo com o nome "desenharLinha.lsp" no diretório de sua preferência. Como carregar um programa AutoLISP no AutoCAD? Agora que já temos o arquivo .lsp pronto, vamos aprender como carregá-lo no AutoCAD. Para isso, vá até o menu Manage e escolha a opção Load Application. Selecione o arquivo desejado e clique o botão Load. Se tudo correu bem, você receberá uma mensagem "_appload desenharLinha.lsp successfully loaded". Agora já podemos usar nossa rotina para desenhar linhas no AutoCAD. Com a aba Model ativada, digite: (DESENHARLINHA) na janela de comandos do AutoCAD. Ao pressionar Enter você verá a mensagem "Clique primeiro ponto na GA". Lembrando que GA é a General Arrangement Drawing, ou seja, a área de desenho. Dessa forma, clique na área de desenho para que o código AutoLISP registre o primeiro ponto (coordenadas x, y, z). No mesmo momento uma mensagem "Clique segundo ponto na GA" será exibida. Clique na área de desenho para registrar o segundo ponto e pronto! Você verá uma linha ser desenhada entre os dois pontos geométricos que você informou. |
Nossas 20 dicas & truques de programação mais populares |
QGIS - Como definir o título do projeto do QGIS usando PyQGIS e a função setTitle() da classe QgsProject JavaScript - Como calcular o seno de um número ou ângulo em JavaScript usando a função sin() do objeto Math JavaScript - Como retornar apenas os três primeiros elementos de um array em JavaScript usando a função slice() do objeto Array |
Você também poderá gostar das dicas e truques de programação abaixo |
JavaScript - Como retornar apenas os três primeiros elementos de um array em JavaScript usando a função slice() do objeto Array C# - Como retornar a quantidade de elementos que podem ser armazenados na List do C# sem redimensioná-la |
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 |