Mostrando postagens com marcador Representação. Mostrar todas as postagens
Mostrando postagens com marcador Representação. Mostrar todas as postagens

sexta-feira, 12 de junho de 2015

Ler arquivo texto com e sem definição do conjunto de caracteres

01 import java.io.*;
02 import java.nio.charset.*;
03 
04 public class Dump {
05    public static void main (String[] args) throws IOException {
06       FileInputStream fis;
07       try {
08          fis = new FileInputStream("t.txt");
09       } catch (FileNotFoundException e) {
10          System.out.println ("Arquivo t.txt nao encontrado.");
11          // se não encontrou então não abriu.
12          return;
13       }
14       InputStreamReader input = new InputStreamReader (fis, StandardCharsets.UTF_8); // decodifica para utf-8
15       //InputStreamReader input = new InputStreamReader (fis);
16       /*https://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html*/
17       /*http://en.wikipedia.org/wiki/UTF-8*/
18       int c;
19       try {
20          do {
21             c=input.read();
22             System.out.println (c);
23          } while (c>=0);
24       } catch (IOException e) {
25          System.out.println (e.getMessage());
26       } finally {
27          input.close();
28       }
29    }
30 } /*para ver o Ã§ e o Ã£*/
Java2html

quarta-feira, 27 de maio de 2015

Array na memória

1 class TestaArray {
2    public static void main (String[] args){
3       int[] arr;
4       arr= new int[10];
5       arr[5]=5;
6    }
7 }
Java2html




Sobre memória

O hardware e instruções para gerenciamento de memória em processadores Intel Core pode ser visto no capítulo 3 do manual do processador:
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html

A forma como a memória física é usada por Windows e por Linux pode ser vista em:
http://blog.codinghorror.com/dude-wheres-my-4-gigabytes-of-ram/
http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map/
(não encontrei referências no site da Microsoft ou do Linux... a maioria das referências que visitei concordam com as apresentadas)

Agora aumenta a importância do post para nós:

O sistema operacional gerencia a memória física (inclui RAM, HD, swap,...) e quando carrega o executável em memória para que seja executado, expõe aos programas um mapeamento da memória física (que é o espaço de endereçamento virtual):

http://stackoverflow.com/questions/2048007/linux-ia-32-memory-model
http://www.linuxjournal.com/article/4681
http://www.linuxjournal.com/article/6701?page=0,0
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Em especial o exemplo relativo a figura abaixo é bastante ilustrativo do que explico sobre onde (no espaço de endereçamento virtual) ficam armazenados o programa, os literais e as variáveis (estáticas, tipos primitivos e objetos (tipos abstratos)) em aula.

http://static.duartes.org/img/blogPosts/mappingBinaryImage.png

Agora é totalmente nosso território!!!:

Em especial, quando criamos arrays com new e com referência atribuída a uma variável estática, a variável fica no "segmento" de dados e os elementos do array fica no heap.

No escopo de ACH2001 o interesse maior é com a alocação de variáveis (objetos) em memória, geralmente sem preocupação sobre sua localização exata ("segmento" de código, de dados, pilha (stack), heap,...). É suficiente considerar a memória um espaço de armazenamento com endereços.

Relembrando (o pouco que) sabemos sobre compiladores, os identificadores são necessários para facilitar o trabalho do programador. Compiladores substituem identificadores por (algum tipo de) endereço de memória, é suficiente para o programa operar corretamente. Assim, em representações de memória, o identificador é colocado como um rótulo dado a uma posição de memória.

 

quarta-feira, 18 de março de 2015

0.0.0.11.5.0.1 - Código do exemplo, gerado por ArgoUML

Código gerado a partir do diagrama usando ArgoUML, com indentação ajustada por Indent by Fold e visualização html gerada por j2html
01 public class Mesa {
02     public int altura;
03     public int largura;
04     public int profundidade;
05     public int maxPeso;
06     public int maxCarga;
07     public boolean cabe(int locAltura, int locLargura, int locProfundidade) {
08         return false;
09     }
10     
11     public boolean suporta(int carga) {
12         return false;
13     }
14     
15     public Mesa(int altura, int largura, int comprimento, int maxPeso, int maxCarga) {
16     }
17     
18 }
Java2html indent by fold

0.0.0.11.5.0 - Exemplo de classe

O diagrama para uma classe:





A classe é pública (+) chama-se Mesa.
Tem os atributos (+) públicos, todos de tipo int, com nomes altura, largura, profundidade, maxPeso e maxCarga.
Tem os métodos cabe, que recebe três argumentos de tipo int e retorna um boolean; suporta, que recebe um argumento de tipo boolean e retorna um boolean e um construtor (estereótipo <<create>>).
(o diagrama foi feito usando ArgoUML).

sexta-feira, 6 de março de 2015

0.0.0.17.1.2 - Bases Numéricas


A URL acessa um pdf que escrevi sobre bases numéricas.
https://drive.google.com/file/d/0B2aucTjhMlIVYlhWVE4tYjV1cWM/view?usp=sharing

Entendi que a necessidade surgiu de um argumento similar a:

"
Ok, sei que o computador chaveia sinais elétricos e que posso associar a passagem de corrente (ou existência de tensão ou a chave ligada) ao símbolo 1 (um) e a não passagem ao símbolo 0 (zero). Isto serve para representar um dígito binário (bit)*.
Também que as chaves podem ser miniaturizadas de forma que milhões caibam em um chip de poucos milímetros quadrados.
Também sei que dígitos podem ser enfileirados e que nos números a que estou acostumado, isso aumenta a quantidade de números que posso representar (escrever)
MAS qual a correspondência entre uma fileira de bits e o número a que estou acostumado?
"
a resposta curta: o número a que você está acostumado é fileira de dígitos na base decimal. A fileira de bits é um número na base binária. Falta entender como bases numéricas funcionam e como converter de uma para outra. É o que está no PDF.


*dígito é uma posição que pode conter um símbolo.
*Um dígito que pode conter um de dois símbolos é um dígito binário.
*Um dígito que pode conter um de dez símbolos é um dígito decimal.
*A convenção de representação de números decimais a que estamos acostumados diz que um dígito pode conter um dos símbolos do conjunto {0 1 2 3 4 5 6 7 8 9}

0.7 - Grafos

Este post é sobre a piada das árvores em computação crescerem de cima para baixo...
Relaciona-se aos temas "tipos abstratos de dados", "arrays" e "matrizes" do conteúdo de ACH2001. O conteúdo deste post será melhorado aos poucos.

Grafos são trincas G=(V,A,f) onde V é um conjunto de vértices ou nós (são os pontos da figura), A é um conjunto de arcos, ou arestas (são as linhas das figuras) cada extremidade da aresta incide em um único vértice, então arestas ligam dois vértices. f é uma função que informa como essa ligação é feita.

Passeio em um grafo é uma sequencia alternante de vértices e arestas iniciada e terminada em vértices.

Caminho em um grafo é uma sequencia alternante de vértices e arestas iniciada e terminada em vértices Sem repetição.

Circuito em um grafo é um caminho que inicia e termina no mesmo vértice.

Árvores são grafos acíclicos.

Qualquer vértice de uma árvore pode ser raiz (imagine que o grafo é um conjunto de bolas e que as arestas são fios ligando as bolas. Escolha qualquer bola, segure e levante-a - as outras sobem puxadas pelas arestas, no formato de árvore com raiz.

O que informa a necessidade de escolher um vértice como raiz e qual é ele é o uso que faremos da árvore.