1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida em Exercicio C++

Discussão em 'Programação' iniciada por Psycop, 4 de Abril de 2009. (Respostas: 14; Visualizações: 2123)

  1. Psycop

    Psycop I fold therefore I AM

    Boas

    Eu como iniciante na pratica da programação, mas especificamente em C++ decidi tentar resolver alguns exercicios de modo a praticar e aprender, mas apesar dos exercicios serem muito faceis de resolver tenho tido algumas duvidas.

    Exercicio:
    Bem eu não consegui resolver o problema, pois não consigo calcular o peso total do camião. Eu cheguei ao seguinte código:

    Consigo inserir as 3 variáveis mas não consigo calcular a variável d, que seria a variavel que iria calcular o peso total do veículo.
    Não estou a pedir para me resoverem o problema apenas estou a pedir ajuda para detectar o erro e a pedir alguns conselhos de como posso resolver o problema.

    Cumps Psycop
     
  2. Ronnie_03

    Ronnie_03 Power Member

    O teu problema é na linha a vermelho:

    Código:
    #include <iostream> 
    using namespace std;
    
    int main()
    {
    int a; //Peso da Carga
    int b; //Peso inicial do veículo
    int c;//Carga máxima permitida
    int d; //Peso total do Veículo
    
    
    cout << "Introduza o 1º valor, carrgue ENTER:" << endl;
    cin >> a;
    cout << "Introduza o 2º valor, carregue ENTER:" << endl;
    cin >> b;
    cout << "Introduza o 3º valor, carregue ENTER:" << endl;
    cin >> c;
    
    [COLOR=red]d = a + b >= c;[/COLOR]
    cout << "A soma de a + b tem de ser menor ou igual a" << c << endl;
    
    cin.get();
    } 
    

    devia ficar:

    Código:
    d = a+ b;
    if (d > c)
      cout << "A soma de a + b tem de ser menor ou igual a " << c << endl;
    else
      cout << "Carga OK." << endl;
     
    cin.get();//este primeiro lê o enter do buffer de entrada por causa do cin
    cin.get();
    return 0;//a main deve devolver um inteiro (o 0 é um sinal para o sistema operativo em como o programa foi executado correctamente)
     
    

    Cumps
     
  3. Psycop

    Psycop I fold therefore I AM

    Boas

    Já consegui resolver parte do problema, obrigado pela tua ajuda ronnie_03.

    O código final a que cheguei é o seguinte:

    Mas agora queria que mostrasse qual era o peso que excedia a carga máxima permitida, mas surge-me o erro nas seguintes linhas de código:

    Declarei mais uma variavel do que anteriormente (e) para que pudesse calcular qual o excesso de peso, não sei se o fiz da melhor forma, mas com estas linhas de código o programa não executa.

    Cumps Psycop
     
    Última edição: 4 de Abril de 2009
  4. fm.

    fm. Power Member

    De facto tens aí um erro. É muito simples: para atribuires valores a uma variável tens de a meter do lado esquerdo do sinal de atribuição (=), sendo assim ficará algo como isto:

    Código:
    [COLOR=White]if (d > c) {
        e = d - c;
        cout << "Peso excessivo é igual a: " << e << endl;
    }[/COLOR]
    
    Nunca, mas nunca faças algo deste género: d - c = e;
    O sinal "=" só atribui valores à variável que se encontra à sua esquerda ;)
     
    Última edição: 4 de Abril de 2009
  5. Psycop

    Psycop I fold therefore I AM

    Boas

    Já consegui colocar o programa a executar todas as tarefas, obridado ao Ronnie_03 e ao Trustee. pelos conselhos que me deram e correcções que me fizeram, foram muito uteis e ajudaram a perceber alguns promenores que fazem diferença na programação...

    Cumps Psycop
     
  6. Psycop

    Psycop I fold therefore I AM

    Cá estou eu com mais um exercicio entre mãos e com mais duvidas.

    O exercicio é o seguinte:
    EU já declarei todas as variaveis e já consegui introduzir todos os pratos e organiza-los por categorias de modo a escolher o que quero, so que agora não sei como inserio os valores de cada prato, ao mesmo tempo que de para escolher qual a opção que queremos.

    Cheguei ao seguinte código:
    Usei a variavel float em vez de usar a variavel int, para poder calcular valores decimais, penso que seja a forma mais correcta,

    Gostaria que me ajudassem a resolver o problema de onde devo colocar os valores de cada prato, para que depois possa criar um função que calcule a soma do valor dos 3 pratos e caso esse valor ultrapasse os 20€ lhe faça um desconto de 5%.
    A minha duvida esta no local onde devo declarar os valores de cada prato...

    Cumps
    PSycop
     
  7. OubeLa

    OubeLa Power Member

    O facto de a, b e c serem float não influencia em nada o calculo do preço. São valores que vais ler do teclado, por isso podes declarar como inteiros.

    Para calculares o preço podes declarar uma variável float preco = 0.0; e depois, dentro daqueles if's, ir adicionando o valor do prato ao preço. No final, caso o valor ultrapasse os 20€, fazes o desconto.

    Seria algo tipo

    Código:
    float preco = 0.0;
    int a = 0;
    
    cin >> a;
    
    if (a == 1) {
         preco += 8.30;
         cout << "\n Escolheu Sopa de escargots canadenses para entrada" << endl;
    }
    
    //....
    
    //no final
    
    if(preco > 20.0)
         preco = calcula_preco_com_desconto(preco); //chamar uma função que calcule o novo preço
    
    //...
    
    
     
  8. Psycop

    Psycop I fold therefore I AM

    Ao compilar da-me o seguinte erro:

    Ao compilar da-me erro na linha assinalada a vermelho.
    Porque é que se eu colocar float Preço dá erro, e float preco não dá erro...
     
  9. Ronnie_03

    Ronnie_03 Power Member

    Tira o simbolo €. Deve ser isso que está a dar erro.

    Cumps
     
  10. fm.

    fm. Power Member

    Em vez de teres tantos if's, aconselhava-te a usar a instrucção switch. Para simplificar o teu código.

    Exemplo:

    Código:
    switch ( a ) {
         case 1:
              preco += 8.30;
              cout << "Escolheu a Sopa de Escargots canadenses para entrada" << endl;
              break;
         case 2:
              preco += 7.25;
              cout << "Escolheu Yakissoba de jerimum para entrada" << endl;
              break;
         case 3:
              preco += 4.30;
              cout << "Escolheu Sushi com Torresmo para entrada" << endl;
              break;
         default:
              cout << "Opção incorrecta. Por favor tente outra vez." << endl;
    }
    
     
  11. Psycop

    Psycop I fold therefore I AM

    Boas

    Obrigado a todos os que me ajudaram, pois com a vossa ajuda consegui colocar o programa a funcionar e mais importante ainda aprendi alguns promenores importantes para o futuro.

    O código final a que cheguei é o seguinte:

    Trustee. vou tentar seguir o teu conselho e usar um switch em vez de if para simplificar o codigo, vou tentar implementar essa função. Já agora a função switch faz com que a aplicação seja mais rápida a executar do que a função if?

    Mais uma vez obrigado a todos os conselhos que tanto me ajudaram a resolver este problema.

    Cumps
    Psycop
     
  12. fm.

    fm. Power Member

    Aparentemente há quem tenha feito o teste if vs. switch, mas no teu caso, como é um programa pequeno a diferença de velocidade é quase nula.

    Podes ver aqui neste site, uma pessoa que executou 1milhão de vezes uma função que utilizava uma instrução switch e outra que utilizava if, e estas faziam exactamente a mesma coisa. A conclusão a que ele chegou foi que havia uma diferença de 13% na rapidez de execução, à qual a instrução switch aparentou ser a mais rápida.

    http://programming-designs.com/2009/02/c-speed-test-if-vs-switch-statement/

    Mas o que deves ter em mente é que se tiveres que executar 3 ou mais instrucções if consecutivamente então será melhor optares pelo switch.

    Agora que conseguiste completar o teu programa, aconselho a pegares nele novamente e tentar melhorá-lo ao máximo como puderes. ;)
     
    Última edição: 11 de Abril de 2009
  13. Psycop

    Psycop I fold therefore I AM

    Mais um exercicio = a mais duvidas e erros...

    Desta vez o exercicio e o seguinte:

    Já cheguei ao seguinte código:

    O problema que me surgiu neste exercicio foi que em certos casos o programa apresenta-me como resposta, Triangulo Isosceles e Triangulo Rectangulo ao mesmo tempo.
    Por exemplo se eu colocar 3 como valores dos lados 1,2 e 3 respectivamante o resultado tem duas respostas.

    Não consigo encontrar o erro, gostaria que me ajudassem, pois não estou mesmo a ver onde é que errei...

    Cumps
    Psycop
     
    Última edição: 12 de Abril de 2009
  14. fm.

    fm. Power Member

    Primeiro, lê melhor o enunciado, lá não pede nenhum triângulo rectângulo, mas sim um triângulo equilátero, que foi o que te esqueceste.

    Segundo, a meu ver tens uns erros de lógica nas tuas instruções if.

    Ficará algo assim:

    Código:
    #include <iostream>
    using namespace std;
    
    int main () {
    
        int a, b, c;
        bool d;
    
        cout << "Lado 1: ";
        cin  >> a;
    
        cout << "Lado 2: ";
        cin  >> b;
    
        cout << "Lado 3: ";
        cin  >> c;
    
        d = (((a+b)<=c) || ((a+c)<=b) || ((b+c)<=a));
    
        if (d) {
         
               if ( (a==b) && (b==c) && (a==c) )
                    cout << "\nÉ um Triângulo Equilátero" << endl;
    
               else if ( (a==b) && (a!=c) && (b!=c) ||
                         (c==b) && (a!=c) && (a!=b) ||
                         (a==c) && (a!=b) && (c!=b) )
                           cout << "\nÉ um Triângulo Isosceles" << endl;
    
               else cout << "\nÉ um Triângulo Escaleno" << endl;
        } else { 
               cout << "\nNão forma um Triângulo"; 
        }
    
        return 0;
    }
    
    Este programa funciona, mas.. acho que aquele else if poderia estar muito mais simplificado.
     
    Última edição: 13 de Abril de 2009
  15. Psycop

    Psycop I fold therefore I AM

    Realmente tinha alguns erros de lógica, e aquela confusão entre Equilatero e Rectangulo, foi o maior erro.
    Corrigida a parte lógica, o código ficou o seguinte:

    Obrigado Trustee. por toda a ajuda dada, pois para um principiante estas ajudas são muito importantes, pois ensinam-nos muitos pormenores...

    Cumps
    Psycop
     
    Última edição: 13 de Abril de 2009

Partilhar esta Página