Curso de Programação C#

William Ivanski

Lista de Exercícios Módulo II Capítulo 1 (Respostas)


1) Escreva um programa orientado a objetos com as seguintes características:

// Pessoa.cs
using System;

namespace Lista1Exercicio01
{
    public class Pessoa
    {
        public string nome;
        public int idade;

        public Pessoa()
        {   
        }

        public Pessoa(string pnome, int pidade)
        {
            this.nome = pnome;
            this.idade = pidade;
        }

        public void Cumprimentar()
        {
            Console.WriteLine("Olá, meu nome é {0}.", this.nome);
        }

        public void DizerIdade()
        {
            Console.WriteLine("Tenho {0} anos de idade.", this.idade);
        }
    }
}

// Aluno.cs
using System;

namespace Lista1Exercicio01
{
    public class Aluno : Pessoa
    {
        public Aluno()
        {
        }

        public Aluno(string pnome, int pidade) : base(pnome, pidade)
        {
        }

        public void IrParaEscola()
        {
            Console.WriteLine("O aluno {0} está indo para escola.", this.nome);
        }
    }
}

// Professor.cs
using System;

namespace Lista1Exercicio01
{
    public class Professor : Pessoa
    {
        public Professor()
        {
        }

        public Professor(string pnome, int pidade) : base(pnome, pidade)
        {
        }

        public void Explicar(string assunto)
        {
            Console.WriteLine("O professor {0} está explicando sobre {1}.", this.nome, assunto);
        }
    }
}

// Program.cs
using System;

namespace Lista1Exercicio01
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Pessoa p;
            Aluno aluno;
            Professor prof;

            // primeira parte
            p = new Pessoa("William", 27);
            p.Cumprimentar();
            p.DizerIdade();
            Console.WriteLine();

            // segunda parte
            aluno = new Aluno("José", 21);
            aluno.IrParaEscola();
            aluno.Cumprimentar();
            aluno.DizerIdade();
            Console.WriteLine();

            // terceira parte
            prof = new Professor("Marcos", 35);
            prof.Cumprimentar();
            prof.DizerIdade();
            prof.Explicar("programação em C#");

            Console.ReadKey();
        }
    }
}

2) Escreva um programa orientado a objetos com as seguintes características:

// Porta.cs
using System;

namespace Lista1Exercicio02
{
    public class Porta
    {
        public string cor;

        public Porta(string p_cor)
        {
            this.cor = p_cor;
        }

        public void Mostrar()
        {
            Console.WriteLine("Eu sou uma porta, minha cor é {0}.", this.cor);
        }
    }
}

// Habitacao.cs
using System;

namespace Lista1Exercicio02
{
    public class Habitacao
    {
        public int area;
        public Porta porta;

        public Habitacao(int p_area, Porta p_porta)
        {
            this.area = p_area;
            this.porta = p_porta;
        }

        public void Mostrar()
        {
            Console.WriteLine("Eu sou uma habitação, minha área é {0} m2, e a cor da minha porta é {1}.", this.area, this.porta.cor);
        }
    }
}

// Apartamento.cs
using System;

namespace Lista1Exercicio02
{
    public class Apartamento : Habitacao
    {
        public Apartamento(Porta p_porta) : base(50, p_porta)
        {
        }
    }
}

// Pessoa.cs
using System;

namespace Lista1Exercicio02
{
    public class Pessoa
    {
        public string nome;
        public int idade;

        public Pessoa()
        {   
        }

        public Pessoa(string pnome, int pidade)
        {
            this.nome = pnome;
            this.idade = pidade;
        }

        public void Cumprimentar()
        {
            Console.WriteLine("Olá, meu nome é {0}.", this.nome);
        }

        public void DizerIdade()
        {
            Console.WriteLine("Tenho {0} anos de idade.", this.idade);
        }
    }
}

// Morador.cs
using System;

namespace Lista1Exercicio02
{
    public class Morador : Pessoa
    {
        public Habitacao hab;

        public Morador(string p_nome, int p_idade, Habitacao p_hab) : base(p_nome, p_idade)
        {
            this.hab = p_hab;
        }

        public void Mostrar()
        {
            Console.WriteLine(
                "Sou um morador, meu nome é {0}, tenho {1} anos, minha habitação tem {2} m2, e a cor da porta é {3}.",
                this.nome,
                this.idade,
                this.hab.area,
                this.hab.porta.cor
            );
        }
    }
}

// Program.cs
using System;

namespace Lista1Exercicio02
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Morador m;

            m = new Morador("William", 27, new Apartamento(new Porta("marrom")));
            m.Mostrar();

            Console.ReadKey();
        }
    }
}

3) Crie uma classe Retangulo, com altura e largura passadas como argumento no método construtor. Também deve ter um método Mostrar que imprime a altura e a largura do retângulo. Crie um array contendo 10 retângulos, solicite ao usuário suas dimensões e depois as mostre na tela.

// Retangulo.cs
using System;

namespace Lista1Exercicio03
{
    public class Retangulo
    {
        public int altura, largura;

        public Retangulo()
        {
        }

        public Retangulo(int p_altura, int p_largura)
        {
            this.altura = p_altura;
            this.largura = p_largura;
        }

        public void Mostrar()
        {
            Console.WriteLine("Altura = {0}, largura = {1}", this.altura, this.largura);
        }
    }
}

// Program.cs
using System;

namespace Lista1Exercicio03
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            System.Collections.Generic.List vetor;

            vetor = new System.Collections.Generic.List();

            // alimentando o vetor
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Preenchimento do retângulo {0}", i+1);

                vetor.Add(LeRetangulo());

                Console.WriteLine();
            }

            // mostrando todos os retangulos do vetor
            for (int i = 0; i < vetor.Count; i++)
            {
                Console.Write("Retângulo {0}: ", i+1);

                vetor[i].Mostrar();
            }

            Console.ReadKey();
        }

        public static Retangulo LeRetangulo()
        {
            Retangulo r;

            r = new Retangulo();

            Console.Write("Digite a altura: ");
            r.altura = int.Parse(Console.ReadLine());

            Console.Write("Digite a largura: ");
            r.largura = int.Parse(Console.ReadLine());

            return r;
        }
    }
}

4) Crie uma classe Ponto3D que representa um ponto em um espaço tridimensional, com coordenadas X, Y e Z. Deve conter os seguintes métodos:

Use propriedades para resolver este exercício. Seu programa deve criar um array de N pontos e solicitar as coordenadas de todos eles ao usuário. Após isso, deve calcular e mostrar a distância entre o primeiro ponto e os demais pontos.

// Ponto3D.cs
using System;

namespace Lista1Exercicio04
{
    public class Ponto3D
    {
        public int x { get; set; }
        public int y { get; set; }
        public int z { get; set; }

        public Ponto3D()
        {
        }

        public Ponto3D(int p_x, int p_y, int p_z)
        {
            this.x = p_x;
            this.y = p_y;
            this.z = p_z;
        }

        public void Mostrar()
        {
            Console.WriteLine("({0},{1},{2})", this.x, this.y, this.z);
        }

        public void MoverPara(int p_x, int p_y, int p_z)
        {
            this.x = p_x;
            this.y = p_y;
            this.z = p_z;
        }

        public double Distancia(Ponto3D p2)
        {
            return Math.Sqrt(((p2.x - this.x) * (p2.x - this.x)) + ((p2.y - this.y) * (p2.y - this.y)) + ((p2.z - this.z) * (p2.z - this.z)));
        }
    }
}

// Program.cs
using System;

namespace Lista1Exercicio04
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            System.Collections.Generic.List<Ponto3D> vetor;
            Ponto3D p;
            int n;

            vetor = new System.Collections.Generic.List<Ponto3D>();

            Console.Write("Quantos pontos serão criados? ");
            n = int.Parse(Console.ReadLine());

            for (int i = 0; i < n; i++)
            {
                p = new Ponto3D();

                Console.Write("Digite o valor X do ponto {0}: ", i);
                p.x = int.Parse(Console.ReadLine());

                Console.Write("Digite o valor Y do ponto {0}: ", i);
                p.y = int.Parse(Console.ReadLine());

                Console.Write("Digite o valor Z do ponto {0}: ", i);
                p.z = int.Parse(Console.ReadLine());

                vetor.Add(p);

                Console.Write("O ponto que você digitou foi: ");
                vetor[i].Mostrar();

                Console.WriteLine();
            }

            for (int i = 1; i < n; i++)
                Console.WriteLine("A distância entre o ponto 0 e o ponto {0} é {1}", i, vetor[0].Distancia(vetor[i]));

            Console.ReadKey();
        }
    }
}

