Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Леднева_программирование_на_JAVA.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Подсчет суммы, количества и среднего значения в одномерных массивах

Вычисление суммы и подсчет количества элементов массива, имеющих заданное свойство, выполняется по общему алгоритму, рассмотренному ранее, т.е. постепенно, путем накапливания.

Задача 5.1. Ввести оценки 25 студентов по 1 предмету. Подсчитать средний балл и количество оценок выше средней.

Алгоритм

1.1. Ввести количество студентов n.

1.2. Для номера i от 0 до n – 1

Ввести оценку [i]

2.1. Для номера i от 0 до n – 1 // для просмотра введенных оценок

Вывести оценку [i] // в удобном виде

3.1. Принять сумму баллов = 0

3.2. Для номера оценки i от 0 до n – 1

Сумма = сумма + оценка [i]

4. Вычислить средний балл.

5.1. Принять количество оценок выше средней=0.

5.2. Для номера от 0 до n – 1

Если оценка [i] > среднего, то

количество = количество +1.

5.3. Вывести количество.

6. Закончить.

Далее представлен код программы (метод main).

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int k;

do {

System.out.print("Введите количество студентов => ");

k=sc.nextInt();

if(k>20){

System.out.println("Количество студентов должно быть <= 25");

}

} while (k>25);

System.out.println("\tВведите оценки \b"); // равно кол-ву студентов

int ocenka[]=new int[k];

for (int i = 0; i < ocenka.length;i++)

ocenka[i]=sc.nextInt();

// вывод для наглядности

System.out.println("Введенные оценки:");

for (int i = 0; i < ocenka.length; i++)

System.out.print("\t"+ocenka[i]);

// подсчет суммы и средней оценки

int sum=0;

for (int i = 0; i < ocenka.length; i++)

sum+=ocenka[i];

double sr=(double )sum/k;

System.out.println("\nСредняя оценка sr="+sr);

// подсчет количества оценок выше средней

int kol=0;

for (int i = 0; i < ocenka.length; i++)

if (ocenka[i]> sr)

kol++;

System.out.println("Количество оценок выше средней kol="+kol);

}

Нахождение минимума и максимума

Классический алгоритм поиска минимума или максимума использует специальные переменные для хранения искомых величин, например min или max:

1) этим переменным вначале присваивается значение первого числа из последовательности (например x1);

2) начиная со второго числа, производится сравнение этого числа со значением переменной min (или max). Если число из массива меньше min (больше max), то на место min (max) записывается это число.

После просмотра всего массива переменные min и max получат искомые значения.

Общий алгоритм нахождения минимума и максимума рассмотрен на примере задачи.

Задача 5.2. Ввести в ЭВМ массив из n чисел x1, х2,..., х[n], n<20. Найти минимальное и максимальное из них и их номера.

Алгоритм 1 (общий):

1. Ввести массив x.

2. Вывести массив x.

3. Найти и вывести минимум и максимум и их индексы.

4. Закончить.

Алгоритм 2 (уточненный):

1.1. Ввести количество чисел n.

1.2. Для номера i от 0 до x. length – 1

Ввести x [i].

2. Для номера i от 0 до x. length – 1

Ввести x [i].

3.1. max = x [0].

3.2. nommax=0.

3.3. min = x [0].

3.4. nommin=0.

3.5. Для номера i от 0 до x. length – 1

3.5.1. Если число [i] > max, то

a) max = x [i];

б) nommax=i;

3.5.2. Если число [i] < min,

а) min = x [i];

б) nommin=i;

3.6. Вывести max, nommax, min, nommin.

4. Закончить.

Программа для этого алгоритма будет иметь следующий вид.

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int k;

do {

System.out.print("Введите количество элементов массива => ");

k=sc.nextInt();

if(k>20){

System.out.println("Количество элементов должно быть < 20");

}

} while (k>20);

System.out.println("\tВведите элементы массива ");

int x[]=new int[k];

for (int i = 0; i < x.length;i++) {

x[i]=sc.nextInt();

}

// вывод массива

System.out.println("Исходный массив:");

for (int i = 0; i < x.length; i++) {

System.out.print("\t"+x[i]);

}

System.out.println("\n Поиск максимума и минимума");

int nommin=0;

int min=x[0];

int nommax=0;

int max=x[0];

for (int i = 1; i < x.length; i++) {

if ((x[i]<min)){

min=x[i];

nommin=i;

}

if ((x[i]<min)){

max=x[i];

nommax=i;

}

}

System.out.println("min= "+min +", его номер =" + nommin

+ " max="+ max +", его номер =" + nommax);

}

Выбор начального значения для максимума (минимума) для части массива. Следует отметить, что чаще всего поиск максимума и минимума ведется не во всем массиве, а среди элементов, отвечающих определенному условию, например поиск максимума среди отрицательных чисел, поиск минимума среди четных чисел и т.д. Задать элемент с индексом [0] в качестве начального значения максимума (минимума) для сравнения невозможно, так как он может не подходить требуемому условию, т.е. может не быть отрицательным или четным.

Предлагается начальное значение задавать не из элементов массива, а из общего диапазона допустимых значений элементов массива для решаемой задачи. Причем при поиске максимума начальное значение следует выбирать наименьшее из возможного диапазона, при поиске минимума – наибольшее из возможного диапазона. Номер максимума (минимума) можно задать равным -1.

Пример 1. Для определения максимального роста человека можно принять диапазон значений от 0 до 3 метров. Поэтому начальное значение для поиска максимального роста можно задать равным 0, а номер равным -1.

Пример 2. Для отрицательных элементов массива диапазон – от какого-то отрицательного значения, минимального для данной задачи, до 0. При нахождении минимума среди отрицательных чисел начальные значения можно выбрать:

– минимум=0, т.е. максимальное из диапазона;

– номер минимума= -1.

При нахождении максимума среди отрицательных чисел начальные значения можно выбрать:

– минимум= -10000, т.е. минимальное из диапазона;

– номер минимума= -1.

Если после выполнения поиска номер минимума (максимума) остался равным -1, то следует выдать сообщение, что чисел, соответствующих заданному условию, в массиве нет.