Вставка «99» после каждого простого числа в массиве (с двумя функциями)

У меня есть некоторые проблемы с параметрами (это моя первая попытка использования двух функций) при создании функции и ее вызове.

Вот ошибка отладчика:

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)) ===|

И вот код:

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

Я знаю, что система («пауза») медленная, и она не рекомендуется и т. Д. Не вините меня за ее использование (вместо этого предложите что-нибудь другое).

-3

Решение

Вот обзор кода. 🙂

  1. isPrime должен взять int t параметр, а не массив. Вы также используете t[i] в этой функции, но i выходит за рамки! Вы объявили i в main, Заменить оба t[] а также t[i] просто t, Или, еще лучше, назовите это number вместо этого, так что это супер ясно.
  2. Вы заявляете int i на первой строчке main, а затем снова в цикле for непосредственно под ним, который инициализирует t массив. Я удивлен, что это не вызвало ошибку компиляции.
  3. В циклах for, которые начинаются как for(int i = 1;..., вы пропустите первый элемент массива каждый раз! Помните: массивы индексируются от 0, поэтому они должны быть for(int i = 0;...,
  4. Нет проверки ошибок при вводе пользователем (оператор cin >> n в main). Что если я введу 100? Ваш массив t в main содержит 50 целых чисел, так t[100] может привести к аварийному завершению работы программы с сегфоутом.
  5. В то время как цикл main, линия if(isPrime()) не скомпилируется, потому что вы определили isPrime принять параметр, но вы не вызываете его с какими-либо параметрами. Я думаю ты имел ввиду if(isPrime(i))?
  6. В цикле for прямо под этим, вы инициализируете int j = n, затем попробуйте получить доступ t[j+1], который не выделен. Это также приведет к сбою вашей программы.
  7. Почему вы должны n++ в то время как цикл? Я вижу, что это вызывает проблемы / непреднамеренное поведение, потому что это ограничение вашего цикла while.
  8. При написании кода на C ++ рекомендуется использовать заголовки в стиле C ++. Так что вместо #include <stdlib.h> использование #include <cstdlib>и вместо #include <math.h> использование #include <cmath>,

Вероятно, есть еще несколько ошибок / проблем, но это должно заставить вас двигаться. Дайте нам знать, что вы придумали!

3

Другие решения

Ошибка отладчика говорит вам, что именно не так!

  1. я не существует в методе isPrime (). Просто потому что у вас есть i в main (), вы не можете использовать его в другой функции (читайте о Объем)
  2. Вы вызываете функцию isPrime () без параметра.

Я предлагаю вам начать с более простых программ, а также прочитать о функции.

2

Вы должны использовать что-то вроде

cin.ignore();

вместо system("PAUSE");

-2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector