Материал из Скретч Вики

Данная статья для текущей версии Скретча (3.0). Для данной статьи для Скретч 1.4 см. Определение регистра (для 1.4).
Пример сравнения без учёта регистра.

Определение регистра — действие различения букв в нижнем регистре от букв в верхнем регистре.

Определение регистра — более сложный процесс, чем в Скретч 1.4, из-за большего количества ограничений на то, что является и не является чувствительным к регистру. Чтобы выполнить определение регистра в Скретч 3.0 и Скретч 2.0, необходимо применить любой из небольшого количества методов, обычно использующих чувствительность блока изменить костюм на ( v) к регистру.

Способ с 67-мью костюмами

Наименование костюмов в их редакторе чувствительно к регистру (например, у спрайта может быть костюм под названием «А» и костюм под названием «а»), и блок изменить костюм на ( v) тоже чувствителен к регистру. Пользовательский блок ниже показывает, как задать переменной значение «верхний» или «нижний» в соответствии с регистром данной буквы. Во-первых, следующий процесс наименования костюмов должен быть выполнен, чтобы данный блок работал:

  • Самый первый костюм должен иметь название «недействительный» или любое другое не мешающее название
  • Затем начните с самой первой буквы алфавита — назовите костюм «А» (в верхнем регистре)
  • Следующий костюм должен быть назван «ат» или «а[любая другая буква]», однако вторая буква должна быть последовательна во всех названиях костюмов
  • Повторяйте второй и третий шаг до конца алфавита. Следующие костюмы должны быть названы «Б», «бт», «В», «вт» и т. д.

После наименования всех 67-мью костюмов убедитесь в том, что они все разложены по порядку, и приступайте к программированию. Следующий скрипт использует пользовательский блок чтобы обнаружить, находится ли данная буква в верхнем регистре.

определить определить регистр (символ)
если <не <(длина (символ)) = [1]>> , то 
  задать [регистр v] значение [ошибка!] // указывает на то, что было введено более одного символа, или длина не была определена
  стоп [этот скрипт v]
end
изменить костюм на (недействительный v) //это самый первый костюм
изменить костюм на (символ) // если символ в нижнем регистре, текущим костюмом останется «недействительный»
если <(костюм [номер v]) = [1]> , то // если спрайт не сменил костюм из-за того, что буква в нижнем регистре
  изменить костюм на (объединить (символ) [т]) //все костюмы в нижнем регистре заканчиваются на «т» или выбранную букву
end 
если <(костюм [номер v]) = [1]> , то // если спрайт до сих пор не сменил костюм
  задать [регистр v] значение [другой] // указывает на то, что был указан неподдерживаемый символ
  стоп [этот скрипт v]
end 
если <((костюм [номер v]) mod (2)) = [0]> , то // если костюм находится с интервалом двойки, т. е. это костюм большой буквы
  задать [регистр v] значение [верхний] // указывает на то, что буква в верхнем регистре
иначе 
  задать [регистр v] значение [нижний]
end 

Способ с двумя костюмами

Костюмы чувствительны к регистру, что можно использовать для определения регистра. Необходимы два костюма. Один должен быть под названием АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ (или ABCDEFGHIJKLMNOPQRSTUVWXYZ, в зависимости от того регистр букв каких языков вы хотите определить), а другой же должен быть под любым другим названием.

определить определить регистр (символ)
задать [поддерживаемые символы v] значение [АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]
задать [счётчик v] значение [1]
задать [строка v] значение []
повторить (длина (поддерживаемые символы)) раз 
  если <(буква (счётчик) в (поддерживаемые символы)) = (символ)> , то 
    задать [строка v] значение (объединить (строка) (символ))
  иначе 
    задать [строка v] значение (объединить (строка) (буква (счётчик) в (поддерживаемые символы)))
  end
  изменить [счётчик v] на (1)
end
изменить костюм на (нуль v) //Это второй костюм
изменить костюм на (строка)
если <(костюм [номер v]) = [1]> , то //Первый костюм — АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
  задать [регистр v] значение [верхний]
иначе 
  задать [регистр v] значение [нижний]
end

Способ с расстоянием

Аналогично способу с двумя костюмами, но вместо костюмов используется расстояние до ( v), т. к. он тоже чувствителен к регистру.

определить определить регистр (символ)
задать [счётчик v] значение [1]
задать [строка v] значение []
повторить (33) раз 
  если <(буква (счётчик) в [АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]) = (символ)> , то 
    задать [строка v] значение (объединить (строка) (символ))
  иначе 
    задать [строка v] значение (объединить (строка) (буква (счётчик) в [АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]))
  end
  изменить [счётчик v] на (1)
end
если <(расстояние до (строка)) = [0]> , то 
  задать [регистр v] значение [верхний]
иначе 
  задать [регистр v] значение [нижний]
end

Способ с блоком «() от ()»

Названия спрайтов чувствительны к регистру. Данный скрипт использует [ v] от (), т. к. он тоже чувствителен к регистру. Спрайт должен иметь название АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.

определить определить регистр (строка :: custom-arg)
задать [поддерживаемые символы v] значение [АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]
задать [счётчик v] значение [0]
задать [строка v] значение []
задать [регистр v] значение [в прогрессе]
повторить (33) раз 
  если <(буква (счётчик) в (поддерживаемые символы)) = (строка :: custom-arg)> , то 
    задать [строка v] значение (объединить (строка :: variables) (строка :: custom))
  иначе 
    задать [строка v] значение (объединить (строка :: variables) (буква (счётчик) в (поддерживаемые символы)))
  end
  если <([костюм # v] от (строка :: variables)) = [0]> , то //проверяем, равна ли переменная спрайта нулю, что означает, что спрайт не существует
    задать [регистр v] значение [нижний]
  иначе 
    задать [регистр v] значение [верхний]
  end
  изменить [счётчик v] на (1)
end
Cookie-файлы помогают нам предоставлять наши услуги. Используя наши сервисы, вы соглашаетесь с использованием cookie-файлов.