Проверка введенного значения на корректность - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не могу понять в чем просчет. При проверке корректности значения он всегда выдает введено некорректное значение, а только после этого принимает введённое число. А так же не считает сумму
#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;
}
Работаю в NetBeans 8.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;
}

Объяснение кода листинга программы

  1. Объявлены функции main() и p().
  2. Внутри функции main() инициализированы переменные i, j, j_offset, i_offset, n, K, sum, temp, srand(time(NULL)), Arr и Array.
  3. Выполняется запрос на ввод размера квадратной матрицы (n).
  4. Размер матрицы проверяется на корректность (больше 0).
  5. Если размер матрицы некорректен, программа выводит сообщение об ошибке и завершается.
  6. Выполняется запрос на ввод порядка подматриц (K).
  7. Если порядок подматриц больше половины размера матрицы, программа выводит сообщение об ошибке и завершается.
  8. Выводится наибольшая сумма элементов матрицы.
  9. Для вычисления наибольшей суммы используется вложенный цикл для перебора всех подматриц.
  10. Внутренний цикл для перебора всех элементов матрицы.
  11. Если текущий элемент больше предыдущего, обновляется значение суммы.
  12. Если текущая подматрица больше предыдущей, обновляется значение суммы.
  13. Выводится значение суммы.
  14. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы