Главная страница
Навигация по странице:

  • Цель работы.

  • Выполнение работы.

  • Тестирование.

  • ПРИЛОЖЕНИЕ А ИСХОДНЫЙ КОД ПРОГРАММЫ

  • Лаба по проге. Отчет по лабораторной работе 1 по дисциплине Программирование Тема Условия, циклы, оператор switch Студент гр. 2382 Шамхалов Я. М. Преподаватель Чайка К. В. СанктПетербург 2022


    Скачать 325.38 Kb.
    НазваниеОтчет по лабораторной работе 1 по дисциплине Программирование Тема Условия, циклы, оператор switch Студент гр. 2382 Шамхалов Я. М. Преподаватель Чайка К. В. СанктПетербург 2022
    АнкорЛаба по проге
    Дата06.10.2022
    Размер325.38 Kb.
    Формат файлаpdf
    Имя файлаShamkhalov_Yakub_lb1.pdf
    ТипОтчет
    #719097

    МИНОБРНАУКИ РОССИИ
    САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
    ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
    «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
    Кафедра МО ЭВМ
    ОТЧЕТ
    по лабораторной работе
    №1
    по дисциплине «Программирование»
    Тема: Условия, циклы, оператор switch
    Студент гр. 2382
    Шамхалов Я.М.
    Преподаватель
    Чайка К.В.
    Санкт-Петербург
    2022

    2
    Цель работы.
    Обучиться работе с условными операторами, циклами и оператором switch, применив их при написании программы.
    Задание.
    Напишите программу, выделив каждую подзадачу в отдельную функцию.
    Реализуйте программу, на вход которой подается одно из значений 0, 1, 2,
    3 и массив целых чисел размера не больше 100. Числа разделены пробелами.
    Строка заканчивается символом перевода строки.
    В зависимости от значения, функция должна выводить следующее:
    0: максимальное по модулю число в массиве. (abs_max)
    1: минимальное по модулю число в массиве. (abs_min)
    2: разницу между максимальным по модулю и минимальным по модулю элементом. (diff)
    3: сумму элементов массива, расположенных после максимального по модулю элемента (включая этот элемент). (sum) иначе необходимо вывести строку "Данные некорректны".
    Выполнение работы.
    Подключаются заголовочные файлы stdio.h
    (для ввода вывода на экран), stdlib.h
    (для доступа к функции модуля), limits.h
    (для доступа к
    INT_MAX
    ).
    Применяется директива
    #define
    , которая заменяет
    N
    на максимальное количество элементов массива (100).
    Функции:
    1. Функция main()
    :
    Инициализирует целочисленный массив arr
    , состоящий из
    N
    элементов, переменную define_action
    , определяющую требуемое действие, и переменную arr_len
    , в которой будет храниться количество элементов массива. После получения значения в define_action и всех элементов в массив при помощи оператора switch выбирается нужная функция.

    3 2. Функция abs_max()
    :
    Получает на вход целочисленный массив arr и его длину arr_len
    , возвращает целочисленное значение максимального по модулю числа из arr
    Использует переменные max, которая хранит текущий наибольший модуль числа, и rmax
    , которая хранит текущий элемент с наибольшим модулем. Отбор происходит при помощи цикла for
    , проходящего по всем элементам массива, сравнивая модуль каждого из них с max. Если модуль элемента оказывается больше, то в max записывается его модуль, а в rmax
    – сам элемент. После окончания цикла функция возвращает rmax
    3. Функция abs_min()
    :
    Получает на вход целочисленный массив arr и его длину arr_len
    , возвращает целочисленное значение минимального по модулю числа из arr
    Использует переменные min, которая изначально хранит в себе
    INT_MAX
    , а по ходу программы текущий наименьший модуль, ведь всегда найдется число меньшее или равное максимальному значению, и rmin
    , которая хранит текущий элемент с наименьшим модулем. Отбор происходит при помощи цикла for
    , проходящего по всем элементам массива, сравнивая модуль каждого из с min.
    Если модуль элемента оказывается меньше, то в min записывается его модуль, а в rmin
    – сам элемент. После окончания цикла функция возвращает rmin
    4. Функция diff()
    :
    Получает на вход целочисленный массив arr и его длину arr_len
    , возвращает разность между максимальным и минимальным по модулю элементами. Использует переменные min, которой присваивается значение, посчитанное функцией abs_min()
    , и max
    , которой присваивается значение, посчитанное функцией abs_max().
    Возвращает разность max и min
    5. Функция sum()
    :
    Получает на вход целочисленный массив arr и его длину arr_len
    , возвращает сумму всех элементов, стоящих после максимального по модулю элемента, включая его. Использует переменные max
    , в которой хранится

    4 наибольший по модулю элемент, посчитанный при помощи abs_max(), i
    , которая является счетчиком, sum
    , которая хранит сумму требуемых элементов.
    Нахождение индекса элемента с максимальным модулем происходит при помощи цикла while
    , который останавливается при условии того, что arr[i]
    равняется max. Далее в sum добавляется значение этого элемента, запускается второй цикл while
    , проходящий по всем элементам массива, следующих за максимальным по модулю, и добавляет в сумму каждый их них. После окончания этого цикла функция возвращает sum
    Тестирование.
    Результаты тестирования представлены в табл. 1.
    Таблица 1 - Результаты тестирования
    № п/п
    Входные данные
    Выходные данные
    Комментарии
    1.
    0 5 6 -10 15 -100 0 3
    -100
    Верный ответ
    2.
    1 3 7 -15 10 -200 0 4 0
    Верный ответ
    3.
    2 2 9 -23 13 -200 -1 5
    -199
    Верный ответ
    4.
    3 5 6 -99 14 -300 -17 5
    -312
    Верный ответ
    5.
    6 9 2 -67 24 -435 -23 7
    Некорректные данные
    Верный ответ
    (первое число не входит в {0, 1, 2,
    3})
    Выводы.
    Изучил механизм работы условных операторов, циклов, оператора switch во время создания программы.
    Создал программу, вызывающую требуемую функцию в зависимости от входных данных, введенных пользователем. Разбил код на структурные блоки, выполняющие определенные задачи, дабы избежать дублирования кода.

    5
    ПРИЛОЖЕНИЕ А
    ИСХОДНЫЙ КОД ПРОГРАММЫ
    Название файла: lb1.c
    #include
    #include
    #include
    #define N 100 int abs_max(int arr[], int arr_len){ int max = 0; int rmax; for (int i = 0; i < arr_len; i++){ if (abs(arr[i]) > max){ rmax = arr[i]; max = abs(arr[i]);
    }
    } return rmax;
    } int abs_min(int arr[], int arr_len){ int min = INT_MAX; int rmin; for (int i = 0; i < arr_len; i++){ if (abs(arr[i]) < min){ rmin = arr[i]; min = abs(arr[i]);
    }
    } return rmin;
    } int diff(int arr[], int arr_len){ int max = abs_max(arr, arr_len); int min = abs_min(arr, arr_len); return max - min;
    } int sum(int arr[], int arr_len){ int max = abs_max(arr, arr_len); int i = 0; int sum = 0; while (arr[i] != max) i++; sum += arr[i++]; while (i < arr_len) sum += arr[i++]; return sum;
    } void main(){
    // Блок инициализации и заполнения массива и переменной, указывающей требуемое действие int define_action;

    6 char c; int arr_len = 0; int arr[N]; scanf("%d%c", &define_action, &c); for (int i = 0; i < 100; i++){ scanf("%d%c", &arr[i], &c); arr_len += 1; if (c == '\n') break;
    }
    // Блок выбора нужной функции switch(define_action){ case 0: printf("%d\n", abs_max(arr, arr_len)); break; case 1: printf("%d\n", abs_min(arr, arr_len)); break; case 2: printf("%d\n", diff(arr, arr_len)); break; case 3: printf("%d\n", sum(arr, arr_len)); break; default: puts("Данные некорректны\n");
    }
    }


    написать администратору сайта