Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244

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

20.10.2015, 10:36. Показов 2295. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить программу с использованием функций и процедур:
2. Задано натуральное n, целые числа a1,a2,..., an. Просмотреть отрезки последовательности a1,a2,..., an (последовательности элементов, которые идут подряд), которые составляются из
а) степеней натурального m
б) простых чисел.
В Каждом случае получить самый большой из длин отрезков, которые рассматриваются.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.10.2015, 10:36
Ответы с готовыми решениями:

Получить наибольшую из длин рассматриваемых отрезков
Даны натуральное число n, целые числа а1,...,аn. Рассмотреть отрезки последовательности а1,...,аn (последовательности идущих подряд...

Получить наибольшую из длин рассматриваемых отрезков
Дано натуральные число n, целые числа a1,...an. Рассмотреть отрезки последовательности a1,...an (Под последовательности идущих подряд...

Получить наибольшую из длин рассматриваемых отрезков
Дано натуральное число n, целые числа a1, ..., an. Рассмотреть отрезки последовательности a1, ..., an (подпоследовательности идущих подряд...

17
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
20.10.2015, 15:16
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
type
    TArray = Array[Byte] Of LongInt;
    TFunc = Function(const x, m: LongInt): Boolean;
procedure InputArray(var ar: TArray; var n: Byte);
var
    i: Byte;
begin
    repeat
        Write('Input n (1..255): '); ReadLn(n);
    until (n > 0);
    for i := 0 to n - 1 do
    begin
        Write('ar[', i + 1, ']='); ReadLn(ar[i]);
    end;
end;
{$F+}
function IsPrime(const x, m: LongInt): Boolean;
var
    i: LongInt;
begin
    Result := (x >= 2);
    if (Result)
    then
    begin
        i := 2;
        while ((i <= x div 2) And (Result)) do
        begin
            Result := x mod i <> 0;
            Inc(i);
        end;
    end;
    IsPrime := Result;
end;
function IsDivisible(const x, m: LongInt): Boolean;
var
    mm: LongInt;
begin
    Result := False; mm := 1;
    while ((x >= mm) And (Not Result)) do
    begin
        Result := x - mm = 0;
        mm := mm * m;
    end;
    IsDivisible := Result;
end;
{$F-}
procedure CheckForMax(var max, id: Byte; const count, posit: Byte);
begin
    if (max < count)
    then
    begin
        max := count;
        id := posit - count;
    end;
end;
procedure Process(const ar: TArray; const n: Byte; const c: Char; const m: LongInt; f: TFunc);
var
    i, max, count, id: Byte;
begin
    count := 0; max := 0; id := 0;
    for i := 0 to n - 1 do
        if (f(ar[i], m))
        then
            Inc(count)
        else
        begin
            CheckForMax(max, id, count, i);
            count := 0;
        end;
    CheckForMax(max, id, count, n);
    WriteLn('max', c, '=', max, ' from ', id + 1);
end;
var
    arr: TArray;
    n: Byte;
    m: LongInt;
begin
    InputArray(arr, n);
    repeat
        Write('Input m (>0): '); ReadLn(m);
    until (m > 0);
    Process(arr, n, 'A', m, IsDivisible);
    Process(arr, n, 'B', 0, IsPrime);
  ReadLn;
end.
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
21.10.2015, 16:37  [ТС]
Спасибо за код, а можете поподробнее объяснить что и как? Или хотя бы побольше комментариев к коду)
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
21.10.2015, 19:16
Лучший ответ Сообщение было отмечено Max00766 как решение

Решение

немножко переписал функцию одну
Pascal
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
type
    TArray = Array[Byte] Of LongInt;
    TFunc = Function(const x, m: LongInt): Boolean;
procedure InputArray(var ar: TArray; var n: Byte); //процедура ввода массива
var
    i: Byte;
begin
    repeat
        Write('Input n (1..255): '); ReadLn(n); //запрашиваем n
    until (n > 0);
    for i := 0 to n - 1 do
    begin
        Write('ar[', i + 1, ']='); ReadLn(ar[i]); //запрашиваем элементы массива
    end;
end;
{$F+}
function IsPrime(const x, m: LongInt): Boolean; //функция процерки "на простоту" числа
var
    i: LongInt;
begin
    Result := (x >= 2); //простые числа начинаются с 2 (wiki в помощь)
    if (Result)
    then
    begin
        i := 2;
        while ((i <= x div 2) And (Result)) do //ищем возможный делитель на промежутке от 2 до половины значения заданного числа.
        begin
            Result := x mod i <> 0;
            Inc(i);
        end;
    end;
    IsPrime := Result;
end;
function IsDivisible(const x, m: LongInt): Boolean; //проверка на степень (является ли число степенью числа m)
var
    mm: LongInt;
begin
    mm := 1;
    while (x > mm) do
        mm := mm * m; //новая степень
    IsDivisible := x = mm; //проверяем является ли x степенью числа m
    //если честно - хз что я тут писал о_О какой-то наркоманский бред
end;
{$F-}
procedure CheckForMax(var max, id: Byte; const count, posit: Byte); //проверяет нашли ли мы новый максимум. если нашли - запоминаем новые значения
begin
    if (max < count) //если предыдущий максимум меньше найденного
    then //обновляем значения
    begin
        max := count;
        id := posit - count;
    end;
end;
procedure Process(const ar: TArray; const n: Byte; const c: Char; const m: LongInt; f: TFunc); //процедура, принимающая в параметрах, между прочих, функцию (чтоб не писать дважды один и тот же код)
var
    i, max, count, id: Byte;
begin
    count := 0; max := 0; id := 0; //инициализация переменных
    for i := 0 to n - 1 do //по каждому элементу массива
        if (f(ar[i], m)) //если число прошло проверку
        then
            Inc(count) //увеличиваем счётчик
        else //иначе
        begin
            CheckForMax(max, id, count, i);  //проверяем максимумы
            count := 0; //обнуляем счётчик
        end;
    CheckForMax(max, id, count, n); //контрольная проверка
    WriteLn('max', c, '=', max, ' from ', id + 1); //выводим результат
end;
var
    arr: TArray;
    n: Byte;
    m: LongInt;
begin
    InputArray(arr, n);
    repeat
        Write('Input m (>0): '); ReadLn(m); //вводим m
    until (m > 0);
    Process(arr, n, 'A', m, IsDivisible); //ищем наибольную последовательность числе-степеней m
    Process(arr, n, 'B', 0, IsPrime); //ищем наибольшую последовательность простых чисел
  ReadLn;
end.
1
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
26.10.2015, 14:28  [ТС]
А что значат строки?:
Pascal
1
2
TArray = Array[Byte] Of LongInt;
    TFunc = Function(const x, m: LongInt): Boolean;
0
Модератор
10402 / 5690 / 3399
Регистрация: 17.08.2012
Сообщений: 17,336
26.10.2015, 16:42
Это определение типов переменных.
Pascal
1
2
TArray = Array[Byte] Of LongInt; //массив из элементов типа LongInt, индексы массива в диапазоне [0..255] (это диапазон чисел типа Byte)
TFunc = Function(const x, m: LongInt): Boolean; //переменная процедурного типа, функция, возвращающая логическое значение, и имеющая два формальных параметра типа LongInt
Переменная типа TFunc используется в процедуре Process в качестве одного из формальных параметров, что позволяет в строках 80 и 81 использовать в процедуре Process разные функции по выбору, в данном случае, IsDivisible и IsPrime.
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
26.10.2015, 17:45  [ТС]
Обьясните, пожалуйста что значит:
а) степеней натурального m
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
26.10.2015, 17:50
Max00766, нда...
допустим, m=5. тогда числа, являющиеся его степенью: 1, 5, 25, 125...
0
Модератор
10402 / 5690 / 3399
Регистрация: 17.08.2012
Сообщений: 17,336
26.10.2015, 17:54

Не по теме:

Что проще пареной репы? Правильно, сырая репа.

Берётся какое-либо натуральное число m, и из степеней этого числа создаётся последовательность m0, m1, m2, m3, m4, m5, ...

к примеру, если введено m=3, то получится последовательность

1, 3, 9, 27, 81, 243, 729, ...
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
26.10.2015, 17:55  [ТС]
Вот, я изначально так и думал, но с толку сбило, то что прога показывает другие числа:

maxB=1 from 2
Получается 1 элемент со второго, но ведь 5 не является степенью 6, по идеи прога должна была написать 2 с девятого элемента так как там 6 и 36
На всякий случай код:
Pascal
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
uses crt;
type
    mas = Array[byte] Of LongInt;
    TFunc = Function(const x, m: LongInt): Boolean;
procedure vvmas(var ar: mas; var n: Byte);
var
    i: Byte;
begin
    repeat
        Write('Размер массива*: ');
        ReadLn(n);
    until (n > 0);
    for i := 0 to n - 1 do
    begin
        Write('Элемент[', i + 1, ']=');
        ReadLn(ar[i]);
    end;
end;
{$F+}
function PT(const x, m: LongInt): Boolean; 
var
    i: LongInt;
    f:boolean;
begin
    f := (x >= 2);
    if f then
    begin
        i := 2;
        while (i <= x div 2) And f do
        begin
            f := x mod i <> 0;
            Inc(i);
        end;
    end;
    PT := f;
end;
function ST(const x, m: LongInt): Boolean; 
var
    mm: LongInt;
    f:boolean;
begin
    f := False;
    mm := 1;
    while (x >= mm) And Not f do
    begin
        f := x - mm = 0;
        mm := mm * m;
    end;
    ST := f;
end;
{$F-}
procedure CheckForMax(var max, id: Byte; const count, posit: Byte); 
begin
    if (max < count) then
    begin
        max := count;
        id := posit - count;
    end;
end;
procedure Process(const ar: mas; const n: Byte; const c: Char; const m: LongInt; f: TFunc); 
var
    i, max, count, id: Byte;
begin
    count := 0;
    max := 0;
    id := 0;
    for i := 0 to n - 1 do
        if (f(ar[i], m)) then
            Inc(count)
        else
        begin
            CheckForMax(max, id, count, i);
            count := 0;
        end;
    CheckForMax(max, id, count, n);
    WriteLn('max', c, '=', max, ' from ', id + 1);
end;
var
    arr: mas;
    n: Byte;
    m: LongInt;
begin
    vvmas(arr, n);
    repeat
        Write('Введи m (>0): ');
        ReadLn(m);
    until (m > 0);
    Process(arr, n, 'A', m, ST); 
    Process(arr, n, 'B', 0, PT); 
  ReadLn;
end.
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
26.10.2015, 18:04
Max00766, я ж во втором листинге немного переписал функцию "степени". попробуйте новый вариант.
1
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
26.10.2015, 18:16  [ТС]
JokeR.BY,
Переписал по Вашему примеру, перестали работать и простые числа)
P.S. Я понимаю что конкретно всех уже задолбал, но уже самому очень интересно разобраться с прогой)

