Python ::: NumPy Python Library (Biblioteca Python NumPy) ::: Números Aleatórios, Números Randômicos, Amostras Aleatórias, Amostras Randômicas |
Como gerar um número randômico em Python usando a função rand() do módulo random da NumPyQuantidade de visualizações: 719 vezes |
Em algumas situações nós precisamos gerar um número aleatório na faixa de 0 e 1 (não incluído). Para isso nós podemos usar a função rand() do módulo random da biblioteca NumPy do Python. Veja um exemplo:# importamos o módulo random da biblioteca NumPy import numpy as np # método principal def main(): # vamos gerar um número decimal aleatório de 0 (incluído) # à 1 (não incluído) valor = np.random.rand() print("O número sorteado foi: {0}".format(valor)) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O número sorteado foi: 0.2037063569952866 Note que o número retornado pela função rand() é um float com uma precisão semelhante ao double em outras linguagens de programação. Veja agora uma modificação deste código para gerar 10 números aleatórios: # importamos o módulo random da biblioteca NumPy import numpy as np # método principal def main(): # vamos gerar 10 números decimais aleatórios de 0 (incluído) # à 1 (não incluído) for i in range(10): valor = np.random.rand() print("O número sorteado foi: {0}".format(valor)) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O número sorteado foi: 0.57920714427429 O número sorteado foi: 0.06329414607318185 O número sorteado foi: 0.12184477988071851 O número sorteado foi: 0.5410663009618577 O número sorteado foi: 0.790229323250604 O número sorteado foi: 0.4733277307431061 O número sorteado foi: 0.7669969432159425 O número sorteado foi: 0.6934927410217504 O número sorteado foi: 0.13216036543343856 O número sorteado foi: 0.6958612722883786 |
Python ::: Dicas & Truques ::: HTTP Web Server |
Como criar um servidor web em Python usando as classes BaseHTTPRequestHandler e HTTPServerQuantidade de visualizações: 679 vezes |
Nesta dica mostrarei como criar um web server em Python, ou seja, o nosso próprio servidor web. Para isso nós vamos criar uma classe ServidorWeb que herda de BaseHTTPRequestHandler, que nos fornece todos os métodos necessários para tratar requisições HTTP, tais como GET e POST. Note que definir o nome do host como "localhost" e a porta como "8080". Veja o código completo para o nosso web server em Python: # precisamos importar os objetos BaseHTTPRequestHandler e HTTPServer # do módulo http.server from http.server import BaseHTTPRequestHandler, HTTPServer # precisamos também do módulo time import time # vamos criar a classe ServidorWeb, que herda de # BaseHTTPRequestHandler class ServidorWeb(BaseHTTPRequestHandler): # vamos implementar o método que responde às requisições GET def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes("<html><head><title>Meu Servidor Web</title></head>", "utf-8")) self.wfile.write(bytes("<p>Requsição: %s</p>" % self.path, "utf-8")) self.wfile.write(bytes("<body>", "utf-8")) self.wfile.write(bytes("<p>Exemplo de Web Server em Python</p>", "utf-8")) self.wfile.write(bytes("</body></html>", "utf-8")) # função principal do programa def main(): # agora criamos um objeto HTTPServer host = "localhost" porta = 8080 servidorWeb = HTTPServer((host, porta), ServidorWeb) print("Servidor iniciado em http://%s:%s" % (host, porta)) # tentamos levantar o servidor try: servidorWeb.serve_forever() except KeyboardInterrupt: pass # liberamos o servidor web servidorWeb.server_close() print("O servidor web foi parado.") if __name__== "__main__": main() Ao executar este código você verá a seguinte mensagem: Servidor iniciado em http://localhost:8080 A partir daí você pode abrir o seu navegador neste endereço e já verá a página web que definimos no corpo do método do_GET() da classe ServidorWeb. Agora é só explorar as dicas dessa seção para aprender ainda mais sobre redes, soquetes e servidores web usando a linguagem Python. |
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como criar um subdiretório em C# usando a função CreateSubdirectory() da classe DirectoryInfo - Curso de C# para iniciantesQuantidade de visualizações: 161 vezes |
Em várias situações nós precisamos criar subdiretórios usando C#. Para isso nós podemos usar o método CreateSubdirectory() da classe DirectoryInfo. Veja como isso pode ser feito no trecho de código a seguir: using System; using System.IO; namespace Estudos{ class Program{ static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(@"C:\estudos_c#"); DirectoryInfo sub = dir.CreateSubdirectory("testes"); if (sub.Exists) { Console.WriteLine("Subdiretório criado com sucesso"); } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executarmos este código nós teremos o seguinte resultado: Subdiretório criado com sucesso |
PHP ::: Boletos Bancários, Arquivos de Remessa e Retornos do Banco ::: Caixa Econômica Federal - Banco 104 |
Boleto Bancário PHP - Como calcular o Dígito Verificador do Nosso Número (Módulo 11) - Boleto Caixa EconômicaQuantidade de visualizações: 2851 vezes |
Nesta dica mostrarei, passo-a-passo, como calcular o Dígito Verificador do Nosso Número para o boleto e arquivos de remessa da Caixa Econômica Federal (Banco 104). O Nosso Número é o número de identificação do título no Banco. Este número deve ser único nos seus sistemas, pois, sua combinação com o código do cedente o torno único também no sistema bancário. Além disso, é o Nosso Número que permite ao Banco e a empresa identificar os dados da cobrança que deram origem ao bloqueto. Na Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro), o Nosso Número é composto de 17 posições, sendo as 02 posições iniciais para identificar a Carteira e as 15 posições restantes são para livre utilização pelo Cedente. Seu formato é XYNNNNNNNNNNNNNNN-D, onde: a) X = Modalidade/Carteira de Cobrança (1-Registrada/2-Sem Registro); b) Y = Emissão do bloqueto (4-Cedente); c) NNNNNNNNNNNNNNN = Nosso Número (15 posições livres do Cedente); d) D = Dígito Verificador do Nosso Número calculado através do Modulo 11, conforme código que mostrarei a seguir. Nos boletos e arquivos de remessa da Caixa, o Dígito Verificador do Nosso Número admite 0 (zero), diferentemente do DV Geral do Código de Barras (que também mostro como calcular em dicas dessa seção). O cálculo que mostrarei a seguir é baseado no Módulo 11 e está de acordo com as instruções do Manual de Leiaute de Arquivo Eletrônico Padrão CNAB 240 - Cobrança Bancária Caixa - SIGCB - Versão 67.118 v024 micro e Especificação do Código de Barras para Bloquetos de Cobrança Sem Registro e Registrada no SIGCB (67.119 v005 micro). Tenha certeza de verificar sua versão do manual antes de usar o código apresentado. Dito isso, veja o código PHP completo para uma função que recebe o Nosso Número e retorna seu dígito verificador: <?php // função que recebe o nosso número // e retorna o seu dígito verificador function dvNossoNumero($nossoNumero){ // o nosso número possui mais que 17 dígitos? if(strlen($nossoNumero) > 17){ die("O Nosso Número não pode ter mais que 17 dígitos."); } // agora vamos definir os índices de multiplicação $indices = "29876543298765432"; // e aqui a soma da multiplicação coluna por coluna $soma = 0; // fazemos a multiplicação coluna por coluna agora for($i = 0; $i < strlen($nossoNumero); $i++){ $soma = $soma + ((int)($nossoNumero[$i])) * ((int)($indices[$i])); } // obtemos o resto da divisão da soma por onze $resto = $soma % 11; // subtraímos onze pelo resto da divisão $digito = 11 - $resto; // atenção: Se o resultado da subtração for // maior que 9 (nove), o dígito será 0 (zero) if($digito > 9){ $digito = 0; } return $digito; } // vamos calcular o Dígito Verificador do // Nosso Número $carteira = "1"; // $emissao = "4"; // cedente $nossoNumero = "19"; // preenche com zeros até completar 15 posições $nossoNumero = sprintf("%015d", $nossoNumero); $nossoNumeroCompleto = $carteira . $emissao . $nossoNumero; $digito = dvNossoNumero($nossoNumeroCompleto); echo "O dígito verificador para o nosso número " . $nossoNumeroCompleto . " é: " . $digito; ?> Ao executar este código PHP nós teremos o seguinte resultado: O dígito verificador para o nosso número 14000000000028288 é: 5 |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como remover quebras de linhas de uma string - Como usar o método replaceAll() da classe String para remover quebras de linha de um texto - RevisadoQuantidade de visualizações: 11 vezes |
Nesta dica eu mostro como podemos usar o método replaceAll() da classe String para remover quebras de linha de uma palavra, frase ou texto. Veja:package arquivodecodigos; public class Estudos{ public static void main(String[] args){ String original = "Programar em Java\n é mais fácil do\n que você pensa."; // vamos exibir a String original System.out.println("Original: " + original); // agora vamos remover as quebras de linha String nova = original.replaceAll("[\\n]", ""); // vamos exibir a String sem as quebras de linha System.out.println("Sem quebras de linha: " + nova); System.exit(0); } } Este código exibirá o seguinte resultado: Original: Programar em Java é mais fácil do que você pensa. Sem quebras de linha: Programar em Java é mais fácil do que você pensa. Esta dica foi revisada e atualizada para o Java 8. |
Delphi ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter uma string em um valor numérico inteiro em Delphi usando as funções StrToInt(), TryStrToInt() e StrToIntDef()Quantidade de visualizações: 33598 vezes |
Em algumas situações precisamos converter strings em valores numéricos do tipo inteiro. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos. Vamos começar com a função StrToInt() da unit SysUtils. Esta função recebe uma string representando um valor inteiro válido e retorna um valor inteiro. Veja o exemplo: procedure TForm1.Button1Click(Sender: TObject); var valor1, valor2, soma: Integer; begin // vamos receber as strings dos TEdits e converter // seus valores para inteiros valor1 := StrToInt(Edit1.Text); valor2 := StrToInt(Edit2.Text); // vamos obter a soma dos dois valores soma := valor1 + valor2; // vamos exibir o resultado. Note o uso de IntToStr() para // converter o valor inteiro em string ShowMessage('A soma é: ' + IntToStr(soma)); end; Note que, se a string sendo convertida possuir um valor inteiro inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToInt(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Integer que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja: procedure TForm1.Button1Click(Sender: TObject); var valor: Integer; begin // vamos tentar converter o valor da caixa de texto // em um inteiro if TryStrToInt(Edit1.Text, valor) then ShowMessage('Conversão efetuada com sucesso.') else ShowMessage('Erro na conversão'); end; Há ainda uma terceira possibilidade: usar a função StrToIntDef(). Esta função funciona exatamente da mesma forma que StrToInt(), exceto que agora, se houver um erro de conversão, um valor inteiro padrão será retornado. Veja: procedure TForm1.Button1Click(Sender: TObject); var valor: Integer; begin // vamos converter o valor da caixa de texto // em um inteiro. Se a conversão não puder ser feita // o valor 10 será atribuído à varial valor valor := StrToIntDef(Edit1.Text, 10); // vamos exibir o resultado ShowMessage(IntToStr(valor)); end; Caso você precise trabalhar com inteiros de 64 bits, poderá usar as funções StrToInt64(), StrToInt64Def() e TryStrToInt64(). Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
C ::: Estruturas de Dados ::: Lista Ligada Simples |
Estruturas de Dados em C - Como remover um nó no final de uma lista ligada simples em C - Listas encadeadas em CQuantidade de visualizações: 2043 vezes |
Nesta dica mostraremos como é possível excluir o nó no fim (o último nó) de uma lista encadeada simples (singly linked list) em C. Veja a função:// função que permite remover um nó no fim // da lista, ou seja, o último nó da lista. // A função retorna um ponteiro para o início da lista struct No *remover_final(struct No *inicio){ struct No *n; // nó que será removido // nó que antecede o nó a ser removido. Isso // faz sentido, já que ele será o último nó // agora struct No *anterior; n = inicio; // aponta para o início da lista // varremos os nós da lista e paramos um nó antes do // nó a ser excluído while(n->proximo != NULL){ anterior = n; // anterior assume o lugar de n n = n->proximo; // e n assume o seu próximo } // anterior passa a ser o último nó agora anterior->proximo = NULL; // mostra o nó removido printf("\nNo removido: %d\n", n->valor); free(n); // libera o nó que antes era o último return inicio; } Note que a função recebe um ponteiro para o início da lista e retorna também um ponteiro para o início da lista. Tenha o cuidado de verificar se a lista não está vazia antes de tentar fazer a exclusão. No exemplo eu fiz isso na função main(). Veja a listagem completa abaixo: #include <stdio.h> #include <stdlib.h> // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó // função que permite exibir os valores de // todos os nós da lista void exibir(struct No *n){ if(n != NULL){ do{ printf("%d\n", n->valor); n = n->proximo; }while(n != NULL); } else printf("A lista esta vazia\n\n"); } // função que permite remover um nó no fim // da lista, ou seja, o último nó da lista. // A função retorna um ponteiro para o início da lista struct No *remover_final(struct No *inicio){ struct No *n; // nó que será removido // nó que antecede o nó a ser removido. Isso // faz sentido, já que ele será o último nó // agora struct No *anterior; n = inicio; // aponta para o início da lista // varremos os nós da lista e paramos um nó antes do // nó a ser excluído while(n->proximo != NULL){ anterior = n; // anterior assume o lugar de n n = n->proximo; // e n assume o seu próximo } // anterior passa a ser o último nó agora anterior->proximo = NULL; // mostra o nó removido printf("\nNo removido: %d\n", n->valor); free(n); // libera o nó que antes era o último return inicio; } // função que permite inserir nós no // final da lista. // veja que a função recebe o valor a ser // armazenado em cada nó e um ponteiro para o // início da lista. A função retorna um // ponteiro para o início da lista struct No *inserir_final(struct No *n, int v){ // reserva memória para o novo nó struct No *novo = (struct No*)malloc(sizeof(struct No)); novo->valor = v; // verifica se a lista está vazia if(n == NULL){ // é o primeiro nó...não deve apontar para // lugar nenhum novo->proximo = NULL; return novo; // vamos retornar o novo nó como sendo o início da lista } else{ // não está vazia....vamos inserir o nó no final // o primeiro passo é chegarmos ao final da lista struct No *temp = n; // vamos obter uma referência ao primeiro nó // vamos varrer a lista até chegarmos ao último nó while(temp->proximo != NULL){ temp = temp->proximo; } // na saída do laço temp aponta para o último nó da lista // novo será o último nó da lista...o campo próximo dele deve // apontar para NULL novo->proximo = NULL; // vamos fazer o último nó apontar para o nó recém-criado temp->proximo = novo; return n; // vamos retornar o início da lista intacto } } int main(int argc, char *argv[]) { // declara a lista struct No *inicio = NULL; // vamos inserir quatro valores no final // da lista inicio = inserir_final(inicio, 45); inicio = inserir_final(inicio, 3); inicio = inserir_final(inicio, 98); inicio = inserir_final(inicio, 47); // vamos exibir o resultado printf("Valores presentes na lista ligada antes da remocao:\n"); exibir(inicio); // vamos remover o nó no fim da lista if(inicio != NULL){ inicio = remover_final(inicio); } // vamos exibir o resultado printf("\nValores presentes na lista ligada apos a remocao:\n"); exibir(inicio); system("pause"); return 0; } Ao executar esse código você terá o seguinte resultado: Valores presentes na lista ligada antes da remocao: 45 3 98 47 No removido: 47 Valores presentes na lista ligada apos a remocao: 45 3 98 Pressione qualquer tecla para continuar. . . |
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como tornar o TClientDataSet do Delphi somente leitura usando a propriedade ReadOnlyQuantidade de visualizações: 11797 vezes |
Em algumas situações gostaríamos que um TClientDataSet fosse somente leitura, ou seja, não queremos permitir inserção, atualização ou exclusão dos dados do dataset. Para isso podemos usar a propriedade ReadOnly. Se seu valor for True, os dados do TClientDataSet serão apenas para leitura. Se o valor for False, os dados podem ser modificados e/ou novos dados podem ser inseridos no dataset. O valor padrão é False. Em tempo de design a propriedade ReadOnly do TClientDataSet pode ser ajustada selecionando-se o componente no formulário e acessando o Object Inspector. Em tempo de execução esta propriedade pode ser ajustada por meio do seguinte trecho de código: procedure TForm3.Button3Click(Sender: TObject); begin // vamos tornar o TClientDataSet somente leitura ClientDataSet1.ReadOnly := True; end; Se necessário, podemos obter o valor desta propriedade em tempo de execução da seguinte forma: procedure TForm3.Button3Click(Sender: TObject); begin // vamos verificar se o TClientDataSet é somente leitura if ClientDataSet1.ReadOnly then ShowMessage('O ClientDataSet é somente leitura') else ShowMessage('O ClientDataSet NÃO é somente leitura') end; Ao executarmos este código e clicarmos no botão teremos uma mensagem parecida com: "O ClientDataSet NÃO é somente leitura". É importante observar que se tentarmos efetuar alguma operação que modifica o conteúdo de um TClientDataSet somente leitura nós teremos uma exceção do tipo: Project Project2.exe raised exception class EDatabaseError with message 'ClientDataSet1': Cannot modify a read-only dataset'. Quando ajustamos o valor da propriedade ReadOnly para True, automaticamente a propriedade CanModify do dataset é ajustada para False. Importante: Mesmo que o valor da propriedade ReadOnly seja False, os usuários ainda podem ser impedidos de modificar os dados de um client dataset se este obtém seus dados a partir de um provider (por exemplo: TDataSetProvider). A propriedade Options do provider pode limitar se os dados podem ser editados e, se puderem, os tipos de alterações permitidos. Esta dica foi escrita e testada no Delphi 2009. |
LISP ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercícios Resolvidos de LISP - Um programa que lê duas notas, calcula a média aritmética e exibe uma mensagem de reprovado, exame ou aprovadoQuantidade de visualizações: 508 vezes |
Pergunta/Tarefa: Escreva um programa LISP ou Common Lisp que leia duas notas (como double ou float), calcule e mostre a média aritmética e uma mensagem de acordo com as seguintes regras: 1) Se a média for inferior a 4,0 escreva "Reprovado"; 2) Se a média for igual ou superior a 4,0 e inferior a 7,0 escreva "Exame"; 3) Se a média for igual ou superior a 7,0 escreva "Aprovado". Sua saída deverá ser parecida com: Informe a primeira nota: 8 Informe a segunda nota: 7.4 A média obtida foi: 7.7 Aprovado Veja a resolução comentada deste exercício usando Common Lisp (a padronização da linguagem LISP): ; Algoritmo LISP para calcular a média de um aluno ; variáveis que vamos usar no programa (let ((n1)(n2)(media)) ; vamos solicitar as duas notas do aluno (princ "Informe a primeira nota: ") (force-output) (setq n1 (read)) (princ "Informe a segunda nota: ") (force-output) (setq n2 (read)) ; vamos calcular a média aritmética (setq media (/ (+ n1 n2) 2)) (format t "A média obtida foi ~F" media) ; vamos verificar se o aluno foi reprovado, está de exame ou aprovado (cond ((< media 4.0) ; reprovado (format t "~%Reprovado")) ((and (>= media 4.0)(< media 7.0)) ; exame (format t "~%Exame")) (t (format t "~%Aprovado")) ) ) |
C# ::: Windows Forms ::: TextBox |
Como contar as palavras em um TextBox de múltiplas linhas do C# Windows FormsQuantidade de visualizações: 13996 vezes |
Em algumas situações nós precisamos retornar a quantidade de palavras digitadas em um campo TextBox de múltiplas linhas do C# Windows Forms. O trecho de código abaixo mostra como isso pode ser feito. Note como usei os métodos da classe String para alcançar o objetivo. Veja o código C# completo disparado a partir do clique de um botão Button: /* Este exemplo mostra como obter a quantidade de palavras em um TextBox. Veja que usamos a técnica de contar as palavras contidas em um array após retirar as quebras de linhas e espaços duplicados na string. */ private void button1_Click(object sender, EventArgs e){ // Obtém o texto da caixa de texto string texto = textBox1.Text.Trim(); // Remove as quebras de linhas substituindo-as por // espaços texto = texto.Replace(Environment.NewLine, " "); // remove os espaços em excesso while(texto.IndexOf(" ") >= 0){ texto = texto.Replace(" ", " "); } // Obtém um array de palavras string[] palavras = texto.Split(" "); // Obtém a quantidade de palavras int quant = palavras.Length; // Exibe o resultado MessageBox.Show("O TextBox contém " + quant + " palavras."); } |
Nossas 20 dicas & truques de programação mais populares |
Java - Como criar um Jogo da Velha em Java - Jogo completo com código fonte comentado - Versão console |
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 |
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 |