Emulador de calculadora

Meu professor de matemática pediu que eu arrumasse uma calculadora para fazer os exercícios da faculdade. Tem algum programa que emule uma calculadora para PC? – Pergunta originalmente postada no Quora e que replico aqui.

Professores irão me odiar!

Olha, normalmente os professores pedem calculadoras científicas que tenham funções básicas, tipo seno, cosseno, tangente, exponenciação e mais algumas outras funções.

Há vários emuladores que podem resolver o paranauê e existem várias opções.

Se for um curso de Engenharia, talvez seja interessante considerar um emulador de calculadora mais porreta, e nessa linha eu sugiro o emulador da HP Prime Graphing Calculator, cujo print segue abaixo:

Imagem da HP Prime Graphing Calculator

Na verdade esse é um computador dedicado a fazer cálculos que inclusive é programável em Python.

O emulador dessa calculadora pode ser encontrado no site da HpCalc.org, cujo link para download da versão para PC segue abaixo:

HP Prime Virtual Calculator Emulator (64-bit) 2.1.14730 (2023-04-13)

Nota: Esse tipo de calculadora é complexa e precisa ler o manual para conseguir usar todas suas funcionalidades.

Caso queira algo mais simples, acesse o site HPCalc.org. Nesse site, você pode encontrar diversos emuladores das calculadoras da linha HP (alguns bem básicos) e centenas de programas e jogos para a linha de calculadoras HP.

Bônus:

Tem outro site, dividido em duas páginas que um serve para calcular a derivada e outro que serve para calcular a integral, cujos links seguem abaixo:

Calculadora de derivada
Calculadora de integral

Esse site em particular é uma mão na roda porque ele desmembra a resolução dos cálculos passo à passo, inclusive indicando quais regras se aplicam a cada caso.

Nessas páginas web, preste atenção às abas de configuração das integrais e derivadas, que possui vários exemplos e opções de configuração:

Aba de configuração da calculadora de derivadas
Aba de configuração da calculadora de integrais.

Vale a pena conferir essas indicações.

Publicado em 2023/Junho/02

O que você gostaria que tivessem ensinado na primeira aula sobre ponteiros?

Olha. Eu gostaria de ter aprendido as diversas maneiras de se exibir tanto o endereço de memória como o conteúdo de memória apontado por um ponteiro.

Resumindo, seria mais ou menos o código abaixo. Se faltar alguma coisa, irei adicionando.

#include <stdlib.h>
int main()
{

    char ponteiro[5]="ABCDE";

    printf("Comandos equivalentes em C\n\n");

    printf("Considerando 'char ponteiro[5]=\"ABCDE\";'\n\n");

    printf("Primeiro endereco do ponteiro:%p \n\n",ponteiro);

    printf("Primeiro conteudo de ponteiro[0]: %c\n",ponteiro[0]);
    printf("Primeiro conteudo de   *ponteiro: %c\n\n",*ponteiro);

    printf("Conteudo de ponteiro[1]  : %c\n",ponteiro[1]);
    printf("Conteudo de *(ponteiro+1): %c\n\n",*(ponteiro+1));

    printf("Endereco de memoria de (&ponteiro[1]):%p\n",(&ponteiro[1]));
    printf("Endereco de memoria de (&ponteiro+1) :%p\n\n",(ponteiro+1));

  return 0;
}

O print de tela fica assim:

Postado em 13/01/2023 por Renato de Pierri.

Do ponto de vista do hardware e da programação, o que podemos dizer sobre o conceito “tipo de dados”?

Quando consideramos o hardware do computador, o termo “tipo de dados” pode ser utilizado para classificar o tipo de informação que está contida em uma determinada célula de memória (inteiro, float, string…), sendo que esse tipo de dado é nativo do computador, ou seja, nessa abordagem, o conceito “tipo de dados”, é totalmente acoplado à arquitetura de hardware utilizada e o chamamos de tipo de dado Primário ou Primitivo conforme exemplificado abaixo:

Tipo de dados em C

Porém o conceito “tipo de dados” pode ser analisado sob uma ótica completamente diferente, desacoplando o seu significado das limitações impostas pelo hardware de uma arquitetura e aproximando esse conceito da função que deve ser executada.

Ao abstrairmos da arquitetura de hardware o conceito de “tipo de dados”, exemplificando, em uma operação de soma de dois inteiros, deixa de ser necessário descer ao nível de hardware e bits a fim de se conhecer detalhadamente o mecanismo empregado pelo computador para obter o resultado dessa soma.

Nesse caso utilizamos o hardware do computador para representar os inteiros e representar a execução da operação de soma entre esses dois inteiros, repito, sem conhecer os detalhes da implementação em hardware dessa operação.

Dissociado o tipo de dado da limitação arquitetural de hardware do computador, abre-se a possibilidade de representarmos uma quantidade ilimitada de tipos de dados e esse é o pulo do gato (jump of the cat).

Considerando abstrato o conceito “tipo de dados”, o dissociando das limitações de hardware e o empregando para definir um conjunto de definições lógicas, podemos então implementar por software esse conjunto de definições lógicas, a partir de um conjunto limitado de instruções de hardware, transcendendo as limitações do mesmo.

Estipula-se um novo tipo de dado, define-se suas características, especifica-se as operações possíveis a serem executadas nesse objeto e procede-se com a implementação em software do mesmo, a exemplo dos tipos de dados utilizados em Big Data, alguns listados abaixo:

Tipos de dados utilizados em Big Data

Fonte: TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGESNSTEIN, Moshe J.. Estruturas de Dados Usando C. São Paulo: Pearson, 2013. 884 p. ISBN 13: 978-85-346-0348-5.

Publicado em 2022/dez/14 por Renato de Pierri

Dica Linux

Vou mandar uma dica aqui para quem resolveu instalar o Linux e volta e meia apanha quando instalando alguma coisa e ou compilando um pacote. Coisa simples, que eu gostaria muito que tivesse me ensinado quando comecei a mexer com Linux.

Abra o terminal e dê o seguinte comando:

sudo apt install build-essential 
re@re-VirtualBox:~$ sudo apt install build-essential Lendo listas de pacotes... Pronto Construindo árvore de dependências        Lendo informação de estado... Pronto Os NOVOS pacotes a seguir serão instalados:   build-essential 0 pacotes atualizados, 1 pacotes novos instalados, 0 a serem removidos e 0 não atualizados. É preciso baixar 4.664 B de arquivos. Depois desta operação, 21,5 kB adicionais de espaço em disco serão usados. Obter:1 https://atl.mirrors.clouvider.net/ubuntu focal-updates/main amd64 build-essential amd64 12.8ubuntu1.1 [4.664 B] Baixados 4.664 B em 1s (4.156 B/s)           A seleccionar pacote anteriormente não seleccionado build-essential. (Lendo banco de dados ... 203071 ficheiros e directórios actualmente instalados.) A preparar para desempacotar .../build-essential_12.8ubuntu1.1_amd64.deb ... A descompactar build-essential (12.8ubuntu1.1) ... Configurando build-essential (12.8ubuntu1.1) ... re@re-VirtualBox:~$
Instalando o pacote build-essential

O comando acima instala um conjunto de pacotes chamado “build-essentials”, que são um conjunto de pacotes necessários para compilar softwares no Linux.

Esse comando instala automaticamente o depurador GNU, os compiladores g++/GNU e mais algumas ferramentas e bibliotecas necessárias para compilar um programa.

Ao instalar os pacotes build-essential, alguns outros pacotes como G++, dpkg-dev, GCC e make, etc. também são instalados em seu sistema.

Não resolve tudo, mas na prática ter esse conjunto de ferramentas ajuda e muito na instalação de pacotes e eu considero uma boa pedida o ter instalado no sistema.

Autor: Renato de Pierri.
Publicado em 24/08/2022.

Qual é a diferença entre Heap e Stack?

Pergunta originalmente respondida no QUORA em 03/07/2019

Definição de Heap:

Heap é uma árvore binária com chaves em seus nós (uma chave por nó) conforme a seguir:

Ela é essencialmente completa, ou seja, todos os seus níveis são completos menos o último nível, onde somente a chave mais à direita pode eventualmente estar faltando.

*A chave de cada nó pai (acima) é maior ou igual à chave filho (que vem abaixo).

Observe: Os elementos de uma heap são ordenados de cima para baixo (junto com qualquer caminho abaixo de sua raiz), porém eles não são ordenados da esquerda para a direita.

Algumas propriedades de uma heap:

  • Dado n, há uma única árvore binária com n nós que é essencialmente completa com h=[log2n]
  • .
  • A raiz contém o maior valor chave
  • Uma sub árvore extraída de qualquer nó de uma heap também é uma heap
  • Uma heap pode ser representada como um array.

Fonte da definição de uma heap: https://cs.winona.edu/lin/cs440/…


Definição de Stack:

Stack ou pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados itens um uma extremidade chamada topo da pilha.

Ao contrário do vetor, a definição de pilha abrange a inserção e remoção de itens o que a faz um objeto dinâmico, mutável.

Por definição somente uma extremidade é designada como topo da pilha. Novos itens podem ser adicionados no topo da pilha, consequentemente deslocando o topo da pilha para cima e os itens que estão no topo da pilha podem ser removidos, consequentemente deslocando o topo da pilha para baixo.

O topo da pilha é a extremidade em que os dados são inseridos e retirados da pilha e por essa razão uma pilha também é chamada de LIFO, last in first out, último a entrar, primeiro a sair.

A pilha, computacionalmente, sempre é vista pelo topo, de cima para baixo (somente pode-se observar o topo da pilha), embora para explicar seu funcionamento a pilha seja exibida em perfil.

Para acessar o último elemento de uma pilha é necessário desempilhar os elementos que estiverem por cima do último elemento para poder acessá-lo, conforme imagem abaixo (clique para ampliar).

Fonte da difinição de stack: TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGESNSTEIN, Moshe J.. Estruturas de Dados Usando C. São Paulo: Pearson, 2013. 884 p. ISBN 13: 978-85-346-0348-5.