Ir para o conteúdo
jeflora

[Resolvido] Converter Pseudo-Código

Mensagens Recomendadas

jeflora

Boa noite,

Tenho de converter o seguinte pseudo-codigo para codigo de uma linguagem de programação a minha escolha. Optei pelo Java. O exercicio é para uma cadeira da faculdade e o código tem de ser submetido na plataforma Mooshak.

PARA i=1 ATÉ N {
PARA j=i ATÉ N
{
soma = 0;
PARA z=i ATÉ j
{
soma = soma + sequencia[z]
}
SE soma == VALOR ENTÃO
{
Subsequência existe na posição i
TERMINA
}
}
}
Subsequência não existe

O código que realizei é o seguinte

private static boolean encontraSequencia(int [] sequencia, int valor) {
int soma;

for(int i = 1; i <= sequencia.length; i++){
	for(int j = i; j <= sequencia.length; j++) {
		soma = 0;
		for(int z = i; z <= j; z++){
			soma = soma + sequencia[z-1];
		}
		if(soma == valor){
			System.out.println("SEQUENCIA ENCONTRADA NA POSICAO " + i);
			return true;
		}
	}
}
System.out.println("SEQUENCIA NAO ENCONTRADA");
return false;
}

Precisava que alguém desse uma olhada e uma opinião, pois a plataforma diz que o programa corre em um ou mais testes sem erros mas o resultado não é o esperado.

Obrigado desde já.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hercles

Não sei se entendi... Mas quando testo, dentro do que esta ai descrito, funciona. fiz somente uma pequena mudança.

package testasequencia;

public class TestaSequencias {

public boolean encontraSequencia(int[] sequencia, int valor) {
	int soma;

	for (int i = 1; i <= sequencia.length; i++) {
		for (int j = i; j <= sequencia.length; j++) {
			soma = 0;
			for (int z = i; z <= j; z++) {
				soma = soma + sequencia[z - 1];
			}
			if (soma == valor) {
				System.out.println("SEQUENCIA ENCONTRADA NA POSICAO " + (i-1));
				return true;
			}
		}
	}
	System.out.println("SEQUENCIA NAO ENCONTRADA");
	return false;
}
}


package testasequencia;

import java.lang.reflect.Array;

public class Principal {

public static void main(String[] args) {


   int v[] = new int[10];
	v[0] = 1;
	v[1] = 3;
	v[2] = 5;
	v[3] = 10;
	v[4] = 45;
	v[5] = 17;
	v[6] = 13;
	TestaSequencias t = new TestaSequencias();

	System.out.println(t.encontraSequencia(v, 13));
}

}

Editado por Hercles

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

pois, eu iniciei este tópico porque não estou a detectar nenhuma falha e continuo sem entender o porque de a plataforma não me aceitar o código. obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

A plataforma a que me refiro foi criada para concursos de programação. Para esta cadeira, devemos submeter o código na plataforma que realiza teste pré-definidos pelos professores e avaliar os resultados e comparar com o esperado.

Segundo a plataforma o código que coloquei aqui corre sem erros para alguns dos testes porém o resultado que retorna, pelos vistos, não é o esperado.

Mas ainda não consegui entender porquê.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hercles

Entendi. A única coisa que me parece estranho eh quando ele imprime a posição. Ele imprime uma posição depois, por isto coloquei -1.... Vetor começa na posição zero.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

dizer que o código está correcto é diferente do que dizer que o código faz o que deveria fazer, que é algo que nunca disseste.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

dizer que o código está correcto é diferente do que dizer que o código faz o que deveria fazer, que é algo que nunca disseste.

achas que não faz? é que eu não estou a conseguir identificar a falha...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

achas que não faz? é que eu não estou a conseguir identificar a falha...

nem eu nem ninguem sabe se faz ou não o que deveria fazer, isto porque nunca disseste o que deveria fazer


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hercles

Verdade, qual é o objetivo da sua aplicação? Qual é o resultado esperado em que você tanto fala? Aparece mensagem de erro? Qual? Se a saída está errada, qual a saída esperada?

o que eu imaginei que pode "não ser a saída esperada" é tipo. a posição impressa foi 1 e era pra ser zero, por exemplo.

Ai, entra a questão que eu disse, a primeira posição de um array é zero e não um. Sendo assim você terá que mudar o código.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

é suposto encontrar na sequencia que recebe como parametro uma subsquencia cuja a soma dos valores seja igual ao parametro valor. isto é, na sequencia:

1 2 3 4 5 6 7

valor = 5

é suposto retornar a posição do valor 2. ou seja o output seria "SUBSEQUENCIA ENCONTRADA NA POSICAO 2" daí eu utilizar o i ao imprimir e não i-1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

private static boolean encontraSequencia(int [] sequencia, int valor) {
	int soma;

	for(int i = 1; i <= sequencia.length; i++){
			for(int j = i; j <= sequencia.length; j++) {
					soma = 0;
					for(int z = i; z <= j; z++){
							soma = soma + sequencia[z-1];
					}
					if(soma == valor){
							System.out.println("SEQUENCIA ENCONTRADA NA POSICAO " + (i-1));
							return true;
					}
			}
	}
System.out.println("SEQUENCIA NAO ENCONTRADA");
	return false;
}

Segundo o que me disseram a correção a fazer seria na impressão, pelo que ficaria assim

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

existe coisas ai que não fazem sentido, sendo a principal que os índices de um array vão de 0 até length - 1. e como tal, nem vou tentar resolver isso de cabeça.

depois de corrigires isso, diz alguma coisa


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
tiago.f

já verifiquei os prints e estão conforme o pedido no enunciado

Segundo o enunciado (1º post) devias ter

"Subsequência existe na posição "

e não

"SEQUENCIA ENCONTRADA NA POSICAO "

O mesmo para o outro print...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jeflora

existe coisas ai que não fazem sentido, sendo a principal que os índices de um array vão de 0 até length - 1. e como tal, nem vou tentar resolver isso de cabeça.

depois de corrigires isso, diz alguma coisa

sim, eu sei disso e é o que normalmente faço mas como é assim que está no pseudo-codigo

fazendo como disseste será assim

private static boolean encontraSequencia(int [] sequencia, int valor) {
int soma;

for(int i = 0; i <= sequencia.length-1; i++){
	for(int j = i; j <= sequencia.length-1; j++) {
		soma = 0;
		for(int z = i; z <= j; z++){
			soma = soma + sequencia[z];
		}
		if(soma == valor){
		   System.out.println("SEQUENCIA ENCONTRADA NA POSICAO " + i);
		   return true;
		}
	}
}
System.out.println("SEQUENCIA NAO ENCONTRADA");
return false;
}

Segundo o enunciado (1º post) devias ter

"Subsequência existe na posição "

e não

"SEQUENCIA ENCONTRADA NA POSICAO "

O mesmo para o outro print...

sim, mas segundo um exemplo de output que o meu professor colocou no enunciado era "SEQUENCIA ENCONTRADA NA POSICAO "

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

não vejo nada de especialmente errado no código, e como tal, só posso imaginar duas situações:

- o código corre lento demais do esperado (sim, o código não é muito eficiente), e como tal dá um erro de "não passar nos testes"

- o índice esperado que seja apresentado na consola deverá ser incrementado de 1 para "eliminar" a posição zero

qualquer outro problema que possa ser, parece passar ao lado daquilo que disseste anteriormente


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.