Jump to content

Converter Pseudo-Código


Go to solution Solved by HappyHippyHippo,

Recommended Posts

Posted

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á.

Posted (edited)

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

}
Edited by Hercles
Posted

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ê.

Posted

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...

Posted

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.

Posted

é 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

Posted
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

Posted

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...

Posted

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 "

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.