5) Crie um programa orientado a objetos com as seguintes características:


// AlbumDeFotos.cs
using System;

namespace Lista1Exercicio05
{
    public class AlbumDeFotos
    {
        public int numeroTotalDePaginas { get; set; }

        public int numeroTotalDeFotos
        {
            get
            {
                return this.numeroTotalDePaginas * 2;
            }
        }

        private int _numeroDeFotos;
        public int numeroDeFotos
        {
            get
            {
                return this._numeroDeFotos;
            }
            set
            {
                if (value > this.numeroTotalDeFotos)
                    Console.WriteLine("ERRO: O número de fotos não deve exceder {0}.", this.numeroTotalDeFotos);
                else
                    this._numeroDeFotos = value;
            }
        }

        public AlbumDeFotos(int p_numeroTotalDePaginas)
        {
            this.numeroTotalDePaginas = p_numeroTotalDePaginas;
        }
    }
}

// Program.cs
using System;

namespace Lista1Exercicio05
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            AlbumDeFotos a;

            a = new AlbumDeFotos(80);

            Console.WriteLine("O exemplo abaixo não causa erro:");
            a.numeroDeFotos = 100;
            Console.WriteLine("Número atual de fotos = {0}", a.numeroDeFotos);

            Console.WriteLine();

            Console.WriteLine("O exemplo abaixo causa erro:");
            a.numeroDeFotos = 200;
            Console.WriteLine("Número atual de fotos = {0}", a.numeroDeFotos);

            Console.ReadKey();
        }
    }
}

6) Crie um catálogo para armazenar informações sobre arquivos de músicas e filmes.


7) Altere o exercício anterior para mostrar ao usuário um menu em modo texto, que permita entrar com novas informações e também mostrar os dados armazenados em arrays.


8) Deseja-se atualizar as contas correntes dos clientes de uma agência bancária. É dado o cadastro de N clientes, contendo para cada cliente o número de sua conta e o seu saldo; o cadastro está ordenado pelo número da conta. Em seguida, é dado o número de operações efetuadas no dia e, para cada operação, o número da conta, uma letra C ou D indicando se a operação é de crédito ou débito e o valor da operação. Emitir o cadastro de clientes atualizado.


9) Altere o exercício anterior para mostrar ao usuário um menu em modo texto, que permita entrar com novas informações e também mostrar os dados armazenados em arrays. Também implemente um facilitador ao usuário para os casos de operações de transferência, para que ele digite apenas o número da conta de origem, número da conta de destino e o valor transferido.


10) Deseja-se fazer a emissão da folha de pagamentos de uma empresa. Para cada um dos NF funcionários da empresa são dadas as seguintes informações:

Emitir as seguintes informações:

Descontos efetuados:

Salário líquido = salário bruto - desconto total.


11) Um campeonato de futebol foi disputado por N times identificados pelos seus nomes. Para cada time são considerados os seguintes dados:

a) Dados os resultados de M jogos, imprima uma tabela com todos os dados (nome do time, PG, GM, GS, S, V, GA, igual àquela que sai no jornal) dos N times. Cada resultado é representado na forma (T1, T2, G1, g2) cuja interpretação é a seguinte: no jogo T1 x T2 o resultado foi G1 x G2. Exemplo: (Corinthians, São Paulo, 1, 0).

b) Com os mesmos dados do item (a), imprima a classificação dos times do campeonato (do primeiro para o último). A classificação é pelo número de pontos ganhos (PG) e em segundo lugar pelo saldo de gols (S). Se houver empate segundo os dois critérios, classifique pelo número de vitórias, número de gols marcados e até mesmo por ordem alfabética do nome do time.


12) Com o auxílio de um programa de geração automática de diagramas de classes a partir do executável (recomendo o NClass), crie e estude os diagramas de classes de todos os exercícios acima. O que os diagramas apresentam? O que significam as setas?