Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Листинг 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++ пузырьковая сортировка массива может быть запрограммирована следующим образом:
|