• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JML

Ajuda Trabalho para a escola

15 mensagens neste tópico

Boas a todos!

Tenho um trabalho para ProgramaçãoI, em Java, e tenho algumas duvidas de como o resolver, se fosse possivel alguém me ajudar...

O trabalho é:

Pretende-se um programa que simule um editor de texto dos antigos, isto é, primeiro escreve-se o

texto e só depois é que ele é formatado.

O programa em questão deve ir lendo parágrafos, até um máximo de 5 ou até ser introduzido um

parágrafo vazio. Depois pergunta qual o alinhamento pretendido: centrado, esquerda ou direita.

O passo seguinte é pré-processar o texto eliminando todos os espaços em branco repetidos e no

início e fim dos parágrafos.

De seguida deve-se apresentar o texto formatado, assumindo-se que cada linha tem 80 caracteres

(ter em conta que uma futura alteração deste valor deverá ser feita num só local). Cada linha deve

ter por limites o sinal | e um espaço, isto é, cada linha deve começar com o “| “e terminada com “ |”.

Estes caracteres não contam para o tamanho da linha.

No final deve apresentar as seguintes estatísticas: número de parágrafos, número de linhas por

parágrafo, número de palavras por parágrafo e quantas linhas e palavras tem o texto no total.

Nas formatações, quando uma palavra não cabe numa linha deve passar para a linha seguinte.

Neste momento as minhas grandes dúvidas são:

->Alinhar o texto à direita, centro e esquerda ( sem ser com métodos, e sem printf)

->Quando o texto introduzido está em branco como fazer para passar para o fim do programa

->Mudar de linha, quando introduzidos os 80 caracteres, sem partir uma palavra a meio

cumprimentos , e desde já, obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não indicaste se o programa é de consola ou gráfico. Suponho que seja de consola pelo que o alinhamento terá de ser feito com espaços/printfs.

Verificar se estás na situação de terminar o programa, com introdução de um parágrafo vazio, vai depender de como estás a ler os dados. Existem várias formas de ler dados do teclado, algumas dão-te logo uma linha introduzida, pelo que podes ver se a linha é uma linha vazia, outros lêem os dados de forma mais limitada. Aqui vai depender muito dos métodos/classes que usares.

Dividir em 80 caracteres vai, também, depender de como estás a fazer o código. Podes dividir todo o texto pelos espaços, em que ficas com um vector de palavras, e depois juntas as palavras de modo a não passar o tamanho indicado, ou podes percorrer a string que representa a linha e tentar dividir no tamanho indicado, se for um espaço cortas, se não for andas para trás até apanhares um espaço e cortas aí. Enfim, há muita forma de fazer o corte, estas duas foram apenas exemplos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O  programa é em consola, e nao posso utilizar os printf's :S

Caso o paragrafo tivesse vazio, fiz o seguinte:

{

ln=input.nextLine();

while ((ln).length()==0)

break;}

