tenho uma duvida sobre meu código por favor poderiam me ajudar e orientar.

1. tenho uma duvida sobre meu código por favor poderiam me ajudar e orientar.

joão da silva perez
novatoemc

(usa Outra)

Enviado em 17/03/2021 - 21:27h

olá a todos desta comunidade eu sou novato e estou me aventurando na linguagem c++ e nessa jornada me deparei com um erro que não consigo resolver não sei muito se e um erro de sintaxe ou algo parecido vou colocar o código que eu fiz espero que possam esclarecer minhas duvidas e ate me avaliar meu código e aceito criticas sobre meu código assim podendo me tonar um programador no futuro mais eficiente obrigado a todos pela atenção.

questão que estou tentando resolver e esse :

Reescreva o programa do exercício 1-) criando uma função para cada operação, que recebe dois números como parâmetros, realiza a operação e imprimi no console o resultado dentro da mesma. Chame cada uma delas dentro da função main(). Obs: das duas maneiras, com e sem função, as operações de divisão ( / ) e de módulo ( % ) devem verificar se o número que irá ser o divisor é zero. Se for, a operação deve exibir a frase “Erro, divisão por zero”.

#include <iostream>

using namespace std;


int soma (int *n1, int *n2){

int som=*n1+=*n2;

return som;
}
int Subtracao(int *n1, int *n2){

int subtra=*n1-=*n2;

return subtra;
}
int multiplicacao(int *n1, int *n2){

int multi=*n1 *= *n2;

return multi;
}
int divisao(int *n1, int *n2){

int div=*n1/=*n2;

return div;
}
int modulo(int *n1, int *n2){

int mod=*n1%*n2;

return mod;
}



int main(){

setlocale(LC_ALL,"Portuguese_Brazil");

int n1;
int n2;


cout << "Digite o primeiro número para a operação:"<< endl;
cin >> n1;

cout <<"Digite o segundo número:"<< endl;
cin >> n2;



int s = soma(&n1,&n2);
int su = Subtracao(&n1, &n2);
int m = multiplicacao(&n1,&n2);



int d = divisao(&n1,&n2);
int mo = modulo(&n1,&n2);

cout << "soma : " << s << endl;

cout << "Subtração: "<< su << endl;

cout << "Multiplicação: "<< m <<endl;


if (n2==0){
cout << "Divisão: Erro,divisão por zero "<< endl;
cout << "Módulo: Erro,divisão por zero "<< endl;
}else {cout << "Divisão: "<< d << endl;
cout << "Módulo: "<< mo << endl;


}



return 0;


}


obs: o erro e o seguinte quando tendo colocar 0 no n2 não aparece as operações


Digite  o primeiro número para a operação:
3
Digite o segundo número:
0

--------------------------------
Process exited after 6.26 seconds with return value 3221225620
Pressione qualquer tecla para continuar. .



  


2. Re: tenho uma duvida sobre meu código por favor poderiam me ajudar e orientar.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/03/2021 - 01:27h

Prezado NovatoEmC,

Tomei a liberdade de editar sua postagem (prerrogativa de moderador, ehehe...) para incluir tags que permitem uma melhor apresentação do código fonte e da saída do programa.

Quanto ao código, as observações que considero importantes são as seguintes.

  • Eu não vi o que o “exercício 1”, mencionado no enunciado pedia. Contudo, eu notei que suas funções, além de retornar o valor da operação, também alteram os valores apontados por seus respectivos primeiros argumentos, que passam a conter o mesmo que o resultado de cada operação, com a exceção da operação de módulo. E justamente porque você não fez do mesmo modo a operação módulo, eu suspeito fortemente que nenhuma das outras deveria ter sido feita daquele modo.

  • Supondo que, de fato, você não queira alterar o valor do primeiro argumento em cada uma das funções, não vejo necessidade de você usar ponteiros como parâmetros em lugar de poder passar diretamente os valores dos argumentos. Assim sendo, em lugar de ter, por exemplo,
int soma(int *n1, int *n2){ /*...*/ }

int main(){
int x, y, result;
/*...*/
result=soma(&x, &y);
/*...*/
}
seria melhor algo como o seguinte.
int soma(int n1, int n2){ /*...*/ }

int main(){
int x, y, result;
/*...*/
result=soma(x, y); // Note: sem o operador & sobre os argumentos.
/*...*/
}

    (Mesmo que fizesse sentido passar os argumentos como ponteiros, como seus valores não são alterados dentro da função, o melhor seria usar ponteiros constantes (i.e. em lugar de “int *n1”, ter “const int *n1”). Mais ainda: como é C++, e não C, talvez fizesse ainda mais sentido usar referências (constantes, no caso) em vez de ponteiros (i.e. “const int &n1”).)

  • Você não precisa declarar variáveis locais dentro de cada função para guardar o valor da operação numa etapa, e depois retornar o valor dessas variáveis numa segunda etapa. É plenamente possível colocar a expressão diretamente como valor a ser usado pelo comando return. Por exemplo:
inline int soma(int p1, int p2){ return p1+p2; } 


  • Como já mostrado na sugestão acima, como as funções são todas muito simples, pode ser que faça sentido usar o qualificador inline, especialmente com compiladores mais antigos.

  • Nas funções de divisão e obtenção do resto, você não segue o que o enunciado pede ao dizer que deveria testar se o divisor é zero. Sendo assim, provavelmente seu programa causa uma exceção de divisão por zero. Esse, aliás, é o motivo por que você não vê o resultado de nenhuma da operações:, como você só pede para imprimir seus resultados após ter executado todas elas e a divisão por zero provoca uma falha grave, o programa é abortado antes de os imprimir.

  • Por falar em não seguir o enunciado, o modo como ele está escrito me deu a impressão de que ele manda que o resultado de cada operação seja impresso dentro de cada função.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


3. Re: tenho uma duvida sobre meu código por favor poderiam me ajudar e orientar.

joão da silva perez
novatoemc

(usa Outra)

Enviado em 18/03/2021 - 07:49h


obrigado meu caro amigo pela atenção voz me deste e pela resposta eu agradeço pela sua ajuda, e na questão em que e citado o exercício 1 e esta


) Escreva um programa em C++ que calcula todas as operações aritméticas (+, -, *, /, %) entre dois números inteiros, salvos em duas variáveis locais na função main(), e imprime no console cada resultado.





4. Re: tenho uma duvida sobre meu código por favor poderiam me ajudar e orientar.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/03/2021 - 00:37h

Sendo assim, não vejo motivo nenhum para alterar o valor do primeiro operando após cada operação, e minha suposição de que você não deve fazê-lo quando usa funções estava correta.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts