Pergunta

Tenho alguns problemas com os parâmetros (esta é minha primeira tentativa de usar duas funções) ao construir a função e chamá-la.

Aqui está o erro do depurador:

I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp||In function 'bool isPrime(int*)':|
I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp|11|error: 'i' was not declared in   this scope|
I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp|16|error: 'i' was not declared in   this scope|
I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp||In function 'int main()':|
I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp|34|error: too few arguments to  function 'bool isPrime(int*)'|
I:\c++\11_Tombos feladatok-beszuras_torles\19.cpp|9|note: declared here|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

E aqui está o código:

#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;

bool isPrime(int t[])
{
    for(int j=2; j<=sqrt(t[i]); j++)
    {
        if(t[i]%j==0)
            return false;
    }

    if(t[i]<2)
        return false;

    return true;
}

int main()
{
    int t[50], n, i;
    cout<<"Size of array: ";
    cin>>n;
    for (int i=1; i<=n; i++)
    {
        cout<<i<<". Element: ";
        cin>>t[i];
    }
    i=1;
    while(i<=n)
    {
        if(isPrime())
        {
            for(int j=n; j>=i+1; j--)
            {
                t[j+1]=t[j];
            }
            t[i+1]=99;
            n++;
            i=i+2;
        }
        else
        {
            i++;
        }
    }
    for(int i=1; i<=n; i++)
    {
        cout<<t[i]<<", ";
    }
    cout<<"\n";
    system("pause");
    return 0;
}

Eu sei que system("pause") é lento e não é recomendado etc.Não me culpe por usá-lo (sugira outra coisa).

Foi útil?

Solução

Aqui está uma revisão de código.:)

  1. isPrime deveria levar um int t parâmetro, não uma matriz.Você também usa t[i] nesta função, mas i está fora do escopo!Você declarou i em main.Substitua ambos t[] e t[i] com apenas t.Ou, melhor ainda, chame-o number em vez disso, é super claro.
  2. Você declara int i na primeira linha de main, e, em seguida, novamente no loop for diretamente abaixo dele que inicializa o t variedade.Estou surpreso que isso não tenha causado um erro de compilação.
  3. Nos loops for que começam como for(int i = 1;..., você sempre perderá o primeiro elemento do array! Lembrar: matrizes são indexadas a partir de 0, então elas devem ser for(int i = 0;....
  4. Nenhum erro ao verificar a entrada do usuário (instrução cin >> n em main).E se eu digitar 100?Sua matriz t em main contém 50 inteiros, então t[100] faria com que seu programa travasse com um segfault.
  5. No loop while de main, a linha if(isPrime()) não compilará porque você definiu isPrime para pegar um parâmetro, mas você não o está chamando com nenhum parâmetro.Eu acho que você quis dizer if(isPrime(i))?
  6. No loop for logo abaixo disso, você inicializa int j = n, então tente acessar t[j+1], que não está alocado.Isso também fará com que seu programa trave.
  7. Por que você tem n++ no loop while?Posso ver que isso está causando problemas/comportamento não intencional porque esse é o limite do seu loop while.
  8. Ao escrever código C++, é uma boa prática usar cabeçalhos no estilo C++.Então, em vez de #include <stdlib.h> usar #include <cstdlib>, e em vez de #include <math.h> usar #include <cmath>.

Provavelmente existem mais alguns bugs/problemas, mas isso deve fazer você seguir em frente.Deixe-nos saber o que você descobriu!

Outras dicas

O erro do depurador informa exatamente o que está errado!

  1. não existe no método isPrime().Só porque você tem um i no main(), você não pode usá-lo em outra função (leia sobre Escopo)
  2. Você chama a função isPrime() sem um parâmetro.

Sugiro que você comece com programas mais fáceis e também leia sobre funções.

Você deve usar algo como

cin.ignore();

em vez de system("PAUSE");

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top