Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa

Neste guia, você aprenderá os princípios básicos de GTK, como posicionar os elementos na interface e entender a teoria de sinais. Ao longo do guia, iremos construir uma calculadora completa em C/GTK 2 com botões numéricos, entrada para texto, cálculos com valores flutuantes e negativos, múltiplos operadores e muito mais.

[ Hits: 12.620 ]

Por: Mateus Moutinho em 17/03/2020


Entendendo o Funcionamento do Programa



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:
Linux: Guia de Programação em C / GTK 2 (Construindo uma Calculadora Completa)
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Construindo a Interface - Parte 1: Criando a Janela
   3. Construindo a Interface - Parte 2: Entendendo a estrutura de tabelas
   4. Construindo a Interface - Parte 3: Redigindo o código da interface
   5. Entendendo a Teoria de Sinais GTK
   6. Entendendo o Funcionamento do Programa
   7. Conectando os Botões
   8. Construindo as Funções - Finalizando o Programa
Outros artigos deste autor

DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C

Leitura recomendada

Linguagem C - Árvores Binárias

Otimização de algoritmos

Linguagem C - Listas Duplamente Encadeadas

Tutorial SDL

Análise dos Métodos de Ordenação usados em Algoritmos Computacionais

  
Comentários
[1] Comentário enviado por fabio em 17/03/2020 - 00:10h

Ótimo trabalho, parabéns!

[2] Comentário enviado por mateusmoutinho em 17/03/2020 - 01:29h

opa muito obrigado amigo , logo menos publicarei vários conteúdos sobre programação em C e C++

[3] Comentário enviado por hiperjohn em 28/03/2020 - 19:49h

Mateus, gostei muito do tutorial. Parabéns!

Gostaria de sugerir, caso fosse possível, que vc faça um tutorial sobre como utilizar o Glade para criar a interface gráfica.

Obrigado por compartilhar seu conhecimento!

[4] Comentário enviado por mateusmoutinho em 29/03/2020 - 22:00h


[3] Comentário enviado por hiperjohn em 28/03/2020 - 19:49h

Mateus, gostei muito do tutorial. Parabéns!

Gostaria de sugerir, caso fosse possível, que vc faça um tutorial sobre como utilizar o Glade para criar a interface gráfica.

Obrigado por compartilhar seu conhecimento!


Opa amigo , futuramente posso fazer sim , mas se me permite vou dar te dar uma sugestão, o glade é um ótimo facilitador , porém com ele dificilmente você entenderá a essencia de como funciona a lógica por trás do gtk , então recomendo que para começar estude GTK puro, mas sim irei fazer tutoriais usando o glade sim

[5] Comentário enviado por matheusxreis em 23/09/2021 - 00:50h

Ufa! É extremamente difícil de encontrar bom conteúdo sobre na net. Muito feliz de ter encontrado esse guia aqui.

MUITO obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts