Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг 4.2



#include “stdafx.h”

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

const int n = 10;

int a[n] = {1, 3, -5, 1, -2, 1, -1, 3, 8, 4};

int i, imax, imin, count;

setlocale(LC_ALL, "Russian");

for(i = imax = imin = 0; i < n; i++)

{

if(a[i] > a[imax]) imax = i;

if(a[i] < a[imin]) imin = i;

}

cout << “\n\t max = “ << a[imax] << “\t min = “

<< a[imin] << endl;

int d = 0;

if(imax < imin) d = 1;

else if(imax > imin) d = -1;

for(count = 0, i = imax + d; i!= imin; i += d)

if(a[i] > 0) count++;

cout << “Количество положительных “ << count

<< endl;

getch();

return 0;

}

Ввод массива в этом варианте программы осуществляется с клавиатуры. Напоми­наем, что в этом случае желательно для проверки вывести введенные значения на печать.

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

1) a[imin] расположен левее a[imax];

2) a[imin] расположен правее a[imax];

3) a[imin] иa[imax] совпадают.

Последняя ситуация имеет место, когда в массиве все элементы имеют одно и то же значение. Кстати, во втором варианте программы третий случай корректно об­рабатывается благодаря значению d = 0 для этой ситуации. Желательно также проверить, как работает программа, если a[imin] и a[imax] расположены рядом, а также в начале и в конце массива (граничные случаи). Элементы массива нужно задавать как положительные, так и отрицательные.

Разница между приведенными способами решения несущественна, но первый ва­риант более «прозрачен», поэтому он, на наш взгляд, предпочтительнее.

Измените приведенную выше программу так, чтобы она вычисляла произведение отрицательных элементов, расположенных между минимальным и максимальным по модулю элементами массива.

Часто бывает, что точное количество элементов в исходном массиве не задано, но известно, что оно не может превышать некое конкретное значение. В этом случае память под массив выделяется «по максимуму», а затем заполняется только часть этой памяти. Память можно выделить либо с помощью оператора описания в сте­ке или сегменте данных, либо в динамической области. Фактическое количество введенных элементов запоминается в переменной, которая затем участвует в орга­низации циклов по массиву, задавая его верхнюю границу. Этот подход является весьма распространенным, поэтому мы приводим ниже небольшую, но полезную программу, в которой выполняется только считывание элементов массива с кла­виатуры и их вывод на экран:

const int n = 1000;

int a[n];

int i, kol_a;

setlocale(LC_ALL, "Russian");

cout << “Введите количество элементов: “;

cin >> kol_a;

if(kol_a > n)

{

cout << “Превышение размера массива“ << endl;

return 1;

}

for(int i = 0; i < kol_a; i++) cin >> a[i];

for(int i = 0; i < kol_a; i++) cout << a[i] << “ “;

cout << endl;

Несмотря на то, что значение константы n определяется «с запасом», надо обяза­тельно проверять, не запрашивается ли большее количество элементов, чем воз­можно. Привычка к проверке подобных, казалось бы, маловероятных случаев по­зволит вам создавать более надежные программы, а нет ничего более важного для программы, чем надежность.

Пример 4.2. Выполнить сортировку массива по возрастанию, состоящего из n элементов методом «пузырька».

На языке C++ пузырьковая сортировка массива может быть запрограммирована следующим образом:





Дата публикования: 2015-10-09; Прочитано: 254 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...