Back-End

25 jul, 2014

Os doze trabalho de Hércules – 12 Desafios cumpridos pela linguagem C# – Parte 01

Publicidade

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 está 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:

c_12des10

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:

c_12des13

Agora aos trabalhos!

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.

ascii

asc_ex

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:

c_12des11

Declare as variáveis no início do formulário form1.cs:

char entrada;
int valor;

No evento Click do botão de comando btn Verifica, 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";
            }
  }

c_12des12

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);

Inicialização : int i=1
condição : i < contador
passo : i++ (i=i+1)
Código a ser executado em cada passo: Console.WriteLine(i);

c_12des1a

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 Console Application e informando o nome Trabalho2;
  • 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();
        }
    }
}
c_12des14

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 em 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 seja 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 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

  • 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;
  • 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();
        }
  }
}

c_12des15

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
fonte: Wikipedia

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 Console Application e informando o nome Trabalho4;
  • 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();
        }
    }

c_12des16

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
fonte: Wikipedia

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 Console Application e informando o nome Trabalho5;
  • 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();
        }
    }
}

c_12des17

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 :

  • P -> Polegadas para Centímetros
  • G -> Galão para Litros
  • 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

  • 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;
  • 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. Aguarde os 6 trabalhos restantes, que prometem ser mais difíceis e desafiadores.

Pegue o projeto completo aqui: DozeTrabalhos_CSharp.zip