segunda-feira, 25 de agosto de 2014

2014/2: OdA: Java nio Exemplo 1

package br.pit.oda.arquivos.java;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class NioExample {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String s = "Bom dia a todos!\n";
        byte data[] = s.getBytes(); // converte o String para bytes
        ByteBuffer out = ByteBuffer.wrap(data); // cria um buffer de bytes

        ByteBuffer copy = ByteBuffer.allocate(12); // cria um novo buffer de bytes

        Path path = Paths.get("/temp/teste.txt"); // criar um caminho para um arquivo

        FileChannel fc = null;
        try {
            // abre um canal de arquivo
            fc = (FileChannel.open(path, StandardOpenOption.READ, StandardOpenOption.WRITE));
            int nread;
            do {
                nread = fc.read(copy); // lendo 12 bytes do arquivo
            } while ((nread != -1) && copy.hasRemaining());

            // escrevendo a frase no início do arquivo
            fc.position(0);
            while (out.hasRemaining()) {
                fc.write(out);
            }
            out.rewind(); // rebobinando o buffer

            // movendo para o fim do arquivo
            // copiando os 12 primeiros bytes no fim do arquivo
            long length = fc.size();
            fc.position(length - 1);
            copy.flip(); // inverte o buffer de bytes
            while (copy.hasRemaining()) {
                fc.write(copy);
            }
            while (out.hasRemaining()) {
                fc.write(out);
            }
            fc.close();
        } catch (IOException x) {
            System.out.println("I/O Exception: " + x);
        }
    }
}

2014/2: OdA: RandomAccessFile: Exemplo 1

package br.pit.oda.arquivos.java;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFile03 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            // create a new RandomAccessFile with filename test
            RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");

            // write something in the file
            raf.writeUTF("Hello World");

            // set the file pointer at 0 position
            raf.seek(0);

            // print the line
            System.out.println("" + raf.readLine());

            // set the file pointer at 0 position
            raf.seek(0);

            // write something in the file
            raf.writeUTF("This is an example \n Hello World");

            raf.seek(0);
            // print the line
            System.out.println("" + raf.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

sexta-feira, 16 de maio de 2014

2014/1: PA: Árvore digital em Java

package pa.arvore.digital01;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author aluno
 */
public class NoArvoreDigital {
    
    char caractere;
    List<NoArvoreDigital> nos;
    
    // construtor
    public NoArvoreDigital(char a)
    {
        this.caractere = a;
        nos = new ArrayList<NoArvoreDigital>();
    }
    
    // inserir palavra
    public boolean inserirPalavra(String palavra)
    {    // 1) obter a primeira letra
        if (palavra.length() == 0)
            return true;
        char letra = palavra.charAt(0);        
        if (palavra.length() > 1)
            palavra = palavra.substring(1);
        else
            palavra = "";
        // 2) verificar se a letra existe na arvore
        NoArvoreDigital no = obterNo(letra);
        if (no != null){// 3) Se ela existir
        // 3.1) obter o no correspondente                
        // 3.2) inserir o resto da palavra neste no
            return no.inserirPalavra(palavra);
        } else {  // 4) Se ela nao existir
        // 4.1) criar um novo nó com o caractere corrente                
            no = new NoArvoreDigital(letra);
            nos.add(no); // 4.2) Adicionar o no na lista de nos
        // 4.3) inserir o resto da palavra neste no
            return no.inserirPalavra(palavra);
        }       
    }
    
    public NoArvoreDigital obterNo(char letra)
    {
        for (NoArvoreDigital no: nos)
        {
            if (no.caractere == letra)
                return no;
        }
        return null;
    }

    @Override
    public String toString() {
        
        return "[" + caractere +"] -> " + 
                nos.toString();
    }
    
    // metodo que verifica se a palavra existe dentro da
    // arvore digital
    public boolean existe(String palavra)
    {
        // 1) obter o primeiro caractere
        if (palavra.length() == 0)
            return true;
        char letra = palavra.charAt(0);
        // 2) obter o restante da palavra
        if (palavra.length() > 1)
            palavra = palavra.substring(1);
        else
            palavra = "";
        // 3) Se o caractere existir no nó
        NoArvoreDigital no = obterNo(letra);
        if (no != null){
        // 3.1) buscar no nó que contem o caractere
            return no.existe(palavra);
        } else {// 4) Senao
        // 4.1) informar que a palavra não existe      
            return false;
        }
    }
    
    public void imprimir()
    {
        for (NoArvoreDigital no:nos)
        {
            System.out.print ("["+no.caractere+"] -> ");
            no.imprimir();
            System.out.println();
        }
    }
    
}



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pa.arvore.digital01;

/**
 *
 * @author aluno
 */
public class PaArvoreDigital01 {

    /**
     * @param args the command line arguments
     */
    public static void main(String [] args)
    {
        NoArvoreDigital no = new NoArvoreDigital('*');
        no.inserirPalavra("texto");
        no.inserirPalavra("teste");
        no.inserirPalavra("casa");
        no.inserirPalavra("tomate");
        System.out.println(no);     
        no.imprimir();
        
        String palavra = "teste";
        System.out.println(palavra + "-> " + no.existe(palavra));
        palavra = "cas";
        System.out.println(palavra + "-> " + no.existe(palavra));
        palavra = "teto";
        System.out.println(palavra + "-> " + no.existe(palavra));
        
    }
    
}

quarta-feira, 14 de maio de 2014

2014-1: Algoritmos e Programação: Busca sequencial e ordenação

#include <cstdlib>
#include <iostream>
#include <time.h>

using namespace std;

void ordenarPorSelecao(unsigned short a[], int tam)
{
    int i, j, menor, aux;
    for (i = 0; i < tam; i++){
        menor = i;
        for (j = i + 1; j < tam; j++){
           if (a[j] < a[menor]) 
              menor = j;
        }
        if (menor != i){
          aux = a[menor];
          a[menor] = a[i];
          a[i] = aux;
        }
    }
cout << "Depois de ordenado: " << endl;
    for (int i = 0; i < tam; i++){
        cout << a[i] << "\t";
    }     
}

// funcao que realiza a busca sequencial
// a[]: tabela de dados
// tam: tamanho da tabela de dados
// v  : valor a ser buscado na tabela
// retorno int: posicao de v em a[] caso ele exista, 
//              -1 caso contrario
int buscaSequencial(unsigned short a[], int tam, 
unsigned short v)
{
  int pos = -1; // assumir que o elemento nao existe
  for (int c = 0; c < tam; c++){
      if (a[c] == v){
          pos = c;
          break;
      }
  }
  return pos;
}

int main(int argc, char *argv[])
{
    // Problema
    // Entrada: Um numero digitado pelo usuário e um 
    // vetor/tabela com 1M de números aleatórios
    // Saída: Informar se o número existe na tabela ou não

    // Descrição textual
    // 1) Ler do usuario um numero inteiro
    int tam = 10;
    unsigned short t[tam]; // tabela de dados
    unsigned short n; // entrada do usuario
    int c; // contador
    cout << "Digite um numero inteiro: "<< endl;
    cin >> n;
    // 2) Gerar os numeros aleatorios e armazena-los
    //    no vetor
    srand(time(NULL)); // inicializa o gerador
    for (int i = 0; i < tam; i++){
        t[i] = rand() % 65454;
    }
    // 3) Executar a busca sequencial sobre o vetor
    int r = buscaSequencial(t, tam, n);
    if (r == -1){
       cout << "Resultado não encontrado." << endl;
    } else {
      cout << "Valor encontrado na posicao " << r << endl;
    }
    
    // 4) Exibir o vetor na tela
    for (int i = 0; i < tam; i++){
        cout << t[i] << "\t";
    }
    // 5) ordenar o vetor
    ordenarPorSelecao(t, tam);
    // 6) exibir o vetor ordenado
    cout << "Depois de ordenado: " << endl;
    for (int i = 0; i < tam; i++){
        cout << t[i] << "\t";
    }    
    system("PAUSE");
    return EXIT_SUCCESS;
}

quarta-feira, 30 de abril de 2014

2014-1: Algop: Tabela de dados em memória - Exercício 2

#include <iostream>
#include <cstring>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;
int main(int argc, char** argv) {

// problema
// entrada: uma palavra digitada pelo usuario
// saida: informar a palavra invertida

// descricao textual
// 1) ler uma palavra do usuario
// 2) Calcular o tamanho da palavra
// 3) Para cada letra na frase 
//    a partir do final ( passo -1)
// 3.1) Imprime a letra

// algoritmo estruturado
// Var
char n[50];//   N: conjunto[1...20]: caractere
int c, t;  //   C, T: inteiro
// Inicio
cout << "Digite uma palavra: "<<endl;//   Escrever "Digite uma palavra: "
cin.get(n, 51);//   Ler N
t = strlen(n); //   T <- Tamanho(N)
for (c = t-1; c >=0; c--){//   Para C De T Até 1 Passo -1 Faça
 cout << n[c];//     Escrever N[C]
}//   Fim Para
cout << endl;
// Fim


return 0;
}

2014-1: Algop: Tabela de dados em memória - Exercício 1

#include <iostream>
// ProjetoTabelaDadosEx01
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

using namespace std;
int main(int argc, char** argv) {

// Problema
// Entrada: dez notas digitadas pelo usuario
// Saida: informar cada uma das notas digitadas
//        e a media

// descricao textual
// 1) Ler as 10 notas
// 2) Para cada uma das notas digitadas
// 2.1) Acumular o valor na soma
// 3) Calcular a média
// 4) Exibir as notas informadas pelo usuario
// 5) Exibir a média

// Algoritmo estruturado
// Var
int n[10]; //   N: conjunto [1...10]:inteiro
int c, s;  //   C, S: inteiro
float m;   //   M: real
// Inicio
s = 0;     //   S -> 0
for (c = 0; c<10; c++){ //   Para C De 1 Até 10 Passo 1 Faça
 cout << (c+1) << " ] - Digite uma nota: " << endl; //     Escrever "Digite uma nota: "
 cin >> n[c]; //     Ler N[C]
 s = s + n[c]; //     S <- S + N[C]
} //   Fim Para
m = s / 10.0; //   M <- S / 10
cout << "=========================" << endl;
cout << "Exibindo as notas: " << endl;
for (c = 0; c<10; c++){ //   Para C De 1 Até 10 Passo 1 Faça
 cout << n[c] << endl; //     Escrever N[C]
} //   Fim Para
cout << "Media: " << m << endl; //   Escrever "Media: " M
// Fim

return 0;
}

segunda-feira, 17 de março de 2014

2014/1 - PA - Arquivos: Exemplo em C++

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <time.h> 

using namespace std;

int main(int argc, char *argv[])
{
    // problema
    // entrada: um número inteiro digitado pelo usuário (N)
    // saída: gerar N números aleatórios e escrever estes
    // números em arquivo.
    
    int n;
    srand(time(NULL)); // inicializando o gerador de numeros aleatório
    
    cout << "Digite um numero inteiro: " << endl;    
    // 1) Ler do usuario o numero inteiro (N)
    cin >> n;

    // abrir o arquivo para escrita
    ofstream arquivo;
    arquivo.open("dados.txt");
    // testar se o arquivo foi aberto com sucesso ou nao
    if (!arquivo.is_open()){
      cout << "ERRO: nao foi possivel abrir o arquivo!" << endl;
      return EXIT_FAILURE;
    }
    int numero = 0;
    // 2) Para cada numero de 1 até N 
    for (int i = 0; i < n; i++){
      // 2.1) gerar o numero aleatório
      numero = rand() % 100;
      // 2.2) escrever o número em arquivo
      cout << i << " - Escrevendo o número " << numero << " no arquivo." << endl;
      arquivo << numero << endl;
    }
    arquivo.close();
    
    // parte 2: abrir o arquivo e calcular o seu tamanho em bytes e 
    // quantidade de números
    
    ifstream arq;
    arq.open("dados.txt");
    arq.seekg(0, ifstream::end);
    streampos tamanho = arq.tellg(); // obtendo o tamanho do arquivo
    cout << "Arquivo gerado: " << tamanho << " Bytes." << endl;
    arq.close();
    system("PAUSE");
    return EXIT_SUCCESS;
}