Содержание
Постановка задания
Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):
Для решения задачи следует применить статическое выделение памяти для массива и функции: ввода числа элементов и элементов массива с клавиатуры, вывода элементов массива на экран, обработки массива в соответствии с заданием.
В случае невозможности определения требуемых значений следует напечатать соответствующее сообщение. Предполагается, что значения элементов в массиве могут повторяться.
Варианты заданий
№ | Задание |
1. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму положительных элементов с нечетными номерами и максимальное произведение положительных подряд идущих элементов. Сформировать новый массив, состоящий из отрицательных элементов исходного массива. |
2. | В одномерном массиве, состоящем из $n$ целых чисел, вычислить сумму положительных четных элементов и минимальное произведение отрицательных подряд идущих элементов. Сформировать новый массив, состоящий из минимальных элементов исходного массива. |
3. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму максимальных элементов с четными номерами и максимальное произведение отрицательных подряд идущих элементов. Сформировать новый массив, состоящий из элементов исходного массива, равных первому элементу. |
4. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму минимальных элементов с нечетными номерами и максимальное произведение трех соседних элементов. Сформировать новый массив, состоящий из элементов исходного массива, равных предпоследнему элементу. |
5. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму отрицательных элементов с четными номерами и максимальное произведение трех соседних элементов. Сформировать новый массив, состоящий из элементов исходного массива, равных предпоследнему элементу. |
6. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму положительных элементов с нечетными номерами и минимальную сумму трех соседних элементов. Сформировать новый массив, состоящий из элементов исходного массива, равных предпоследнему элементу. |
7. | В одномерном массиве, состоящем из $n$ целых чисел, вычислить сумму минимальных элементов, равных максимальному элементу, и максимальное произведение двух равноотстоящих от центра элементов. Сформировать новый массив, состоящий из элементов исходного массива, равных среднеарифметическому значению максимального и минимального элементов. |
8. | В одномерном массиве из $n$ целых чисел вычислить среднегеометрическое всех положительных элементов массива и сумму положительных элементов массива, расположенных после второго максимального элемента. Сформировать новый массив, состоящий из последних элементов исходного массива, сумма которых равна сумме максимальных и минимальных элементов. |
9. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива с номерами, кратными заданному целому числу, и сумму нечетных элементов массива, расположенных между вторым минимальным и первым максимальным элементами. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены первый максимальный и последний минимальный элементы. |
10. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива, расположенных до последнего максимального элемента, и сумму четных элементов массива, расположенных между первым и вторым минимальными элементами. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены первый минимальный и последний минимальный элементы. |
11. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива, расположенных между минимальным и максимальным элементами, и сумму элементов массива, расположенных до последнего минимального элемента. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены все минимальные элементы. |
12. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива, расположенных между первым и последним минимальными элементами, и сумму нечетных элементов массива, расположенных до последнего максимального элемента. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены все нулевые элементы. |
13. | В одномерном вещественном массиве из $n$ чисел вычислить сумму всех положительных элементов массива, расположенных между первым и последним максимальными элементами, и сумму элементов массива, расположенных до предпоследнего минимального элемента. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены все отрицательные элементы. |
14. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму положительных элементов с четными номерами и максимальное произведение знакочередующихся двух соседних элементов. Сформировать новый массив, состоящий из положительных элементов исходного массива, расположенных после максимального элемента. |
15. | В одномерном массиве, состоящем из $n$ целых чисел, вычислить сумму положительных нечетных элементов и максимальную сумму подряд идущих отрицательных элементов. Сформировать новый массив из элементов, расположенных между первым и последним минимальными элементами исходного массива. |
16. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму минимальных элементов с нечетными номерами и минимальное произведение отрицательных подряд идущих элементов. Сформировать новый массив, состоящий из элементов исходного массива, находящихся между максимальным и предпоследним элементами. |
17. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму максимальных элементов массива и максимальное произведение подряд идущих положительных элементов массива. Сформировать новый массив, состоящий из элементов исходного массива, находящихся между минимальным и последним положительным элементами массива. |
18. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму положительных элементов с нечетными номерами и максимальную сумму трех соседних знакочередующихся элементов. Сформировать новый массив, состоящий из элементов исходного массива, находящихся между максимальным и первым положительным элементами массива. |
19. | В одномерном массиве, состоящем из $n$ вещественных чисел, вычислить сумму элементов с четными номерами, которые больше заданного числа $M$, и минимальную сумму двух элементов, равноотстоящих от середины массива. Сформировать новый массив, состоящий из элементов исходного массива, находящихся между среднеарифметическим и максимальным значениями элементов. |
20. | В одномерном массиве, состоящем из $n$ целых чисел, вычислить сумму минимальных элементов, находящихся на нечетных местах, а также максимальную сумму двух равноотстоящих от центра элементов и их номера. Сформировать новый массив, состоящий из элементов исходного массива, равных среднеарифметическому значению максимального и минимального элементов. |
21. | В одномерном массиве из $n$ целых чисел вычислить среднегеометрическое всех положительных элементов массива и сумму положительных элементов массива, расположенных после второго максимального элемента. Сформировать новый массив, состоящий из начальных элементов исходного массива, сумма которых равна сумме максимальных и минимальных элементов. |
22. | В одномерном массиве из $n$ целых чисел вычислить сумму элементов массива, кратных заданному целому числу, и сумму нечетных элементов массива, расположенных между последним минимальным и вторым максимальным элементами. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены максимальные и первый минимальный элементы. |
23. | В одномерном массиве из $n$ целых чисел вычислить сумму элементов массива, расположенных до первого максимального элемента, и сумму нечетных элементов массива, расположенных между вторым и последним минимальными элементами. Сформировать новый массив, состоящий из элементов исходного массива, из которого удален последний максимальный элемент. |
24. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива, расположенных между вторым четным и максимальным элементами, и сумму элементов массива, расположенных до первого нечетного отрицательного элемента. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены все отрицательные элементы. |
25. | В одномерном массиве из $n$ целых чисел вычислить сумму всех положительных элементов массива, расположенных между первым нечетным и последним максимальным элементами, и сумму четных элементов массива, расположенных после последнего максимального элемента. Сформировать новый массив, состоящий из элементов исходного массива, из которого удалены все элементы, кратные заданному числу. |
Лабораторная работа $№4$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.
Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.
Образец выполнения (вариант №15)
Условие задания
В одномерном массиве, состоящем из $n$ целых чисел, вычислить сумму положительных нечетных элементов и максимальную сумму подряд идущих отрицательных элементов. Сформировать новый массив из элементов, расположенных между первым и последним минимальными элементами исходного массива.
Алгоритм решения задачи
Прежде чем переходить непосредственно к кодированию данной лабораторной работы, нужно провести ее алгоритмизацию. Данный этап является обязательным и ни один профессиональный программист не опускает его в своей работе.
Сначала выделим список проблем, которыми обладает текущая постановка задачи:
- В условии ни слова не сказано о максимальном количестве элементов одномерного массива.
- В условии ни слова не сказано о допустимых значениях элементов одномерного массива.
➡ Рассмотрим первую проблему. Стоит ли давать пользователю работать с массивом, состоящим из $1$-го элемента? Очевидно, что нет! Стоит ли давать пользователю работать с массивом, состоящим из одного миллиона элементов? Очевидно также, что нет, т к заполнение элементов производится вводом с клавиатуры, а, например, не случайным образом. Какое максимальное количество элементов можно задать по умолчанию? Сделаем по аналогию с примером, показанным в данном пособии, то есть ограничим это количество элементов числом $30$.
➡ Рассмотрим вторую проблему. В условии говорится, что элементы массива представляют собой целые числа. Но диапазон целых чисел, с точки зрения математики, бесконечен. Следовательно, нам нужно ввести какие-то здравые ограничения. Предлагаю работать с целыми числами на отрезке $[-100; +100]$. Этого диапазона вполне будет достаточно, чтобы продемонстрировать все необходимые вычисления.
💡 Рассмотрим фрагмент постановки задачи:
«вычислить сумму положительных нечетных элементов«.
Вспомним, что число называется положительным, если оно строго больше нуля (например: $11$, $7$, $90$, $55$ и т.д.). Вспомним, что число называется нечетным, если оно не делится на $2$ без остатка (например: $11$, $7$, $55$ и т.д.).
Пусть дан следующий одномерный массив целых чисел (визуализация с точки зрения языка Си, то есть индекс первого элемента равен $0$):
-17 | 0 | 3 | 23 | 6 | -6 | -6 | 10 | значение элемента массива |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | индекс элемента массива |
Положительные нечетные элементы имеют желтый фон. Именно сумму таких элементов и требуется отыскать. Очевидно, что для этого придется просканировать в цикле все элементы заданного одномерного массива и добавлять к результирующей сумме положительные нечетные значения.
💡 Рассмотрим следующий фрагмент постановки задачи:
«максимальную сумму подряд идущих отрицательных элементов«.
Вспомним, что число называется отрицательным, если оно строго меньше нуля (например: $-7$, $-20$, $-99$, $-1$ и т.д.). Также стоит учесть, что сумма отрицательных значений тем больше, чем она ближе к нулю.
Пусть задан следующий одномерный массив целых чисел (визуализация с точки зрения языка Си, то есть индекс первого элемента равен $0$):
-3 | -10 | -5 | 16 | -4 | 17 | 1 | -90 | -1 | 4 | -5 | -6 | значение | ||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | индекс | ||
1-я цепочка | 2- цепочка | 3-я цепочка | 4-я цепочка | № цепочки |
Обратите внимание, что цепочку может образовывать даже один отрицательный элемент (цепочка $№2$). Найдем сумму отрицательных элементов каждой из этих $4$-рех цепочек:
- Сумма цепочки №1 $= (-3) + (-10) + (-5) = -18$.
- Сумма цепочки №2 $= -4$.
- Сумма цепочки №3 $= (-90) + (-1) = -91$.
- Сумма цепочки №4 $= (-5) + (-6) = -11$.
Нам нужно взять максимальное значение из этих $4$-рех полученных. Очевидно, что максимальным является число $-4$, так как оно ближе всех к нулю.
Очень важно помнить о том, что в исходном массиве может не быть ни одного отрицательного элемента. В этом случае выведем на экран информационное сообщение о том, что максимальной суммы подряд идущих отрицательных элементов не существует.
💡 Рассмотрим завершающий фрагмент постановки задачи:
«Сформировать новый массив из элементов, расположенных между первым и последним минимальными элементами исходного массива«.
- Минимальный элемент точно присутствует в заданном массиве.
- Минимальный элемент может быть единственным, то есть быть неповторяющимся, и в этом случае данный блок задания не имеет решения.
Рассмотрим одномерный массив целых чисел, состоящий из $10$ элементов (визуализация с точки зрения языка Си):
Самый наименьший элемент среди элементов заданного массива имеет значение $-77$. Первый минимальный элемент занимает позицию с индексом $2$, а последний минимальный элемент — позицию с индексом $8$. Следовательно, в новый массив мы должны перености все элементы, находящиеся между элементами с индексами $2$ и $8$. Сформированный массив будет состоять из пяти элементов.
Важно понимать, что сформированный массив будет состоять из количества элементов, равных исходному. Но «хвостовые» элементы (это элементы с индексами $[5 .. 9]$ имеют сероватый фон на рисунке выше) будут иметь неопределенное значение.
Необходимые программные функции для кодирования
Ниже представлен список необходимых функций, требующихся для успешного решения поставленной задачи (самое главное — помнить о том, что функция должна строго решать какую-то конкретную одну задачу).
№ | Назначение функции |
1 | Ввод количества элементов одномерного массива (InputCountElements). |
2 | Заполнение элементов одномерного массива целых чисел вводом с клавиатуры (FillVectorByKeyboard). |
3 | Вывод значения элементов одномерного массива на экран (PrintVector). |
4 | Вычисление суммы положительных нечетных элементов (GetSumPlusOddElements). |
5 | Вычисление максимальной суммы подряд идущих отрицательных элементов (GetMaxSumMinusElements). |
6 | Нахождение минимального элемента исходного массива (GetMinElement). |
7 | Получение индекса первого минимального элемента (GetIndexFirstMinElement). |
8 | Получение индекса последнего минимального элемента (GetIndexLastMinElement). |
9 | Формирование нового массива из элементов между первым и последним минимальным (FormVectorBetweenMin). |
Итого получилось $9$ функций. Каждая из этих функций выполняет строго одно действие и это важнейший момент правильного программирования.
Реализация задачи на языке Си
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | #include <stdio.h> // для ввода, вывода (scanf, printf) #include <locale.h> // для руссификации (setlocale) #include <conio.h> // для задержки программы (getch) #define nmax 30 // максимально возможное число элементов в массиве //------------------------------------------------------------------------------------ // ввод с клавиатуры количества элементов массива //------------------------------------------------------------------------------------ int InputCountElements(void) { int countElements; do { printf("Введите количество элементов одномерного массива из отрезка [2 ... %d]: ", nmax); scanf("%d", &countElements); } while((countElements < 2) || (countElements > nmax)); return countElements; } //------------------------------------------------------------------------------------ // Заполнение элементов одномерного массива целых чисел вводом с клавиатуры //------------------------------------------------------------------------------------ void FillVectorByKeyboard(int pvector[], const int pcount) { int i; printf("\nВам предстоит ввести %d целых чисел из отрезка [-100 ... +100].\n", pcount); for(i = 0; i < pcount; i++) { printf("\t- введите %d-й элемент массива: ", (i + 1)); scanf("%d", &pvector[i]); } } //------------------------------------------------------------------------------------ // Вывод значения элементов одномерного массива на экран //------------------------------------------------------------------------------------ void PrintVector(const int pvector[], const int pcount, const char* pmessage) { int i; printf(pmessage); for(i = 0; i < pcount; i++) printf("%7d", pvector[i]); } //------------------------------------------------------------------------------------ // Вычисление суммы положительных нечетных элементов //------------------------------------------------------------------------------------ int GetSumPlusOddElements(const int pvector[], const int pcount) { int sum = 0; int i; for(i = 0; i < pcount; i++) if((pvector[i] > 0) && (pvector[i] % 2 == 1)) sum += pvector[i]; return sum; } //------------------------------------------------------------------------------------ // Вычисление максимальной суммы подряд идущих отрицательных элементов //------------------------------------------------------------------------------------ int GetMaxSumMinusElements(const int pvector[], const int pcount) { int i; int maxSum = 0; int currentSum = 0; for(i = 0; i < pcount; i++) { if(pvector[i] < 0) if(currentSum == 0) currentSum = pvector[i]; else currentSum += pvector[i]; if((pvector[i] >= 0) && (currentSum != 0)) { if((currentSum > maxSum) || (maxSum == 0)) maxSum = currentSum; currentSum = 0; } } if((currentSum < 0) && ((currentSum > maxSum) || (maxSum == 0))) maxSum = currentSum; return maxSum; } //------------------------------------------------------------------------------------ // Нахождение минимального элемента исходного массива //------------------------------------------------------------------------------------ int GetMinElement(const int pvector[], const int pcount) { int minElement = pvector[0]; int i; for(i = 1; i < pcount; i++) if(pvector[i] < minElement) minElement = pvector[i]; return minElement; } //------------------------------------------------------------------------------------ // Получение индекса первого минимального элемента //------------------------------------------------------------------------------------ int GetIndexFirstMinElement(const int pvector[], const int pcount, const int pminElem) { int i; int index; for(i = 0; i < pcount; i++) if(pvector[i] == pminElem) { index = i; break; } return index; } //------------------------------------------------------------------------------------ // Получение индекса последнего минимального элемента //------------------------------------------------------------------------------------ int GetIndexLastMinElement(const int pvector[], const int pcount, const int pminElem) { int i; int index; for(i = (pcount - 1); i >= 0; i--) if(pvector[i] == pminElem) { index = i; break; } return index; } //------------------------------------------------------------------------------------ // Формирование нового массива из элементов между первым и последним минимальным //------------------------------------------------------------------------------------ void FormVectorBetweenMin(const int pvector[], const int pfirstIndex, const int plastIndex, int pformVector[]) { int i; int insertPosition = -1; for(i = (pfirstIndex + 1); i < plastIndex; i++) pformVector[++insertPosition] = pvector[i]; } //------------------------------------------------------------------------------------ // главная функция программы (точка входа) //------------------------------------------------------------------------------------ int main(void) { int vector[nmax]; // исходный одномерный массив int formVector[nmax]; // сформированный в результате обработки массив int count; // количество активных элементов исходного массива int sumMinus; // максимальная сумма подряд идущих отриц.элементов int minElem; // значение минимального элемента в исходном массиве int indexFirst, indexLast; // индексы соот-но первого и последнего минимального setlocale(LC_ALL, "rus"); // настройка руссификации диалогов в программе count = InputCountElements(); FillVectorByKeyboard(vector, count); PrintVector(vector, count, "\nЭлементы исходного массива: "); printf("\nСумма положительных нечетных элементов массива: %d", GetSumPlusOddElements(vector, count)); sumMinus = GetMaxSumMinusElements(vector, count); if(sumMinus == 0) printf("\nИсходный массив не содержит ни одного отрицательного элемента!"); else printf("\nМаксимальная сумма подряд идущих отрицательных элементов: %d", sumMinus); minElem = GetMinElement(vector, count); printf("\nМинимальный элемент исходного массива имеет значение: %d", minElem); indexFirst = GetIndexFirstMinElement(vector, count, minElem); indexLast = GetIndexLastMinElement(vector, count, minElem); if(indexFirst == indexLast) printf("\nСформировать новый массив невозможно, т к исходный массив содержит единственный минимальный!"); else { FormVectorBetweenMin(vector, indexFirst, indexLast, formVector); PrintVector(formVector, (indexLast - indexFirst - 1), "\nЭлементы сформированного массива: "); } printf("\n\nДля завершения работы программы нажмите ENTER..."); getch(); // задержка программы, чтобы можно было просмотреть результат return 0; // завершение работы программы и передача управления в ОС } //------------------------------------------------------------------------------------ |
Результаты работы программы


Стоимость заказа работы
💡 Стоимость одной программы из любого варианта составляет $200$ рублей.
💡 Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $200$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более 10 минут.
Добавить комментарий