Проверка введенного значения на корректность - C (СИ)
Формулировка задачи:
Не могу понять в чем просчет. При проверке корректности значения он всегда выдает введено некорректное значение, а только после этого принимает введённое число. А так же не считает сумму
Работаю в NetBeans 8.0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int p()
{
int s = 0, ret = 0;
ret = s;
scanf("%d", &s);
while (ret == 0 || s <= 0)
{
printf("(Vvedite korrektnoe znachenie!)\n");
ret = s;
scanf("%d", &s);
fflush(stdin);
}
return s;
}
int main()
{
int i;
int j;
int j_offset;
int i_offset;
int n = 0, K = 0, sum = 0, temp = 0;
printf("Vvedite razmernost kvadratnoy matrici:\n");
n = p();
int **Arr = (int **)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
Arr[i] = (int *)malloc(n * sizeof(int));
}
int *Array = (int *)malloc((n * n) * sizeof(int));
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
Arr[i][j] = rand() % 10;
}
}
printf("Matrica\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", Arr[i][j]);
}
printf("\n");
}
printf("Vvedite poradok rassmatrevaemih matric\n");
K = p();
if (K > n / 2)
{
printf("Podmatric takogo poradka net!\n");
return 0;
}
printf("Naibolshaya summa elementov matrici:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
for (i_offset = 0; i_offset < (n - 1); i_offset++)
for (j_offset = 0; j_offset < (n - 1); j_offset++)
{
temp = 0;
for (i = 0; i < K; i++)
{
for (j = 0; j < K; j++)
{
{
temp += Arr[i_offset + i][j_offset + j];
}
}
}
if ((i > j) && (i_offset > j_offset) && (sum < temp))
{
sum = temp;
}
}
}
}
printf("%d\n", sum);
return 0;
}Решение задачи: «Проверка введенного значения на корректность»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int p()
{
int s = 0;
do {
printf("Input square matrix size (> 0): ");
scanf("%d", &s);
} while (s <= 0);
return s;
}
int main()
{
int i,i1;
int j,j1;
int j_offset;
int i_offset;
int n = 0, K = 0, sum = 0, temp = 0;
srand(time(NULL));
printf("Vvedite razmernost kvadratnoy matrici:\n");
n = p();
int **Arr = (int **)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
Arr[i] = (int *)malloc(n * sizeof(int));
}
int *Array = (int *)malloc((n * n) * sizeof(int));
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
Arr[i][j] = rand() % 10;
}
}
printf("Matrica\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", Arr[i][j]);
}
printf("\n");
}
printf("Vvedite poradok rassmatrevaemih matric\n");
K = p();
if (K > n / 2)
{
printf("Podmatric takogo poradka net!\n");
return 0;
}
printf("Naibolshaya summa elementov matrici:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
for (i_offset = 0; i_offset < (n - 1); i_offset++)
for (j_offset = 0; j_offset < (n - 1); j_offset++)
{
temp = 0;
for (i1 = 0; i1 < K; i1++)
{
for (j1 = 0; j1 < K; j1++)
{
{
temp += Arr[i_offset + i1][j_offset + j1];
}
}
}
if ((i > j) && (i_offset > j_offset) && (sum < temp))
{
sum = temp;
}
}
}
}
printf("%d\n", sum);
return 0;
}
Объяснение кода листинга программы
- Объявлены функции main() и p().
- Внутри функции main() инициализированы переменные i, j, j_offset, i_offset, n, K, sum, temp, srand(time(NULL)), Arr и Array.
- Выполняется запрос на ввод размера квадратной матрицы (n).
- Размер матрицы проверяется на корректность (больше 0).
- Если размер матрицы некорректен, программа выводит сообщение об ошибке и завершается.
- Выполняется запрос на ввод порядка подматриц (K).
- Если порядок подматриц больше половины размера матрицы, программа выводит сообщение об ошибке и завершается.
- Выводится наибольшая сумма элементов матрицы.
- Для вычисления наибольшей суммы используется вложенный цикл для перебора всех подматриц.
- Внутренний цикл для перебора всех элементов матрицы.
- Если текущий элемент больше предыдущего, обновляется значение суммы.
- Если текущая подматрица больше предыдущей, обновляется значение суммы.
- Выводится значение суммы.
- Программа завершается.