Samuel Nassif Posted April 19, 2021 Posted April 19, 2021 Olá pessoal, preciso de uma ajuda imensa. Só sei o básico do básico em C e preciso de um algoritmo que me retorne o valor de quantas vezes uma outra variável alterou seu valor durante uma determinada condição. Eu tenho as variáveis A e B do tipo Int; B está sempre alterando seu valor; Quando A for verdadeira começo a contar quantas vezes B muda de valor; Por exemplo: Suponhamos que o valor inicial de B é 10.; Quando A torna-se verdadeiro eu começo a contar quantas vezes B muda de valor. Se por exemplo, B alterar seu valor para 9,8,7,6,5 deverei saber que foram 5 mudanças. Quando A for falso devo zerar esse contador. Alguma idéia? Desde já agradeço a ajuda.
Felipe.Silva Posted April 20, 2021 Posted April 20, 2021 Na programação orientada a objetos existe o conceito de encapsulamento, que resumidamente é o conceito de não alterar uma variável diretamente mas sim usando uma função. Isso faz com que a variável fique "encapsulada" dentro do objeto e permite que qualquer lógica seja aplicada na alteração daquela variável. E é exatamente o que você quer fazer... Toda vez que as variáveis A e B são alteradas existe uma certa lógica ocorrendo com elas, não é? Então eu sugeriria você colocar tudo dentro de uma struct e implementar funções para modificar os valores de A e B. Tipo assim: struct var { bool mode; // A int value; // B int counter; }; void var_mode(struct var *variable, bool mode) { // etc... } void var_value(struct var *variable, int value) { // etc... }
Samuel Nassif Posted April 20, 2021 Author Posted April 20, 2021 Obrigado pela dica Felipe. No meu caso essa variável B seria a posição de TAP de um transformador, que sempre está alterando o seu valor. Não sei que tipo de função usar para monitorar quantas vezes esse TAP mudou de valor.
mayco souza berghetti Posted May 3, 2021 Posted May 3, 2021 Poderia ser algo assim. extern int a, b; int old, counter; old = b; counter = 0; if (a && b != old) { counter++; old = b; }
Recommended Posts
Archived
This topic is now archived and is closed to further replies.