{

mas não dá :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece que temos o mesmo trabalho para fazer  :D

Knitter,

Estamos a usar o Scanner para leitura de dados (pelo menos eu estou  a fazer como aprendi nas aulas). Tipo isto:

System.out.println("Introduza o paragrafo: ");		
String paragrafo1 = input.nextLine();

O problema é que o professor quer que nós coloquemos o texto todo de uma vez. Mas nós ao darmos enter (mudar de paragrafo) ele para de ler os dados. Há maneira de resolver isto?

Quanto à questão do 80 caracteres por linha também pensei em usar o split() para partir pelos espaços e depois juntar as palavras. Só que para isso temos de criar um array, em que cada posição é uma palavra. Só que a partida não sabemos quantas palavras vamos ter, logo não sabemos as posições necessárias para o array. Há maneira de resolver também isto?

Penso que estas são mesmo as partes mais complicadas do trabalho.

Já agora, não tou a conseguir colocar o código aqui no fórum em java  :confused: Como fazem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

{
      ln=input.nextLine();
      while ((ln).length()==0)
         break;}
   {

Isto executa, no máximo 1 vez. Se ln estiver vazio, executa o while, cuja instrução é sair do while. Se ln não estiver vazio a condição do while falha e nada é executado. :D

Podem alterar a detecção de um parágrafo para detectar apenas quando se carregarem duas vezes seguidas no enter. Isto é, quando introduzirem uma linha em branco mudam de parágrafo, quando introduzirem duas linhas terminam a introdução.

Quanto ao número de palavras, o split devolve um vector com as palavras divididas, e mesmo que não devolvesse, não precisas do tamanho do vector para declarar um vector, tens é de o iniciar correctamente antes de o usares.

O uso do Scanner é uma boa escolha.

Deixo um extra que podem tentar usar: http://java.sun.com/docs/books/tutorial/i18n/text/boundaryintro.html

Não tenho mais tempo, mas se puder, tentarei colocar aqui uns exemplos, isto sem fazer o trabalho por vós :confused:.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em consola, não faço a menor ideia já que não podes usar espaços. Sendo uma consola não há posições que possas definir, só podes colocar caracteres, e neste caso apenas é possível usando espaços em branco, ou o espaço ou o tab.

Sendo que só podes ter 80 colunas de texto sabes sempre qual é o tamanho da linha, se pegares no tamanho do texto, em letras, ficas com a fórmula para centrar o texto mas novamente, sem espaços não faço ideia de como o fazer. Nem sei se será possível usando a consola "normal".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caro professor, não é hábito neste fórum fazer os trabalhos dos alunos mas sim tentar orientá-los de modo a aprenderem mais, pelo menos, essa é a minha postura, que é partilhada por muitos dos utilizadores.

O impedimento de copiar código é compreensível mas a imposição de não utilizar código aprendido dora das aulas parece-me algo castrador, tendo sido eu aluno até recentemente, teria sido um grande impedimento na minha aprendizagem qualquer imposição do género que os meus professores tivessem colocado, felizmente sempre nos incentivaram a procurar outras fontes de conhecimento além do pouco que se ensina dentro da sala de aulas, que no meu caso sempre foi indicado como sendo local onde se tiram dúvidas sobre o trabalho que o aluno faz fora da aula.

Supondo que fosse seu aluno, e que tivesse seguido, por exemplo o Java Tutorial para fazer algum trabalho, onde necessariamente iria aprender mais do que o que me foi ensinado na aula, seria penalizado por isso? Convenhamos, ser penalizado por aprender e evoluir não me parece, como aluno e como formador, a melhor opção.

Não pretendo, de modo algum, incentivar a cópia e o plágio, ou a obtenção do trabalho por outros meios que não o desenvolvimento próprio, apenas aligeirar a sua resposta que parece um ultimato aos alunos que, até ao momento, não deram qualquer motivo para tal.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não consigo concordar com essa criação de regras, nem como aluno nem como formador, já que nisso vejo a limitação da aprendizagem apenas para facilitar correcções. Mas isso seria fugir ao objectivo deste tópico :P

Posso então entender que qualquer forma de resolver o problema que vá contra o que foi dado nas aulas será penalizada? Apenas para que não sejam criadas situações desagradáveis a qualquer aluno.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A mensagem que o utilizador SergioBarbosa tão eloquentemente fez para esconder era a seguinte:

Concordo plenamente contigo, mas como professor e de modo a facilitar a correcção, pois existem muitos meios de programar, tive de criar regras de criaçao do trabalho pratico.

E caso fosses meu aluno e estivesse explicito nas regras de entrega do trabalho que nao podias usar determinado codigo e usasses esse codigo terias o trabalho anulado.

Continuo a dizer que os foruns sao muito bons, mas nao pode haver trabalhos identicos.

Lamento que os alunos possam ter-se visto impedidos de utilizar o fórum para esclarecer as suas dúvidas, creio que esta thread não levará lado algum.

Cumprimentos,

Knitter

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que como professor devias dar o exemplo aos teus alunos, e não ter atitudes como as que tiveste neste tópico, que foi eliminar o que tinhas postado e deixar partes do tópico sem nexo.

Sinceramente tenho pena dos teus alunos porque ficam limitados ao teu conhecimento e tuas regras. É medo de eles apresentarem/aprenderem algo que te ultrapassa a ti?

Ainda por cima nenhum dos teus alunos pediu a ninguém para fazer o trabalho, apresentaram dúvidas. E depois, isto é um fórum público, e não um fórum interno de uma escola, toda a gente tem a liberdade de expor as suas dúvidas e não ser censurado por isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol tudo a procura do mesmo

import static java.util.System.out;

Scanner input = new Scanner (System.in);

out.println ("Insira o texto a formatar"); 

Essa parte é facil, existe várias formas de fazer isso, acho apenas que estamos limitados usar classes usadas as aulas; contundo como estamos a falar de input ,  nao devia ser problema usar outras classes, mas pronto .

Se é para usar só Classes String, tens métodos para criar esse ciclo , acho que não deveria ser um ciclo, mas pronto são regras :

	 while (i <5   && !textoEntrada.startsWith("  ")) {
		i ++;

		textoEntrada = teclado.nextLine(); // leitura de uma frase	

	 }

outra forma

 while (i <5  ) {
i ++;
textoEntrada = teclado.nextLine(); // leitura de uma frase	

	 if (textoEntrada.startsWith("  ")); Break; // sai do ciclo
else continue ;e volta ao ciclo


}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora