![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
xxx000 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот препод задал таску:
я думал её решил, а оказалось, что если светодиод уже работал, а потом перегорел, то вывеси неверно, и вот этот случай я не рассматривал, и не знаю как. 1995 East-Central Regionals ACM International Collegiate Programming Contest Sponsored by Microsoft Много электронных устройств имеют цифровые индикаторы, которые используют наборы светодиодов. Элемент обычного цифрового дисплея использует семь прямоугольных светодиодов с сегментами, расположенными следующим образом: Цифры отображаются с помощью включения различных комбинаций из семи сегментов в соответствии со следующей таблицей: Свечение сегментов в цифрах (Y - да, N - нет) a b c d e f g 0 Y Y Y Y Y Y N 1 N Y Y N N N N 2 Y Y N Y Y N Y 3 Y Y Y Y N N Y 4 N Y Y N N Y Y 5 Y N Y Y N Y Y 6 Y N Y Y Y Y Y 7 Y Y Y N N N N 8 Y Y Y Y Y Y Y 9 Y Y Y Y N Y Y Например, цифра три будет отображена как совокупность сегментов {a,b,c,d,g}. Задача ниже абстрагирована из подобной задачи, встреченной в отделе проверки качества входящих частей на фабрике по производству микроволновых печей. Приходящие семисегментные светодиодные индикаторы проверяются на их корректное функционирование с помощью автоматического оборудования, работающего под программным управлением. Замечание: решение задачи ниже ни достаточно, ни необходимо для тестирования в реальных условиях. Вы должны создать программу, которая будет наблюдать за последовательными тестами состояния свечения семи сегментов одноцифрового дисплея и будет решать, является ли последовательность свечений верной последовательностью "обратного отсчёта". К сожалению, в индикаторах, которые исследует ваша программа, некоторые из элементов могут выйти из строя в начале теста, и некоторые из элементов могут выйти из строя во время теста. Ни один из сегментов не сгорит во включенном состоянии, и ни один из вышедших из строя сегментов не будет восстановлен. Тем не менее, вы должны "прочитать" сквозь двусмысленность, присутствующую в повреждённых дисплеях, просматривая на дисплее обратный отсчёт через одно или несколько значений. Формат ввода: ввод состоит из серий наборов данных, имеющих следующий формат. Первая строка - натуральное одиночное число больше 0 и меньше 11. Число упорядочено по левому краю строки ввода. Следующие N строк - в каждой строке есть последовательность из семи состояний. Символы Y/N показывают состояние свечения сегментов индикатора. Последовательные строки предположительно представляют последовательность обратного отсчёта. Первый из семи символов - это свечение сегмента "a". Конец данных отмечается нулевым набором данных с нулём на первой строке. Нет информации о том, где последовательность обратного отсчёта начинается для данного набора данных. Нет информации, которая переносится с одного набора в другой, каждый набор данных представляет отдельный светодиодный индикатор. Формат вывода: для каждой предположительной последовательности обратного отсчёта во входном файле вы должны ответить MATCH или MISMATCH в зависимости от того, может ли эта последовательность быть верной последовательностью обратного отсчёта где-нибудь внутри последовательности {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, если неизвестное количество неисправных элементов присутствует в начале теста и, возможно, сгорит во время тестирования. ledtest.in 1 YYYYYYY 2 NNNNNNN NNNNNNN 2 YYYYYYY YYYYYYY 3 YNYYYYY YNYYNYY NYYNNYY 3 YNYYYYN YNYYNYN NYYNNYN 3 YNYYYYN YNYYNYN NYYNYYN 4 YYYYYYY NYYNNNN NNYYYYN NNNYNNN 3 NNNNNNN YNNNNNN NNNNYNN ledtest.out MATCH MATCH MISMATCH MATCH MATCH MISMATCH MATCH MATCH пожалуйста помогите!!! Сообщение отредактировано: Lapp - |
Unconnected |
![]()
Сообщение
#2
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Два раза прочитал эту элементарную таску, и по-моему всё сводится к тому, чтобы узнать, может ли совокупность включенных секторов индикатора при небольшом дополнении образовывать цифру (цифры, кусочек обратного отсчёта). Правда ведь?)
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я взял на себя смелость отредактировать условие, чтобы сделать его читабельнее. Я только вставил разрывы строк; все огрехи машинного перевода остаются на совести лентяя xxx000.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
всё сводится к тому, чтобы узнать, может ли совокупность включенных секторов индикатора при небольшом дополнении образовывать цифру (цифры, кусочек обратного отсчёта). Правда ведь?) Плюс, образуют ли эти цифры фрагмент последовательности обратного отсчета. Причем, в пределах одного теста плохие сегменты должны оставаться плохими, рабочие сегменты могут портиться в процессе теста.-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> рабочие сегменты могут портиться в процессе теста.
Нет, наоборот. Так чуть легче. > Ни один из сегментов не сгорит во включенном состоянии, и ни один из вышедших из строя сегментов не будет восстановлен. -------------------- |
TarasBer |
![]()
Сообщение
#6
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всё, я запутался.
> и некоторые из элементов могут выйти из строя во время теста. Ни один из сегментов не сгорит во включенном состоянии Ничего не понимаю. -------------------- |
xxx000 |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всё, я запутался. > и некоторые из элементов могут выйти из строя во время теста. Ни один из сегментов не сгорит во включенном состоянии Ничего не понимаю. я тоже очень долго вникал, и как мне кажется, надо что бы последовательность из ввода была по убыванию. диоды могут сгорать, но восстанавливаться не могут. Также вводе, диоды сразу могут быть сгоревшими. Я не могу сделать,если предположим, диод был сгоревшим, и я предположил это и сделал его работающим, а потом диод в этой же последовательности заработал, то это неверно! Сообщение отредактировано: xxx000 - |
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
> и некоторые из элементов могут выйти из строя во время теста. Согласен с Тарасом, эта фраза действительно превносит некий элемент бардака - возникает вопрос: а гаснут ли сегменты между тестами? > Ни один из сегментов не сгорит во включенном состоянии Ничего не понимаю. ![]() Но если встать на позиции здравого смысла и отнести все сомнения на счет не вполне адекватного перевода (или еще чего-то), то все становится более-менее ясно, и решение этой "элементарной таски" сразу вырисовывается в голове - где-то примерно так: const
l= 7;
g= 9;
m= 10;
d: array [0..g] of set of 1..l = (
[1,2,3,4,5,6 ],
[ 2,3 ],
[1,2, 4,5, 7],
[1,2,3,4, 7],
[ 2,3, 6,7],
[1, 3,4, 6,7],
[1, 3,4,5,6,7],
[1,2,3 ],
[1,2,3,4,5,6,7],
[1,2,3,4, 6,7]
);
var
r: array [1..m] of set of 1..l; // readings
p: array [1..m] of set of 0..g; // possible digits
b: set of byte; // bad
f: text;
i,j,k,n: integer;
s: string;
y: boolean; // yes
begin
Assign(f,'ledtest.in');
ReSet(f);
while not EoF(f) do begin
readLn(f,n);
for i:=1 to n do begin
ReadLn(f,s);
r[i]:=[];
for j:=1 to l do if UpCase(s[j])='Y' then Include(r[i],j);
end;
for i:=1 to n do begin
b:= [1..l]-r[i];
for j:= i+1 to n do b:= b-r[j];
p[i]:=[];
for j:=0 to g do if (d[j]-r[i]<=b) and (r[i]-d[j]=[]) then Include(p[i],j)
end;
j:=n-1;
repeat
y:=true;
for k:=0 to n-1 do y:=y and (j-k in p[k+1]);
Inc(j)
until y or (j>g);
Write(y,' ')
end;
Close(f);
ReadLn
end.
На примере все отрабатывает четко )). Прошу прощения, я тут немного отступил от правил оформления.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 13:30 |