Torre de Hanoi

Publicado: janeiro 19, 2013 em Uncategorized

Olá galera, esse post mostra uma implementação feita em C utilizando a estrutura de dados do tipo Pilha,  para a solução do problema “TORRE DE HANOI”, é uma implementação um pouco grande, como vocês verão ao final da última imagem, pois mostra a quantidade de linhas de códigos que eu utilizei, no caso 514 linhas, mais enfim, o bom é que atendeu às expectativas, pelo menos espero que tenha atendido, para que esse programinha rode, é necessária a utilização de uma biblioteca chamada: conio2.c, o arquivo contendo essa biblioteca segue em anexo aqui: https://www.dropbox.com/s/rejoi197dfzx6bt/conio2.c, no mais, é só salvar na pasta include do seu compilador a conio2.c e executar o programa normalmente, desde já agradeço a todos que acessarem e testarem o programa, fico aberto a sugestões de melhorias e/ou críticas quanto ao código, até a próxima.

02

01

03

04

05

06

07

08

09

10

11

12

14

Link para o código fonte do programa:

https://www.dropbox.com/s/bhjo3swfr7up9jg/HanoiByHarlan.cpp

Anúncios

Tutorial Simple Computer Simulator

Publicado: dezembro 7, 2012 em Uncategorized

Olá pessoal,

Hoje falarei a respeito de linguagem de máquina, e para isso estarei abordando alguns conceitos e exemplos, tipo: o que é? Para que serve? Onde se encontra? E como implementar alguns programas utilizando esse tipo de linguagem? Utilizaremos para isso, um simulador chamado: Simple Computer Simulator, que nos auxiliará nos testes que serão executados aqui  nesse tutorial, bem, mais para que você  tenha um melhor entendimento, é importante acompanhar na prática, pois fica mais fácil o entendimento, já que apenas ler o tutorial, pode não  ficar tão claro quanto praticá-lo, disponibilizei aqui, o link com o site que hospeda o aplicativo que faremos uso, lembrando que, será preciso ter o plugin do java instalado no seu navegador, pelo menos no meu caso foi necessário.

Pois bem, o que é essa tal linguagem de maquina?

Para nos humanos a interação não seria completamente nada sem o alfabeto e os números certo? Mas com os computadores isso e um pouco diferente. Também chamada de “linguagem binária”, os famosos 1 e 0 é que dão origem a essa linguagem.

O computador e uma maquina que realiza uma sequencia programada de instruções, ou seja, ele executa um programa. Para que essas instruções possam ser realizadas (e aqui entra o para que servem?) elas devem ser representadas de uma forma que o computador consegue processar. Como o computador é movido a eletricidade, ele consegue detectar dois estados: ligado e desligado. Internamente o ligado é representado pelo numero 1 e o desligado pelo numero zero.

Na verdade não é bem assim, o Zero e o Um são estados relacionados com uma sutil alteração na voltagem percebida pelo computador. Fonte: Livro Introdução a Ciência da Computação, Guimarães/Lages.

Portanto o computador entende uma sequencia de 01010110011 como sendo um código pré-definido para realizar alguma operação.

Onde se encontra?

Bem, creio que a pergunta não seja exatamente onde, mais como ela se encontra? pois a linguagem de máquina está contida em instruções e variáveis totalmente codificadas em binário, sendo a codificação das instruções sempre associada a um dado processador; a sua utilização é pouco adequada para seres humanos;

E agora nosso último questionamento antes de meter a “mão na massa”, como implementar alguns programas utilizando esse tipo de linguagem? Na verdade, nós não iremos programar diretamente em Zero e Um, até por que seria algo complexo demais e muito trabalhoso, o que vamos fazer é utilizar um simulador do funcionamento dessa linguagem, mais em um nível mais alto, nossa máquina aqui se baseia na máquina de Von Neumann, onde temos nosso conjunto de instruções que serão úteis para nossa lógica na solução dos problemas, contaremos também com um único registrador acumulador, um registrador contador de programas, ou contador de instruções como queiram, um espaço para entrada e saída de dados, os espaços de memoria para alocação dos valores e comandos do programa, enfim, estarei listando todos estes detalhes mais a frente com algumas imagens, vamos la.

INSTRUÇÕES DO SIMULADOR

2

Instruções que serão utilizadas pelo programador para elaborar seus programas.

Na imagem acima temos todas as instruções que nossa suposta maquina aceita, são com essas instruções que faremos nossos programas executarem.

Ao abrir o link  que eu mencionei logo acima, você encontrará não apenas uma janela com o simulador como também suas instruções,  como essa que eu postei aqui a baixo, veja os detalhes do simulador, como por exemplo: Os locais de memória onde serão armazenados nossos dados e instruções, atente para as definições de cada parte do simulador.

TELA DO SIMPLE COMPUTER SIMULATOR

Janela

Descrição do programa.

SOMA (C = A + B)

