Дан текст из строчных латинских букв, за которыми следует точка. Включить в множество...

0 голосов
79 просмотров

Дан текст из строчных латинских букв, за которыми следует точка. Включить в множество первые вхождения букв в текст, сохраняя их исходный взаимный порядок.Pascal.Решить с использованием процедур


Информатика (58 баллов) | 79 просмотров
0

Как понять? Включить в множество первые вхождения букв в текст, сохраняя их исходный взаимныйпорядок

0

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

0

это всё циклами for естессно

0

Ну фигня тогда. Делаешь массив 26 элем и записываешь туда неповторяющиеся буквы. Потом и отсортировать можно, если надо

0

Я так понял,если,например, у меня есть текст eww fgd itr. то он должен вывести [e w r f g d i t]но вот должен ли он вывести в алфавитном порядке точно не понял

Дано ответов: 2
0 голосов
Правильный ответ
Напишу "современный" вариант решения. Хотя бы для того, чтобы показать, насколько современные способы решения задач в том же паскале ушли вперед по сравнению с тем временем когда придумывались эти задачи...

// PascalABC.NET 3.0, сборка 1088
begin
  var s:=ReadString('Введите строку: ');
  var MySet:=s.Where(x->x in ['a'..'z']).Distinct;
  Writeln(MySet)
end.

Тестовое решение:
Введите строку: this is an example text.
[t,h,i,s,a,n,e,x,m,p,l]

А вот если воспользоваться "традиционной" работой с множеством, исходный порядок следования символов будет нарушен:

// PascalABC.NET 3.0, сборка 1088
var
  MySet:set of char;

procedure AddToSet(s:string; var pSet:set of char);
begin 
  foreach var c in s do
    if c in ['a'..'z'] then Include(pSet,c)
end;

begin
  var s:=ReadString('Введите строку: ');
  AddToSet(s,MySet);
  Writeln(MySet)
end.

Тестовое решение:
Введите строку: this is an example text.
{n,e,m,l,t,s,a,i,h,p,x}
(142k баллов)
0

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

0

Конечно, если у нас класс ориентируется на Бейсик, нельзя приносить "домашку" на Паскале - мы же не делаем задания по английскому языку на русском! Но "цепляться" к версии языка в домашнем задании - это проявление узости и расписка учителя в своей некомпетентности. Конечно, это мое мнение.

0

Это не моя фантазия, знакомые рассказывали. Да что далеко ходить, тут у нас есть такой старшеклассник, которого учительница информатики гоняет за любое отклонение от Турбо Паскаля. Хотите пообщаться? Дам ссылку на его профиль...

0

Вы, как всегда, правы. Только вот в то, что за Inc и double учителя ставят двойки как-то не очень верится. Хотя, может быть, и такое бывает. Вначале страшно ученикам признаваться, что что-то не знаешь, но потом это проходит.

0

"Ты написал какой-то Inc и переменную double, а мы это не проходили, двойка!" - такой учитель являет печальное зрелище.

0

Позволю высказать замечание касательно ЕГЭ. В инструктивных материалах для комиссий по проверке ЕГЭ прямо указано, что ученик может использовать ЛЮБОЙ ЯЗЫК ПРОГРАММИРОВАНИЯ при условии точного указания его версии. А также, при желании, может формулировать алгоритм решения на русском языке или записывать алгоритм на АЯ. Найти эксперта по использованной конкретной версии языка - это дело комиссии.

0

В 2016 году задания, требующие разбора исходных текстов программ, будут записываться на четырех языках: добавляется Python. А разговоры про то, что на ЕГЭ надо использовать только какие-то классические вещи "которые мы в классе проходим" - это страшилки учителей, которые на самом деле боятся сами, но совсем иного: что ученики начнут делать задания на языках и версиях, которые учитель сам не знает.

0

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

0

Все, наверное, может быть. Но все-таки, не все так однозначно. Если ученик/студент использует в программе Inc, double и т.д., но при этом понятия не имеет что это такое, то учитель вполне может поставить 2 хотя бы за списывание. Я не против списывания (иначе что я тут вообще делаю?), однако настаиваю, что в этом списанном надо хотя бы немного разобраться.

0

А тут нет даже повода для разногласий. Однозначно тот, кто использует те или иные конструкции, должен знать все необходимое о них. А иначе- вердикт: "списано!" и закономерные "два балла".

0 голосов

Странноватая задача, конечно. Естественно, что в множестве нет порядка элементов, использование процедур (функций) здесь совершенно ни к чему. Если учитывать все требования, то получится весьма корявая программа. Примерно вот такая:
var s,s1:string; i:integer;
mn:set of 'a'..'z';
function f(c:char;m:set of 'a'..'z'):boolean;
begin
f:=(not (c in m))and(c in ['a'..'z'])
end;
begin
writeln('Введите строку:');readln(s);
mn:=[];s1:='';
for i:=1 to length(s) do
 if f(s[i],mn) then
  begin
   mn:=mn+[s[i]]; s1:=s1+s[i];
end;
writeln(s1);
end.

Пример работы:
Введите строку:
this is an example text.
thisanexmpl

(194k баллов)
0

Множества в Турбо Паскаль изначально были организованы на битовой шкале длиной 8 байт (что и повлияло на ограничение мощности множества размером 256 элементов). Такая реализация определяла порядок следования элементов множества на основании некоей хеш-функции, отображающей позицию включаемого элемента на [0;255]. В современных "паскалях" множество реализуется другими способами и в случае использования динамических массивов, либо списков, исходный порядок включения элементов может сохраняться.

0

Но это особенность реализации и её нельзя требовать при программировании работы со множеством.

0

Увы, я таких подробностей не знаю.

0

Теперь знаете)))