Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 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++ пузырьковая сортировка массива может быть запрограммирована следующим образом:

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.005 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал