Помощь в написании студенческих работ
Антистрессовый сервис

Одномерные массивы

Практическая работаПомощь в написанииУзнать стоимостьмоей работы

1) i-му элементу нового массива Mnew i присваиваем значение (2i+1)-го элемента массива M2i+1, (т.е. элемента находящегося в нечетной позиции с учетом, что позиции нумеруются с 0, а не с 1); иначе (т.е. когда индекс находится во второй половине массива): I — индексы элементов массива (переменная типа int), NaydenPerv0 — флаг, который принимает значение ИСТИНА после нахождения в массиве элемента… Читать ещё >

Одномерные массивы (реферат, курсовая, диплом, контрольная)

Министерство образования и науки Российской Федерации Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования

«Южно-Уральский государственный университет» в г. Нижневартовске Кафедра «Информатика»

Практическая работа Одномерные массивы.

по дисциплине Программирование Автор Алтынбаев Т.Д.

Нижневартовск 2014

1. ПОСТАНОВКА ЗАДАЧИ В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) сумму положительных элементов массива;

2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.

Упорядочить элементы массива по убыванию.

1.1 Исходные данные (входные данные) Входные данные: N, M, где N — количество элементов массива (переменная типа int), M — массив целочисленных элементов (типа int).

1.2 Перечень результатов (выходные данные)

min — минимальный по модулю элемент массива (переменная типа int),

S — сумма положительных элементов массива (переменная типа int).

1.3 Вспомогательные переменные

i — индексы элементов массива (переменная типа int), NaydenPerv0 — флаг, который принимает значение ИСТИНА после нахождения в массиве элемента, равного нулю (переменная типа bool), Mnew — преобразованный массив целочисленных элементов (типа int).

1.4 Среда функционирования Задача будет решена с помощью алгоритма, реализованного в среде Microsoft Visual C++ 2008 Express на языке программирования С++.

2. ПРОЕКТИРОВАНИЕ

2.1 Алгоритм В ходе проектирования алгоритма решения поставленной задачи была разработана следующая последовательность действий, необходимая для получения результатов:

1) Присваиваем размерности массива (переменной N) начальное значение 0 (N = 0);

2) До тех пор, пока пользователь не введет значащую размерность, то есть пока (N 0), выполнять следующее:

2.1) запрашивать у пользователя ввод положительной размерности массива N.

3) Заполнение N элементами массива M;

4) Вывод N элементов массива M;

5) Нахождение минимального по модулю элемента min массива M и его вывод;

6) Нахождение суммы модулей элементов S массива M, расположенных после первого элемента, равного нулю, и ее вывод;

7) Преобразование массива M в новый массив Mnew таким образом, чтобы в первой половине нового массива располагались элементы, стоящие в четных позициях массива M, а во второй половине — элементы, стоящие в нечетных позициях массива M. Вывести новый массив Mnew.

В данном алгоритме пункты 3−7 были детализированы следующим образом:

3) Заполнение N элементами массива M:

3.1) Для каждого индекса i, пробегая значения от 0 до (N-1) (то есть 0 i < N), необходимо выполнить следующее:

3.1.1) запрашивать у пользователя ввод i-го элемента массива Mi.

4) Вывод N элементов массива M:

4.1) Для каждого индекса i, пробегая значения от 0 до (N-1) (то есть 0 i < N), необходимо выполнить следующее:

4.1.1) выводить i-й элемент массива Mi.

5) Нахождение минимального по модулю элемента min массива M:

5.1) Присваиваем переменной min значение первого элемента массива M0 (min=M0)

5.2) Для каждого индекса i, пробегая значения от 0 до (N-1) (то есть 0 i < N), необходимо выполнить следующее:

5.2.1) если переменная min по модулю больше чем модуль i-го элемента массива Mi (то есть |min| < | Mi|), то:

5.2.1+.1) присваиваем переменной min значение i-го элемента массива Mi (min = Mi).

5.3) Возвращаем значение переменной min.

6) Нахождение суммы модулей элементов S массива M, расположенных после первого элемента, равного нулю:

6.1) Присваиваем флагу «Найден первый ноль» значение ЛОЖЬ (NaydenPerv0 = false).

6.2) Присваиваем переменной S начальное значение 0 (S=0).

6.3) Для каждого индекса i, пробегая значения от 0 до (N-1) (то есть 0 i < N), необходимо выполнить следующее:

6.3.1) если i-й элемент массива равен 0 и первый ноль еще не найден (то есть Mi = 0 и NaydenPerviy0 = false), то:

6.3.1+.1) флагу «Найден первый ноль» присваиваем значение ИСТИНА (NaydenPerv0 = true).

6.3.2) если первый ноль уже найден (то есть NaydenPerviy0=true), то:

6.3.2+.1) переменную S увеличиваем на модуль значение i-го элемента массива (S = S + |Mi|).

6.4) Возвращаем значение переменной S.

7) Преобразование массива M в новый массив Mnew таким образом, чтобы в первой половине нового массива располагались элементы, стоящие в четных позициях массива M, а во второй половине — элементы, стоящие в нечетных позициях массива M:

7.1) Для каждого индекса i, пробегая значения от 0 до (N-1) (то есть 0 i < N), необходимо выполнить следующее:

6.3.1) если индекс i не достиг середины массива (то есть i < целой части от деление N/2), то:

6.3.1+.1) i-му элементу нового массива Mnew i присваиваем значение (2i+1)-го элемента массива M2i+1, (т.е. элемента находящегося в нечетной позиции с учетом, что позиции нумеруются с 0, а не с 1); иначе (т.е. когда индекс находится во второй половине массива):

6.3.1-.1) i-му элементу нового массива Mnew i присваиваем значение (i-2*(целое от N/2))-го элемента массива Mi-2*Целое (N/2), (т.е. элемента находящегося в четной позиции).

7.2) Вывод массива Mnew, то есть выполнение пункта 4 для массива Mnew.

Пункты 3−7 было решено выделить в отдельные алгоритмы (подпрограммы), обращение к которым осуществляется из основного алгоритма (главной программы).

2.2 Блок-схема Блок-схема спроектированного алгоритма представлена на рисунке ниже:

3. РЕАЛИЗАЦИЯ Для реализации нахождения результата задачи разработанный ранее алгоритм был реализован с помощью языка программирования C++. Код получившейся программы представлен ниже:

#include

#include

#include

using namespace std;

int main ()

{

SetConsoleOutputCP (1251);

int n; //размер массива

cout<<" Введите размерность массива: «;

cin>>n;

int *mas = new int[n]; //выделяем память под массив

int S=0; //сумма пол. эл. массива

for (int i=0; i

{

cout<<" Введите «<<» элемент массива: «;

cin>>mas[i]; //ввод массива

if (mas[i]>0) //если эл. мас. >0

{

S+=mas[i]; //прибавляем его к сумме

}

}

cout<<" nСумма положительных элементов массива: «<

int min=abs (mas[0]);

int indexMin=0;

int max=abs (mas[0]);

int indexMax=0;

for (int i=0; i

{

if (abs (mas[i])>=abs (max))

{

max = mas[i];

indexMax=i;

}

if (abs (mas[i])<=abs (min))

{

min = mas[i];

indexMin=i;

}

}

cout<<" nМинимальный по модулю элемент массива: «<<» его индекс: «<

cout<<" nМаксимальный по модулю элемент массива: «<<» его индекс: «<

int P=1; //произведение

//вычисление произведения

if (indexMin

{

for (int i=indexMin; i

{

P*=mas[i];

}

}

else

{

for (int i=indexMax; i

{

P*=mas[i];

}

}

cout<<" nПроизведение элементов массива между минимальным и максимальным: «<

cout<<" nУпорядоченый массив: n" ;

for (int i=0; i

{

for (int j=i; j

{

if (mas[i]

{

int temp = mas[i];

mas[i]=mas[j];

mas[j]=temp;

}

}

cout<<" «<

}

getch ();

delete[] mas;

return 0;

}

4. ТЕСТИРОВАНИЕ

4.1 Тестирование алгоритма Сначала выполним трассировку тех функций (подпрограмм), которые формируют результаты. А именно функции:

MinPoModuluElement (M, N) — функция нахождения минимального по модулю элемента массива M,

SumPoslePervogo0(M, N) — функция нахождения суммы модулей элементов массива M, расположенных после первого элемента, равного нулю,

PreobrazovanieMassiva (M, N) — функция преобразования массива M таким образом, чтобы в первой половине располагались элементы, стоящие в четных позициях массива, а во второй половине — элементы, стоящие в нечетных позициях.

Трассировочная таблица для функции MinPoModuluElement (M, N) с исходными данными N=5 и M={1,2,0,-3,5}:

Номер шага

Описание шага функции MinPoModuluElement для N=5 и M={1,2,0,-3,5}

N

M

min

i

Mi

|min|>|Mi|

Вызов функции MinPoModuluElement для N=5 и M={1,2,0,-3,5}

{1,2,0,-3,5}

5.1

min=M0

5.2

Для i пробегаем значения от 0 до (N-1): i=0

5.2.1

Т.к. |min|=|Mi|, то переходим к п. 5.2

ЛОЖЬ

5.2

Для i пробегаем значения от 0 до (N-1): i=i+1

5.2.1

Т.к. |min|<|Mi|, то переходим к п. 5.2

ЛОЖЬ

5.2

Для i пробегаем значения от 0 до (N-1): i=i+1

5.2.1

Т.к. |min|>|Mi|, то переходим к п. 5.2.1+.1

ИСТИНА

5.2.1+.1

min = Mi

5.2

Для i пробегаем значения от 0 до (N-1): i=i+1

— 3

5.2.1

Т.к. |min|<|Mi|, то переходим к п. 5.2

ЛОЖЬ

5.2

Для i пробегаем значения от 0 до (N-1): i=i+1

5.2.1

Т.к. |min|<|Mi|, то переходим к п. 5.2

ЛОЖЬ

5.2

Для i пробегаем значения от 0 до (N-1): i=i+1.

Так как i перешло за границу диапазона, т. е.

i N, то завершаем цикл и переходим к п. 5.3

5.3

Возвращаем из функции значение переменной min

Трассировочная таблица для функции SumPoslePervogo0(M, N) с исходными данными N=5 и M={1,2,0,-3,5}:

Номер шага

Описание шага функции SumPoslePervogo0 для N=5 и M={1,2,0,-3,5}

N

M

Nayden Perv0

S

i

Mi

Mi=0 и NaydenPerv0=ЛОЖЬ

Вызов функции SumPoslePervogo0 для N=5 и M={1,2,0,-3,5}

{1,2,0,-3,5}

6.1

NaydenPerv0 = ЛОЖЬ

ЛОЖЬ

6.2

S=0

6.3

Для i пробегаем значения от 0 до (N-1): i=0

6.3.1

Т.к.Mi0, то переходим к п. 6.3.2

ЛОЖЬ

6.3.2

Т.к. NaydenPerv0=ЛОЖЬ, то переходим к п. 6.3

6.3

Для i пробегаем значения от 0 до (N-1): i=i+1

6.3.1

Т.к.Mi0, то переходим к п. 6.3.2

ЛОЖЬ

6.3.2

Т.к. NaydenPerv0=ЛОЖЬ, то переходим к п. 6.3

6.3

Для i пробегаем значения от 0 до (N-1): i=i+1

6.3.1

Т.к.Mi=0 и NaydenPerv0=ЛОЖЬ, то переходим к п. 6.3.1+.1

ИСТИНА

6.3.1+.1

NaydenPerv0 = ИСТИНА

ИСТИНА

6.3.2

Т.к. NaydenPerv0= ИСТИНА, то переходим к п. 6.3.2+.1

6.3.2+.1

S = S + |Mi|

6.3

Для i пробегаем значения от 0 до (N-1): i=i+1

— 3

6.3.1

Т.к.Mi0, то переходим к п. 6.3.2

ЛОЖЬ

6.3.2

Т.к. NaydenPerv0= ИСТИНА, то переходим к п. 6.3.2+.1

6.3.2+.1

S = S + |Mi|

6.3

Для i пробегаем значения от 0 до (N-1): i=i+1

6.3.1

Т.к.Mi0, то переходим к п. 6.3.2

ЛОЖЬ

6.3.2

Т.к. NaydenPerv0= ИСТИНА, то переходим к п. 6.3.2+.1

6.3.2+.1

S = S + |Mi|

6.3

Для i пробегаем значения от 0 до (N-1): i=i+1. Так как i перешло за границу диапазона, т. е. i N, то завершаем цикл и переходим к п. 5.3

6.4

Возвращаем значение переменной S

Аналогично здесь же нужно привести трассировочную таблицу функций PreobrazovanieMassiva (M, N).

Трассировочная таблица для программы Main с исходными данными N=5 и M={1,2,0,-3,5}:

Номер шага

Описание шага алгоритма

N

N0

M

MinPoModulu Element (M, N)

SumPosle Pervogo0(M, N)

N=0

Пока (N<=0) выполняем п. 2.1

ИСТИНА

2.1

Вводим N

Вызов функции ZapolnenieMassiva (M, N)

{1,2,0, -3,5}

Вызов функции PechatMassiva (M, N)

Вызов функции MinPoModuluElement (M, N) и вывод результата этой функции

Вызов функции SumPoslePervogo0(M, N) и вывод результата этой функции

Вызов функции PreobrazovanieMassiva (M, N)

4.2 Тестирование программы Скриншот, демонстрирующий работу программы при исходных данных N=5 и M={1,2,0,-3,5}:

ЗАКЛЮЧЕНИЕ

массив убывание трассировка алгоритм В ходе практической работы был разработан алгоритм, вычисляющий заданное арифметическое выражения, предварительно анализируя его на область определения выражения. Кроме того, данный алгоритм был программно реализован средствами среды Microsoft Visual Studio C++ 2008 Express и протестирован.

Тестирование показало, что для случаев возможных сбоев программа выполняется корректно, и правильно вычисляет арифметическое выражение на области его определения.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Павловская Т. А., С/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.: Питер, 2004.

Показать весь текст
Заполнить форму текущей работой