Проверка введенного значения на корректность - 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).
- Если порядок подматриц больше половины размера матрицы, программа выводит сообщение об ошибке и завершается.
- Выводится наибольшая сумма элементов матрицы.
- Для вычисления наибольшей суммы используется вложенный цикл для перебора всех подматриц.
- Внутренний цикл для перебора всех элементов матрицы.
- Если текущий элемент больше предыдущего, обновляется значение суммы.
- Если текущая подматрица больше предыдущей, обновляется значение суммы.
- Выводится значение суммы.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д