C# - Os doze trabalho de Hércules - 12 Desafios cumpridos pela linguagem C# - I


Para começar, um pouco de mitologia

Alcmena era esposa de Anfitrião. Quando seu marido estava na guerra, Zeus tomou a sua forma para fazer amor com Alcmena. Anfitrião desconfiou da infidelidade da esposa, e no fim, Zeus esclareceu-lhe tudo. Mas, surpreendentemente, Anfitrião ficou contente e honrado com a presença do deus em sua casa. A partir daí, o termo anfitrião passou a ter o sentido de "aquele que recebe em casa". Daquela noite de amor nasceu o semideus Hércules (ou Héracles, em grego).
 

O nascimento de Hércules provocou a ira de Hera, a ciumenta esposa oficial de Zeus, que mandou duas serpentes matarem o recém-nascido fruto do adultério. Este, porém, sem grande esforço, estrangulou as cobras, mostrando desde cedo possuir uma força descomunal. Hércules cresceu, mas Hera continuou a persegui-lo e usou seus poderes para provocar um acesso de loucura no herói, que acabou matando a própria esposa, Mégara, e os filhos, ateando fogo na própria casa. Quando Hércules recuperou a razão, procurou o Oráculo de Delfos - o mais famoso templo de consulta às divindades gregas - para buscar orientação sobre como enfrentar a tragédia.

O Oráculo mandou-o se entregar em servidão a Euristeus, rei da cidade de Micenas, que ordenou a realização das 12 famosas tarefas. Os 12 trabalhos foram realizados para que Hércules se redimisse das mortes que cometeu.
 
Agora um pouco de programação
 
Mas o que tem a ver toda essa história com a linguagem C#.  Nada, ou melhor, quase nada.
 
A título de exercício vamos propor 12 tarefas básicas que deverão ser cumpridas pela linguagem C#. Elas não se comparam com os trabalhos que Hércules teve que fazer para se redimir, mas vai ajudar quem esta iniciando os estudos em C# a aprender um pouco mais e também sentir o potencial da linguagem.
 
Em todos os trabalhos de programação iremos usar o seguinte recurso:
  • Visual Studio Express 2012 for Windows Desktop
Abra o Visual Studio Express 2012 for Windows Desktop e crie um novo projeto clicando em New Project;

 

A seguir selecione o template : Other Project Types -> Blank Solution e informe o nome DozeTrabalhos_CSharp
e clique no botão OK;
 

Dessa forma teremos uma solução vazia chamada DozeTrabalhos_CSharp;

Para cada um dos trabalhos propostos iremos incluir um novo projeto na solução via menu
FILE -> Add New Project
selecionando o tipo do projeto Windows Forms Application ou
Console Application
conforme o trabalho;

Para ativar o projeto atual para execução clique com o botão do mouse sobre o nome da Solução e
defina qual o projeto deseja executar em Single startup project:

Agora ao trabalho...

 
Trabalho 1
 
Escreva um programa que receba um caractere informado pelo usuário e determine se o caractere é uma string maiúscula ou minúscula, um digito ou um símbolo especial.
 
Teoria
 
Vamos usar a tabela ASCII padrão e estendida para exibir o código do caractere digitado e fazer a verificação:
 

 
Prática
 
Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Windows Forms Application e informando o nome Verifica_Caractere;

No formulário form1.cs inclua os controles : Label, TextBox(txtCaractere) , Button(btnVerifica) e Label(lblResultado) a partir da ToolBox conforme o leiaute abaixo:

 
Declare as variáveis no início do formulário form1.cs:
 
char entrada;
int
valor;
 
No evento Click do botão de comando btnVerifica digite o código abaixo:
 
 private void btnVerifica_Click(object sender, EventArgs e)
 {
          
 entrada = Convert.ToChar(txtCaractere.Text);
            valor = Convert.ToInt32(entrada);

            if (valor >= 65 && valor <= 90)
            {
                lblResultado.Text = "String Maiúscula";
            }
            if (valor >= 97
&& valor <= 122)
            {
                lblResultado.Text = "String Minúscula";
            }
            if (valor >= 48
&& valor <= 57)
            {
                lblResultado.Text = "Dígito";
            }
            if (valor == 0 && valor <= 47 || valor >= 58
&& valor <= 64 || valor >= 91 && valor <= 96 || valor >= 123 && valor <= 127)
            {
                lblResultado.Text = "Símbolo Especial";
            }
            if (valor >= 127)
            {
                lblResultado.Text = "Caractere Especial";
            }
  }

 
 
Trabalho 2
 
Escreva um programa que produza a seguinte resultado no Console:
 
*
**
***
****
***
**
*
Teoria

