Curso de Programação C#
  William Ivanski
  Lista de Exercícios Módulo II Capítulo 1
  
  
   1) Escreva um programa orientado a objetos com as seguintes características:
  
  
    - Uma classe Pessoa, com atributos nome e idade, e métodos Cumprimentar e DizerIdade;
 
    - Uma classe Aluno derivada da classe Pessoa, com um método IrParaEscola;
 
    - Uma classe Professor derivada da classe Pessoa, com um método Explicar que recebe como parâmetro um assunto;
 
    - Na classe principal:
 
    
        - Crie uma Pessoa e faça ela Cumprimentar e DizerIdade;
 
        - Crie um Aluno de 21 anos, e faça ele IrParaEscola, Cumprimentar e DizerIdade;
 
        - Crie um Professor de 30 anos, e faça ele Cumprimentar, DizerIdade e Explicar sobre um determinado assunto.
 
    
  
  
  
   2) Escreva um programa orientado a objetos com as seguintes características:
  
  
    - Uma classe Porta com um atributo cor (string) e um método Mostrar que imprime na tela "Eu sou uma porta, minha cor é marrom" (ou qualquer cor que seja);
 
    - Uma classe Habitacao com um atributo area e um construtor para atribuir o valor desse atributo. Cada habitação também terá uma porta (classe Porta). A habitação também terá um método Mostrar, que imprimirá na tela "Eu sou uma habitacao, minha area eh X m2, e a cor da minha porta é tal";
 
    - Uma classe Apartamento é uma classe derivada da classe Habitacao, com area atribuída na instanciação igual a 50 m2
 
    - Uma classe Morador derivada da classe Pessoa do exercício anterior, mas que possua uma habitação. Escreva também um método Mostrar que mostre as informações do morador e da habitação;
 
    - Na classe principal, crie um apartamento, uma pessoa para morar nele, e mostre as informações.
 
  
  
  
   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.
  
  
  
   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:
  
   
    - Mostrar, que mostrará as coordenadas do ponto, por exemplo "(3, 5, -2)";
 
    - MoverPara, que mudará as coordenadas do ponto;
 
    - Distancia(Ponto3D p2), que calculará a distância do ponto até outro ponto p2;
 
   
  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.
  
  
   5) Crie um programa orientado a objetos com as seguintes características:
  
  
    - Crie uma classe AlbumDeFotos com uma propriedade numeroTotalDePaginas;
 
    - Crie outra propriedade somente leitura chamada numeroTotalDeFotos baseada na propriedade numetoTotalDePaginas, sabendo que cada página pode conter no máximo 2 fotos;
 
    - Crie uma terceira propriedade chamada numeroDeFotos, cujo método set deve mostrar uma mensagem de erro caso o usuário ultrapasse o numeroTotalDeFotos;
 
    - Crie um programa para testar a classe AlbumDeFotos. Simule um exemplo em que atribuir um valor à propriedade numeroDeFotos mostra uma mensagem de erro, e outro exemplo em que não mostra.
 
  
  
  
   6) Crie um catálogo para armazenar informações sobre arquivos de músicas e filmes.
  
   
    - Para cada item, deve armazenar o código, nome, categoria e tamanho hipotético do arquivo em disco;
 
    - Para filmes deve ter também o nome do diretor, nome do ator principal e nome da atriz principal;
 
    - Para arquivos de música também deve ter o artista e o tamanho em segundos;
 
    - Arquivos de filme e música devem ter um método Play (ainda não implementado) e também um método RetrieveInformation, que vai (em uma futura versão) conectar com um servidor na Internet para buscar informações sobre a música ou o filme;
 
    - Use herança se necessário. Na função Main, crie arrays para cada tipo de objeto, e os alimente com pelo menos 3 arquivos de cada tipo.
 
   
  
  
   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:
  
  
   - NOME
 
   - SAL (salário)
 
   - HED (horas extras diurnas)
 
   - HEN (horas extras noturnas)
 
   - ND (número de dependentes)
 
   - FAL (faltas em horas)
 
   - DE (descontos eventuais)
 
   - REF (gastos com refeições feitas na empresa)
 
   - VAL (vales retirados durante o mês)
 
  
  Emitir as seguintes informações:
  
   - nome,
 
   - salário,
 
   - horas extras = HED * SAL/160 + HEN * 1.2 * SAL/160,
 
   - salário família = ND * 0.05 * salário mínimo vigente,
 
   - salário bruto = salário + horas extras + salário família.
 
  
  Descontos efetuados:
  
   - INAMPS = 0.08 * SAL,
 
   - faltas = FAL * SAL/160,
 
   - refeições,
 
   - vales,
 
   - descontos eventuais,
 
   - imposto de renda = 0.08 * salário bruto.
 
  
  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:
  
   
    - PG - número de pontos ganhos (2 por vitória, 1 por empate e 0 por derrota)
 
    - GM - número de gols marcados
 
    - GS - número de gols sofridos (gols difíceis de marcar)
 
    - S - saldo de gols (GM - GS)
 
    - V - número de vitórias
 
    - GA - goal average (GM / GS se GS != 0, GM se GS = 0)
 
   
   
    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?