Код:
Pascal
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
uses crt;
type
    mas = Array[byte] Of LongInt;
    TFunc = Function(const x, m: LongInt): Boolean;
procedure vvmas(var ar: mas; var n: Byte); {ввод массива}
var
    i: Byte;
begin
    repeat
        Write('Размер массива: ');
        ReadLn(n);
    until (n > 0);
    for i := 0 to n - 1 do
    begin
        Write('Элемент[', i + 1, ']=');
        ReadLn(ar[i]);
    end;
end;
{$F+}
function PT(const x, m: LongInt): Boolean; {проверка на простоту}
var
    i: LongInt;
    f:boolean;
begin
    f := (x >= 2);
    if f then
    begin
        i := 2;
        while (i <= x div 2) And f do
        begin
            f := x mod i <> 0;
            Inc(i);
        end;
    end;
    PT := f;
end;
function ST(const x, m: LongInt): Boolean;  {проверка на степень}
var
    mm: LongInt;
begin
    mm := 1;
    while (x >= mm) do
        mm := mm * m;
    ST := x=mm;
end;
{$F-}
procedure CheckForMax(var max, id: Byte; const count, posit: Byte);  {проверка на максимум}
begin
    if (max < count) then
    begin
        max := count;
        id := posit - count;
    end;
end;
procedure Process(const ar: mas; const n: Byte; const c: Char; const m: LongInt; f: TFunc); {прошло число проверку или нет}
var
    i, max, count, id: Byte;