Usando um laço for, você pode executar uma instrução ou um bloco de instruções repetidamente até que uma expressão especificada seja avaliada como false. Esse tipo do laço é útil para iterar sobre matrizes e para outros aplicativos em que você sabe com antecedência quantas vezes você deseja que o laço vai iterar.
 
Sintaxe :
 
for(inicialização; condição; passo)
     código
  • inicialização : inicializar o valor da variável
  • condição : avalia a condição do passo
  • passo : passo para cada execução do corpo do laço

Ex:  for (int i = 1; i < = contador; i++)
          Console.WriteLine(i);

  1. Inicialização :  int i=1
  2. condição :  i < contador
  3. passo :  i++ (i=i+1)

   Código a ser executado em cada passo:   Console.WriteLine(i);


 
Prática
  1. Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Console Application e informando o nome Trabalho2;
  2. Ative o projeto atual.

Código do Projeto:
 

using System;
namespace Trabalho2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("\t\t Macoratti .net");
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j <= i; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine("\n");
            }
            for (int i = 0; i <= 4; i++)
            {
                for (int j = 4; j >i; j--)
                {
                    Console.Write("*");
                }
                Console.WriteLine("\n");
            }
            Console.ReadKey();
        }
    }
}
 
Trabalho 3
 
Escreva um programa que imprima todos os valores dos códigos ASCII e seus respectivos caracteres usando um laço do-while.
 
Teoria
 
A instrução While é executada uma instrução ou um bloco de instruções até que uma expressão especificada for avaliada como false.
 
Como o teste da expressão do while ocorre antes de cada execução do laço, um laço while é executado zero ou mais vezes. Isso se difere do laço For, que executa uma ou mais vezes.
 
Um laço while pode ser terminado quando uma instrução break, goto, return ou throw transferir o controle para fora do laço. Para passar o controle para a próxima iteração sem sair do loop, use a instrução Continue.
 
A instrução do executa uma instrução ou um bloco de instruções repetidamente até que uma expressão especificada for avaliada como false.

O corpo do laço deve ser colocado entre chaves{}, a menos que exista apenas uma única instrução. Nesse caso, as chaves são opcionais.
 
Ao contrário da declaração while , um laço do-while é executado uma vez antes que a expressão condicional seja avaliada.

Em qualquer ponto de um bloco do-while, você pode sair fora do laço usando a instrução break.

Você pode ir diretamente para a expressão de avaliação do while usando a instrução Continue.

Se a expressão while expressão for avaliada como true, a execução continua na primeira instrução no laço. Se a expressão for avaliada como false, a execução continua na primeira instrução após o laço do-while.

Um laço do-while também pode ser encerrado por instruções goto, return ou throw.

Prática
  1. Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Console Application e informando o nome Trabalho3;
  2. Ative o projeto atual.

Código do Projeto:


      
using System;
namespace Trabalho3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("\t\t  Macoratti .net\n\tQuase tudo para Visual Basic\n");
            char ch;
            int i = 10;
            do
            {
                Console.Write(i);
                Console.Write(" ");
                ch = (char)i;
                Console.WriteLine(ch);
                i++;
            } while (i <= 255);
            Console.ReadKey();
        }
  }
}

 
 
Trabalho 4
 
Escreva um programa que imprime no Console uma matriz identidade n por n usando um laço for.
 
Teoria
 
Matriz identidade, em matemática, é uma matriz quadrada e uma matriz diagonal, cuja função é de ser o elemento neutro, na multiplicação de matrizes. É denotada por In (onde n é a ordem da matriz), ou simplesmente por I. A matriz é construída da seguinte forma: os elementos da diagonal principal têm valor um, e os demais elementos da matriz são zero.

Uma matriz identidade se apresenta da seguinte forma:
 

fonte: http://pt.wikipedia.org/wiki/Matriz_identidade
 
Prática
  1. Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Console Application e informando o nome Trabalho4;
  2. Ative o projeto atual.

Código do Projeto:

using System;
namespace Trabalho4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("\t\t  Macoratti .net\n\tQuase tudo para Visual Basic\n");

            int tamanho;

            Console.WriteLine("Informe o tamanho da Matrix Identidade: ");
            tamanho = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("\n\n Matrix Identidade\n\n");

            for (int i = 0; i < tamanho; i++)
            {
                for (int j = 0; j < tamanho; j++)
                {
                    if (i == j)
                    {
                        Console.Write(1);
                    }
                    else
                    {
                        Console.Write(0);
                    }
                }
                Console.WriteLine("\n");
            }
            Console.ReadKey();
        }
    }
 

 
 
Trabalho 5
 
Escreva um programa que calcule e exiba a soma da seguinte série : 
 
1*x + 2*x^2 + 3*x^3 + 4*x^4 + 5*x^5 + … + n*xn
 
Teoria
 
Em matemática, o conceito de série, ou ainda, série infinita, surgiu da tentativa de generalizar o conceito de soma para uma sequência de infinitos termos.

Esta generalização, longe de acontecer de forma impune, traz diversas dificuldades:
  • nem sempre é possível definir um valor resultante da soma para uma série;

  • não é possível em geral trocar a ordem dos termos da série;

  • algumas séries possuem soma infinita.

Embora a ideia de soma infinita seja bastante antiga, uma formulação matemática rigorosa só veio a surgir no século XVIII, com o advento da análise real, que denota e define uma série de termos a_1,a_2,a_3,\ldots\, da seguinte forma:
 

 

fonte: http://pt.wikipedia.org/wiki/S%C3%A9rie_%28matem%C3%A1tica%29
 
Prática
  1. Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Console Application e informando o nome Trabalho5;
  2. Ative o projeto atual.

Código do Projeto:

using System;
namespace Trabalho5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("\t\t  Macoratti .net\n\tQuase tudo para Visual Basic\n");

            int numero;
            double soma=0;
            double x;
            Console.WriteLine("Informe o intervalor de valores a exibir para série :
 \n1*^x + 2*x^2 + 3*x^3 + 4*x^4 + 5*x^5 + … + n*x^n");
            numero = Convert.ToInt32(Console.ReadLine());
            for (int i = 1; i <= numero; i++)
            {
                Console.Write(i + "*x^" + i );
                if (i < numero)	
                    Console.Write(" + ");
                x = (double)i;
                soma = soma +(i * Math.Pow(x,x));
            }
            
            Console.WriteLine("\nA soma da série é : " + soma);
            Console.ReadKey();
        }
    }
}

 
Trabalho 6
 
Escreva um programa que usando a instrução switch e que a partir de um valor informado pelo usuário realize as seguintes conversões :
  1. P -> Polegadas para Centímetros
  2. G -> Galão para Litros
  3. M -> Milhas para Kilometros
Para a primeira conversão o usuário deverá informar a opção P , para a segunda deve informar G e para a terceira deve informar M.
 
Teoria
  • 1 milha é igual a 1,609 Km ou 1609 metros ou 160934 centímetros
  • 1 polegada é igual a 2,54 cm, ou 0,0254 metros ou 25,4 milímetros
  • 1 galão é igual a 3,78 litros
Prática
  1. Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C# -> Windows  e o tipo do projeto Console Application e informando o nome Trabalho6;
  2. Ative o projeto atual.

Código do projeto :

using System;

namespace Trabalho6
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("\t\t  Macoratti .net\n\tQuase tudo para Visual Basic\n");

            int valor;
            string temp;
            char escolha;
            double centimetro, litros, Kilometro;

           
Console.WriteLine("Informe um valor inteiro para converter :");
            valor = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("\n\n Pressione uma das opções dadas : \n P -> converte de Polegadas para Centímetros.
\n G -> converte de Galões para Litros.\n M -> converte de Milas para Kilômetros");

            temp = Console.ReadLine().ToString().ToUpper();
            escolha = Convert.ToChar(temp);

            switch (escolha)
            {
                case'P':
                    centimetro = valor / 0.3937;                       //1 cm é igual a  0.3037 polegadas
                    Console.WriteLine( "\n\n" + valor + " Polegadas são " + centimetro + " centímetros (cm) ");
                    break;
                case'G':
                    litros = valor * 3.78;                             // 1 galão é igual a 3.78 litros
                    Console.WriteLine("\n\n" + valor + " Galões são " + litros + " litros (l) ");
                    break;
                case'M':
                    Kilometro = valor * 1.60;                          // 1 Milha é igual a 1.60 Kilometros
                    Console.WriteLine("\n\n" + valor + " Milhas são " + Kilometro + " Kilometros (Km) " );
                    break;
                default:
                    Console.WriteLine("Opção Inválida. Informe uma das opções oferecida:  P , G ou M ");
                    break;
            }
            Console.ReadKey();
        }
    }
}

 

 

Ufa !!! Foram 6 trabalhos cumpridos e eu já estou cansado...

 

Veja neste link os 6 trabalhos restantes que prometem ser mais difíceis e desafiadores...

Filipenses 1:29 pois vos foi concedido, por amor de Cristo, não somente o crer nele, mas também o padecer por ele,
Filipenses 1:30 tendo o mesmo combate que já em mim tendes visto e agora ouvis que está em mim.

Referências:


José Carlos Macoratti