Ir ao conteúdo
  • Cadastre-se

Avaliem meu código??


newdrk

Posts recomendados

Passei a noite fazendo ele ... é um exercício que é assim:

1)

a-)Faça um algoritmo em C que calcule soma, subtração, divisão, adição de 2 números mostrando o resultado na tela.

b-)Após feita a operação, perguntar sobre um novo calculo (nova operação).

c-)Fazer uma nova operação com o resultado anterior.

Sou novo em programação.. avaliem essa bagunça que eu fiz e me falem se está bom e como eu posso otimizá-lo....


#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main()
{
double n1,n2,res = 0.0;
char op;
char op2;
char op3;
int cont = 0;
int cont2 = 1;
int cont3 = 0;

while (cont <1){
cont3 = 0;
printf("Digite o primeiro Valor \n");
scanf("%lf",&n1);
printf("Digite o segundo Valor \n");
scanf("%lf",&n2);
printf("Digite a operacao que deseja (* / + -)\n");
scanf(" %c",&op);

switch(op){
case '*':
printf("%lf * %lf = %lf\n",n1,n2,(n1*n2));
res = n1*n2;
break;
case '/':
printf("%lf / %lf = %lf\n",n1,n2,(n1/n2));
res = n1/n2;
break;
case '+':
printf("%lf + %lf = %lf",n1,n2,(n1+n2));
res = n1+n2;
break;
case '-':
printf("%lf - %lf = %lf",n1,n2,(n1-n2));
res = n1-n2;
break;
default:
printf("Operador Invalido");
cont2 = 1;
cont3 = 1;
cont = 0;
printf("\n");
system("pause");
system("cls");
}

while (cont3<1){
printf("\nDeseja fazer outra operacao? (S/N)\n");
scanf(" %c",&op2);
if ((op2=='s')||(op2=='S')){
printf("Deseja manter o resultado da ultima conta?(S/N)\n");
scanf(" %c",&op3);
if ((op3=='s')||(op3=='S')){
cont = 1;
cont2 = 0;
cont3 = 1;
system("cls");
}
else
{
cont3 = 1;
cont2 = 1;
cont = 0;
system("cls");
}
}
else
{
cont = 1;
cont2 = 1;
cont3 = 1;
system("pause");
}

while (cont2<1){

printf("\nO primeiro valor é %lf \n",res);
printf("Digite o segundo Valor \n");
scanf("%lf",&n2);
printf("\n Digite a operacao que deseja (* / + -)\n");
scanf(" %c",&op);

switch(op){
case '*':
printf("%lf * %lf = %lf\n",res,n2,(res*n2));
res = res*n2;
cont = 1;
cont3 = 0;
cont2 = 1;
break;
case '/':
printf("%lf / %lf = %lf\n",res,n2,(res/n2));
res = res/n2;
cont = 1;
cont3 = 0;
cont2 = 1;
break;
case '+':
printf("%lf + %lf = %lf\n",res,n2,(res+n2));
res = res+n2;
cont = 1;
cont3 = 0;
cont2 = 1;
break;
case '-':
printf("%lf - %lf = %lf\n",res,n2,(res-n2));
res = res-n2;
cont = 1;
cont3 = 0;
cont2 = 1;
break;
default:
printf("Operador Invalido");
cont2 = 0;
cont3 = 1;
cont = 1;
printf("\n");
system("pause");
system("cls");
}
}
}
}
}

Link para o comentário
Compartilhar em outros sites

Fiz uma parte do seu exercicio com metodos

#include <stdio.h>
#include <stdlib.h>

void ReadDouble(char *str, double *result)
{
printf(str);

while (!scanf("%lf", result))
{
printf("Dado Informado Erroneamente, %s", str);
fflush(stdin);
}

fflush(stdin);
}

void ReadOperator(char *str, char *result)
{
printf(str);

while (scanf("%c", result))
{
if (result[0] == '+' || result[0] == '-' || result[0] == '*' || result[0] == '/')
{
break;
}
printf("Dado Informado Erroneamente, %s", str);
fflush(stdin);
}

fflush(stdin);
}

double Calc(double d1, char op, double d2)
{
switch (op)
{
case '+':
return d1 + d2;
case '-':
return d1 - d2;
case '*':
return d1 * d2;
case '/':
return d1 / d2;
}
}

int main()
{
double d1;
ReadDouble("Entre com um Double: ", &d1);

char c;
ReadOperator("Entre com um o operador [ + - * / ]: ", &c);

double d2;
ReadDouble("Entre com um Double: ", &d2);

double resultado = Calc(d1, c, d2);
printf("Resuldado: %lf\n", resultado);

system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

pelo que eu vi ali voce fez a operação la em cima e colocou o nome dela lá em baixo pra iniciar?

é basicamente isso????

Sim, veja que o metodo ReadDouble é seguro, tente passar um valor errado nele, ele fica informando o erro, o ReadOperator também faz isso até que você passe um valor valido.

Link para o comentário
Compartilhar em outros sites

na verdade, isso ele fez "antes"


void ReadOperator(char *str, char *result)
{
printf(str);

while (scanf("%c", result))
{
if (result[0] == '+' || result[0] == '-' || result[0] == '*' || result[0] == '/')
{
break;
}
printf("Dado Informado Erroneamente, %s", str);
fflush(stdin);
}

fflush(stdin);
}

ao que entendi, caso não seja +, -, * ou / o programa vai dar a msg de erro...

mas de um modo geral (sendo que não testei o código pra confirmar isso, e nem posso agora =/) eu diria que daria pra fazer um "get". caso o cara tenha digitado abobrinha e alguns numeros o programa catar os primeiros numeros encontrados e passar pra operação, mesma coisa com a operação no caso do cara ter feito um teste do genero..

Link para o comentário
Compartilhar em outros sites

você pode atentar um pouco pra identação e não tenha pena nas quebras de linha.

dê enter mesmo, fica mais organizado.

Existem costumes e existem regras.

Em C/C++ é um costume usar em funções/condicionais/etc os {} assim:

int funcao ()

{

codigo

}

Já em java Java, Perl etc se usa assim

String function(){

codigo

}

Mas são costumes, não regras.

Mas é sempre bom seguir o que a maioria faz, ajuda quando os outros vão ler seus códigos...dói no meu peito ver

while(...){

...

}

em C

Em Java ok :D

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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