Inserindo “99” após cada número primo em um array (com duas funções)
-
21-12-2019 - |
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).
Solução
Aqui está uma revisão de código.:)
isPrime
deveria levar umint t
parâmetro, não uma matriz.Você também usat[i]
nesta função, masi
está fora do escopo!Você declaroui
emmain
.Substitua ambost[]
et[i]
com apenast
.Ou, melhor ainda, chame-onumber
em vez disso, é super claro.- Você declara
int i
na primeira linha demain
, e, em seguida, novamente no loop for diretamente abaixo dele que inicializa ot
variedade.Estou surpreso que isso não tenha causado um erro de compilação. - 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 serfor(int i = 0;...
. - Nenhum erro ao verificar a entrada do usuário (instrução
cin >> n
emmain
).E se eu digitar 100?Sua matrizt
emmain
contém 50 inteiros, entãot[100]
faria com que seu programa travasse com um segfault. - No loop while de
main
, a linhaif(isPrime())
não compilará porque você definiuisPrime
para pegar um parâmetro, mas você não o está chamando com nenhum parâmetro.Eu acho que você quis dizerif(isPrime(i))
? - No loop for logo abaixo disso, você inicializa
int j = n
, então tente acessart[j+1]
, que não está alocado.Isso também fará com que seu programa trave. - 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. - 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!
- 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)
- 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