Nesta página, iremos analisar como será o funcionamento da nossa calculadora, ou seja, o que cada função irá fazer e como será o tratamento de erros, exceções e possíveis quebras de segmentação.
Baixe o o código final do programa
calculadorapronta.c.
Compile com o seguinte comando:
gcc calculadorapronta.c -o calculadora.out `pkg-config --cflags --libs gtk+-2.0`
Execute com:
./calculadora.out
E vá testando a calculadora enquanto lê esta página, para entender bem como funcionará a arquitetura do nosso programa.
As Variáveis Globais
Nosso programa terá ao todo 3 variáveis globais, sendo elas:
# double num1;
Como o próprio nome diz, será o primeiro número registrado quando a função "registrar_operador" for acionada.
# double num2;
Será o segundo número registrado quando o botão de igual for pressionado.
# char operador_final;
Será a variável de operação registrada pelo operador e usada pelo botão de igual para determinar o resultado a ser imprimido na tela.
As funções do Programa
1. "quantifica_numeros_totais": essa será a função coringa do nosso programa, será usada por todas as outras para verificar a quantidade de caracteres da entrada da calculadora.
2. "inseri_numero_na_entrada": essa função irá inserir os números de 0 a 9 e a vírgula na entrada. Ela também terá como papel bloquear o limite máximo de 8 caracteres do nosso programa, para isso chamará a função "quantifica_numeros_totais", e através de uma condicional "if", irá retornar a "main" sem fazer nada caso o próximo caractere seja o nono.
3. "registra_operador": como o próprio nome diz, ela terá como papel registrar a variável "char operador_final" com o operador que foi clicado(+-*/), registrar a variável "double num1" com o primeiro número e após isso, limpará a entrada de texto e retornará para a "main" sem fazer nada.
Ela terá ao todo, duas estruturas condicionais "if", sendo elas:
- A que verifica se o número total de caracteres é igual a zero, através da função "quantifica_numeros_totais" e se o operador for o de subtração, ela chamará a função "insere_numero_na_entrada" passando como argumento o operador. Dessa forma, nossa calculadora também terá a função de executar cálculos com números negativos.
- E caso o operador não for o de subtração e o número de caracteres for zero, a função irá apenas retornar para a "main" sem fazer nada .
4. "imprimi_resultado_na_entrada": essa função acionada pelo botão igual, terá como papel registrar a variável "double num2" com o número digitado na entrada, executar o cálculo através de um switch entre os operadores e, posteriormente, imprimir o resultado na entrada para o usuário.
Obviamente, como nas 2 funções anteriores, ela também terá uma condicional "if" para caso a quantidade de números totais na entrada seja zero, ela retornará sem fazer nada .
5. "limpa": a função "limpa" será o "resset manual" do nosso programa, ela terá como função limpar a entrada e zerar as 3 variáveis globais, todas as vezes que for acionada pelo usuário através do botão limpa.
Conexões de botões
Abaixo, verá como será feita a conexão dos 4 tipos de botões do nosso programa:
1. Botões numéricos: todos os números de 0 a 9 e a vírgula, serão diretamente conectados a função "insere_numero_na_entrada", passando como argumento um ponteiro para um elemento do vetor "char numeros" que terá todos os números a serem inseridos (o vetor será declarado internamente na função "main")
2. Botões de operadores: todos os botões de operadores (+-*/) serão conectados diretamente à função "registra_operador", e passarão como argumento um elemento do vetor "char operadores", que terá todos os operadores a serem inseridos (o vetor também será declarado internamente na função "main").
3. O botão igual: o botão igual será ligado diretamente na função "imprime_resultado_na_entrada", sem precisar passar nenhum argumento
4. O botão limpa: o botão "limpa" será ligado diretamente na função "limpa", sem precisar passar nenhum argumento .
Observe o diagrama abaixo e terá um melhor entendimento da conexão dos botões: