Ir ao conteúdo
  • Cadastre-se
Nanda Lara

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

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples, crie uma variável.


int jaUsouComando = 0;

Ao usar o comando a variável recebe 1, depois é só comparar o valor e dizer se ele já usou.


if(jaUsouComando == 1) {
//ação
}

Creio que seja isso que você quer, abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo assim o codigo me pede pra digitar novamente o mesmo calculo...

Poderia me mostrar como ficaria a estrutura usando o comando if e o comando switch.... Tenho neste caso 8 opções de calculo... E só posso usar cada um uma unica vez... como ficaria.

Obrigada!

Compartilhar este post


Link para o post
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;
}

Compartilhar este post


Link para o post
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;
}
}

  • Curtir 1

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria como eu usar esse código sem declarar usouComando[8], apenas como uma variavel sem vetor? Pois nesse caso foi especificado que não poderia fazer o uso de vetores...

Compartilhar este post


Link para o post
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;

}

Compartilhar este post


Link para o post
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.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×