Ir ao conteúdo
  • Cadastre-se

Garantir que um calculo não será feito 2 vezes


Nanda Lara

Posts recomendados

Tenho um trabalho da faculdade para fazer onde pede que eu faça as deduções sobre o calculo de uma folha de pagamento de um determinado funcionário.

Minha duvida é como garantir que um calculo só será feito uma unica vez sem ser repitido usando o comando switch.

ex: Calculo de horas extra... Depois de ter feito esse calculo o programa me garante q ele não poderá ser feito novamente em hipótese nenhuma.

Obrigada!

Link para o comentário
Compartilhar em outros sites

1. Peça uma opção de calculo para o usuario e obtenha através da função scanf();

2. Use o comando switch para cada opção.


...
int opcao;
...
//peça ao usuario em um menu o calculo desejado e grave em opção
...
switch (opcao)
{
case 1:
//primeiro calculo
break;
case 2:
//segundo calculo
break;
...
default:
printf("Opção errada, Tente outra vez");
return;
}

Link para o comentário
Compartilhar em outros sites

Segue um exemplo que fiz pra você entender, não sou nenhum profissional, nem nada, deve haver formas mais simples de se fazer, desculpe qualquer erro, se tiver dúvidas, poste-as.


void main() {
//coloquei um laço infinito como exemplo pra você testar
//certamente seu programa vai ter algum laço, por se tratar de um menu
//só implementar.
while(1) {
int usouComando[8], i, opcao, escolheu = 0;
printf("Digite a opcao desejada: ");
scanf("%i", &opcao);
//lê a opcao desejada
//checa se a posição no vetor e igual a opção do usuário
//se for 1 quer dizer que ele ja escolheu
if(usouComando[opcao] == 1) {
printf("voce ja escolheu essa opcao!\n");
escolheu = 1;
//variavel recebe 1 e NÃO entrará no switch
}
//só entrará no switch se for 0
if(escolheu == 0) {
switch(opcao) {
case 1:
usouComando[opcao] = 1;
//a posicao no vetor recebera 1
//logo você não poderá usar mais.
//funções
break;
case 2:
usouComando[opcao] = 1;
//funções
break;
case 3:
usouComando[opcao] = 1;
//funções
break;
//assim sucessivamente alterando os valores do vetor respectivamente
}
}
escolheu = 0;
}
}

Link para o comentário
Compartilhar em outros sites

Segue um exemplo que fiz pra você entender, não sou nenhum profissional, nem nada, deve haver formas mais simples de se fazer, desculpe qualquer erro, se tiver dúvidas, poste-as.


void main() {
//coloquei um laço infinito como exemplo pra você testar
//certamente seu programa vai ter algum laço, por se tratar de um menu
//só implementar.
while(1) {
int usouComando[8], i, opcao, escolheu = 0;
printf("Digite a opcao desejada: ");
scanf("%i", &opcao);
//lê a opcao desejada
//checa se a posição no vetor e igual a opção do usuário
//se for 1 quer dizer que ele ja escolheu
if(usouComando[opcao] == 1) {
printf("voce ja escolheu essa opcao!\n");
escolheu = 1;
//variavel recebe 1 e NÃO entrará no switch
}
//só entrará no switch se for 0
if(escolheu == 0) {
switch(opcao) {
case 1:
usouComando[opcao] = 1;
//a posicao no vetor recebera 1
//logo você não poderá usar mais.
//funções
break;
case 2:
usouComando[opcao] = 1;
//funções
break;
case 3:
usouComando[opcao] = 1;
//funções
break;
//assim sucessivamente alterando os valores do vetor respectivamente
}
}
escolheu = 0;
}
}

Só lembrando de inciar todo o vetor em 0 pois os elementos começam com um numero aleatório na memoria que nem sempre será 0.

Link para o comentário
Compartilhar em outros sites

Alguem poderia me ajudar a achar meu erro, tda vez que digito uma opção para o calculo ele da essa opção já foi utilizada, mesmo não sendo...

/* Sistema para cálculo de folhas de pagamento*/

int main(int argc, char *argv[]){

float adcNot,salFam,dsr,falnjust,calInss,benConced,adiantSal,RE,salBruto,salHora, paghExtra,pagUmaHExtra,hTrabalhadas,hExtraTrabalhada;

float valorHTrabalhada,horasNoturna, umaHoraNot;

int calculo, registro, escolheu1=0,escolheu2 = 0,escolheu3 = 0,escolheu4 = 0,escolheu5 = 0,escolheu6 = 0,escolheu7 = 0,escolheu8 = 0,cont=0;

int jaUsouComando1=0,jaUsouComando2=0,jaUsouComando3=0,jaUsouComando4=0,jaUsouComando5=0,jaUsouComando6=0, jaUsouComando7=0,jaUsouComando8=0;

char nomeFun;

printf("Seja bem vindo ao Sistema Para Calculo de Folhas de Pagamento\n\n\n");

printf(" Digite o nome do do funcionario: ");

scanf("%s",&nomeFun);

printf("\n\n Digite o numero do Registro do Funcionario: ");

scanf("%d",&registro);

printf("\n\n Digite o salario bruto do funcionario: ");

scanf("%f",&salBruto);

do{

printf("\n\n Digite uma das opcao desejada o calculo:\n\n");

printf("Digite 1 para horas extras\n");

printf("Digite 2 para adicional noturno\n");

printf("Digite 3 para salario familia\n");

printf("Digite 4 para o DSR\n");

printf("Digite 5 para faltas nao justificadas\n");

printf("Digite 6 para calculo do INSS\n");

printf("Digite 7 para beneficios considerados\n");

printf("Digite 8 para adiantamento salarial\n");

printf("Digite 0 para o Resultado do salario liquido do funcionario\n\n");

scanf("%d",&calculo);

if(jaUsouComando1 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu1 = 1;

}

else if (jaUsouComando2 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu2 = 1;

}

else if(jaUsouComando3 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu3 = 1;

}

else if(jaUsouComando4 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu4 = 1;

}

else if(jaUsouComando5 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu5 = 1;

}

else if(jaUsouComando6 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu6 = 1;

}

else if(jaUsouComando7 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu7 = 1;

}

if(jaUsouComando8 == 1) {

printf("voce ja escolheu essa opcao!\n");

escolheu8 = 1;

}

printf("\n");

if(escolheu1 == 0 || escolheu2 == 0 ||escolheu3 == 0 ||escolheu4 == 0 ||escolheu5 == 0 ||escolheu6 == 0 ||escolheu7 == 0 ||escolheu8 == 0 ) {

switch(calculo){

case 1:

jaUsouComando1 = 1;

printf("\n\n ***HORA EXTRA***\n\n");

printf(" Digite a quantidade de horas trabalhadas no mes: ");

scanf("%f",&hTrabalhadas);

salHora= salBruto / hTrabalhadas;

pagUmaHExtra= salHora * 0.5;

printf("O pagamento de uma hora extra trabalhada é: %2.f\n\n",pagUmaHExtra);

printf("Digite a quantidade de horas extras trabalhadas: ");

scanf("%f",&hExtraTrabalhada);

paghExtra= pagUmaHExtra * hExtraTrabalhada;

printf("\n\n O valor a ser pago pelas horas extra trabalhada é: %.2f\n\n\n",paghExtra);

break;

case 2:

jaUsouComando2 = 1;

printf(" ***ADICIONAL NOTURNO***\n\n\n ");

printf("Digite o valor pago por hora trabalhada: ");

scanf("%f",&valorHTrabalhada);

printf("\n\n Digite a quantidade de horas noturna trabalhadas: ");

scanf("%f",&horasNoturna);

umaHoraNot = horasNoturna * 0.2;

printf("\n\n O valor a ser pago por uma hora noturna é de : %.2f",umaHoraNot);

break;

case 0:

default:

printf("\ Opcao Invalida!!!\n");

printf("\n Digite uma das opções do Menu!!!\n");

getch();

system("cls");

cont--;

}

}

cont++;

escolheu1 = 1;

escolheu2 = 1;

escolheu3 = 1;

escolheu4 = 1;

escolheu5 = 1;

escolheu6 = 1;

escolheu7 = 1;

escolheu8 = 1;

}

while(calculo);

printf("\n\n O senhor(a) %s",nomeFun);

return 0;

}

Link para o comentário
Compartilhar em outros sites

Olá Nanda, o problema esta nos primeiros ifs


if(jaUsouComando1 == 1) {
printf("voce ja escolheu essa opcao!\n");
escolheu1 = 1;
}
else if (jaUsouComando2 == 1) {
printf("voce ja escolheu essa opcao!\n");
escolheu2 = 1;
}
ETC.......

Vejamos, o código percorrerá todos esses ifs por primeiro, e obviamente, ele encontrará algum com o valor 1 e mandará a mensagem.

O seu código ficou um pouco confuso, você pode simplesmente checar se ele já escolheu no próprio SWITCH ! Veja como:


scanf("%d",&calculo);
printf("\n");
switch(calculo){
case 1:
if(jaUsouComando1 == 1) {
printf("voce ja digitou essa opcao campeao");
break;
} else {
jaUsouComando1 = 1;
//resto das funções........
break;
}
case 2:
if(jaUsouComando1 == 2) {
printf("voce ja digitou essa opcao campeao");
break;
} else {
jaUsouComando1 = 2;
//resto das funções........
break;
}
}

Se não entendeu algo, avise, ficou um pouco confuso, mas é só uma questão de lógica, abraços.

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