begin
    count := 0;
    max := 0;
    id := 0;
    for i := 0 to n - 1 do
        if (f(ar[i], m)) then
            Inc(count)
        else
        begin
            CheckForMax(max, id, count, i);
            count := 0;
        end;
    CheckForMax(max, id, count, n);
    WriteLn('max', c, '=', max, ' from ', id + 1);
end;
var
    arr: mas;
    n: Byte;
    m: LongInt;
begin
    vvmas(arr, n);
    repeat
        Write('Введи m (>0): ');
        ReadLn(m);
    until (m > 0);
    Process(arr, n, 'A', m, ST); {наибольшая последовательность степеней}
    Process(arr, n, 'B', 0, PT); {наибольшая последовательность простых чисел}
  ReadLn;
end.
Часть которую переписал:
Pascal
1
2
3
4
5
6
7
8
9
function ST(const x, m: LongInt): Boolean;  {проверка на степень}
var
    mm: LongInt;
begin
    mm := 1;
    while (x >= mm) do
        mm := mm * m;
    ST := x=mm;
end;
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
26.10.2015, 18:40
Max00766, если никто сейчас не поможет: отпишусь как с работы приду.
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
26.10.2015, 21:42  [ТС]
JokeR.BY, Спасибо большое

Добавлено через 2 часа 37 минут
Очень, актуально)
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
27.10.2015, 00:15
Max00766, плохо переписали) внимательно посмотрите на условие цикла в функции определения "степенности")
Миниатюры
Получить самый большой из длин отрезков, которые рассматриваются  
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
27.10.2015, 09:49  [ТС]
JokeR.BY, Смотрите, 2 элемента с первого, разве 3 и 2 являются степенью 4?

