Como interpretar problemas com vetores?

Estou começando a aprender vetor, matriz e função na faculdade. Lá, usa-se portugol na maioria das aulas e java(em menor quantidade). Estou com uma questão a ser resolvida, mas não estou entendendo.

Implemente uma função que receba um vetor de N valores inteiros já digitados e retorne verdadeiro se o mesmo não possuir nenhum quadrado perfeito ou falso, caso contrário.

Desde o começo do curso venho lendo um livro de lógica de programação(Forbeloni), tenho apostilas de lógica baixadas do apostilando.com e mesmo assim, não estou desenvolvendo a lógica.

Voltando ao problema, tenho que criar uma função que receba um vetor de valores que não se sabe quantos são. A questão pede uma função pra receber um vetor. Como pode? Daí, a dúvida abaixo:

Dúvida 1: É pra criar um algoritmo como função ou um algoritmo como vetor? Porque muda a maneira de se iniciar o algoritmo.

Exemplo com vetor:

Algoritmo logico;
Tipo qualquer_nome= vetor[1…n]{tipo de dado}
{área das variáveis}

Exemplo com função:

Algoritmo logico;
{área das variáveis globais}
Função qualquer_nome({área de variáveis}) : ({tipo de dado})
{área de variáveis locais}

É pra escolher qual dos dois exemplos? Ou ambos?

Dúvida 2:
Como eu faço um teste pra ver se um número é quadrado perfeito? Nem na época de escola aprendi isso. Só agora fui saber que é um n° que tirando a raiz quadrada, dá um inteiro.

3: Sei que aqui não é o local pra aprender lógica. Se puderem dizer o nome de algum site pra isso…

Vamos pegar sua calculadora. Como você mesmo disse, se você tirar a raiz quadrada, dá um inteiro.

Como é difícil testar se um valor é um inteiro devido a erros de arredondamento (vai que você tire a raiz quadrada de 15241578750190521 e o Java lhe volte 123456788.999989 em vez de 123456789), vamos fazer uma outra coisa:

  • Achar a raiz quadrada do número (digamos 10 -&gt 3,1622776601683793319988935444327…) - use Math.sqrt
  • Pegar o valor inteiro da raiz quadrada ( 3,1622776601683793319988935444327 -&gt 3) - use Math.floor
  • Elevar o número de novo ao quadrado ( 3 * 3 = 9 )
  • Se o número bater, então é um quadrado perfeito. Se não bater, não é (como é o caso do número 10).

Obrigado, mas vc não poderia dar uma idéia de como fazer isso? Eu não sei fazer em portugol e em java, muito menos.

Você aprende a escrever lendo. Leia este programa e tente entendê-lo. (Você tem de começar pela função "main" e ir subindo :stuck_out_tongue: )

class SeuProblemaComVetores {
    // Verifica se o valor X eh um quadrado perfeito
    private static boolean ehQuadradoPerfeito (int X) {
        int raiz = (int) Math.sqrt (X);
        if (raiz * raiz == X) 
            return true; 
        else 
            return false;
    }
    // Checa se existe algum quadrado perfeito no vetor de N valores inteiros.
    // Se houver, retorna false;
    // se não houver, retorna true
    public static boolean checaNaoExistemQuadradosPerfeitos (int[] valores, int N) {
        for (int i = 0; i &lt N; ++i) {
            if (ehQuadradoPerfeito (valores[i])) {
                return false; // existe pelo menos um quadrado perfeito
            }
        }
        // Aqui percorremos todo o vetor e não achamos um quadrado perfeito.
        // Portanto podemos retornar true.
        return true; 
    }
    public static void main(String[] args) {
        // deve imprimir "true"
        System.out.println (checaNaoExistemQuadradosPerfeitos (new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29}, 10));
        // deve imprimir "false"
        System.out.println (checaNaoExistemQuadradosPerfeitos (new int[]{2, 3, 5, 7, 11, 13, 16}, 7));
    }
}

Obrigado ,colega. Dá pra ter noção agora.