Ir para conteúdo


Revista PROGRAMAR – Edição 46 (Setembro 2014): Download já disponível!

- - - - -

Exercício Iniciante com If else e switch


  • Por favor inicie sessão para responder
14 respostas a este tópico

#1 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 20 de Novembro de 2013 - 22:07

Boa noite colegas,
Ora bem, estou a iniciar-me na programção, já lidei a nível académico com C e agora estou a lidar com C#, mas tudo a nível de iniciante. Mas estou com algumas dificuldades em resolver este exercício:

"Pretendemos seleccionar um carro para adquirir. Consideramos três critérios fundamentais cuja importância está descrita abaixo. Escreva um algoritmo que receba o marca e as três características do veículo e faça uma sugestão de compra. O seu algoritmo permitirá comparar três veículos
–Os fatores de decisão são:
•Fator exclusivo, o número de lugares tem de ser igual ou superior a 4
•Segundo conjunto de critérios
–1º Preço -> o preço mais baixo ganha -> em caso de empate (faixa de 10%)
–2º Potencia -> a mais elevada ganha"

Este exercício só pode ser resolvido por If Else e Switch.
A minha dificuldade é agora fazer o ciclo para a pesquisa dos dados e no fim dar só um único valor (marca), cujo este valor está associado ao número maior de lugares, o preço mais baixo e com a potência mais elevada em relação aos outros dois carros.

Alguém me poderá ajudar? Obrigado.

#2 nelsonr

nelsonr

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 3501 mensagens

Publicado 20 de Novembro de 2013 - 22:11

Boas,
podes mostrar o codigo que tens atualmente?

#3 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 20 de Novembro de 2013 - 22:30

Código (C#):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/* Pretendemos selecionar um carro para adquirir. Consideramos trÍs critÈrios fundamentais cuja import‚ncia est·
* descrita abaixo. Escreva um algoritmo que receba a marca e as trÍs caracterÌsticas do veÌculo e faÁa uma
* sugest„o de compra. O seu algoritmo permitir· comparar trÍs veÌculos. Os factores de decis„o s„o: -> Factor
* exclusivo, o n˙mero de lugares tem de ser igual ou superior a 4. -> Segundo conjunto de critÈrios:
* --> 1∫ preÁo - o preÁo mais baixo ganha - em caso de empate (faixa de 10%); --> 2∫ potÍncia - a mais elevada
* ganha. */

namespace TrabalhoPratico3
{
        class Program
        {
                static void Main(string[] args)
                {
                        char MarcaVeiculo1, MarcaVeiculo2, MarcaVeiculo3;
                        int NumLugarVeic1, NumLugarVeic2, NumLugarVeic3;
                        float PrecoVeic1, PrecoVeic2, PrecoVeic3;
                        int PotenciaVeic1, PotenciaVeic2, PotenciaVeic3;
                        string input;

                        Console.Write("Indique a Marca do VeÌculo 1: ");
                        input = Console.ReadLine();
                        MarcaVeiculo1 = char.Parse(input);

                        Console.Write("Indique o n˙mero de lugares do VeÌculo 1: ");
                        input = Console.ReadLine();
                        NumLugarVeic1 = int.Parse(input);

                        Console.Write("Indique a potÍncia do VeÌculo 1: ");
                        input = Console.ReadLine();
                        PotenciaVeic1 = int.Parse(input);

                        Console.Write("Indique o preÁo do VeÌculo 1: ");
                        input = Console.ReadLine();
                        PrecoVeic1 = float.Parse(input);


                        Console.Write("\nIndique a Marca do VeÌculo 2: ");
                        input = Console.ReadLine();
                        MarcaVeiculo2 = char.Parse(input);

                        Console.Write("Indique o n˙mero de lugares do VeÌculo 2: ");
                        input = Console.ReadLine();
                        NumLugarVeic2 = int.Parse(input);

                        Console.Write("Indique a potÍncia do VeÌculo 2: ");
                        input = Console.ReadLine();
                        PotenciaVeic2 = int.Parse(input);

                        Console.Write("Indique o preÁo do VeÌculo 2: ");
                        input = Console.ReadLine();
                        PrecoVeic2 = float.Parse(input);


                        Console.Write("\nIndique a Marca do VeÌculo 3: ");
                        input = Console.ReadLine();
                        MarcaVeiculo3 = char.Parse(input);

                        Console.Write("Indique o n˙mero de lugares do VeÌculo 3: ");
                        input = Console.ReadLine();
                        NumLugarVeic3 = int.Parse(input);

                        Console.Write("Indique a potÍncia do VeÌculo 3: ");
                        input = Console.ReadLine();
                        PotenciaVeic3 = int.Parse(input);

                        Console.Write("Indique o preÁo do VeÌculo 3: ");
                        input = Console.ReadLine();
                        PrecoVeic3 = float.Parse(input);


                        if(NumLugarVeic1 >= 4)
                                {
                                        Console.WriteLine("O carro da marca da marca {0}, possui {1} lugares, portanto … SELECCIONADO!!!",MarcaVeiculo1,NumLugarVeic1);
                                               
                                                if(NumLugarVeic2 >= 4)
                                                        {
                                                                Console.WriteLine("O carro da marca {0}, possui {1} lugares, portanto … SELECCIONADO!!!",MarcaVeiculo2,NumLugarVeic2);
                                                                       
                                                                        if(NumLugarVeic3 >= 4)
                                                                                {
                                                                                        Console.WriteLine("O carro da marca {0}, possui {1} lugares, portanto … SELECCIONADO!!!",MarcaVeiculo3,NumLugarVeic3);
                                                                                }
                                                                        else
                                                                                {
                                                                                        Console.WriteLine("O carro da marca {0}, possui {1} lugares, portanto N√O FOI SELECCIONADO!!!", MarcaVeiculo3,NumLugarVeic3);
                                                                                }
                                                        }
                                                else
                                                        {
                                                                Console.WriteLine("O carro da marca {0}, possui {1} lugares, portanto N√O FOI SELECCIONADO!!!", MarcaVeiculo2,NumLugarVeic2);
                                                        }
                                }
                        else
                                {
                                        Console.WriteLine("O carro da marca {0}, possui {1} lugares, portanto N√O FOI SELECCIONADO!!!", MarcaVeiculo1,NumLugarVeic1);
                                }


                       



                        Console.ReadLine();


                }
        }
}

Já percebi que a estrutura do if else, está mal feita. Podem ajudar-me a resolver este problema sff? Gosto de programação, mas como ainda estou no início preciso de algumas ajudas, para ver se isto se encaixa bem na minha cabeça, todos estes processos. Obrigado.

Editado por Rechousa, 20 de Novembro de 2013 - 22:30.
Formatação de código


#4 Rechousa

Rechousa

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1246 mensagens

Publicado 20 de Novembro de 2013 - 22:33

Olá,

Não sei se é do âmbito da disciplina e já deste, mas podias ter um método para fazer a leitura dos dados do veículo (marca, nr. de lugares e preço), chamavas o método 3 vezes e retornavas um objeto com com os dados do carro.

Imagina agora que o "cliente" quer ler, em vez de três veículos, trinta. E depois lembra-se de mudar para 50 e depois para 100. Tens de repetir o código N vezes,

Como disse, não sei se já deste ou não.

#5 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 20 de Novembro de 2013 - 22:43

Em termos de matéria só dei até aos if else e switch, mas já fiz um exercício mais ou menos parecido, mas este está a custar-me perceber em como o fazer. Tinha que criar uma variável Metodo4Vezes e não Metodo3Vezes, pois necessito da marca, nr de lugares, preço e a potência do carro. Certo? Este problema é só simplesmente ler 3 carros, e poder selecionar um de forma a seguir aos critérios que mencionei anteriormente no meu primeiro post.
Consegues ajudar-me a desembrulhar isto da minha cabeça? Obrigado.

#6 Rechousa

Rechousa

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1246 mensagens

Publicado 20 de Novembro de 2013 - 22:48

O char só te guarda um caractér. Se introduzires FIAT, por exemplo, só vais ter a letra F.

Já deste arrays?

#7 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 20 de Novembro de 2013 - 23:05

Ainda não dei. Sim é verdade quanto ao char. Arrays ainda não dei, o professor disse-nos apenas para fazer com if else e switch.

#8 Rechousa

Rechousa

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1246 mensagens

Publicado 20 de Novembro de 2013 - 23:20

Basicamente o que precisas de fazer:

a) input do utilizador (já tens isso feito)
b) comparação e escolha do vencedor.

Sugiro que tenhas mais quatro variáveis (Marca do veiculo selecionado, Numero de lugar do veiculo selecionado, Preco do veiculo selecionado e potencia do veiculo selecionado).

Depois, em vez de teres os if's encadeados como tens vais comparar cada um dos veiculos introduzidos com o selecionado +/- assim:

Código (C#):
if(NumLugarVeic1 >= 4) {
   if(PrecoVeic1 < PrecoVeicSelecionado) {
           if(PotenciaVeic1 > PotenciaVeicSelecionado) {
                   // Inicializar as variaveis relativas ao veiculo selecionado, com os dados do veículo 1
           }
   }
}


// Repetir para os outro veiculos

Editado por Rechousa, 20 de Novembro de 2013 - 23:20.


#9 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 21 de Novembro de 2013 - 22:21

Boa noite. Ora bem, neste momento tenho o código assim:
Código (C#):
namespace TrabalhoPratico3
{
    class Program
    {
        static void Main(string[] args)
        {
            char MarcaVeiculo1, MarcaVeiculo2, MarcaVeiculo3;
            int NumLugarVeic1, NumLugarVeic2, NumLugarVeic3;
            float PrecoVeic1, PrecoVeic2, PrecoVeic3;
            int PotenciaVeic1, PotenciaVeic2, PotenciaVeic3;
            float PrecoVeicSelecionado;
            int PotenciaVeicSelecionado;
            char MarcaVeicSelecionado;
            int NumLugarVeicSelecionado;
            string input;
            Console.Write("Indique a Marca do VeÌculo 1: ");
            input = Console.ReadLine();
            MarcaVeiculo1 = char.Parse(input);
            Console.Write("Indique o n˙mero de lugares do VeÌculo 1: ");
            input = Console.ReadLine();
            NumLugarVeic1 = int.Parse(input);
            Console.Write("Indique a potÍncia do VeÌculo 1: ");
            input = Console.ReadLine();
            PotenciaVeic1 = int.Parse(input);
            Console.Write("Indique o preÁo do VeÌculo 1: ");
            input = Console.ReadLine();
            PrecoVeic1 = float.Parse(input);

            Console.Write("\nIndique a Marca do VeÌculo 2: ");
            input = Console.ReadLine();
            MarcaVeiculo2 = char.Parse(input);
            Console.Write("Indique o n˙mero de lugares do VeÌculo 2: ");
            input = Console.ReadLine();
            NumLugarVeic2 = int.Parse(input);
            Console.Write("Indique a potÍncia do VeÌculo 2: ");
            input = Console.ReadLine();
            PotenciaVeic2 = int.Parse(input);
            Console.Write("Indique o preÁo do VeÌculo 2: ");
            input = Console.ReadLine();
            PrecoVeic2 = float.Parse(input);

            Console.Write("\nIndique a Marca do VeÌculo 3: ");
            input = Console.ReadLine();
            MarcaVeiculo3 = char.Parse(input);
            Console.Write("Indique o n˙mero de lugares do VeÌculo 3: ");
            input = Console.ReadLine();
            NumLugarVeic3 = int.Parse(input);
            Console.Write("Indique a potÍncia do VeÌculo 3: ");
            input = Console.ReadLine();
            PotenciaVeic3 = int.Parse(input);
            Console.Write("Indique o preÁo do VeÌculo 3: ");
            input = Console.ReadLine();
            PrecoVeic3 = float.Parse(input);
            if(NumLugarVeic1 >= 4)
                {
                    if(PrecoVeic1 < PrecoVeicSelecionado)
                        {
                            if(PotenciaVeic1 > PotenciaVeicSelecionado)
                                {
                                }
                        }
                }
            if (NumLugarVeic2 >= 4)
            {
                if (PrecoVeic2 < PrecoVeicSelecionado)
                {
                    if (PotenciaVeic2 > PotenciaVeicSelecionado)
                    {
                    }
                }
            }
            if (NumLugarVeic3 >= 4)
            {
                if (PrecoVeic3 < PrecoVeicSelecionado)
                {
                    if (PotenciaVeic3 > PotenciaVeicSelecionado)
                    {
                    }
                }
            }

            Console.ReadLine();
        }
    }
}

É assim que pretendes? Fazer 3 if's para os três carros, certo? Onde é que coloco as variáveis e como faço agora os cálculos?

Pelo exemplo que metes-te, já começo a encaixar melhor. Obrigado.

#10 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2523 mensagens

Publicado 21 de Novembro de 2013 - 23:57

Citar

O char só te guarda um caractér. Se introduzires FIAT, por exemplo, só vais ter a letra F.

Já deste arrays?

Em C# nao se deve usar array para guardar strings, arrays e' em C, C# tem string nativamente, por isso e' melhor usar strings!

deves ler assim o texto.
Código (C#):
string marca1;
marca1 = Console.ReadLine();

O ideal ja que estas a trabalhar com uma linguagem com suporte para OOP(aka POO), deverias usar objectos para isso.

#11 Rechousa

Rechousa

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1246 mensagens

Publicado 22 de Novembro de 2013 - 00:15

Olá

Ver Mensagempikax, em 21 de Novembro de 2013 - 23:57, disse:

O ideal ja que estas a trabalhar com uma linguagem com suporte para OOP(aka POO), deverias usar objectos para isso.

O @nunorebelo ainda não deu objetos :)

#12 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 22 de Novembro de 2013 - 13:29

Boa tarde. Pikax, percebi quanto ao introduzir a marca, obrigado pela explicação.
Rechousa, quanto ao código que introduzi ontem está bem? Como é que agora introduzu as variáveis? E como faço os cálculos, para depois no fim dar apenas só um carro seleccionado?
Obrigado.

#13 Rechousa

Rechousa

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 1246 mensagens

Publicado 22 de Novembro de 2013 - 14:18

Olá,

Relativamente ao teu código, estás a ir bem.
Precisas de inicializar a variável PrecoVeicSelecionado com um preço alto (ou ao preço do veículo 1), porque como está é inicializado a zero, falta-te a questão dos 10% que vi no enunciado e completar a parte da selecao do veiculo, pois ainda nao está (basicamente, depois dos if's encadeados).

#14 nunorebelo

nunorebelo

    null

  • Membro
  • Pip
  • 14 mensagens

Publicado 22 de Novembro de 2013 - 18:49

Código :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/* Pretendemos selecionar um carro para adquirir. Consideramos três critérios fundamentais cuja importância está
* descrita abaixo. Escreva um algoritmo que receba a marca e as três características do veículo e faça uma
* sugestão de compra. O seu algoritmo permitirá comparar três veículos. Os factores de decisão são: -> Factor
* exclusivo, o número de lugares tem de ser igual ou superior a 4. -> Segundo conjunto de critérios:
* --> 1º preço - o preço mais baixo ganha - em caso de empate (faixa de 10%); --> 2º potência - a mais elevada
* ganha. */
namespace TrabalhoPratico3
{
    class Program
    {
            static void Main(string[] args)
            {
                    char MarcaVeiculo1, MarcaVeiculo2, MarcaVeiculo3;
                    // string marca1, marca2, marca3;
                    int NumLugarVeic1, NumLugarVeic2, NumLugarVeic3;
                    float PrecoVeic1, PrecoVeic2, PrecoVeic3;
                    int PotenciaVeic1, PotenciaVeic2, PotenciaVeic3;
                    float PrecoVeicSelecionado;
                    int PotenciaVeicSelecionado;
                    char MarcaVeicSelecionado;
                    // int NumLugarVeicSelecionado;
                    string input;
                    Console.Write("Indique a Marca do Veículo 1: ");
                    input = Console.ReadLine();
                    MarcaVeiculo1 = char.Parse(input);
                    Console.Write("Indique o número de lugares do Veículo 1: ");
                    input = Console.ReadLine();
                    NumLugarVeic1 = int.Parse(input);
                    Console.Write("Indique a potência do Veículo 1: ");
                    input = Console.ReadLine();
                    PotenciaVeic1 = int.Parse(input);
                    Console.Write("Indique o preço do Veículo 1: ");
                    input = Console.ReadLine();
                    PrecoVeic1 = float.Parse(input);

                    Console.Write("\nIndique a Marca do Veículo 2: ");
                    input = Console.ReadLine();
                    MarcaVeiculo2 = char.Parse(input);
                    Console.Write("Indique o número de lugares do Veículo 2: ");
                    input = Console.ReadLine();
                    NumLugarVeic2 = int.Parse(input);
                    Console.Write("Indique a potência do Veículo 2: ");
                    input = Console.ReadLine();
                    PotenciaVeic2 = int.Parse(input);
                    Console.Write("Indique o preço do Veículo 2: ");
                    input = Console.ReadLine();
                    PrecoVeic2 = float.Parse(input);

                    Console.Write("\nIndique a Marca do Veículo 3: ");
                    input = Console.ReadLine();
                    MarcaVeiculo3 = char.Parse(input);
                    Console.Write("Indique o número de lugares do Veículo 3: ");
                    input = Console.ReadLine();
                    NumLugarVeic3 = int.Parse(input);
                    Console.Write("Indique a potência do Veículo 3: ");
                    input = Console.ReadLine();
                    PotenciaVeic3 = int.Parse(input);
                    Console.Write("Indique o preço do Veículo 3: ");
                    input = Console.ReadLine();
                    PrecoVeic3 = float.Parse(input);
                    PrecoVeicSelecionado = 0;
                    PotenciaVeicSelecionado = 0;
                    if(NumLugarVeic1 >= 4)
                            {
                                    if(PrecoVeic1 < PrecoVeicSelecionado)
                                            {
                                                    if(PotenciaVeic1 > PotenciaVeicSelecionado)
                                                            {
                                                                    Console.WriteLine("A marca seleccionada é --> {0}!!!", MarcaVeiculo1);
                                                            }
                                            }
                            }
                    if (NumLugarVeic2 >= 4)
                    {
                                    if (PrecoVeic2 < PrecoVeicSelecionado)
                                            {
                                                    if (PotenciaVeic2 > PotenciaVeicSelecionado)
                                                            {
                                                                    Console.WriteLine("A marca seleccionada é --> {0}!!!", MarcaVeiculo2);
                                                            }
                                            }
                    }
                    if (NumLugarVeic3 >= 4)
                    {
                                    if (PrecoVeic3 < PrecoVeicSelecionado)
                                            {
                                                    if (PotenciaVeic3 > PotenciaVeicSelecionado)
                                                            {
                                                                    Console.WriteLine("A marca seleccionada é --> {0}!!!", MarcaVeiculo3);
                                                            }
                                            }
                    }
                    Console.ReadLine();
            }
    }
}

O código assim está bem?
Como é que eu faço agora, para que ele selecione o carro? É necessário preencher os elses?
Quanto ao código do pagamento deixo-o para o fim, mas primeiro gostaria de ter isto feito da seleção do carro.

#15 bioshock

bioshock

    Unsigned User

  • Wiki
  • PipPipPipPipPipPip
  • 4842 mensagens

Publicado 25 de Novembro de 2013 - 12:25

Não podes utilizar ciclos? É que isso está terrível.
Mas olhando apenas para o código actual, podes melhorar essas condições, algo dentro deste género.
Código (C#):
if(NumLugarVeic1 >= 4 && NumLugarVeic2 >= 4 && NumLugarVeic3 >= 44){
         
                if(PrecoVeic1 < PrecoVeicSeleccionado && PotenciaVeic1 > PotenciaVeicSelecionado){
                                 Console.WriteLine("Marca Seleccionada: {0}", MarcaVeiculo1);
                }

        /* etc...
           Depois tens de verificar os preços dos veículos, caso haja empate verificas a potência
        */

}else{
        Console.WriteLine("Número de lugares inválido.");
}