
Даю 50 балло Дан массив размера N. Найти количество его промежутков моно-тонности (то есть
участков, на которых его элементы возрастают или убывают). Написать код для Лазурус оконное приложение, с использованием ListBox или Memo и соответственно кнопок. Код с пояснением.

Ответы на вопрос

Ответ:
#include "stdafx.h"
#include "conio.h"
#include "iostream"
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian");// включаем русскую раскладку
cout << "Введите количество элементов массива" << endl;
unsigned int lenthOfArray=0;//переменная длины массива
cin >> lenthOfArray;//считываем длину массива
//создаем Массив
int* Array = new int [lenthOfArray];
int M=1;
cout << "Вводите элементы массива:" << endl;
for(int i=0;i<lenthOfArray;i++)
{
cin >> Array[i];//считываем массив
current=up;
if(i>1)
if((Array[i]>=Array[i-1])&&(Array[i-1]<Array[i-2]))
{
M++;
}
else
{
if((Array[i]<=Array[i-1])&&(Array[i-1]>Array[i-2]))
M++;
}
}
cout << "Количество промежутков монотонности: " << M << endl;
getch();
delete [] Array;
return 0;
}
Добавлено через 7 минут
C++Выделить код
1
current=up;
только это удали
Добавлено через 10 минут
C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include "conio.h"
#include "iostream"
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian");// включаем русскую раскладку
cout << "Введите количество элементов массива" << endl;
unsigned int lenthOfArray=0;//переменная длины массива
cin >> lenthOfArray;//считываем длину массива
//создаем Массив
int* Array = new int [lenthOfArray];
int M=1;
cout << "Вводите элементы массива:" << endl;
for(int i=0;i<lenthOfArray;i++)
{
cin >> Array[i];//считываем массив
if(i>1)
if((Array[i]>Array[i-1])&&(Array[i-1]<Array[i-2]))
{
M++;
}
else
{
if((Array[i]<Array[i-1])&&(Array[i-1]>Array[i-2]))
M++;
else
if((Array[i]==Array[i-1])&&(Array[i-1]!=Array[i-2]))
M++;
}
}
cout << "Количество промежутков монотонности: " << M << endl;
getch();
delete [] Array;
return 0;
}
Объяснение:



Благодарим вас за предоставление информации. Ниже приведен код на языке Pascal (Lazarus) для создания оконного приложения, которое решает вашу задачу. Предполагается, что вы уже создали оконную форму и разместили на ней ListBox, Memo и две кнопки: "Вычислить" и "Очистить".
sql// Объявление глобальных переменных
var
Numbers: array of Integer; // Массив чисел
Count: Integer; // Количество промежутков монотонности
// Обработчик кнопки "Вычислить"
procedure TForm1.ButtonCalculateClick(Sender: TObject);
var
i: Integer;
Increasing, Decreasing: Boolean; // Флаги возрастания и убывания
begin
Count := 0;
Increasing := False;
Decreasing := False;
// Получение чисел из ListBox и сохранение в массиве Numbers
SetLength(Numbers, ListBox1.Items.Count);
for i := 0 to ListBox1.Items.Count - 1 do
Numbers[i] := StrToInt(ListBox1.Items[i]);
// Подсчет промежутков монотонности
for i := 1 to Length(Numbers) - 1 do
begin
if Numbers[i] > Numbers[i - 1] then
begin
// Последовательность возрастает
if not Increasing then
begin
Increasing := True;
Inc(Count);
end;
Decreasing := False;
end
else if Numbers[i] < Numbers[i - 1] then
begin
// Последовательность убывает
if not Decreasing then
begin
Decreasing := True;
Inc(Count);
end;
Increasing := False;
end;
end;
// Отображение результата в Memo
Memo1.Lines.Add('Количество промежутков монотонности: ' + IntToStr(Count));
end;
// Обработчик кнопки "Очистить"
procedure TForm1.ButtonClearClick(Sender: TObject);
begin
ListBox1.Clear;
Memo1.Clear;
SetLength(Numbers, 0);
Count := 0;
end;
В данном коде мы используем два глобальных массива: Numbers
для хранения чисел из ListBox и Count
для подсчета количества промежутков монотонности.
В обработчике кнопки "Вычислить" происходит следующее:
- Инициализируются переменные
Count
,Increasing
иDecreasing
. - Мы получаем числа из ListBox и сохраняем их в массиве
Numbers
. - Затем мы перебираем числа в массиве
Numbers
с помощью цикла. Если текущее число больше предыдущего, это означает возрастание последовательности. Если текущее число меньше предыдущего, это означает убывание последовательности. - Если флаги
Increasing
илиDecreasing
неактивны (False), мы инкрементируемCount
, чтобы учесть новый промежуток монотонности. - После завершения цикла мы отображаем результат в Memo.
В обработчике кнопки "Очистить" происходит очистка ListBox, Memo, массива Numbers
и переменной Count
.
Убедитесь, что связали обработчики с соответствующими кнопками в дизайнере Lazarus, чтобы код выполнился при нажатии на кнопки.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili