суббота, 31 декабря 2011 г.

С новым, 2012-м, годом!

Всех поздравляю с наступающим Новым Годом!
Счастья, успехов, радости!
Учителям -- хороших учеников, ученикам -- хороших учителей!
И пусть новый, 2012-й год, будет только лучше -- каким бы хорошим не был год уходящий!
Ура!

пятница, 16 декабря 2011 г.

Для Пензы: массивы

Уважаемые лицеисты!
Основные, базовые задачи на массивы есть в блоге несколькими сообщениями раньше: "Начали про массивы" называется -- пользуйтесь на здоровье)))
Удачи!

четверг, 15 декабря 2011 г.

Для Салавата: упражнения на методы




Задание №1
Напиши класс, который выполняет следующие действия (каждое – с помощью отдельного метода):
  • ·        заполняет случайными однозначными числами (включая отрицательные!) массив (размер массива устанавливается гибко);
  • ·        выводит содержание массива на экран;
  • ·        подсчитывает сумму массива и выводит ее на экран;
  • ·        подсчитывает среднее арифметическое значений массива и выводит его на экран.



Задание №2
Напиши класс, который выполняет следующие действия (каждое – с помощью отдельного метода):
  • ·        заполняет случайными двузначными положительными числами массив (размер массива устанавливается гибко);
  • ·        выводит содержание массива на экран;
  • ·        принимает с клавиатуры цифру (однозначное положительное число) и определяет количество элементов массива, заканчивающихся на эту цифру – и выводит результат на экран;
  • ·        повторяет предыдущий пункт еще 4 раза


Задание №3
Напиши класс, который выполняет следующие действия (каждое – с помощью отдельного метода):
  • ·        заполняет случайными трехзначными числами массив (размер массива устанавливается гибко);
  • ·        выводит содержание массива на экран;
  • ·        подсчитывает сумму четных значений в массиве – и выводит результат на экран;
  • ·        подсчитывает сумму нечетных значений в массиве – и выводит результат на экран;
  • ·        сравнивает эти две суммы – и выводит на экран соответствующее результату сравнения текстовое сообщение.

Примечание: подумайте, как третий и четвертый пункты выполнить с помощью одного и того же метода.

Задание №4
Напиши класс, который сначала принимает с клавиатуры два целых числа (в переменные а и b), а затем выполняет следующие действия (каждое – с помощью отдельного метода):
  • ·        заполняет случайными числами массив (размер массива устанавливается гибко) в пределах от а до b;
  • ·        выводит содержание массива на экран;
  • ·        подсчитывает сумму значений в четных ячейках массива – и выводит результат на экран;
  • ·        подсчитывает сумму значений в нечетных ячейках массива – и выводит результат на экран;
  • ·        сравнивает эти две суммы – и выводит на экран соответствующее результату сравнения текстовое сообщение.

Примечание: подумайте, как третий и четвертый пункты выполнить с помощью одного и того же метода.

Задание №5
Напиши класс, который сначала принимает с клавиатуры целое положительное число (в переменную х), а затем выполняет следующие действия (каждое – с помощью отдельного метода):
  • ·        заполняет массив случайными положительными числами (размер массива устанавливается гибко), меньшими х;
  • ·        выводит содержание массива на экран;
  • ·        изменяет в массиве все четные значения на ближайшие "сверху" нечетные;
  • ·        выводит содержание массива на экран;
  • ·        принимает с клавиатуры целое положительное число и заменяет значения в массиве на остаток деления значения на введенное с клавиатуры число;
  • ·        выводит содержание массива на экран;
  • ·        заменяет в массиве все четные числа на 0, а нечетные – на 1;
  • ·        выводит содержание массива на экран;


вторник, 13 декабря 2011 г.

Салават: начали методы

Начнем с публикации класса с несколькими примерами методов.
Задания для самостоятельной работы -- в следующем сообщении.



------------------------------------------------------------

import java.util.*;
class damir1
{
 static Scanner reader=new Scanner(System.in);

 static int sum (int[] b)
 {
     int s=0;
     for(int i=0;i<b.length;i++)
       s=s+b[i];
     return s;
 }

 static void zapolni(int[] k, int d, int r)
 {
    for(int i=0;i<k.length;i++)
      k[i]=d+(int)(r*Math.random());
 }

 static void davai(int[] z)
 {
    for(int i=0;i<z.length;i++)
      System.out.print(z[i]+" & ");
    System.out.println();
 }

 static int[] zapolny(int n)
 {
     int[] m=new int[n];
     for(int i=0;i<n;i++)
      m[i]=100+(int)(900*Math.random());
     return m;
 }
 
 static double sred(int[] f)
 {
     return (sum(f)/f.length);
 }
 public static void main(String[] args)
 {
   int a[]=new int[10];
   int x=10,y=90;
   zapolni(a,x,y);
   int[] t=zapolny(10);
   System.out.println(sum(a));
   System.out.println(sum(t));
   davai(a);
   davai(t);
   System.out.println(sred(a)==sred(t));
 }
}
-----------------------------------------

среда, 9 ноября 2011 г.

Самостоятельная работа №1

Это -- самостоятельная работа, которую мы с Евгением Гогаевичем провели на этой неделе. На наш взгляд, она вполне подойдет для тех, кто начал работу по нашему совместному проекту -- ждем комментариев и решений.

Работа эта рассчитана минимум на 1 урок, но по первому разу мы разрешили тем, кому это потребовалось, решать ее в течение двух уроков. 

После того, как коллеги из Пензенской области поделятся своим мнением, мы расскажем, какими были наши результаты))))

Задание №1
Дан блок команд:

int x=reader.nextInt();
if (x>10) x++;
if (x<0) x--;
System.out.println("$"+x+"#");

  1. Что будет выведено на экран, если с клавиатуры введено значение 15?
  2. Что будет выведено на экран, если с клавиатуры введено значение -8?
  3. Что будет выведено на экран, если с клавиатуры введено значение 5?
  4. Какое значение было введено с клавиатуры, если в результате исполнения блока на экран было выведено $27#  ?
  5. Какое значение было введено с клавиатуры, если в результате исполнения блока на экран было выведено $-100#  ?
  6. Какое значение было введено с клавиатуры, если в результате исполнения блока на экран было выведено $7#  ?
  7. Какие значения при вводе с клавиатуры не будут в данном блоке команд приводить к изменению значения переменной х?


Задание №2
Дан блок команд:

(1)   a=reader.nextInt();
(2)   b=a-10;
(3)   if (a*b<0) b=b+5;
(4)   System.out.println("x="+(a+b));

Заполни таблицу:

Значение переменной а
15
7
-10
10




Значение переменной b
после выполнения (1)




-1
3
0
66
Значение переменной b
после выполнения (2)








На экран (вывод)









Задание №3
Напиши блок команд, который принимает с клавиатуры целое число, а затем выводит его на экран следующим образом:
  • В первой строке – введенное с клавиатуры число и после него (без пробела) знак #
  • Во второй строке – дважды введенное с клавиатуры число, а между нами знак @
  • В третье строке – введенное с клавиатуры число, а перед ним и после него знаки % (с пробелом между ними и числом).


Задание №4
Напиши блок команд, который принимает с клавиатуры целое число – в качестве значения переменной х. В случае, если введенное число – положительное, следует увеличить его на 10; в случае, если оно – отрицательное, следует уменьшить его на 5. Перед завершением блок должен вывести на экран значение переменной х.


вторник, 8 ноября 2011 г.

Начали про массивы)))


Ой-ой-ой, как долго ничего тут не было)))

Сегодня мы с группой из Салавата начали разбираться с массивами. Для начала я хочу предложить список наиболее популярных и распространённых действий над массивами - в виде простых блоков (строго говоря, в этих случаях вполне можно не писать полноценные классы, а обойтись блоками команд - хотя, разумеется, для проверки надо будет написать класс целиком)



Задание №1
Заполнить массив целыми числами, ячейка за ячейкой, начиная с начальной ячейки и до последней ячейки в массиве.

Задание №2
Заполнить массив случайными числами, ячейка за ячейкой, начиная с последней ячейки массива и до первой ячейки в массиве.

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

Задание №4
Вывести на экран в одну строку все значения ячеек массива, начиная с начала.

Задание №5
Вывести на экран все значения ячеек массива, начиная с последней ячейки.

Задание №6
Вывести на экран значения ячеек массива следующим образом: сначала первую половину массива (начиная с начальной ячейки массива), затем вторую половину массива (начиная с последней ячейки массива).

Задание №7
Заполнить массив следующим образом: сначала первую половину массива, начиная с первой ячейки массива, затем вторую половину массива копией первой половины массива.
Затем вывести всех значения ячеек массива, начиная с первой ячейки массива.

Задание №8
Найти максимальное значения в массиве.

Задание №9
Найти минимальное значение в массиве.

Задание №10
Найти, сколько раз в массиве встречается максимальное значение. Вывести на экран номера  всех ячеек, в которых встречается максимальное значение.

Задание №11
Найти, сколько раз в массиве встречается минимальное значение. Вывести на экран номера  всех ячеек, в которых встречается минимальное значение.

Задание №12
Подсчитать сумму значений массива и среднее арифметическое массива.

Для начала, пожалуй, хватит? )))
Через пару дней я выложу несколько заданий чуть посложнее.
В блог выкладывайте не полные классы, а блоки команд.


воскресенье, 30 октября 2011 г.

Задачи на цикл while


Эти задачи – пока в основном для группы из Салавата, они до них добрались в прошлом году на Pascal'е, поэтому могут делать их теперь и на Java.

Разумеется, их могут делать все, кто знаком с работой цикла while)))

Примечание: во всех заданиях следует написать блок, который будет "заставлять" пользователя ввести требуемое по условию значение.

Задание №1
Одна из самых знаменитых задач: найти наибольший общий множитель для двух положительный целых чисел известным методом – вычитать из большего числа в паре меньшее число в паре, до тех пор, пока оба числа не станут равны друг другу.
Например, для пары (24, 32) этот метод дает следующие промежуточные результаты: (24,8)-(16,8)-(8,8), а для пары (121, 88) – (33,88)-(33,55)-(33,22)-(11,22)-(11,11).
Обратите внимание, что для пары 15, 22 наибольшим общим делителем является 1.
Напиши класс, который принимает с клавиатуры два целых положительных числа и находит описанным методом их наибольший общий делитель.

Задание №2
Напишите класс, который принимает с клавиатуры два целых положительных числа и находит их наименьший общий делитель, больший 1 – если он вообще существует.
Класс должен выводить на экран либо найденное значение, либо соответствующее результату текстовое сообщение.

Задание №3
Напиши класс, который принимает с клавиатуры целое положительное число (обязательно – не оканчивающееся на 0!) и строит из него целое число – с обратным порядком цифр.
Класс должен проверить, являются ли введенное число и построенное из него число – равными (то есть – является ли введенное число симметричным, палиндромом).
Класс должен выводить на экран (как конечный результат) оба числа – вместе с соответствующим результату проверки текстовым сообщением.

Задание №4
Напишите класс, который принимает с клавиатуры целое положительное число и находит простое число, меньшее введенного с клавиатуры числа, и наиболее близкое к введенному с клавиатуры числу.

Задание №5, особое)))
Помните задачу про "найти цифру с известным порядковым номером в серии целых чисел"?
А что, если попробовать решить ее с использованием цикла while – точнее, с использованием вложенных циклов while?

суббота, 29 октября 2011 г.

Для тех, кто только начал (1)


Коллеги из Пензы и Пензенской области, начавшие в этом году работать по нашему совместному проекту, справедливо заметили, что большинство задач на блоге – для более продвинутых.
Именно поэтому сегодня – задачи для тех, кто по нашему проекту прошел первые главы; в основном – на ввод и вывод информации.


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

Задание №2
Напишите класс, который принимает с клавиатуры целое значение для переменной х, затем увеличивает ее значение в 3 раза, а после этого – уменьшает ее же значение на 8.
После каждого изменения значения переменной х следует выводить на экран ее значение, сопровождая его текстовым сообщением Значение переменной Х=.
Примечание: обратите внимание на разницу между заданием №1 и заданием №2.

Задание №3
Напишите класс, который принимает с клавиатуры два целых числа (в переменные а и b), затем меняет значения в этих переменных и выводит новые значения переменных на экран (в одной строке), сопроводив вывод пояснительными сообщениями.

Задание №4
Напишите класс, который принимает с клавиатуры целое число, а затем выводит на экран:
в первой строке – три числа, предыдущих по отношению к введенному, в возрастающем порядке и символами --> после чисел;
во второй строке – само введенное с клавиатуры число и два последующих, но в убывающем порядке, с текстом Вниз после чисел.
Например, если с клавиатуры будет введено число 8, то вывод на экран будет выглядеть так:
5 -- > 6 -- > 7 -- >
10 Вниз 9 вниз 8 Вниз

Задание №5
Напишите класс, который принимает с клавиатуры два целых числа (для переменных х и y), а затем увеличивает значение х на значение y, а потом – значение y на новое значение х.
Каждый раз, после изменения значения одной из переменных, значения обеих переменных надо выводить на экран.

Задание №6
Напишите класс, который принимает с клавиатуры два целых числа (для переменных х и y), а затем увеличивает значение х на значение y, а потом – значение y на старое(!) значение х.
Каждый раз, после изменения значения одной из переменных, значения обеих переменных надо выводить на экран.

вторник, 25 октября 2011 г.

Задачи Всероссийской олимпиады


Во вторник прошла Всероссийская олимпиада для школьников по информатике и задачки сегодняшние – оттуда. 
Но я их переделал под Java и в смысле формулировки, и в смысле использования случайных чисел вместо чтения данных из файла.


Задание №1
В школьной олимпиаде по информатике участвовало N учащихся разных классов, мальчиков и девочек. Спонсоры приняли решение наградить самую юную участницу этих соревнований и самого старшего программиста. Требуется найти номер самого старшего участника, среди мальчиков, и номер самой младшей участницы, среди девочек.
Напишите класс, который принимает с клавиатуры значение для переменной N (число участников) и затем генерирует N пар чисел. В каждой паре первое число – возраст участника (от 6 до 20 лет), а второе – "мальчик-девочка" (0=мальчик, 1=девочка).
В качестве итогового результата класс должен выводить на экран номер самого старшего участника (среди мальчиков) и номер самой младшей участницы (среди девочек). Если таких участников несколько, то следует вывести наименьший номер.

Задание №2
Региональный Оргкомитет запланировал встречу прибывающих участников олимпиады. Каждая делегация сообщила время отправления и время в пути к месту проведения олимпиады. Требуется написать программу, которая поможет Оргкомитету определить время прибытия каждой делегации (возможно, в другие сутки).
Напишите класс, который принимает с клавиатуры две пары чисел:
·         Первая – время отправления делегации задается в формате «HH:MM», где HH время в часах, которое принимает значение от 00 до 23, ММ – время в минутах, которое принимает значение от 00 до 59.
·         Вторая – время делегации в пути – количество часов и количество минут. Количество часов не превышает 120, минут – 59.
Класс должен определять время прибытия делегации (в формате "часы и минуты").

Задание №3
В программе проведения олимпиады по информатике был предусмотрен день отдыха для участников. В этот день для участников был разработан маршрут, который включает в себя посещение достопримечательностей города и развлекательный центр. Путь был распланирован с указанием координат каждого посещаемого объекта, отсчитывая начало координат от места проведения. Требуется определить расстояние, которое пройдут участники этой прогулки от места проведения олимпиады, куда они должны и вернуться после ее окончания.
Напишите класс, который принимает с клавиатуры количество объектов на маршруте, а затем генерирует  соответствующее количество координат  – для каждого объекта пара целых чисел из диапазона -10..+10 (первое число в паре=координата Х, второе=координата Y).
Класс должен определить протяженность маршрута (с учетом возврата к месту проведения олимпиады).

Задание №4
Во время проведения олимпиады для руководителей делегаций были организованы лекции выдающихся профессоров известных университетов. Во время лекции известный профессор очень быстро произносил свои лекции, так, что ничего невозможно было разобрать. Один из преподавателей, посетив одну лекцию,  записал всё сказанное на ней на диктофон. Затем, прокручивая дома запись с десятикратным замедлением, он смог записать всё, что сказал профессор.
Но вот незадача – профессор говорил так быстро, что, даже прослушивая замедленную запись, нельзя было точно сказать, где он делал паузы между словами. Таким образом, у учителя есть некоторый текст, состоящий из n маленьких латинских букв – лекция, которая была прочитана профессором. Теперь учитель хочет знать, какое количество различных слов длины m мог использовать в своей лекции профессор.
Напишите класс, который принимает с клавиатуры "длину реч профессора" (количество знаков в речи), а затем – количество знаков в одном слове (переменная m).
Класс должен определять, сколько слов длины m может идти подряд в "речи профессора".

воскресенье, 23 октября 2011 г.

Цифры и числа


Вот сегодня, по дороге из школы домой, под музыку Эллингтона, придумалась такая задача:

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



Кстати, задачу можно дополнить вот так: должно обязательно строиться семизначное число.

А можно – вот так: после построения числа класс должен определять, сколько в нем цифр.

Постройте оба варианта – то есть два класса.

А как построите – попробуйте сил в более сложном варианте, с вот какой разницей: первая цифра в серии – последняя цифра в числе, вторая цифра в серии – предпоследняя цифра в числе, и так далее (то есть число строиться с конца).

Успеха!

четверг, 20 октября 2011 г.

Еще несколько симпатичных задач


К сожалению, из-за всяких форс-мажорных обстоятельств пропало занятие с командой из Салавата – и очень жаль, команда больно толковая.

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

Как всегда – всегда готовы к общению с вами по поводу ваших решений.

Удачи!


Задание №1
Напишите класс, который принимает с клавиатуры целое положительное пятизначное число и строит из него два новых числа (с сохранением порядка цифр): одно – из четных цифр введенного числа, второе – из нечетных. В случае, если введенное число содержит хоть один ноль – класс должен выводить сообщение Нет решения и не строить описанные два числа.
Например: для числа 32564 следует построить числа 264 и 35, а для числа 46308 – только вывести на экран сообщение Нет решения.

Задание №2
Напишите класс, который принимает с клавиатуры целое положительное число, не превышающее 99999, и строит из него новое число методом "стирания нулей". Например, из числа 307 класс строит число 37, а из числа 24 – снова 24.

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

Задание №4
Напишите класс, который принимает с клавиатуры два числа, отвечающие следующим условиям:
Каждое из чисел – двузначное положительное
Первое число представляет собой числитель простой дроби, второе – ее знаменатель
Дробь меньше единицы.
Класс должен проверять, можно ли привести дробь к виду 1/n.
В случае, если введены числа, не соответствующие указанным выше условиям, не следует проводить проверку, а надо вывести на экран сообщение Не те данные.

Задание №5
Напишите класс, который выполняет задание №4 для всех вариантов дробей – то есть без ввода данных с клавиатуры.

воскресенье, 16 октября 2011 г.

Задача №4

Уважаемые участники пректа!

Задача №4 из предыдущего задания получилась слишком уж сложная, даже просто какая-то нереально сложная.

Надеюсь, д-р Канель опубликует со временем свое решение и свои же соображения по поводу этой задачи -- а пока, ко всем, кто с ней возится: не надо, оставьте. Похоже, что одной только этой задаче надо будет посвятить отдельное сообщение.

Ваш ВМФ

среда, 12 октября 2011 г.

Очередная порция задач (циклы, случайные числа)


Сегодня прошло очень приятное и интересное занятие с группой из Салавата. Несмотря на каникулы и на то, что частью уехала в Москву готовиться к одной из предметных олимпиад (ах, какие молодцы!), остальные пришли на занятие. Браво!
Мы позанимались сегодня двумя очень сложными задачами – и с хорошим результатом: не в том смысле, что мы разобрались с конкретными задачами, а в том смысле, что еще и поговорили о важных вещах в смысле подхода к решениям.




Поскольку каникулы – задач будет сегодня немного:
Три первых – на генерацию случайных чисел (или – ввод данных с клавиатуры) и использование счетчиков
Остальные – на всякие математические хитрости)))
Успеха!

Задание №1
Права на вождение мопеда можно получить с 14 лет, на вождение мотоцикла – с 16 лет, на вождение автомобиля – с 18 лет.
Напишите класс, который генерирует тройки чисел из набора 0-1 (0=нет права на вождение данного вида, 1-есть право) – какими видами транспорта данный водитель имеет право управлять.

Класс должен тестировать 20 человек и определять:
Количество владельцев прав каждого вида
Количество граждан, не имеющих никаких прав вообще
Возраст (или возрастной диапазон) каждого водителя (предположительно)
Задание №2
Напишите класс, работающий "наоборот" по отношению к предыдущему –  принимает (генерирует?) данные (возраст) 20 человек и определяет:
Сколько из них имеют права на вождение мопеда (в принципе)
Сколько из них имеют права на вождение мотоцикла (в принципе)
Сколько из них имеют права на вождение автомобиля (в принципе)
Сколько из них в принципе не имеют право на вождение никакого вида транспорта

Задание №3
Напишите класс, который генерирует серию из 20 случайных двузначных чисел и определяет:
Сколько раз повторяется в серии первое число
В каких позициях (местах) повторяется первое число
Сколько других чисел встречается между парой чисел, равных первом

Задача №4
Напишите класс, который принимает с клавиатуры число N и определяет, какая цифра стоит на N месте в серии целых положительных чисел.
Например: если N=26, то это цифра 7 (серия=01234567891011121314151617)

Задача №5
Напишите класс, который принимает с клавиатуры целое положительное число и определяет два целых числа, между которыми расположен корень из введенного с клавиатуры числа – или целое число, равное корню квадратному из введенного с клавиатуры числа.
Примечание: не использовать операцию вычисления квадратного корня.

Задача №6
В математике "плоскими" называются числа, которые можно представить в виде произведения только двух сомножителей.
Напишите класс, который принимает с клавиатуры целое положительное число и проверяет, является ли оно "плоским".
Измените класс так, чтобы он выводил на экран все "плоские" двузначные числа.

Задача №7
Назовем "уникальным" трехзначное число, для которого выполняются (одновременно) следующие правила:
В "перевернутом" виде оно не равно самому себе (121 – не годится)
Не содержит двух нулей подряд (300 – не годится)
Корень квадратный из произведения числа на число с обратным порядком цифр – тоже целое число.
Напишите класс, который принимает с клавиатуры целое положительное число и проверяет, является ли оно "уникальным".
Измените класс так, чтобы он выводил на экран все "уникальные" трехзначные числа.
Примечание: не использовать операцию вычисления квадратного корня.

суббота, 8 октября 2011 г.

Видеоролик: ввод данных с клавиатуры

Уважаемые коллеги, а также ученики и ученицы!
Выкладываю небольшой видеоролик, который, скорее всего, для большинства уже не очень актуален. Посему мне в первую очередь интересно знать -- вашу оценку и любые комментарии.
Прошу прощения за иногда застревающее изображение: делал на нетбуке -- видимо, памяти маловато на нем для записи таких сюжетов, надо использовать более мощную машину.


пятница, 7 октября 2011 г.

Еще одна задача на случайные числа


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


Напиши класс, который генерирует серию из 20 случайных чисел из диапазона от 0 до 100. Будем считать, что эти числа представляют собой геодезические промеры высоты на определенном маршруте. Пример такого маршрута можно, например, изобразить на графике:



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

Добавьте в класс блок команд, который будет подсчитывать, сколько "шагов вверх" и сколько "шагов вниз" имеется на маршруте.

Добавьте в класс блок команд, который будет определять, какой тип шагов встречается на маршруте чаще – или будет определять отсутствие такое преобладания одного из типа шагов.

Назовем "подъемом" группу смежных точек, каждая пара которых представляет собой "шаг вверх".
Назовем "спуском" группу смежных точек, каждая пара которых представляет собой "шаг вниз".

Добавьте в класс блок команд, который будет определять количество "подъемов" на маршруте.

Добавьте в класс блок команд, который будет определять количество "спусков" на маршруте.

Назовем "длиной подъема" количество точек, которое он включает в себя.

Добавьте в класс блок команд, который будет определять длину каждого подъема.

Доброжелательный))) намек: особое внимание уделите началу и концу маршрута…