quinta-feira, 29 de outubro de 2015

2015/2-AED2: TAD Árvore Digital + Tabela Hash

package br.pit.aed2.arvoredigital;

import java.util.HashMap;
import java.util.Map;

public class No {
  
  char caractere; // o caractere do no  
  Map<Character, No> subnos; // o conjunto de subnos  
  boolean ehTerminal = false;
  boolean ehRaiz = false;
  int contPalavras = 0;
  
  // construtor: criar o objeto
  public No(char caractere){ // parametro caractere
 this.caractere = caractere;
 // HashMap: tabela hash (char: No)
 this.subnos = new HashMap<Character, No>();
  }
  
  @Override
public String toString() {
                    // operador ternário
 return caractere + (ehRaiz?"["+contPalavras+"]":"")+ 
 "->" + subnos.values().toString().
 replace('[', ' ').replace(']', ' '); 
 //+ " -> [" + subnos + "]";
}
  
  // inserir palavra
  public boolean inserirPalavra(String palavra){
 if (possuiPalavra(palavra)){
 System.out.println("Palavra jah existe na arvore!");
 return false;
 }
 if (palavra.length() == 0){ // se a palavra estiver vazia
 this.ehTerminal = true;
   return true; } //   retornar true (palavra inserida)
 char letra = palavra.charAt(0); // obter a primeira letra
 if (palavra.length() > 1){ // se o tamanho do restante da palavra for > 1
   palavra = palavra.substring(1);}//   atualizar a palavra (restante dos caracteres)
 else { palavra = "";} // senao deixar a palavra vazia
 No no = subnos.get(letra); // obter o no a partir da letra
 if (no == null){ // se o nó não existir
   no = new No(letra); //   criar um novo nó
   subnos.put(letra, no);//   adicionar o novo nó na lista de subnos do no corrente    
 }  
      boolean res = no.inserirPalavra(palavra);//   inserir o restante da palavra dentro do novo no
      if (ehRaiz){
     contPalavras++;
      }
      return res;
 
  }
  
  // obter no

  // existe palavra 
  public boolean possuiPalavra(String palavra){
 if (palavra.length() == 0){// se a palavra tiver tamanho zero (ACHOU!)
        return (this.ehTerminal);// retorna se o no eh terminal ou nao
 }
 char letra = palavra.charAt(0);// obter o primeiro caractere
 if (palavra.length() > 1){// se a palavra tiver tamanho superior a 1
   palavra = palavra.substring(1);//   remover a letra lida da palavra
 } else { 
 palavra = "";}// senao atualizar a palavra para vazio
 No no = subnos.get(letra);// obter o no a partir do caractere
 if (no == null){ return false;}// se o no nao existir retornar falso
 else { 
return no.possuiPalavra(palavra);}// senao verificar a palavra a partir do no encontrado
  }
  
  
}

package br.pit.aed2.arvoredigital;

public class ProgramaPrincipal {

public static void main(String[] args) {

// link No: http://pastebin.com/4cKNbn1q
// Criar uma lista de palavras para ser inserido
String [] palavras = {"casa", "coisa", "caderno", "porta"};
// criar o nó raiz da arvore digital
No raiz = new No('*'); raiz.ehRaiz = true;
System.out.println("Exibindo a AD criada: ");
System.out.println(raiz);// exibir a arvore
// inserir uma palavra de teste
System.out.println("Inserindo uma palavra: book");
raiz.inserirPalavra("book");
System.out.println(raiz);// exibir a arvore
// inserir outra palavra de teste
System.out.println("Inserindo uma palavra: table");
raiz.inserirPalavra("table");
System.out.println(raiz);// exibir a arvore
// para cada uma das palavras na lista
System.out.println("Inserindo a lista de palavras: " + palavras);
for (String p: palavras){
 raiz.inserirPalavra(p);//   inserir a palavra
 System.out.println(raiz);//   exibir a arvore
}
// exibir a arvore final
// parte 2:
// a) adicionar um contador de palavras na árvore
// b) criar um metodo para verificar se um prefixo existe na arvore
// c) criar um metodo para listar todas as palavras que contem um prefixo
// d) criar um método para excluir uma palavra da árvore
// e) criar um método para listar todas as palavras da árvore
// f) criar um metodo para encontrar a maior e menor palavras
// g) criar um método para encontrar o nó com a maior quantidade de descendentes
// h) criar um método para exibir a quantidade total de letras
// i) criar um método para exibir as palavras da árvore de forma invertida (ex. casa -> asac)
}

}

2015/2 - AED2: Árvore Digital em Groovy

Operações:
- Inserir palavra
- Buscar por nó
- remover palavra
- verificar se prefixo existe em árvore
- listar todas as palavras que possuem um prefixo

class No implements Comparable{
char caractere
def nos = [:]
def isTerminal = false
def isRoot = false
int numWords = 0
// nos.sort(it.caractere)
public String toString(){
def sb = ''<<''
if (isRoot){
sb <<= '{numWords: ' + numWords + '] ' 
}
sb <<= caractere
sb <<= " -> "
sb <<= nos
return sb
//this.properties
}

int compareTo(obj){
return caractere - obj.caractere
}

def inserirPalavra(palavra){
if (palavra.length() == 0){
isTerminal = true
return true
}
char letra = palavra[0]
if (palavra.length() > 1){
palavra = palavra.substring(1)
} else {
palavra = ""
}
def no = nos.get(letra)
if (no == null){
no = new No(caractere: letra)
nos.putAt(letra, no)
}
if (isRoot){
numWords++
}
return no.inserirPalavra(palavra)
}

def existePalavra(palavra){
if (palavra.length() == 0){
return true
}
char letra = palavra[0]
if (palavra.length()>1){
palavra = palavra.substring(1)
} else {
 palavra = ''
}
def no = obterNo(letra)
if (no != null){
return no.existePalavra(palavra)
} else {
return false
}
}

def obterNo(letra){
for (no in nos){
if (no.caractere == letra){
return no
}
}
return null
}

}

def a = new No(caractere: '*', isRoot: true)
def b = new No(caractere: 'b')
def f = new No(caractere: 'f')

println 'Arvore digital vazia'
println a

def palavra = 'casa'
a.inserirPalavra(palavra)

println 'Arvore digital com uma palavra'

println a

def palavras = ["the", "book", "table", "tablet"]
for (l in palavras){
println 'Adding word: ' + l
a.inserirPalavra(l)
}

println a

2015/2: ALP - Estruturas de Repetição: Exercício 1

Problema 1
Entrada: dois números naturais A e B informados pelo usuário
Saída: Se A for maior que B:
         Informar se A é divisível por B (A/B?)
  Senao:
    Informar todos os múltiplos de A de zero até B

Solução:
- Linguagem natural
- Pseudocodigo
- Código fonte em C

Linguagem natural
1) Solicitar do usuário dois numeros naturais (A e B)
2) Ler as duas entradas (A e B)
3) Se A for maior que B
3.1) Calcular o resto da divisão de A por B
3.2) Se o resto for zero
3.2.1) Informar que B divide A
3.3) Senão
3.3.1) Informar que B NÃO divide A
4) Senao (A é menor ou igual a B)
4.1) Para cada número de zero até B de A em A
4.1.1) Exibir o número

Ex: A=8, B=3-> testar se A é divisível por B -> não é divisivel (8 MOD 3 != 0)

Ex: A=5, B=34-> listar os multiplos de A de zero até B -> 0, 5, 10, 15 ... 30

Pseudocódigo
algoritmo "semnome"
// Função :
// Autor :
// Data : 28/10/2015
// Seção de Declarações 
var
 a, b, c, r: inteiro
inicio
// Seção de Comandos 
  escreval("Digite dois numeros naturais:")
  leia(a)
  leia(b)
  se a > b entao // a maior que b
    r <- a mod b // resto da div. de a por b
    se r = 0 entao
      escreval("B divide A")
    senao
      escreval("B NAO divide A")
    fimse
  senao // a menor ou igual a b
    para c de 0 ate B passo a faca
      escreval(c)
    fimpara
  fimse
  
fimalgoritmo


Código Fonte em C
#include <stdio.h>
#include <stdlib.h>

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

int main(int argc, char *argv[]) {

  // variaveis
  int a, b, c, r;
  // entrada
  printf("Digite dois números inteiros:");
  scanf("%d %d", &a, &b);
  // processamento
  if (a > b){
    r = a % b; // modulo
    if (r == 0){
      printf("B divide A\n");
    } else {
      printf("B NAO divide A\n");
    }
  } else{
    for (c = 0; c <= b; c = c + a){
      printf("%d\n", c);
    }
  }
  system("PAUSE");
  return 0;
}

terça-feira, 27 de outubro de 2015

2015/2 - PAA: Knapsack Usando Estratégia Gulosa (Groovy)

import static java.math.RoundingMode.*

def knapsackCont = { list, maxWeight = 15.0 ->
    for (item in list) {
        item.benefit = item.value/item.weight
        item.benefit = (item.benefit as BigDecimal).setScale(2, HALF_UP)
    }
    println 'before sort: ' + list
    list.sort{ it.weight / it.value }
    println 'after sort: ' + list
    def remainder = maxWeight
    println 'max weight: ' + maxWeight
    List sack = []
    for (item in list) {
        if (item.weight < remainder) {
            sack << [item]
        } else {
            sack << [item]
            break
        }
        remainder -= item.weight
        println 'remainder: ' + remainder
    }
    sack
}

def possibleItems = [
    [name:'green',    weight:12, value:4, benefit: 0],
    [name:'gray',    weight:1, value:2, benefit: 0],
    [name:'yellow',     weight:4, value:10, benefit: 0],
    [name:'blue', weight:2, value:2, benefit: 0],
    [name:'orange',  weight:1, value:1, benefit: 0],
]

def contents = knapsackCont(possibleItems)
println "Total Value: ${contents*.value.sum()}"
contents.each {
    printf("    name: %-7s  weight: ${it.weight}  value: ${it.value}  benefit: ${it.benefit}\n", it.name)
}


sexta-feira, 16 de outubro de 2015

2015-2 - Programação Web - Exercício com HTML5

https://jsfiddle.net/tueaanfh/

<nav>
  <a href="/html/">HTML</a> |
  <a href="/css/">CSS</a> |
  <a href="/js/">JavaScript</a> |
  <a href="/jquery/">jQuery</a>
</nav>
<article>
  <header>
    <h1>What Does WWF Do?</h1>
    <p>WWF's mission:</p>
  </header>
<figure>
  <img src="pic_mountain.jpg" alt="The Pulpit Rock" width="304" height="228">
  <figcaption>Fig1. - The Pulpit Rock, Norway.</figcaption>
</figure>    
  <p>WWF's mission is to stop the degradation of our planet's natural environment,
  and build a future in which humans live in harmony with nature.</p>
Video:     
<video width="320" height="240" controls>
  <source src="http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
      <br/><br/>
Audio: 
    <audio controls>
  <source src="http://www.w3schools.com/html/horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<br/><br/>
</article>    
<aside>
  <h4>Epcot Center</h4>
  <p>The Epcot Center is a theme park in Disney World, Florida.</p>
</aside>
    <details>
  <summary>Copyright 1999-2014.</summary>
  <p> - by Refsnes Data. All Rights Reserved.</p>
  <p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
</details>
    Youtube: 
        <iframe width="420" height="315"
src="http://www.youtube.com/embed/XGSy3_Czz8k?autoplay=1">
</iframe>

<footer>
  <p>Posted by: Hege Refsnes</p>
  <p>Contact information: <a href="mailto:someone@example.com">
  someone@example.com</a>.</p>
</footer>

quinta-feira, 1 de outubro de 2015

AED2: Eclipse (Java) Exportando e Importando Projetos do Eclipse

Como Exportar projetos Java no Eclipse

1) Selecionar o projeto no Eclipse, botão direito, Export

2) Selecionar General, Archive File
3) Selecionar o projeto a ser exportado e definir o caminho do arquivo destino ZIP


O projeto deverá ser exportado com sucesso no formato ZIP.

Como Importar projetos Java em Eclipse

1) Selecionar o projeto, botão direito, Import

2) Selecionar General, Existing Projects into Workspace:


3) Selecione o botão rádio "Select archive file", clique em Browse selecione o arquivo ZIP contendo o projeto zipado

4) Os projetos contidos no arquivo ZIPado devem aparecer na lista de projetos.

Obs: Caso o projeto já exista no Workspace do Eclipse, ele não poderá ser importado.

sexta-feira, 19 de junho de 2015

2015/1: AED2 - Notas de Aula - Programação Orientada por Objetos

Exemplo 1: Classe

class Color{
  int rgb;
}

public class Arvore{  // classe
  int tamanho; // atributo
  Color color; // atributo
  
  public Arvore(){ // construtor padrao
    this.color = green; 
  }

  public Arvore(int tam){// construtor customizado 1
    this(); // chama o construtor padrao primeiro
    this.tamanho = tam;
  }
  
  public Arvore(int tam, Color color){// construtor customizado 2
    this(tam); // chama o construtor customizado 1
    this.color = color;
  }
  
}

...
Arvore a = new Arvore();
a.tamanho = 12;

Arvore a2 = new Arvore(13);


Exemplo 2: Médico

class Medico {}

class Oftalmologista extends Medico {}

Medico m = new Oftalmologista();

Oftalmologista o = new Medico();

Oftalmologista o = new Cardiologista();

Cao c = new Tigre();


Exemplo 3: Animal

http://www.yuml.me/edit/413b7912

class Felino extends Mamifero(){

  public void miau(){
    this.miau(5);
  }
  
  public void miau(int volume){
    // miau!
  }
}

class Gato extends Felino{
}

class Leao extends Felino{
  public void miau(){
    super.miau(7);
  }  
}




quarta-feira, 3 de junho de 2015

2015-1-ALP-Qua: Lab 5.1 - Cadeias de Caracteres

#include <iostream>
#include <cstring>

using namespace std;

void buscarEmCadeia(char * str, char c){
char * pch;
pch=strchr(str,c);
    while (pch!=NULL)
    {
    cout << c << ": " << " found at " << pch-str+1 << endl;
      pch=strchr(pch+1,c);
    }
}

int main(int argc, char** argv) {
 char str[140];
  char * pch;
  cout << "Digite uma frase: " << endl;
  cin.get(str, 140);
  buscarEmCadeia(str, 'a');
  buscarEmCadeia(str, 'e');
  return 0;
}

quarta-feira, 25 de março de 2015

2015/1-ALP-Ter: Exercício 3 Para-casa

Exercício 3

Problema
Entrada: três números digitados pelo usuário
Saída: informar:
  a) a média aritmética dos três números informados
  b) o maior valor dos três informados

Solução em:
  a) descrição textual
  b) algoritmos estruturado
  c) código fonte em C++

obs: para ser feito em duplas e entregue de forma impressa na próxima aula 31/3/15

2015/1-ALP-Ter: Laboratório 01

Exercício 1

#include <cstdlib>
#include <iostream>

using namespace std;

// data: 24/3/15
// nome: waldir ribeiro
int main(int argc, char** argv) {

// problema
// entrada: nome do usuario
// saida: exibir uma frase de boas vindas com o nome

// solucao
// 1) solicitar o nome do usuario
// 2) ler a entrada do usuario
// 3) exibir a frase de boas vindas na tela com o nome

// algoritmo estruturado
// var N: caractere
char n;
// inicio
//   Escrever (Digite o seu nome:)
cout << "Digite o seu nome: ";
//   Ler N
cin >> n;
//   Escrever (Bem vindo ao C++, N)
cout << "\nBem vindo ao C++, " << n << endl;
// fim
system("pause");
return 0;
}





Exercício 2

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;
// nome: waldir ribeiro
// data: 24/3/15
int main(int argc, char** argv) {

// problema
// entrada: raio de um circulo (real)
// saida: exibir a circunferencia e a area do circulo

// solucao - descricao textual
// 1) solicitar o raio do usuario
// 2) ler o raio
// 3) calcular a circunferencia (2 PI r)
// 4) calcular a area (PI r 2)
// 5) exibir a circunferencia
// 6) exibir a area

// algoritmo estruturado
// var R, A, C: real
float r, a, c;
// const PI: 3,14158
const float PI = 3.14158;
// inicio
//   Escrever (Digite o raio do circulo:)
cout << "Digite o raio do circulo: ";
//   Ler R
cin >> r;
//   C <- 2 * PI * R
c = 2 * PI * r;
//   A <- PI * R * R
a = PI * pow(r, 2);
//   Escrever (Circunferencia: C)
cout << endl << "Circunferencia: " << c << endl;
//   Escrever (Area: A)
cout << endl << "Area: " << a << endl;
// fim
system("PAUSE");
return 0;
}

terça-feira, 24 de março de 2015

OdA: Exercícios com Arquivos

Disciplina: Organização em Arquivos
Exercícios com Arquivos


1) Problema 1 (Fácil)
Entrada: um caractere e um arquivo (nome)
Saída: informar a quantidade de vezes que o caractere ocorre no arquivo

2) Problema 2 (Fácil)
Entrada: uma palavra e um arquivo (nome)
Saída: informar a quantidade de vezes que a palavra ocorre no arquivo

3) Problema 3 (Fácil)
Entrada: dois arquivos (origem e destino)
Saída: criar uma cópia do arquivo de origem no destino

4) Problema 4 (Difícil)
Entrada: um arquivo texto contendo números separados por quebra de linha
Saída: exibir dados dos números contidos no arquivo:
- Soma total
- Média
- Maior valor
- Menor valor

5) Problema 5 (Fácil)
Entrada: um arquivo texto contendo palavras e números separados por quebra de linha
Saída: reescrever o arquivo removendo as palavras e permitindo somente números

6) Problema 6 (Médio)
Entrada: Um arquivo texto contendo campos separados por vírgula (dados pessoais)
Saída: Criar um tokenizador do arquivo criando objetos a partir dos dados em arquivo

7) Problema 7 (Fácil)
Entrada: Um arquivo contendo palavras separadas por quebra de linha
Saída: duas partes
a) Imprimir as palavras na tela em ordem alfabética
b) Escrever as palavras em ordem alfabética em arquivo

8) Problema 8 (Fácil)
Entrada: três arquivos texto
Saída: informar a quantidade de linhas que cada arquivo possui. O programa deve sempre conseguir
processar todos os arquivos, mesmo em casos de erros de leitura

9)

2015/1-OdA: Laboratório 2 - Exercícios

package br.edu.pitagoras.oda.arquivo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ProgramaExercicio1 {
  // 1) Problema 1 (Fácil)
  // Entrada: um caractere e um arquivo texto (nome)
  // Saída: informar a quantidade de vezes que
  // o caractere ocorre no arquivo

  public static void main(String[] args) {
    
  // solucao
  // 1) definir a entrada de dados: caractere e nome do arquivo
  char c = 'a';
  String nomeArquivo = "teste.txt";
  try {
    contarCharEmArquivo(c, nomeArquivo);
  } catch (FileNotFoundException e) {
    System.out.println("ERRO: arquivo " + nomeArquivo + 
        " não existe!");
    e.printStackTrace();
  } catch (IOException e) {
    System.out.println("ERRO: erro de leitura do arquivo!");
    e.printStackTrace();
  }
  }
  // casos de teste
  // 1) arquivo informado nao existe -> mensagem de erro
  // 2) arquivo vazio -> sem erros, contador zero
  // 3) arquivo com dados -> sem erros, contador com valor correto
  // 4) arquivo sem permissao para leitura - mensagem de erro

  static void contarCharEmArquivo(char c, String nomeArquivo)
      throws FileNotFoundException, IOException {
    // 2) abrir o arquivo
    InputStream is = new FileInputStream(nomeArquivo);
    // 3) Se o arquivo nao existir
    // 3.1) exibir uma mensagem de erro
    // 4) Senao
    // 4.1) Abrir o arquivo para leitura de caracteres
    InputStreamReader isr = new InputStreamReader(is);
    // 4.2) Ler o primeiro caractere
    int d = isr.read();
    int count = 0;
    // 4.3) Enquanto nao for fim de arquivo
    while (d != -1){
    //   4.3.1) Se o char lido for igual a char informado
      if (d == c){
        //   4.3.1.1) incrementar o contador de caracteres
        count++;
      }
    }
    // 4.4) Exibir a quantidade de vezes que o char ocorre
    System.out.println("Buscando pelo caractere " + c + 
        " no arquivo " + nomeArquivo + " ...");
    System.out.println("Quantidade de vezes: " + count);
    // 4.5) fechar o arquivo
    isr.close();
  }
  
  
  
  
  
  
  
  
  
  
}



package br.edu.pitagoras.oda.arquivo;

public class ProgramaExercicio2 {

  
//  2) Problema 2 (Fácil)
//  Entrada: uma palavra e um arquivo (nome)
//  Saída: informar a quantidade de vezes que a 
  //     palavra ocorre no arquivo

//  Apresentar:
  // - solução em algoritmo
  // - código fonte em Java
  // - casos de testes a serem testados
  
  //  http://www.yuml.me/8c3df1a2
  //  http://www.yuml.me/edit/8c3df1a2
  
  public static void main(String[] args) {

  }

  public static int countPalavraEmArquivo(
      String palavra, String nomeArquivo){
    // solucao
    // 1)
    return 0;
  }
  

}




package br.edu.pitagoras.oda.arquivo;

import static org.junit.Assert.*;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.junit.Test;

public class TesteProgramaExercicio1 {

  @Test
  public void testArquivoNaoExiste() {
    
    // caso de teste 1: arquivo nao existe
    char c  = 'a';
    String nomeArquivo = "blah.txt";
    ProgramaExercicio1 ex1 = new ProgramaExercicio1();
    try {
      ex1.contarCharEmArquivo(c, nomeArquivo);
      fail("Erro nao ocorreu");
    } catch (FileNotFoundException e) {
      System.out.println("Erro esperado");
    } catch (IOException e) {
      fail(e.getMessage());
      e.printStackTrace();
    } 
  }
  
  @Test
  public void testArquivoVazio(){
    
  }

  @Test
  public void testArquivoComDados(){
    
  }
}


  

2015/1-OdA: Arquivos: Exercício em sala 2015.03.16

Problema
Entrada: diretorio definido pelo usuario
Saida: informar o numero de arquivos dentro do diretorio

Solução
1) Solicitar o diretorio do usuario
2) Se o diretorio nao existir
2.1) Mostrar mensagem de erro
3) Senao
3.1) Acessar os metadados do diretorio (classe File)
3.2) Se o arquivo nao for um diretorio
3.2.1) Mostrar um erro ao usuario
3.3) Senao
3.3.1) Obter a listagem dos arquivos no diretorio
3.3.2) Exibir a quantidade de arquivos existentes

Código Fonte em Java

import java.io.*;
import java.util.*;

public class NumeroArquivos{

  public static void main(String [] args){
    Scanner sc = new Scanner(System.in);
  System.out.println("Digite um caminho de diretorio");
  String dir = sc.nextLine();
  File arq = new File(dir);
  if (!arq.exists()){
    System.out.println("ERRO: caminho nao existe");
  } else {
    if (arq.isFile()){
      System.out.println("ERRO: caminho nao eh um diretorio");
    } else {
      int num = arq.listFiles().length;
    System.out.println("Número de arquivos: " + num);
    }
  }
  }

}

Problema 2
Entrada: diretorio definido pelo usuario
Saida: informar o arquivo de maior tamanho no diretório

Código Fonte em Java

import java.io.File;
import java.util.Scanner;


public class NumeroArquivos {

  public static void main(String [] args){
      Scanner sc = new Scanner(System.in);
    System.out.println("Digite um caminho de diretorio");
    String dir = sc.nextLine();
    File arq = new File(dir);
    if (!arq.exists()){
      System.out.println("ERRO: caminho nao existe");
    } else {
      if (arq.isFile()){
        System.out.println("ERRO: caminho nao eh um diretorio");
      } else {
        File[] listFiles = arq.listFiles();
        int num = listFiles.length;
      System.out.println("Número de arquivos: " + num);
      long tam = 0;
      String maiorArquivo = null;
      for (File f: listFiles){
        System.out.println(f);
        if (f.isFile() && f.length() > tam){
          tam = f.length();
          maiorArquivo = f.getAbsolutePath();
        }
      }
      System.out.println("Maior arquivo: " + maiorArquivo);
      System.out.println(tam + " bytes");
      }
    }
    sc.close();
    }

}