![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
maksimla |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Первичные данные целых чисел массив, элементы в массиве упорядочены возрастающем порядке. Функция Daug читает элементы и определяет число который больше всех в этом массиве находится. Если есть числа которые одинаковое число раз повторяются то в ответе любое должно быть.
Задание простое и логичное. Код const m = ...; n = ...; type masyvas = array [m..n] of integer; function Daug (a : masyvas) : integer; var i, r, k, sk : integer; begin r := a[m]; sk := 1; k := 1; for i := m + 1 to n do begin if a[i] = a[i – 1] then begin k := k + 1; if k > sk then begin r := a[i]; sk := k end end else k := 1 end; daug := r end; Henry Ledgard писал что этот алгоритм пробовали улучшить сто людей но некто лучше нечего не придумал. Но вы сто первый. Попробуйте написать решение одной переменной, и одной управляемой структурой меньше. Что это за структура управляемой? Я вот изменил не много не знаю правильно или нет. Код const m = ...; n = ...; type masyvas = array [m..n] of integer; function Daug (a : masyvas) : integer; var i, k, sk : integer; begin Daug := a[m]; sk := 1; k := 1; for i := m + 1 to n do if a[i] = a[i – 1] then begin k := k + 1; if k > sk then begin Daug := a[i]; sk := k end end else k := 1 end; Сообщение отредактировано: maksimla - 10.10.2009 18:54 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Да какие пару часов? Тут все прозрачно: сначала переписываем функцию в виде
function Daug (a : masyvas) : integer;(выносим проверку k > sk из первого if-а наружу), потом думаем, какую из этих двух уже независимых друг от друга проверок можно представить собственно БЕЗ if... Получается, что первую, потому что по результатам первой проверки выполняется одно действие (k := k + 1), а по результатам второй - целых 2: изменение R и изменение sk. Поэтому вторую проверку оставляем в покое, и более внимательно смотрим, что же нам надо сделать в первом if-е... А вот что: if a[ i ] = a[i - 1] then , или по-другому: if a[ i ] = a[i - 1] thenЧто получили? Получили if с пустой веткой then... Меня учили, что это неправильно, и так делать не надо. Надо "перевернуть" условие, чтобы пустой стала ветка else, и избавиться от нее: if a[ i ] <> a[i - 1] then { меняем знак = на противоположный: <> } Ну, а теперь - дело техники добиться того, чтобы при разных значениях a[ i ] и a[i - 1] переменная K становилась равной 0, а при одинаковых - не изменялась. Это можно сделать по-разному, я выбрал способ: "поделить K нацело на число ЗАВЕДОМО большее K (если элементы разные) или на 1 (если элементы одинаковые)"... Вот и вся логика. |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 14:42 |