Ir ao conteúdo
  • Cadastre-se

C++ Algoritmo que diga se alguem é culpado ou nao de um crime


Posts recomendados

Boa noite, eu estou fazendo um algoritmo para um trabalho e queria verificar se alguém aqui poderia me ajudar, apenas vendo se esta correto, se não estaria faltando nada

qualquer ajuda eu agradeço

Requesitos:

1)Faça um programa em C++ que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são:

"Telefonou para a vítima?"

"Esteve no local do crime?"

"Mora perto da vítima?"

"Devia para a vítima?"

"Já trabalhou com a vítima?"

O programa deve no final emitir uma classificação sobre a participação da pessoa no crime. Se a pessoa responder positivamente a 2 questões ela deve ser classificada como "Suspeita", entre 3 e 4 como "Cúmplice" e 5 como "Assassino". Caso contrário, ele será classificado como "Inocente".

#include <iostream>
using namespace std;
int main(){

    int a,b,c,d,e;
    cout<<"Investigacao de assassinatos"<<endl;
    cout<<"Por Favor, Responda Sim(1) ou nao(0)"<<endl;
    cout<<"Telefonou para a vitima? ";
    cin>>a;
    cout<<"Esteve no local do crime? ";
    cin>>b;
    cout<<"Mora perto da vitima? ";
    cin>>c;
    cout<<"Devia para a vitima? ";
    cin>>d;
    cout<<"Ja trabalhou com a vitima? ";
    cin>>e;
    if (a+b+c+d+e==5){
        cout<<"assassino ";}
    if (a+b+c+d+e==4){
        cout<<"cumplice ";}
    if (a+b+c+d+e==3){
        cout<<"cumplice ";}
    if (a+b+c+d+e==2){
        cout<<"Suspeito ";}
    if (a+b+c+d+e==1){
        cout<<"Inocente ";}            
return 0;}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@AzazelD, vamos lá:

  1. As condições são mutualmente excludentes, ou seja: se uma for verdadeira, necessariamente, não tem como outra também ser, logo, deve-se utilizar o if/esse (e não um monte de if isolados);
  2. Para "cúmplice", existem dois resultados igual, então poderia colocar juntos... algo como:
    if ((a+b+c+d+e==3) || (a+b+c+d+e==4)) {
      cout<<"cumplice ";
    }
  3. Como a "soma" é sempre a mesma, crie uma variável para armazenar o resultado (em vez de ficar somando novamente para cada verificação), ex.:
    qtdSim = a+b+c+d+e;

    Daí utilizar essa variável nos if.

No aguardo.

 

adicionado 0 minutos depois

*deve-se utilizar if/else

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

#include <iostream>
using namespace std;
int main(){

    int a,b,c,d,e,pos;
    cout<<"Investigacao de assassinatos"<<endl;
    cout<<"Por Favor, Responda Sim(1) ou nao(0)"<<endl;
    cout<<"Telefonou para a vitima? ";
    cin>>a;
    if(a==1)pos+=1;
    cout<<"Esteve no local do crime? ";
    cin>>b;
    if(b==2)pos+=1;
    cout<<"Mora perto da vitima? ";
    cin>>c;
    if(c==1)pos+=1;
    cout<<"Devia para a vitima? ";
    cin>>d;
    if(d==1)pos+=1;
    cout<<"Ja trabalhou com a vitima? ";
    cin>>e;
    if(e==1)pos+=1;
    if(pos<=1) cout<<"Inocente";
    if(pos==2) cout<<"Suspeita";
    if(pos>=3&&pos<=4) cout<<"complice";
    if(pos==5) cout<<"Assassino";
}

 

adicionado 6 minutos depois

voce tambem poderia evitar usar esse tanto de variaveis a,b,c,d ,e  e usar apenas 1 para ir somando +1

adicionado 7 minutos depois

ex: int resposta,pos;

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@herbertbahia, segue:

  1. Como no código do @Brendo Washingtonn, as condições são mutualmente excludentes, logo devem-se* Use if/else;
  2. No primeiro "Suspeita" você colocou "1", onde deveria ser 2.
  3. Como está "contando" as resposta "sim", basta utilizar uma variável;
  4. Ainda por está utilizando um "contador", poderia colocar as perguntas em um laço de repetição.

*Num âmbito mais profissional, tem uma lance de "complexabilidade" que pode fazer o uso do else, não necessariamente obrigatório, mas no contexto daqui, devem sim utilizar o if/else!!! caso contrário, seria um erro de lógica... veja: é impossível um número ter 2 valores ao mesmo tempo!!!! Ao utilizar o "else", quando uma condição for verdadeira, automaticamente vai pular para o fim da estrutura (não vai verificar os próximos).

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Simon Viegas disse:

else;

qual aparte que diz que e obrigatorio uso do else

3 minutos atrás, Simon Viegas disse:

o primeiro "Suspeita" você colocou "1", onde deveria ser 2.

eu editei o codigo no mesmo segundo que postei so se nao atualizou para voce

4 minutos atrás, Simon Viegas disse:

Como está "contando" as resposta "sim", basta utilizar uma variável;

sim ja citei isso tambem

adicionado 1 minuto depois
5 minutos atrás, Simon Viegas disse:

Num âmbito mais profissional, tem uma lance de "complexabilidade" que pode fazer o uso do else, não necessariamente obrigatório, mas no contexto daqui, devem sim utilizar o if/else!!! caso contrário, seria um erro de lógica... veja: é impossível um número ter 2 valores ao mesmo tempo!!!!

concordo um pouco

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

agora eu fiz essa substituição indicadas por @Simon Viegas ,mas agora não imprime a conclução saberia o porque?

#include <iostream>
using namespace std;
int main(){

    int a,b,c,d,e;
    float qtdSim;
    qtdSim = a+b+c+d+e;
    cout<<"Investigacao de assassinatos"<<endl;
    cout<<"Por Favor, Responda Sim(1) ou nao(0)"<<endl;
    cout<<"Telefonou para a vitima? ";
    cin>>a;
    cout<<"Esteve no local do crime? ";
    cin>>b;
    cout<<"Mora perto da vitima? ";
    cin>>c;
    cout<<"Devia para a vitima? ";
    cin>>d;
    cout<<"Ja trabalhou com a vitima? ";
    cin>>e;
    if (qtdSim==5){
        cout<<"assassino ";}
    if (qtdSim==4){
        cout<<"cumplice ";}
    if (qtdSim==3){
        cout<<"cumplice ";}
    if (qtdSim==2){
        cout<<"Suspeito ";}
    if (qtdSim==1){
        cout<<"Inocente ";}            
return 0;}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

o if/else seria aplicado assim?

if (a+b+c+d+e>=5){
        cout<<"assassino ";}else
    if (a+b+c+d+e==4){
        cout<<"cumplice ";}else
    if (a+b+c+d+e==3){
        cout<<"cumplice ";}else
    if (a+b+c+d+e==2){
        cout<<"Suspeito ";}else
    if (a+b+c+d+e<=1){
        cout<<"Inocente ";} 

desculpe-me me pela minha ignorância, comecei a pouco tempo

obs: eu teria como limitar a resposta a 1 ou 0?

Link para o comentário
Compartilhar em outros sites

nao para o elsevoce deve utilizar a seguinte notação 

if (qtdSim==5){
        cout<<"assassino ";
		}
   else if (qtdSim==4){
        cout<<"cumplice ";
		}
    else if (qtdSim==3){
        cout<<"cumplice ";
		}
   else if (qtdSim==2){
        cout<<"Suspeito ";
		}
    else{
    	cout<<"Inocente ";
	}

 

adicionado 0 minutos depois

mas teria um grande problema se o usuario digitar outros numeros cairiam no else

adicionado 4 minutos depois

uma dica como o 4 e o 3 sao os mesmos poderia usar o operador ou

else if (qtdSim==4||qtdSim==3){
        cout<<"cumplice ";
		}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
19 minutos atrás, herbertbahia disse:
24 minutos atrás, Simon Viegas disse:

else;

qual aparte que diz que e obrigatorio uso do else

 

Como citado acima, se faz necessário o uso devido a ser condições mutualmente excludentes! (por uma questão didática, vamos esquecer a questão do âmbito profissional que citei).

 

No caso do "não uso do else" aí, vai literalmente modificar a lógica do algoritmo.


Tem o código:
 

33 minutos atrás, herbertbahia disse:

    if (qtdSim==5){
        cout<<"assassino ";}
    if (qtdSim==4){
        cout<<"cumplice ";}
    if (qtdSim==3){
        cout<<"cumplice ";}
    if (qtdSim==2){
        cout<<"Suspeito ";}
    if (qtdSim==1){
        cout<<"Inocente ";} 

 

Imagine o funcionamento. Deu lá 4 pontos:

- tem 5 sim como resposta?

- não, ele não é assassino.

- tem 4 sim como resposta?

- sim, ele é cúmplice.

- tem 3 sim como resposta?

- ora! já não disse que ele é cúmplice?

- tem 2 sim como resposta?

- hã? ele cúmplice meu filho

- tem 1 sim como resposta?

- aí não... tá achando que eu sou *****?

 

Entende? são literalmente verificações desnecessárias... 

 

obs.: a questão aqui não é o resultado final, ou "gasto de processamento", mas sim o entendimento dos princípios da lógica!

 

Em fim, seria como desafiar o Princípio da não-contradição . É possível uma coisa "ser" e "não ser" ao mesmo tempo? ou seja: se o programa "já sabe algo", automaticamente ele já sabe que não é os próximo (logo, não precisando verificar.

 

 

 

19 minutos atrás, herbertbahia disse:

 

24 minutos atrás, Simon Viegas disse:

Como está "contando" as resposta "sim", basta utilizar uma variável;

sim ja citei isso tambem

 

Show! Vi lá.

 

 

 

23 minutos atrás, herbertbahia disse:
cionado 1 minuto depois
27 minutos atrás, Simon Viegas disse:

Num âmbito mais profissional, tem uma lance de "complexabilidade" que pode fazer o uso do else, não necessariamente obrigatório, mas no contexto daqui, devem sim utilizar o if/else!!! caso contrário, seria um erro de lógica... veja: é impossível um número ter 2 valores ao mesmo tempo!!!!

concordo um pouco

 

Então... eu não cheguei a explicar do que se trata... mas teria algo a ver com um "cálculo de complexidade do algoritmo"... a depender de como organizar o código, a "pontuação" pode aumentar ou diminuir... em fim... mas deixe isso para lá... apenas tentem entender a questão de ser "mutualmente excludentes" e de "evitar verificações desnecessárias".

 

 

 

24 minutos atrás, Brendo Washingtonn disse:

agora eu fiz essa substituição indicadas por @Simon Viegas ,mas agora não imprime a conclução saberia o porque?

 

O problema está aqui:

24 minutos atrás, Brendo Washingtonn disse:

    float qtdSim;
    qtdSim = a+b+c+d+e;
    cout<<"Investigacao de assassinatos"<<endl;


Você está calculando antes mesmo de ter as respostas... no C, o fluxo de funcionamento é como a leitura de nós humanos: da esquerda para direita, de cima para baixo. Não existe algo como: "quando verificar o valor do qtdSim, utilize a fórmula que estipulei acima". No C, ele vai pegando o estado a cada linha... "quanto vale cada uma dessas variáveis nesse momento? valem 0? então, qtdSim vai ser igual a 0". 

 

Nesse ponto alí, qual o valor de a, b, c, de? não sei, pois (creio eu), no C as variáveis apenas "reservam um espaço na memória", mas não "inicializa o conteúdo", ou seja: pode está com um "lixo de memória"... mas em fim, vamos supor que vai estar com 0... e, principalmente: que não vai estar com as respostas das perguntas (pois elas ainda não foram feitas).

 

Apenas para calcular após ler as perguntas.

 

 

 

10 minutos atrás, herbertbahia disse:

mas teria um grande problema se o usuario digitar outros numeros cairiam no else

 

Não, é porque só colocou um else só. Seria algo como:

 

 

3 minutos atrás, isrnick disse:

if (qtdSim <= 1){
    cout<<"Inocente ";
}
else if (qtdSim == 2){
    cout<<"Suspeito ";
}
else if (qtdSim <= 4){
    cout<<"Cumplice ";
}
else {
    cout<<"Assassino ";
}

 

Apenas faltou o 3!!! Exemplo:

 

if (qtdSim <= 1){
    cout<<"Inocente ";
}
else if ((qtdSim == 2) || (qtdSim == 3)){
    cout<<"Suspeito ";
}
else if (qtdSim <= 4){
    cout<<"Cumplice ";
}
else {
    cout<<"Assassino ";
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Simon Viegas disse:

Apenas faltou o 3!!! Exemplo:

 


if (qtdSim <= 1){
    cout<<"Inocente ";
}
else if ((qtdSim == 2) || (qtdSim == 3)){
    cout<<"Suspeito ";
}
else if (qtdSim <= 4){
    cout<<"Cumplice ";
}
else {
    cout<<"Assassino ";
}

 

Não faltou não, meu código já considera o 3, segundo o enunciado para 3 ou 4 ele é Cúmplice, que é o que meu código faz.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Simon Viegas disse:

O problema está aqui:

cara, valeu!! eu não estava percebendo que tinha colocado no local errado

meu código esta assim agora, usei todas as dicas que me passadas

#include <iostream>
using namespace std;
int main(){

    int a,b,c,d,e,qtdsim;

    cout<<"Investigacao de assassinatos"<<endl;
    cout<<"Por Favor, Responda Sim(1) ou nao(0)"<<endl;
    cout<<"Telefonou para a vitima? ";
    cin>>a;
    cout<<"Esteve no local do crime? ";
    cin>>b;
    cout<<"Mora perto da vitima? ";
    cin>>c;
    cout<<"Devia para a vitima? ";
    cin>>d;
    cout<<"Ja trabalhou com a vitima? ";
    cin>>e;
    qtdsim = a+b+c+d+e;
    if (qtdsim>=5){
        cout<<"Assassino ";}
        else if (qtdsim==4||qtdsim==3){
        	cout<<"Cumplice";
		}
		else if (qtdsim==2){
			cout<<"Suspeito";
		}else if (qtdsim<=1){
			cout<<"Inocente";
		}
            
return 0;}

Eu Realmente Agradeço a todos @Simon Viegas@herbertbahia e @isrnick

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@isrnick, fiz de propósito, para ver se @Brendo Washingtonn está atendo!!!

Mentiiiiiiira... foi erro meu mesmo!!! Misturei tudo!!!! :D. É que fiquei na cabeça que seria melhor utilizar apenas o "=" e mesmo assim coloquei no lugar errado....... não vi direito. Foi mal!

 

Imaginei que seria algo assim:

if (qtdSim <= 1){
    cout<<"Inocente ";
}
else if (qtdSim == 2)){
    cout<<"Suspeito ";
}
else if (qtdSim = 3) || (qtdSim == 4){
    cout<<"Cumplice ";
}
else {
    cout<<"Assassino ";
}

@Brendo Washingtonn, veja que o 3 é para cúmplice! Obs.: o código @isrnick tem o mesmo resultado!!! tanto faz!
 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Brendo Washingtonn disse:

mas, nesse caso ele não acusaria qualquer numero abaixo de 4 como cúmplice também?

adicionado 0 minutos depois

mesmo 2, que seria Suspeito?

 

Não pois ele só testaria esse if se os ifs anteriores foram ambos falsos, é exatamente para isso que serve o else (=senão) que tem no else if, então já testou que qtdSim não é <= 1 nem ==2, logo só vai entrar nesse if se for 3 ou 4.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
4 minutos atrás, Brendo Washingtonn disse:

mas, nesse caso ele não acusaria qualquer numero abaixo de 4 como cúmplice também?

adicionado 0 minutos depois

mesmo 2, que seria Suspeito?

 

Não! pois só vai entrar nesse else se as condições anteriores forem falsas, ou seja: pelas condições que tem antes, se chegou aí é por NÃO é menor que 4.

 

Vide o "Princípio da não-contradição" que citei mais acima.

 

Dê uma pesquisa sobre as diferenças entre um conjunto de if isolados e uma estrutura com if/else. Sem o else, casa if é uma verificação isolada. Já com o else, haverá uma "amarração" entre as verificações... é como uma coisa só.




Aproveitando... 

 

Vejam esse código:

if (qtdSim <= 1){
    cout<<"Inocente ";
}
else if (qtdSim == 2)){
    cout<<"Suspeito ";
}
else if (qtdSim = 3) || (qtdSim == 4){
    cout<<"Cumplice ";
}
else {
    cout<<"Assassino ";
}

Consegue ver algo estranho aí? nele está utilizando "{}" inicialmente apenas para os if... mas no último else colocou um "{}". Ou seja: por que essa diferenciação para os outros else? para mim aí há uma "quebra de lógica" aí... explico:

 

Tem alguma diferença para execução do código? creio que não. Dificulta o entendimento do código? muito menos. Por sinal, poucos iriam reparar ou dar importância para isso.. entretanto, esse exemplo poderia considerar um pequeno/insignificante quebra de lógica para mim!! é "besta", mas seria.

 

Eu (no momento de exagero), poderia pensar que seria mais correto algo assim:

 

if (qtdSim <= 1) {
    cout<<"Inocente ";
}
else if (qtdSim == 2)){
    cout<<"Suspeito ";
}
else if (qtdSim = 3) || (qtdSim == 4){
    cout<<"Cumplice ";
}
else
    cout<<"Assassino ";

Usar "{}" apenas para os if. Ou:

 

if (qtdSim <= 1)
    cout<<"Inocente ";
else if (qtdSim == 2))
    cout<<"Suspeito ";
else if (qtdSim = 3) || (qtdSim == 4)
    cout<<"Cumplice ";
else
    cout<<"Assassino ";

Não usar "{}" para algum. Obs.: acho que não tem ";" antes do else, se for o caso, imaginem que não tem! rs. Ou:

 

if (qtdSim <= 1) {
    cout<<"Inocente ";
} else {
  if (qtdSim == 2)) {
    cout<<"Suspeito ";
  } else { 
    if (qtdSim = 3) || (qtdSim == 4) {
      cout<<"Cumplice ";
    } else {
      cout<<"Assassino ";
    }
  }    
}

Utilizando "{}" tanto para os if, tanto para os else.

 

adicionado 2 minutos depois

ADENDO: mais isso seria apenas um exagero para um pensamento lógico... utilizar {} a mais ou a menos não faz qualquer diferença na prática!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Brendo Washingtonn disse:

então em geral, não é necessário o uso de "{}"  ou se for usar, colocar em tudo?

 

Só pode deixar sem { } quando dentro do bloco só tem 1 única linha de comando, se tiver mais de 1 é obrigatório colocar o { }.

 

if (a == b) {
    c = 4 * d;
}

//é igual a:

if (a == b)
    c = 4 * d;

//e também:

if (a == b) c = 4 * d;

 

Mas não pode fazer neste caso:

if (a == b) {
    c = 4 * d;
    d++;
}

Pois:

if (a == b)
    c = 4 * d;
    d++;

//na verdade é igual a:

if (a == b) {
    c = 4 * d;
}
d++;
//Que faz algo bem diferente do original

 

 

Algumas pessoas até preferem sempre colocar { } em todos os casos só manter a consistência, mas aí é uma questão de preferência.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Complementando:

 

O C vai "relacionar" apenas UMA coisa que vem depois do if ou que vem depois do else (ou que vem depois do for, while etc)... daí, OU vai ser UM comando, OU vai ser um BLOCO...

 

Por exemplo, para colocar mais de uma instrução dentro de cada else, teria que ter as {} para os respectivos else. Ex.:

#include <iostream>

using namespace std;

int main() {
    int qtdSim = 5;    
        
    if (qtdSim <= 1) {
        cout<<"Inocente \n";
    } else {
      cout<<"Essa linha está dentro do primeiro else...\n";
      if (qtdSim == 2) {
        cout<<"Suspeito \n";
      } else { 
        cout<<"Essa linha está dentro do segundo else...\n";
        if ((qtdSim == 3) || (qtdSim == 4)) {
          cout<<"Cumplice aa\n";
        } else {
          cout<<"Essa linha está dentro do terceiro else...\n";
          cout<<"Assassino \n";
          cout<<"Essa linha está dentro do terceiro else...\n";
        }
        cout<<"Essa linha está dentro do segundo else...\n";
      }  
      cout<<"Essa linha está dentro do primeiro else...\n";
    }
}

Experimente com outros valores para o valor do qtdSim.

 

Perceba que dentro dos if só tem uma instrução, certo? logo nem precisaria de "{}". Ex.:

#include <iostream>

using namespace std;

int main() {
    int qtdSim = 5;    
        
    if (qtdSim <= 1)
        cout<<"Inocente \n";
    else {
      cout<<"Essa linha está dentro do primeiro else...\n";
      if (qtdSim == 2)
        cout<<"Suspeito \n";
      else { 
        cout<<"Essa linha está dentro do segundo else...\n";
        if ((qtdSim == 3) || (qtdSim == 4))
          cout<<"Cumplice \n";
        else {
          cout<<"Essa linha está dentro do terceiro else...\n";
          cout<<"Assassino \n";
          cout<<"Essa linha está dentro do terceiro else...\n";
        }
        cout<<"Essa linha está dentro do segundo else...\n";
      }  
      cout<<"Essa linha está dentro do primeiro else...\n";
    }
}

Vai dar no mesmo... Aí usar ou não os "{}" vai da organização. Para mim, o que tem um peso maior é seguir um padrão... ou seja: se é facultativo, ou utilizaria tudo com {}, ou não utiliza algum... mas tanto faz... deixa da forma que achar melhor (afinal, é facultativo).

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Brendo Washingtonn O fórum está aqui para tirar dúvidas, não tem nada de causar aborrecimento, pode continuar perguntando até tirar todas que tiver.

 

E sim, existe.

 

Teria que armazenar a resposta do usuário em um objeto da classe string, testar se a resposta é igual a "sim", e aí somar 1 no contador se for igual.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!