Curso de Programação C#

William Ivanski

Lista de Exercícios Módulo I Capítulo 4 (Respostas)


1) Modifique o exercício 2.9 (sequências de inteiros) para imprimir N inteiros, sendo N um número informado pelo usuário.

int n;

Console.Write("Digite o valor de N: ");
n = int.Parse(Console.ReadLine());

for (int i = 1; i <= n; i++)
    Console.WriteLine(i);

Console.ReadKey();

2) Utilize while no exercício 2.10 (tabuadas).

int tabuada, n;

Console.Write("Digite a tabuada desejada: ");
tabuada = int.Parse(Console.ReadLine());

Console.Write("Digite o número de vezes: ");
n = int.Parse(Console.ReadLine());

for (int i = 1; i <= n; i++)
    Console.WriteLine("{0} x {1} = {2}", tabuada, i, (tabuada * i));

Console.ReadKey();

3) Modifique o exercício 3.8 (cadastro de aluno) para tratar para, caso o usuário digite valores inválidos no sexo e na nota das provas, o programar informar o erro e solicitar o valor novamente, até que o usuário digite um valor válido.

string nome;
int idade;
char sexo;
string sexoporextenso;
double nota1, nota2, nota3, media;
string situacao;

Console.Write("Digite o nome do aluno: ");
nome = Console.ReadLine();

Console.Write("Digite a idade do aluno: ");
idade = int.Parse(Console.ReadLine());

do
{
    Console.Write("Digite o sexo do aluno (M ou F): ");
    sexo = Char.Parse(Console.ReadLine());

    if (char.ToUpper(sexo) != 'M' && char.ToUpper(sexo) != 'F')
        Console.WriteLine("ERRO! Sexo {0} inválido.", sexo);
}
while (char.ToUpper(sexo) != 'M' && char.ToUpper(sexo) != 'F');

do
{
    Console.Write("Digite a nota da prova 1: ");
    nota1 = double.Parse(Console.ReadLine());

    if (nota1 < 0 || nota1 > 10)
        Console.WriteLine("ERRO! Nota {0} inválida.", nota1);
}
while (nota1 < 0 || nota1 > 10);

do
{
    Console.Write("Digite a nota da prova 2: ");
    nota2 = double.Parse(Console.ReadLine());

    if (nota2 < 0 || nota2 > 10)
        Console.WriteLine("ERRO! Nota {0} inválida.", nota2);
}
while (nota2 < 0 || nota2 > 10);

do
{
    Console.Write("Digite a nota da prova 3: ");
    nota3 = double.Parse(Console.ReadLine());

    if (nota3 < 0 || nota3 > 10)
        Console.WriteLine("ERRO! Nota {0} inválida.", nota3);
}
while (nota3 < 0 || nota3 > 10);

media = ((1 * nota1) + (2 * nota2) + (3 * nota3)) / 6.0;

if (char.ToUpper(sexo) == 'M')
    sexoporextenso = "masculino";
else
    sexoporextenso = "feminino";

if (media >= 7)
    situacao = "aprovado";
else
    situacao = "reprovado";

Console.WriteLine("O aluno {0} tem {1} anos, é do sexo {2} e obteve a nota final = {3}, situação {4}.", nome, idade, sexoporextenso, media, situacao);

Console.ReadKey();

4) Dada uma coleção de números naturais terminada por 0, imprimir seus quadrados.

int n;

Console.WriteLine("Digite números para obter seus quadrados.");
Console.WriteLine("Quando quiser parar, digite 0.");

do
{
    n = int.Parse(Console.ReadLine());

    if (n != 0)
        Console.WriteLine("O quadrado de {0} é {1}.", n, (n * n));
}
while (n != 0);

Console.ReadKey();

5) Dado N, calcular a soma dos N primeiros números naturais.

int n, soma;

do
{
    Console.Write("Digite N maior ou igual a zero: ");
    n = int.Parse(Console.ReadLine());

    if (n < 0)
        Console.WriteLine("Erro! N precisa ser maior ou igual a zero.");
}
while (n < 0);

soma = 0;
for (int i = 0; i < n; i++)
    soma += i;

Console.WriteLine("A soma dos {0} primeiros números naturais é igual a {1}.", n, soma);

Console.ReadKey();

6) Dado N, imprimir os N primeiros naturais ímpares. Exemplo, para N = 4, a saída deverá ser 1, 3, 5, 7.

int n, j;

do
{
    Console.Write("Digite N maior ou igual a zero: ");
    n = int.Parse(Console.ReadLine());

    if (n < 0)
        Console.WriteLine("Erro! N precisa ser maior ou igual a zero.");
}
while (n < 0);

Console.Write("{0}", 1);
j = 3;
for (int i = 1; i < n; i++)
{
    Console.Write(",{0}", j);
    j += 2;
}

Console.ReadKey();

7) Durante os 30 dias do mês de abril foram tomadas as temperaturas médias diárias de Euclides da Cunha (BA). Determinar o número de dias desse mês com temperaturas abaixo de zero.

double t;
int dias;

dias = 0;
for (int i = 1; i <= 30; i++)
{
    Console.Write("Digite a temperatura média no dia {0}: ", i);
    t = double.Parse(Console.ReadLine());

    if (t < 0)
        dias++;
}

Console.WriteLine("O número de dias com temperatura abaixo de zero foi {0}.", dias);

Console.ReadKey();

8) Dados x inteiro e n natural, calcular xn.

int x, n;
int potencia;

Console.Write("Digite um inteiro X: ");
x = int.Parse(Console.ReadLine());

do
{
    Console.Write("Digite N maior ou igual a zero: ");
    n = int.Parse(Console.ReadLine());

    if (n < 0)
        Console.WriteLine("Erro! N precisa ser maior ou igual a zero.");
}
while (n < 0);

potencia = 1;
for (int i = 0; i < n; i++)
    potencia *= x;

Console.WriteLine("{0} elevado a {1} é igual a {2}", x, n, potencia);

Console.ReadKey();

9) Uma loja de discos anota diariamente durante o mês de março a quantidade de discos vendidos. Determinar em que dia desse mês ocorreu a maior venda e qual foi a quantidade de discos vendida nesse dia.

int q, maior, dia;

maior = 0;
dia = 0;
for (int i = 1; i <= 31; i++)
{
    Console.Write("Quantos discos foram vendidos no dia {0}? ", i);
    q = int.Parse(Console.ReadLine());

    if (q > maior)
    {
        maior = q;
        dia = i;
    }
}

Console.WriteLine("O recorde de vendas foi no dia {0}, com {1} discos vendidos.", dia, maior);

Console.ReadKey();

10) Dados o número N de alunos de uma turma de Programação em C# e suas notas da primeira prova, determinar a maior e a menor nota obtidas por essa turma (nota máxima = 100 e nota mínima = 0).

int n;
int maiornota, menornota, nota;
int maioraluno, menoraluno;

Console.Write("Quantos alunos estão estudando no curso atualmente: ");
n = int.Parse(Console.ReadLine());

maiornota = -1;
menornota = 101;
maioraluno = 0;
menoraluno = 0;
for (int i = 1; i <= n; i++)
{
    do
    {
        Console.Write("Qual é a nota do aluno {0}? ", i);
        nota = int.Parse(Console.ReadLine());

        if (nota < 0 || nota > 100)
            Console.WriteLine("Erro! Nota deve estar entre 0 e 100.");
    }
    while (nota < 0 || nota > 100);

    if (nota > maiornota)
    {
        maiornota = nota;
        maioraluno = i;
    }

    if (nota < menornota)
    {
        menornota = nota;
        menoraluno = i;
    }
}

Console.WriteLine("O aluno {0} obteve a maior nota, que foi {1}.", maioraluno, maiornota);
Console.WriteLine("O aluno {0} obteve a menor nota, que foi {1}.", menoraluno, menornota);

Console.ReadKey();

11) Dados N e uma sequência de N números inteiros, determinar a soma dos números pares.

