quarta-feira, 27 de agosto de 2014

2014/2-ALP: Laboratório 1 Problema 3

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    // Problema:
    // Entrada: um número inteiro digitado pelo usuário
    // Saída: informar se o número é par ou impar
    
    // descricao textual
    // 1) Ler o numero inteiro do usuario
    // 2) Dividir o numero por 2
    // 3) Calcular o resto da divisao por 2
    // 4) Se o resto for zero
    // 4.1) o numero é par
    // 5) Senão
    // 5.1) o numero é impar
    
                            // ALGORITMO
    int r, q, n;            // VAR  N, Q, R: inteiro
    // INICIO
    cout << "Digite um numero inteiro:"<< endl;//   Escrever "Digite um numero:"
    cin >> n;               //   Ler N
    q = n / 2;              //   Q <- N / 2
    r = n - (q * 2);        //   R <- N - (Q * 2)
    if (r == 0){//   Se (R == 0) Então
      cout << "Numero "<<n<<" eh par!"<<endl;//     Escrever "Numero eh par!"
    }else{//   Senão
      cout << "Numero "<<n<<" eh impar!"<<endl;//     Escrever "Numero eh impar!"
    }//   Fim Se
    // FIM                
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

segunda-feira, 25 de agosto de 2014

2014/2: OdA: RandomAccessFile + java nio: Exemplo 3

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
    FileChannel inChannel = aFile.getChannel();

    ByteBuffer buf = ByteBuffer.allocate(48);

    int bytesRead = inChannel.read(buf);
    while (bytesRead != -1) {

      System.out.println("Read " + bytesRead);
      buf.flip();

      while(buf.hasRemaining()){
          System.out.print((char) buf.get());
      }

      buf.clear();
      bytesRead = inChannel.read(buf);
    }
    aFile.close();

2014/2: OdA: RandomAccessFile: Exemplo 2

package br.pit.oda.arquivos.java;

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileEx {

    static final String FILEPATH = "C:/Users/nikos7/Desktop/input.txt";

    public static void main(String[] args) {
        try {
            System.out.println(new String(readFromFile(FILEPATH, 150, 23)));
            writeToFile(FILEPATH, "JavaCodeGeeks Rocks!", 22);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static byte[] readFromFile(String filePath, int position, int size) throws IOException {

        RandomAccessFile file = new RandomAccessFile(filePath, "r");
        file.seek(position);
        byte[] bytes = new byte[size];
        file.read(bytes);
        file.close();
        return bytes;

    }

    private static void writeToFile(String filePath, String data, int position) throws IOException {

        RandomAccessFile file = new RandomAccessFile(filePath, "rw");
        file.seek(position);
        file.write(data.getBytes());
        file.close();

    }

}

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;
}