- •1. Краткие теоретические сведения
- •1.1. Переменные с индексами и массивы
- •1.2. Описание массивов в программах
- •1.3. Динамические массивы
- •1.4. Программирование вычислительных процессов, содержащих одномерные массивы (Алгоритмы обработки одномерных массивов)
- •1.4.1. Инициализация массива
- •1.4.2. Формирование и вывод массива
- •1.4.3. Ввод – вывод статического одномерного массива
- •1.4.4. Ввод – вывод динамического одномерного массива
- •1.4.5. Суммирование элементов одномерного массива
- •1.4.6. Табуляция значений функции, аргумент которой – одномерный массив
- •1.4.7. Поиск минимального и максимального значений одномерного массива
- •1.4.8. Сортировка значений одномерного массива по возрастанию (убыванию) методом попарного сравнения
- •1.4.9. Сортировка значений одномерного массива по возрастанию (убыванию) методом нахождения минимума (максимума)
- •Нахождения минимума для примера 10.8
- •1.4.10. Перестановка двух элементов массива
- •1.4.11. Вычисление суммы элементов массива
- •1.4.12. Подсчет количества элементов массива, удовлетворяющих заданному условию
- •1.4.13. Вычисление произведения элементов массива
- •1.4.14. Поиск элементов, обладающих заданным свойством
- •1.4.15. Поиск в упорядоченном массиве
- •1.4.16. Поиск минимального и максимального элемента массива и его порядкового номера (индекса)
- •1.4.17. Копирование массивов
- •1.4.18. Формирование нового массива
- •1.4.19. Примеры решения задач по обработке одномерных массивов
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Вычисление сумм, количеств и произведений элементов массива
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Поиск минимального и максимального элементов массива
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Формирование новых массивов
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Обработка упорядоченных массивов
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Задачи, сводящиеся к обработке одномерных массивов
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.6. Задание 6. Комбинированные задачи
- •2.4.6.1. Условие задания
- •2.4.6.2. Пример для варианта 30
- •2.4.6.3. Программа
- •2.5.1.2. Пример для варианта 30
- •2.5.1.3. Программа
- •2.5.1.4. Тестирование
- •2.5.2. Задание 8. Комбинированные задания
- •2.5.2.1. Условие задания
- •Варианты заданий
- •5. Пример решения задачи (вариант 30)
- •2.5.2.2. Разработка алгоритма.
- •2.5.2.3. Определение переменных программы
- •2.5.2.4. Разработка текста программы
- •2.5.2.5. Программа
- •2.5.2.6. Отладка программы
- •2.5.2.7. Результаты работы программы
- •2.5.3. Задание 9. Комбинированные задания
- •2.5.3.1. Варианты заданий
- •2.5.3.2. Пример программы обработки динамических массивов
- •2.5.3.3. Программа
- •2.5.3.4. Тестирование
- •2.5.4. Задание 10. Вычисления элементов вектора по формуле
- •2.5.4.2. Пример для варианта 30
- •2.5.4.3. Программа
- •2.5.5.4. Тестирование
- •2.5.5. Задание 11. Вычисления сумм и произведений векторов
- •2.5.5.2. Пример для варианта 30
- •2.4.11.3. Программа
- •2.5.5.4. Тестирование
- •2.5.6. Задание 12. Произвольные задачи
- •2.5.6.2. Пример для варианта 30
- •2.5.6.3. Программа
- •2.5.6.4. Тестирование
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Переменные с индексами и массивы 2
Нахождения минимума для примера 10.8
4. Изменить значения элементов с индексами k и l так, чтобы первый принял значение второго, а второй - первого, т.е. фактически произвести перестановку минимального элемента с первым элементом в неупорядоченной части массива (блок 14). Поясняя действия выполняемые в блоке 14 и назначение вспомогательной переменной b, на первый взгляд, достаточно записать ak = аl; аl = ak , что в соответствии с ранее принятыми соглашениями означало бы:
принять значение ak равным аl
принять значение аl равным ak.
Однако обмен значений а этом случае не произойдет. После первого действия прежнее значение ak окажется утраченным и при выполнении второго действия аl не получит этого значения. В результате ak и аl будут иметь одно и то же значение, которое имел до этого элемент аl. Если порядок действия изменить, записать аl = ak; ak = аl, то в итоге оба элемента будут иметь значение аl. Поэтому необходимо использовать вспомогательную величину b и выполнять действия в таком же порядке, как на блок-схеме. Значение ak сперва запоминается в виде значения b, и только после этого элемент ak принимает значение аl. В результате выполнения последнего действия элемент аl принимает то значение, которое прежде имел элемент ak и которое было зафиксировано с помощью b.
5. Увеличить длину упорядоченной части на единицу (блок 15).
6. Проверить, не превышает ли m-1 количество элементов упорядоченной части, если превышает, то перейти к блоку 17, если не превышает, то перейти к блоку 8.
7. Вывести (сохранить) значения элементов последовательности, теперь уже полностью упорядоченной (блоки 17 - 20).
Программа на языке С++ может иметь следующий вид:
/*Сортировка методом нахождения минимума */
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define m 19
int main()
{
int k, i, j, l;
float a[m],b, c;
// Ввод массива a
for (k=0; k<=m; k++)
{
cout <<"Введите " << k << "-ый элемент массива a: ";
cin >> a[k];
}
// Сортировка массива a по возрастанию
for (l=0; l<=m; l++)
{
k=l;
for (j=l+1; j<=m; j++)
{if (a[j] < a[k]) k = j;}
b = a[k]; a[k]=a[l]; a[l] = b;
}
// Вывод отсортированного массива a
for (k=0; k<=m; k++)
{
cout <<"k = " << k << " a[k] = " << a[k] << endl;
}
cout << "Нажмите любую клавишу..." ;
getch();
return 0;
}
1.4.10. Перестановка двух элементов массива
Для перестановки двух элементов массива x[] с индексами k и m, необходимо использование дополнительной переменной (tmp), для хранения копии одного из элементов (рис. 10.6а, но можно обойтись и без использования дополнительной переменной tmp. В этом случаи алгоритм перестановки имеет следующий вид (рис. 10.6б).
|
|
а) |
б) |
Рис. 10.6 Алгоритм и фрагмент программы перестановки двух элементов массива c использованием дополнительной переменной а) и без нее б) |
|
|
|
В большинстве случаев предпочтительнее использовать первый способ, поскольку он не содержит дополнительных вычислений, что особенно важно при перестановке вещественных чисел.
Пример 10.11
Переставить первый и последний элемент массива x[] местами. Количество элементов массива n.
Решение
В С++ нумерация элементов массива начинается с нуля, поэтому номер последнего элемента массива (n–1) .
1 способ: tmp=x[0]; x[0]=x[n-1]; x[n-1]=tmp;
2 способ: x[0]=x[0]+x[n-1]; x[n-1]=x[0]-x[n-1]; x[0]=x[0]-x[n-1];
Пример 10.12
Поменять местами заданный элемент массива x[k] с последующим.
Решение
При решении этой задачи необходимо учитывать, что если заданный элемент массива x[k] является последним, то обмен выполнить не возможно, поскольку последующий элемент отсутствует.
|
if(k == n-1) puts("Обмен не возможен."); else { tmp=x[k]; x[k]=x[k+1]; x[k+1]=tmp; } |
Рисунок 10.7 Алгоритм и фрагмент программы перестановки заданного элемент массива x[k] с последующим |
|
|
|
При перестановке с предыдущим элементом, обмен невозможен если заданный элемент является первым (k=0).