segunda-feira, 26 de maio de 2014

Visual Studio - Como Criar Formulários Pai e Filho MDI


MDI significa Interface Documentos Múltiplos. É o formulário pai MDI. Este formulário contém as janelas filhos MDI, que são subjanelas onde os usuários interage com o aplicativo MDI


É muito fácil criar um formulário pai MDI. Vejamos um exemplo utilizando o Windows Forms Designer.


Nota: também podemos criar por meio de promação.


Criando um formulário pai MDI em tempo de design


1.     Criar um projeto Windows Application.

2.     Na janela Propriedades, defina a propriedade IsMDIContainer como True.


Isso designa o formulário como um recipiente de janelas filho MDI.



Como criar formulários filho MDI

Formulários Filhos MDI são um elemento essencial da Aplicativos de Interface de Documentos Múltiplos (MDI). Esses formulários são o centro da interação com o usuário.


private void ClienteIncluir_Click(object sender, EventArgs e)

{
       // Cria um novo formulário

       Form_Cadastro_Cliente_Incluir _cadastroCliente = new Form_Cadastro_Cliente_Incluir();

      // Define quem o pai desta janela

       _cadastroCliente.MdiParent = this;

     // Exibe o formulário

       _cadastroCliente.Show();
}


Para este exemplo iremos criar no menu mais um item com o nome de Layout e adicionar os seguintes códigos:


// Define o leiaute para cascade.
this.LayoutMdi(MdiLayout.Cascade);

// Define o leiaute para tile horizontal.
this.LayoutMdi(MdiLayout.TileHorizontal);

// Define o leiaute para tile vertical.
this.LayoutMdi(MdiLayout.TileVertical);

// Define o leiaute para arrange icons.
this.LayoutMdi(MdiLayout.ArrangeIcons);


















quarta-feira, 14 de maio de 2014

O que é o HTML5?


HTML5 é o mais recente padrão para HTML. A versão anterior, o HTML 4.01, surgiu no ano de 1999, desde então a Internet mudou e muito.
 
Esta versão do HTML veio para substituir o conhecido HTML 4, XHTML e HTML DOM Nível 2. Ele foi desenvolvido para fornecer um rico contúdo, sem a necessidade de adicionar plug-ins. 

Esta versão oferece recursos para adicionar a sua página animações, música, filmes. Além disso, permite a construção de aplicações web complexas.

HTML5 também é Multiplataforma. Isto significa que podemos construir aplicações que podem ser usadas em um PC, Tablet, smartphone ou em uma Smart TV.

HTML5 é uma cooperação entre o Consórcio World Wide Web (W3C) e do Grupo de Trabalho Tecnologia de Aplicação Web Hypertext (WHATWG). Assim a WHATWG que antes estava trabalhando com formulários web e aplicativos e a W3C que estava trabalhando com XHTML 2.0, no ano de 2006 elas decidiram cooperar para desenvolver a nova versão, o HTML5

Para isso era preciso estabelecer novas regras para HTML5:

·       Os novos recursos deve ser baseada em HTML, CSS, DOM e JavaScript

·       A necessidade de plugins externos (como o Flash) deve ser reduzida

·       Tratamento de erros deve ser mais fácil do que nas versões anteriores

·       Scripts tem de ser substituído por mais de marcação

·       HTML5 deve ser independente do dispositivo

·       O processo de desenvolvimento deve ser visível para o público

 

De acordo com o W3C a Web é baseada em 3 pilares:

     Web, esse esquema se chama URI.

     Um Protocolo de acesso o HTTP.

     Uma linguagem de Hypertexto, para a navegação entre as fontes de informação: o HTML.

 

ESTRUTURA BÁSICA, DOCTYPE E CHARSETS

A estrutura básica do HTML5 continua sendo a mesma das versões anteriores da linguagem, há apenas uma exceção na escrita do Doctype. Segue abaixo como a estrutura básica pode ser seguida:

Arquivo: estruturabasica.html
 
1 <!DOCTYPE HTML>
2 <html lang=”pt-br”>
3 <head>
4 <meta charset=”UTF-8”>
5 <link rel=”stylesheet” type=”text/css” href=”estilo.css”>
6 <title></title>
7 </head>
8 <body>
9
10 </body>
11 </html>

Doctype
O Doctype deve ser a primeira linha de código do documento antes da tag HTML. Ele indica para o navegador e para outros meios qual a especificação de código utilizar. O Doctype não é uma tag do HTML, mas uma instrução para que o browser tenha informações sobre qual versão de código a marcação foi escrita.


Elemento HTML
O código HTML é uma série de elementos em árvore onde alguns elementos são filhos de outros e assim por diante. O elemento principal dessa grande árvore é sempre a tag HTML.

<html lang=”pt-br”> O atributo LANG é necessário para que os user-agents saibam qual a linguagem principal do documento. O atributo LANG não é restrito ao elemento HTML, ele pode ser utilizado em qualquer outro elemento para indicar o idioma do texto representado.

HEAD
Nesta Tag fica toda a parte inteligente da página. No HEAD ficam os metadados (são informações sobre a página e o conteúdo ali publicado).

Metatag Charset
No nosso exemplo há uma metatag responsável por chavear qual tabela de caracteres a página está utilizando.

<meta charset=”utf-8”>

Em versões anteriores ao HTML5, essa tag era escrita da forma abaixo:

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8”>

Tag LINK
Há dois tipos de links no HTML:

a tag A, que são links que levam o usuário para outros documentos e a tag LINK, que são links para fontes externas que serão usadas no documento.

No nosso exemplo há uma tag LINK que importa o CSS para nossa página:

<link rel=”stylesheet” type=”text/css” href=”estilo.css”>
 
O atributo rel=”stylesheet” indica que aquele link é relativo a importação de um arquivo referente a folhas de estilo.

 

 

 

terça-feira, 13 de maio de 2014

SQL Server - Concatenação de cadeias de caracteres (Transact-SQL)


O que significa concatenar String?

Significa acrescentar uma string ao final de uma outra string.

Você pode combinar ou concatenar duas ou mais cadeias de caracteres em uma única cadeia de caracteres. Também é possível concatenar cadeias de caracteres binárias.

Para concatenar uma cadeia de caracteres utilizamos o operador (+).

Importante: Uma cadeia de caracteres de comprimento zero pode ser especificada como duas aspas simples sem nenhum caractere dentro das aspas. Uma cadeia de caracteres binária de comprimento zero pode ser especificada como 0x sem nenhum valor de byte especificado na constante hexadecimal.

Se o resultado da concatenação de cadeias de caracteres exceder o limite de 8.000 bytes, o resultado será truncado.

Entretanto, se pelo menos uma das cadeias de caracteres concatenadas for um tipo de valor grande, não ocorrerá truncamento.

Exemplo

SELECT Nome + ', ' + Sobrenome) as Nome

FROM Cliente

ORDER BY Sobrenome ASC
 
O exemplo acima cria uma única coluna Nome a partir de duas culuunas Nome e Sobrenome, separando ambas as colunas por uma vírgula. Além disso, ordenamos o Sobrenome em ordem alfabética.


Mas como concatenar datas?

Neste caso, temos que utilizar a função CONVERT para concatenar tipos de dados numéricos e tipo data.


SELECT Nome + ' – ' + CONVERT(varchar(10), DataCadastro, 103)

FROM Clientes
 
 
Mais informações ou dúvidas escreva para aspnetwf@gmail.com

sexta-feira, 9 de maio de 2014

Comparando Datas Utilizando o Tipo DateTime (C#)


Irei apresentar algumas formas de realizarmos comparações de datas utilizando o tipo DateTime no C#. Vamos a um exemplo:
DateTime data1 = Convert.ToDateTime("01/05/2014");

DateTime data2 = DateTime.Now; // 09/05/2014

if (data1 > data2)

     Console.WriteLine("data1 é maior que data2");

if (data1 < data2)

     Console.WriteLine("data1 é menor que data2");


if (data1 == data2)

     Console.WriteLine("data1 é igual que data2");


Console.ReadKey();





Programadores mais experientes costumam utilizar o método compare ele retorna um número inteiro que indica sua posição relativa na ordem de classificação.


if (DateTime.Compare(data1, data2) > 0)

     Console.WriteLine("data1 é maior que data2");

if (DateTime.Compare(data1, data2) < 0)

     Console.WriteLine("data1 é maior que data2");

if (DateTime.Compare(data1, data2) == 0)

     Console.WriteLine("data1 é maior que data2");


Console.ReadKey();
Espereo que tenham gostado e até a próxima.

domingo, 4 de maio de 2014

Sequência de Fibonacci


Leonardo Fibonacci

Leonardo Fibonacci, matemático italiano (Pisa, c. 1170 — c. 1250).ele ficou conhecido pela sequência de Fibonacci e pelo seu papel na introdução dos algorismos arábicos na Europa.
Ao reconhecer que a aritmética, com algarismos arábicos, era mais simples e eficiente do que com os algarismos romanos, Fibonacci viajou por todo o mundo mediterrâneo, chegando até Constantinopla, para estudar com os matemáticos árabes mais importantes de então, alternando os estudos com a atividade comercial.
Seus estudos foram tão importantes que até hoje existe uma publicação periódica, Fibonacci Quarterly inteiramente dedicada à sequência aritmética elaborada por ele.
Ele, propôs no século XIII, a sequência numérica abaixo:
(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...)
Essa sequência tem uma lei de formação simples: cada elemento, a partir do terceiro, é obtido somando-se os dois anteriores. Veja: 1+1=2, 2+1=3, 3+2=5 e assim por diante.
Veja um exemplos de sua aplicação.
A partir de dois quadrados de lado 1, podemos obter um retângulo de lados 2 e 1. se adicionarmos a esse retângulo um quadrado de lado 2, obtemos um novo retângulo 3x2. Se adicionarmos agora um quadrado de lado 3, obtemos um retângulo 5x3. Observe a figura a seguir e veja que os lados dos quadrados que adicionamos para determinar os retângulos formam a sequência de Fibonacci.



Se utilizarmos um compasso e traçarmos o quarto de circunferência inscrito em cada quadrado, encontraremos uma espiral formada pela concordância de arcos cujos raios são os elemento da seqüência de Fibonacci.




Sequencia de Fribonacci



Essa sequência é definida como recursiva. Sendo Fn  os termos dessa sequência que são chamados de números de Fibonacci.  Aqui vão os primeiros termos dessa sequência:

 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233...


Código em Pascal

Program Pzim ;
  Uses Crt; 
 var 
  i,n : Integer; 
  fb : Array [0..20] of Integer; 
 begin 
  ClrScr; 
  WriteLn ('Serie de Fibonacci de 1 a 20'); 
  WriteLn; 
  // Definicao 
  fb[0] := 0; 
  fb[1] := 1; 
  // Calculo 
  for i := 2 to 20 do 
   fb[i] := fb[i-1]+fb[i-2]; 
  // Resultados 
  for i := 0 to 20 do 
   WriteLn ('f(',i:2,')=', fb[i]:7); 
  ReadLn; // Pausa 
 End.

Código em C

// Inclui o arquivo <"stdio.h">
// stdio.h é responsável pelas funções de entrada e saída.
#include "stdio.h"

// A função main() é obrigatória em todo programa C.
void main()
{
  // Declaração de variáveis.
  int a, b, auxiliar, i, n;

  // Aqui foi necessário atribuir valores as variáveis a e b.
  a = 0;
  b = 1;

  // A função printf() escreve na tela.
  printf("Digite um número: ");
  // A função scanf obtém um valor digitado.
  scanf("%d", &n);
  printf("Série de Fibonacci:\n");
  printf("%d\n", b);

  // Com a estrutura de controle for() gero a sequência.
  for(i = 0; i < n; i++)
  {
    auxiliar = a + b;
    a = b;
    b = auxiliar;

    // Imprimo o número na tela.
    printf("%d\n", auxiliar);
  }
}

Código em Java

Os números da sequência de Fibonacci podem ser gerados por uma regra (recorrência) simples:

Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)

Vejamos 4 maneiras de implementar a sequência de Fibonacci na linguagem Java. Todas as implementações criam uma classe denominada Fibonacci e um método fibo(n) do tipo long. Este método é o responsável por computar e retornar o enésimo termo da série.

IMPLEMENTAÇÃO 1 - RECURSIVA TRADICIONAL
Consiste na tradução direta da recorrência para um algoritmo recursivo. 

public class Fibonacci {

    static long fibo(int n) {
        if (n < 2) {
            return n;
        } else {
            return fibo(n - 1) + fibo(n - 2);
        }
    }

    public static void main(String[] args) {  
              
               // teste do programa. Imprime os 30 primeiros termos      
               for (int i = 0; i < 30; i++) {
            System.out.print("(" + i + "):" + Fibonacci.fibo(i) + "\t");
        }

    }

}
IMPLEMENTAÇÃO 2 - RECURSIVA UTILIZANDO O OPERADOR TERNÁRIO
Com o uso do operador ternário do Java é possível construir uma implementação bem mais compacta do método recursivo.

public class Fibonacci {

    static long fibo(int n) {
        return (n < 2) ? n : fibo(n - 1) + fibo(n - 2);
    }


    public static void main(String[] args) {
              
                // teste do programa. Imprime os 30 primeiros termos
        for (int i = 0; i < 30; i++) {
            System.out.print("(" + i + "):" + Fibonacci.fibo(i) + "\t");
        }

    }

}
IMPLEMENTAÇÃO 3 - ITERATIVA
Embora as duas implementações recursivas apresentadas sejam muito elegantes, as mesmas apresentam o problema de apresentar desempenho muito lento, pois as diversas chamadas recursivas fazem com que os mesmos valores sejam recalculados diversas vezes. Tente, por exemplo, rodar os programas recursivos para calcular fibo(50) e veja que o programa levará um longo tempo para apresentar a resposta. A seguir apresenta-se uma solução iterativa que computa o enésimo termo de uma maneira bem mais rápida.

public class Fibonacci {

    static long fibo(int n) {
        int F = 0;     // atual
        int ant = 0;   // anterior

        for (int i = 1; i <= n; i++) {

            if (i == 1) {
                F = 1;
                ant = 0;
            } else {
                F += ant;
                ant = F - ant;
            }

        }

        return F;
    }

    public static void main(String[] args) {

               // teste do programa. Imprime os 30 primeiros termos
        for (int i = 0; i < 30; i++) {
            System.out.print("(" + i + "):" + Fibonacci.fibo(i) + "\t");
        }

    }

}
IMPLEMENTAÇÃO 4 - RECURSIVA COM VETOR
Por fim, é apresentada uma implementação recursiva que consegue o mesmo desempenho da iterativa. O "truque" consiste em utilizar um vetor que armazena termos já calculados (ou seja, nesta solução recursiva nenhum termo é recalculado). Veja que a solução ficou mais complicada - foi necessário criar mais métodos e variáveis auxiliares.

public class Fibonacci {   

    private static int[] vetAux = new int[50];
    private static int k;

    public static long fibo(int n) {     
             k = 1; // inicializa k
             return recursao(n);
           }

    private static long recursao(int n) {
            if (n < 0) {
               return vetAux[0]; 
          } else {
           if (k < 3) {
              vetAux[n] = k - 1;
              k++;
           } else {
                 vetAux[n] = vetAux[n + 1] + vetAux[n + 2];
                 }
              return recursao(n - 1);
           }
    }
   
    public static void main(String[] args) {  // teste do programa. Imprime os 30 primeiros termos
    for (int i = 0; i < 30; i++) {
        System.out.print("(" + i + "):" + Fibonacci.fibo(i) + "\t");
                }
            }
        }