int n, soma, x;

Console.Write("Digite o valor de N: ");
n = int.Parse(Console.ReadLine());

soma = 0;
for (int i = 1; i <= n; i++)
{
    Console.Write("{0} - Digite um número inteiro: ", i);
    x = int.Parse(Console.ReadLine());

    if (x % 2 == 0)
        soma += x;
}

Console.WriteLine("A soma dos números pares da sequência é igual a {0}.", soma);

Console.ReadKey();

12) Dado n natural, determinar n!.

int n, fatorial;

Console.Write("Digite o valor de N: ");
n = int.Parse(Console.ReadLine());

Console.Write("{0}! = {0} ", n);

fatorial = n;
for (int i = n - 1; i > 1; i--)
{
    Console.Write("* {0} ", i);
    fatorial *= i;
}

Console.WriteLine("* 1 = {0}", fatorial);

Console.ReadKey();

13) Dado N e dois números naturais i e j diferentes de 0, imprimir em ordem crescente os N primeiros naturais que são múltiplos de i ou de j ou de ambos. Exemplo, para N = 6, i = 2 e j = 3, a saída deverá ser: 0, 2, 3, 4, 6, 8.

int n, i, j, k, cont;

do
{
    Console.Write("Digite o valor de N: ");
    n = int.Parse(Console.ReadLine());

    if (n <= 0)
        Console.WriteLine("Erro! N precisa ser maior que zero.");
}
while (n <= 0);

do
{
    Console.Write("Digite o valor de I: ");
    i = int.Parse(Console.ReadLine());

    if (i <= 0)
        Console.WriteLine("Erro! I precisa ser maior que zero.");
}
while (i <= 0);

do
{
    Console.Write("Digite o valor de J: ");
    j = int.Parse(Console.ReadLine());

    if (j <= 0)
        Console.WriteLine("Erro! J precisa ser maior que zero.");
}
while (j <= 0);

Console.Write("0");
cont = 1;
k = 1;
while (cont < n)
{
    if (k % i == 0 || k % j == 0)
    {
        Console.Write(", {0}", k);
        cont++;
    }

    k++;
}

Console.ReadKey();

14) Dizemos que um número natural é triangular se ele é produto de três números naturais consecutivos. Exemplo, 120 é triangular, pois 4.5.6 = 120. Dado N natural, verificar se N é triangular.

int n, i;
bool achou;

Console.Write("Digite o valor de N: ");
n = int.Parse(Console.ReadLine());

achou = false;
i = 1;
while (i < n && ! achou)
{
    if ((i * (i + 1) * (i + 2)) == n)
        achou = true;
    else
        i++;
}

if (achou)
    Console.WriteLine("O número {0} é triangular, pois {1}.{2}.{3} = {0}.", n, i, i+1, i+2);
else
    Console.WriteLine("O número {0} não é triangular.", n);

Console.ReadKey();

15) Dizemos que um número natural é primo se ele é divisível apenas por 1 e por ele mesmo. Dado p natural, verificar se p é primo.

int n, i;
bool achou;

Console.Write("Digite o valor de N: ");
n = int.Parse(Console.ReadLine());

achou = false;
i = 2;
while (i < n && !achou)
{
    if (n % i == 0)
        achou = true;
    else
        i++;
}

if (achou)
    Console.WriteLine("{0} não é primo, pois {1}, por exemplo, é um múltiplo de {0}.", n, i);
else
    Console.WriteLine("{0} é primo.", n);

Console.ReadKey();

16) Dados dois números inteiros positivos, determinar o máximo divisor comum entre eles usando o algoritmo de Euclides. Exemplo:

O mdc entre 1128 e 336 é 24.

int n1i, n2i, n1, n2;
int resto;

do
{
    Console.Write("Digite o primeiro número inteiro maior que zero: ");
    n1i = int.Parse(Console.ReadLine());

    if (n1i <= 0)
        Console.WriteLine("Erro! Número deve ser maior que zero.");
}
while (n1i <= 0);

do
{
    Console.Write("Digite o primeiro número inteiro maior que zero: ");
    n2i = int.Parse(Console.ReadLine());

    if (n2i <= 0)
        Console.WriteLine("Erro! Número deve ser maior que zero.");
}
while (n2i <= 0);

if (n2i > n1i)
{
    n1 = n2i;
    n2 = n1i;
}
else
{
    n1 = n1i;
    n2 = n2i;
}

resto = n1 % n2;
while (resto > 0)
{
    n1 = n2;
    n2 = resto;
    resto = n1 % n2;
}

Console.WriteLine("O MDC entre {0} e {1} é {2}", n1i, n2i, n2);

Console.ReadKey();

17) Dado N inteiro positivo, dizemos que N é perfeito se for igual à soma de seus divisores positivos diferentes de N.
Exemplo: 6 é perfeito, pois 1 + 2 + 3 = 6.
Verificar se um dado número inteiro positivo é perfeito.


18) Um matemático italiano da Idade Média conseguiu estudar o número de galhos em um certo nível de uma árvore através de uma sequência de números naturais que passou a ser conhecida como sequência de Fibonacci. O n-ésimo número da sequência de Fibonacci Fn é dado pela seguinte fórmula de recorrência:
F1 = 1
F2 = 1
Fi = Fi-1 + Fi-2 para i >= 3.
Faça um programa que dado n calcule Fn.


19) Dizemos que um número i é congruente módulo m a j se i mod m = j mod m.
Exemplo: 35 é congruente módulo 4 a 39, pois 35 mod 4 = 3 = 39 mod 4.
Dados N, j e m naturais não nulos, imprimir os N primeiros naturais congruentes a j módulo m.


20) Dado um número natural na base binária, transformá-lo para a base decimal.
Exemplo, dado 10010 a saída será 18, pois 1.24+0.23+0.22+1.21+0.20 = 18.


21) Dado um número natural na base decimal, transformá-lo para a base binária.
Exemplo, dado 18 a saída deverá ser 10010.


22) Dados três números naturais, verificar se eles formam os lados de um triângulo retângulo.


23) Dados três números, imprimi-los em ordem crescente.


24) Qualquer número natural de quatro algarismos pode ser dividido em duas dezenas formadas pelos seus dois primeiros e dois últimos dígitos.
Exemplos: 1297 (12 e 97) e 5314 (53 e 14).
Escreva um programa que imprima todos os milhares (4 algarismos) cuja raiz quadrada seja a soma das dezenas formadas pela divisão acima.
Exemplo: raiz de 9801 = 99 = 98 + 01. Portanto, 9801 é um dos números a ser impresso.


25) Dados N e uma sequência de N números inteiros, determinar quantos segmentos iguais consecutivos compõem essa sequência.
Exemplo: a sequência 5,2,2,3,4,4,4,4,1,1 é formada por 5 segmentos de números iguais.


26) Dados um inteiro positivo N e uma sequência de N números inteiros, determinar o comprimento de um segmento crescente de comprimento máximo.
Exemplos:
- Na sequência 5,10,3,2,4,7,9,8,5 o comprimento do segmento crescente máximo é 4.
- Na sequência 10,8,7,5,2 o comprimento de um segmento crescente máximo é 1.


27) Simule a execução do programa abaixo destacando a sua saída:

int a, b, total, soma, termo;

a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());

Console.WriteLine("({0},{1})", a, b);

total = 0;
soma = 0;

while (a != 0)
{
    total++;
    termo = 1;

    for (int i = 1; i <= b; i++)
        termo *= a;

    Console.WriteLine("Resp = {0}", termo);

    soma += termo;

    Console.WriteLine("Soma = {0}", soma);

    a = int.Parse(Console.ReadLine());
    b = int.Parse(Console.ReadLine());

    Console.WriteLine("({0},{1})", a, b);
}

Console.WriteLine("Total de pares = {0}", total);
Console.ReadKey();

Dados:
2 3
5 2
7 1
0 5
3 2