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

Como calcular MMC em Lisp - Como calcular o Mínimo Múltiplo Comum na linguagem Lisp

Quantidade 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 ItemIndex

Quantidade 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 table

Quantidade 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 Java

Quantidade 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 PHP

Quantidade 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 HTML

Quantidade 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 Java

Quantidade 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.
Resposta/Solução:

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 caractere

Quantidade 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ção

Quantidade 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.

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