Vamos ao nosso primeiro exemplo, executaremos uma simples SOMA do tipo ( C = A + B ) , basta clicar no vídeo abaixo e acompanhar o desenvolvimento do programa, logo abaixo o passo a passo será descrito também.

soma2

Soma

O que acontece é o seguinte:

1 – O simulador carrega o dado contido na posição de memória 97 dentro do registrador acumulador, que possui o valor 15;

2 – Agora será somado o valor contido na posição 98 ao valor que está no registrador acumulador, que resultará em 23;

3 – Depois tudo será armazenado na posição de memória 99, através do comando STORE;

4 – A instrução OUTPUT irá jogar o dado contido na posição 99 para a caixa de saída do simulador;

5 – E por último, o programa será finalizado através da instrução HALT;

Aqui em baixo, segue o link com uma animação desse procedimento.

VÍDEO

Agora iremos para um problema um pouco mais complexo, dessa vez iremos trabalhar com um programa que calcula o fatorial de um determinado número, mais antes, precisamos saber o conceito de fatorial, pois talvez, você leitor, não saiba o que é um fatorial, então vamos lá.

FATORIAL

Seja n um número natural. O fatorial de n, representado por n!, é o produto de n por seus antecessores até 1. Ou seja:

Onde 0! = 1

n! = n.(n – 1)!

Exemplos:

3! = 3.2.1 = 6

4! = 4.3.2.1 = 24

Fonte: http://www.brasilescola.com/matematica/equacao-com-fatorial.htm

Em alguma linguagem de programação, a resolução desse problema poderia ficar como eu fiz na linguagem C, exemplo:

#include <stdio.h>
#include <conio.h>

int main () {

int num, fat, n;

printf (“Escreva o numero para o calculo do fatorial: “);
scanf (“%d”, &num);

fat = 1;
for  (n = 1; n <= num; n++){
fat = fat * n;
}
printf (“\nO fatorial do numero %d e: %d”, num, fat);

getch();
}

Já no nosso simulador esta mesma implementação poderia ser vista com um outro tipo de repetição, como por exemplo, um WHILE, pois como dispomos apenas de 21 instruções, e não temos o estrutura do FOR, poderíamos utilizar o while, pois temos o JPOS, que facilitaria muito essa repetição, observe.

fat = 1;
num = a;
while  (num > 0) {
             fat = fat * num;
             num–;
}
na estrutura do simulador ficaria mais ou menos como ilustrado nesta imagem :
FATORIAL
FATORIAL
O que ocorreu ai foi o seguinte:
1 – Foi feito o LOAD da posição 98, como a tela já está com a imagem de última execução do programa, não deu pra ver, mais no início  o valor 1 era o que estava armazenado lá, essa posição será a que irá contar o resultado do fatorial;
2 – Logo depois é feito através do teclado, a solicitação do número que será calculado o fatorial, o mesmo sera armazenado na posição 99;
3 – Agora novamente carregamos a posição de memoria 98, que inicialmente estava com o valor 1, e e esse valor que ira ser multiplicado pelo nosso numero;
4 – Aqui e feita a multiplicação propriamente dita dos números;
5 – O resultado dessa multiplicação e armazenado na posição 98, pois como já mencionado, e ele que sera multiplicado pelo nosso numero, que ficara sendo decrementando;
6 – Carregados agora a posição 99, pois iremos decrementa-la em uma unidade;
7 – A subtração e feita;
8 – Armazenamos o valor dessa subtração na posição 99, pois e esse endereço que sera testado no nosso JPOS;
9 – O teste e feito, se o valor da posição 99 for maior que zero, e feito um salto na execução  retornando a posição 4 de memoria, poderíamos dizer que ai acontece o nosso loop, caso contrario, a execução segue seu curso linear e vai para a próxima instrução;
10 – Se o teste anterior, for falso, o resultado contido na posição 99 sera mostrado na nossa caixa de saída, através da instrução OUTPUT;
11 – E por ultimo e feito o encerramento do programa.
Se preferirem, segue aqui um vídeo com o passo a passo desse programa.
Acho que é isso, espero ter atendido ao solicitado, qualquer dúvida e/ou sugestão, é só comentar ai em baixo.
Obrigado!!!!

Bem vindos!

Publicado: novembro 21, 2012 em Apresentação

Olá pessoal,

Que bom que tenham acessado minha página, esse é o primeiro post no blog, espero contribuir de alguma maneira para o aprendizado de todos que acessam o blog, de início o intuito é de atender às exigências curriculares da disciplina de ARQUITETURA DE COMPUTADORES do curso de Análise e Desenvolvimento de Sistemas no Instituto Federal de Educação, Ciência e Tecnologia do Piauí – IFPI, ministrada pelo professor ERICK BAPTISTA PASSOS, no mais, espero alcançar uma certa maturidade, para que eu possa seguir com o blog,  não apenas com trabalhos referentes à disciplina como também em assuntos dos quais eu goste e ache de valor para expor a todos que venham a se tornar frequentadores desse espaço, sintam-se a vontade para comentar!

Atenciosamente,

José Arlan.