Задача состоит в поиске чисел в массиве, которые являются квадратами и печатают сумму каждых двух квадратов. Например, массив начинается с 1 и заканчивается на 9. Прежде всего, нужно найти квадраты в массиве. В этом случае - 1, 4, 9. И сумма каждого из них будет равна 1 + 4 = , 1 + 9 = , 4 + 9 = . В моей программе, когда я вхожу в начальное значение 1 и заканчивая значение 9, он просто печатает массив от 1 до 9. Не знаю, где проблема.Поиск квадратной суммы в массиве
#include <iostream>
#include <math.h>
using namespace std;
int arr[10][4];
bool sqrsum(int); //prototype
int main(){
int n,m,j,a,b,x,y,finalpoint;
bool noresult;
cout << "Enter array starting value: " << endl;
cin >> n;
cout << "Enter array ending value: " << endl;
cin >> m;
if ((n<0)|| (m<0))
{
cout << "Values cannot be negative." << endl;
}
if (n>m)
{
j=n;
n=m;
m=j;
}
for (int i=n; i<=m; i++)
{
if (sqrsum(i) == true)
{
for (int g=0; g<10; g++)
if (arr[g][0] == -9)
{
finalpoint = g;
break;
}
}
if (finalpoint == 1)
{
cout << i << endl;
}
else
{
for (int g=0; g < (finalpoint/2); g++)
{
cout << i << endl;
}
}
noresult = false;
}
if (noresult == true)
{
cout << "There is no valid square sum." << endl;
}
}
bool sqrsum(int i)
{
int arr1[101];
int x; // Last address
int z = 0;
bool rettrue = false;
//Function finding squares and their sum.
for (int j=0;j<10;j++)
{
for (int k=0;k<4;k++)
{
arr[j][k] = -9;
}
}
//Finding possible squares
for (int j=0; pow(j,2)<=i; j++)
{
arr1[j] = pow(j,2);
x = j;
}
//Cycles of sum
for (int j=0; j<=x; j++)
{
for (int k=0; k<=x; k++)
{
if (arr1[j] + arr1[k] == i)
{
arr[z][0] = arr1[j];
arr[z][1] = arr1[k];
arr[z][2] = j;
arr[z][3] = k;
z++;
rettrue=true;
}
}
}
if (rettrue == true)
return true;
else
return false;
}
Начните с того места, где вы наблюдаете нежелательное поведение, и работайте назад, ища ошибки в расчетах или логике. Вставьте инструкции в выходные значения в стратегических точках вашей программы, чтобы вы могли самостоятельно изучить состояние или использовать отладчик. Этот процесс называется * отладки программы *, и это то, что каждый программист должен научиться самостоятельно. – paddy
Дополнительная информация: http://meta.stackexchange.com/a/182380/200806 – paddy
@paddy в этом случае работа назад может быть немного продвинутой, я бы рекомендовал тщательный шаг с отладчиком каждой строки. Примечание. По-видимому, этот код может выводить только цифры 1-9, по одной строке за раз, иногда один раз, возможно, иногда более одного раза ... 'i' - это все, что когда-либо выводится. –