так моя программа должна работать так:Программа не работает должным образом
- ввода чисел п и т (например, п = 1, т = 10)
- ввода всех значений п до m (например, 1; 2; 3; 4; 5; 6; 7; 8; 9; 10) в динамическую матрицу
- Затем с помощью функции bool вам необходимо выполнить поиск динамического массива для двух чисел, которые квадратичны и (например, 1 * 1 + 1 * 1 = 2; 2 * 2 + 2 * 2 = 8 и т. д.)
Программа по какой-либо причине либо ограничивает только самую первую комбинацию, либо вообще не выводит ничего на печать (например, если n = 1 и m = 10, она ограничивает только 1 * 1 + 1 * 1 = 2, но она должна outprint 2 * 2 + 1 * 1 = 5; 2 * 2 + 2 * 2 = 8 и т. Д., Если n = 4 и m = 200, он даже не распечатывает ничего). Где могла быть проблема? Я застрял часами и, на мой взгляд, программа должна работать, но это не так. Большое спасибо.
#include <iostream>
using namespace std;
bool isSquared (int i){
// bool result = false;
//int div;
//int *squares = new int [i];
for (int j=1;j<=i;j++){
for (int k=1;k<=i;k++){
if (k*k + j*j == i) return true;
else return false;
}
}
}
int main()
{
int n,m,i,size;
cin >>n;
cin >>m;
size = m - n;
int *real = new int [m - n];
for (int q=0, j=n; q<size, j<=m; q++, j++){
real[q] = j;
}
for (int q=0; q<=size; q++){
cout <<real[q] <<" | ";
}
cout <<endl;
for (int i=n; i<=m; i++){
if (isSquared(i) == true){
for (int j=0; j<=size; j++){
for (int k=0; k<=size; k++){
if (real[j]*real[j] + real[k]*real[k] == i){
cout <<i <<"=" <<real[j] <<"*" <<real[j] <<"+" <<real[k] <<"*" <<real[k] <<endl;
}
}
}
}
}
return 0;
}
Правильный инструмент для решения таких проблемы - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Подсказка: 'for (int k = 1; k <= i; k ++) {' Зачем вам этот цикл, если вы возвращаетесь на первое сравнение независимо? – drescherjm
@drescherjm вот что, как я могу остановить функцию от возвращения, когда она получает первое сравнение. – jcoe