Duvida em Exercicio C++

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:
1. Um determinado posto rodoviario faz a apreensão de camiões com carga superior ao permitido fazendo a pesagem dos camiões que passam por uma autoestrada. O posto obtem o peso da carga do camião a partir da seguinte formula: Peso Carga = Peso Final - Peso inicial onde, Peso inicial e o peso do camião antes da carga em Toneladas, Kilos e Gramas. Peso Final e o peso do camião apos a carga em Tonelagas, Kilos e Gramas. Assim, pretende-se fazer um programa C++ que leia para 1 camião: o peso inicial (Toneladas, Kilos, gramas), o peso final (Toneladas, Kilos, gramas) e a carga maxima permitida.
Se a carga for superior ao permitido escrever a mensagem "Carga superior ao permitido" e a quantidade que passou do permitido. Caso contrario escrever "Carga OK!".
Exemplo:
Peso Inicial: 1 ton. 10 kg. e 100 g.
Peso Final : 2 ton. 9 kg. e 400 g.
Peso Carga: 999 Kg. 300 g.
Carga Maxima Permitida: 100Kg
logo deve ser escrito :
Carga superior ao permitido. Passaram 899 Kg e 300 g.

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:

#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;

d = a + b >= c;
cout << "A soma de a + b tem de ser menor ou igual a" << c << endl;

cin.get();
}

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
 
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
 
Boas

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

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

#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
int e; // Excesso de Peso

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;

d = a + b;
cout << "Peso Total do veículo:" << d << endl;

if (d > c)
cout << "Peso Excessivo" << endl;

if (d <= c)
cout << "Peso OK." << endl;

if (d > c)
d - c = e
cout << "Peso excessivo é igual a:" << e << endl;


cin.get();
cin.get();
return 0;
}
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:

if (d > c)
d - c = e
cout << "Peso excessivo é igual a:" << e << endl;
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:
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

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:
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
 
Cá estou eu com mais um exercicio entre mãos e com mais duvidas.

O exercicio é o seguinte:
O Restaurante do Terraço Espanha tem uma opção de almoço executivo com 3 etapas: Entrada, Prato Principal e Sobremesa. Cada etapa tem algumas opções com preços diferentes.
Entradas
A. Sopa de escargots canadenses - 8.30€
B. Yakissoba de jerimum - 7.25€
C. Sushi com Torresmo - 4.30€
Prato Principal
A. Língua de colibri recheada - 10.25€
B. Orelha de ornitorrinco flambada - 11.40€
C. Peito de perdiz asiático -10.00€
D. Pernas de rã com maracujá - 10.00€
Sobremesa
A. Sorvete de brócolis - 4.00€
B. Torta de doce de jiló e queijo -5.95€
Caso o total da conta seja maior que 20.00€ o cliente tem 5% de desconto. Elabore um programa C++ que aceite as entradas do usuário relativas as escolhas feitas e imprima o valor da conta a pagar.
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:
/********************************************
Escolha de Menu em Restaurante
Versão: 1.0
Autor: Nuno Santos
Data de Desenvolvimento: 10 de Abril de 2009
Erros: Falta colocar valores dos pratos e clacular o total
*********************************************/


#include <iostream>
using namespace std;

int main()
{
float a; //Entradas
cout << "Entradas" << endl;
cout << "\n1 - Sopa de escargots canadenses" << endl;
cout << "\n2 - Yakissoba de jerimum" << endl;
cout << "\n3 - Sushi com Torresmo" << endl;

cin >> a;

if (a == 1)
cout << "\n Escolheu Sopa de escargots canadenses para entrada" << endl;


if (a == 2)
cout << "\n Escolheu Yakissoba de jerimum para entrada" << endl;

if (a == 3)
cout << "\n Escolheu Sushi com Torresmo para entrada"<< endl;


float b; //Prato Principal
cout << "Prato principal" << endl;
cout << "\n1 - Língua de colibri recheada" << endl;
cout << "\n2 - Orelha de ornitorrinco flambada" << endl;
cout << "\n3 - Peito de perdiz asiático" << endl;
cout << "\n4 - Peito de perdiz asiático" << endl;

cin >> b;

if (b == 1)
cout << "\n Escolheu Língua de colibri recheada" << endl;

if (b == 2)
cout << "\n Escolheu Orelha de ornitorrinco flambada" << endl;

if (b == 3)
cout << "\n Escolheu Peito de perdiz asiático" << endl;

if (b == 4)
cout << "\n Escolheu Peito de perdiz asiático" << endl;


float c; // Sobremesa
cout << "\n Sobremesa" << endl;
cout << "\n1 - Sorvete de brócolis" << endl;
cout << "\n2 - Torta de doce de jiló e queijo" << endl;

cin >> c;

if (c == 1)
cout << "\n Escolheu Sorvete de brócolis" << endl;

if (c == 2)
cout << "\n Escolheu Torta de doce de jiló e queijo" << endl;


cin.get();
cin.get();
}
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
 
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

//...
 
Ao compilar da-me o seguinte erro:

int main()
{
float preco = 0.0;
int a = 0; //Entradas
cout << "Entradas" << endl;
cout << "\n1 - Sopa de escargots canadenses" << endl;
cout << "\n2 - Yakissoba de jerimum" << endl;
cout << "\n3 - Sushi com Torresmo" << endl;

cin >> a;

if (a == 1){
preco += 8.30€;
cout << "\n Escolheu Sopa de escargots canadenses para entrada" << endl;
}

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...
 
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;
}
 
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:

/********************************************
Escolha de Menu em Restaurante
Versão: 1.0
Autor: Nuno Santos
Data de Desenvolvimento: 10 de Abril de 2009
Erros: Sem erros
*********************************************/


#include <iostream>
using namespace std;

int main()
{
float d = 0.0;
int a; //Entradas
cout << "Entradas" << endl;
cout << "\n1 - Sopa de escargots canadenses" << endl;
cout << "\n2 - Yakissoba de jerimum" << endl;
cout << "\n3 - Sushi com Torresmo" << endl;

cin >> a;

if (a == 1){
d += 8.30;
cout << "\n Escolheu Sopa de escargots canadenses para entrada" << endl;
}

if (a == 2)
d += 7.25;
cout << "\n Escolheu Yakissoba de jerimum para entrada" << endl;

if (a == 3)
d += 4.30;
cout << "\n Escolheu Sushi com Torresmo para entrada"<< endl;

float e = 0.0;
int b; //Prato Principal
cout << "Prato principal" << endl;
cout << "\n1 - Língua de colibri recheada" << endl;
cout << "\n2 - Orelha de ornitorrinco flambada" << endl;
cout << "\n3 - Peito de perdiz asiático" << endl;
cout << "\n4 - Peito de perdiz asiático" << endl;

cin >> b;

if (b == 1)
e += 10.25;
cout << "\n Escolheu Língua de colibri recheada" << endl;

if (b == 2)
e += 11.40;
cout << "\n Escolheu Orelha de ornitorrinco flambada" << endl;

if (b == 3)
e += 10.00;
cout << "\n Escolheu Peito de perdiz asiático" << endl;

if (b == 4)
e += 10.00;
cout << "\n Escolheu Peito de perdiz asiático" << endl;


float f = 0.0;
int c; // Sobremesa
cout << "\n Sobremesa" << endl;
cout << "\n1 - Sorvete de brócolis" << endl;
cout << "\n2 - Torta de doce de jiló e queijo" << endl;

cin >> c;

if (c == 1)
f += 4.00;
cout << "\n Escolheu Sorvete de brócolis" << endl;

if (c == 2)
f += 5.95;
cout << "\n Escolheu Torta de doce de jiló e queijo" << endl;

float g; // Pereço total
g = d + e + f;
cout << "\n Preço total" << g << endl;

float h; // Preço total com desconto de 5%
if (g > 25);
h = g*0.05 - g;
cout << "\n Preço total com desconto de 5%" << h << endl;

cin.get();
cin.get();
return 0;
}

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
 
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:
Mais um exercicio = a mais duvidas e erros...

Desta vez o exercicio e o seguinte:

Fornecidos os lados de um triângulo (L1, L2, L3). Escrever um programa C++ que escreva se os lados formam um o triângulo e se for verificar se é equilátero, isósceles ou escaleno.
Já cheguei ao seguinte código:

/********************************************
Verificação de Triangulo
Versão: 1.0
Autor: Nuno Santos
Data de Desenvolvimento: 12 de Abril de 2009
Erros: Triangulo Isosceles e Rectangulo dão o mesmo resultado
*********************************************/

#include <iostream>
using namespace std;

int main()
{
int a; // Lado 1 do triangulo
int b; // Lado 2 do triangulo
int c; // Lado 3 do triangulo

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;

if (a + b <= c)
cout << "\n Estes lados não formam um trinagulo" << endl;
if (a + c <= b)
cout << "Estes lados não formam um trinagulo" << endl;
if (b + c <= a)
cout << "Estes lados não formam um trinagulo" << endl;


if (a == b == c)
cout << "\n Triangulo Rectangulo" << endl;

if (a == b != c)
if (b == c != a)
if (c == b != a)
cout << "\n Triangulo Isosceles" << endl;


if (a != b)
if (b != c)
if (c != a)
cout << "\n Triangulo Escaleno" << endl;


cin.get();
cin.get();
return 0;
}
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:
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:
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:

/********************************************
Verificação de Triangulo
Versão: 1.1
Autor: Nuno Santos
Data de Desenvolvimento: 12 de Abril de 2009
Erros:
*********************************************/

#include <iostream>
using namespace std;

int main()
{
int a; // Lado 1 do triangulo
int b; // Lado 2 do triangulo
int c; // Lado 3 do triangulo

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;

if (a + b <= c)
cout << "\n Estes lados não formam um trinagulo" << endl;
if (a + c <= b)
cout << "Estes lados não formam um trinagulo" << endl;
if (b + c <= a)
cout << "Estes lados não formam um trinagulo" << endl;


if ((a == b) && (b == c) && (c == a))
cout << "\n Triangulo Equilatero" << endl;


if ((a==b) && (a!=c) && (b!=c)
|| (c==b) && (a!=c) && (a!=b)
|| (a==c) && (a!=b) && (c!=b) )
cout << "\n Triangulo Isosceles" << endl;


if (a != b)
if (b != c)
if (c != a)
cout << "\n Triangulo Escaleno" << endl;


cin.get();
cin.get();
return 0;
}
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:
Back
Topo