Добавлено через 1 минуту
JokeR.BY, Должно было высветить 3 элемента с восьмого
0
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
27.10.2015, 14:37
Max00766, maxA - это ряд степеней, maxB - ряд простых)
0
2 / 2 / 1
Регистрация: 20.10.2015
Сообщений: 244
27.10.2015, 15:59  [ТС]
JokeR.BY, Допер, спасибо огромное)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2015, 15:59
Помогаю со студенческими работами здесь

Получить наибольшую из длин рассматриваемых отрезков последовательности
Даны натуральное число n, целые числа a1,...,an. Рассмотреть отрезки последовательности a1,...,an (последовательности идущих подряд...

Получить наибольшую из длин рассматриваемых отрезков из массива
Ввести массив целых чисел (размерность любая). Рассмотреть отрезки массива (группы идущих подряд чисел), состоящие из нечетных чисел....

Получить наибольшую из длин отрезков последовательности, удовлетворяющих заданному условию
Доброго времени суток) Пожалуйста, помогите с задачей. Задано натуральное n, целые числа a1,a2,...,an. Рассмотреть отрезки...

Дан массив натуральных чисел. Получить самый длинный из отрезков последовательности
Даны натуральное n, массив из натуральных чисел A(n). Рассмотреть отрезки последовательности а1.....аn(элементов,идущих подряд), состоящих...

Рассмотреть отрезки, идущих подряд членов последовательности, состоящие из полных квадратов. Получить наибольшую из длин рассматриваемых отрезков
Даны натуральное число n, целые числа a_1 ,…,a_n. Рассмотреть отрезки идущих подряд членов данной последовательности, состоящие из полных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru