Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 05.12.2019
Сообщений: 4

Разработать алгоритм преобразования введенной строки к верхнему регистру

05.12.2019, 16:03. Показов 2940. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
!!!!!
Разработать алгоритм преобразования введенной строки к верхнему регистру .

Прошу у вас помощи
пробовал через Edit2.Text:=AnsiUpperCase(Edit1.Text); НО нужно именно через Char ,у самого не получается
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2019, 16:03
Ответы с готовыми решениями:

Приведение строки к верхнему регистру
Написать функцию, которая возвращает преобразованную к верхнему регистру строки, полученный в качестве аргумента!

Разработать программу преобразования введенной с клавиатуры строки к верхнему регистру
Архитектура процессора 8086. Сегменты, принцип сегментации памяти. Разработать программу преобразования введенной с клавиатуры строки к...

Разработать функцию, которая преобразует символы строки к верхнему или нижнему регистру
Всем привет, буду благодарен за помощь в написании программы. Задание такое: 1. Разработать функцию, которая преобразует символы строки...

49
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 14:52
Студворк — интернет-сервис помощи студентам
Lorrrd, написал бы и саму процедуру перевода регистра, а не только генерацию таблицы.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
07.12.2019, 15:28
Строго говоря, остальное можно собрать руками по приведенной табличке кодовой страницы.
Pascal
9
10
11
12
13
14
15
16
17
18
19
20
21
case s[i] of
  'a'..'z','а'..'я','ё',
  #$90,#$9A,#$9C..#$9F,#$BA,#$BF: {'ђ','љ','њ'..'џ','є','ї'}
    Dec(s[i],$20);
  #$A2,#$B3,#$BE: {'ў','і','ѕ'}
    Dec(s[i],1);
  #$83: {'ѓ'}
    Dec(s[i],2);
  #$B4: {'ґ'}
    Dec(s[i],$F);
  #$BC: {'ј'}
    Dec(s[i],$19);
end;
1
Заблокирован
07.12.2019, 15:29
Так там она и есть если перевод.
Средняя часть всё case и есть преобразование.
Всё то же самое потом написали другие, но с буквами.
И опять же... код красивый но бесполезные по времязатратам.
Функция дикримент, это функция. И внутри у неё всё то же самое сложение. Зачем её вызывать, когда проще сделать сложение. Тем более если использовать всё время явное преобразование. Это же сколько надо её вызвать?
То же самое с верхним регистром. Символов в верхнем регистре намного меньше. И выгоднее их привести к нижнему.

Да в простых прогах это незаметно.

Что касается таблицы то очень просто. Таблицу создали.

А если надо получить код регистронезависимого символа по этой таблице то

Pascal
1
2
3
4
5
6
7
var
sb: char;
bt: byte;
 
bt:= RegTab[ord(sb)];
или если символ
sb:= Chr(RegTab[ord(sb)]);
Если читаем из массива то sb:= Chr(RegTab[ord(s[i])]);
Хотя вроде эта запись в некорых местах выдаёт ошибку,
мол массив не может быть аргументов и не поманают никакие указатели.
Но в любом случае луше сначала прочитать значение в перменную и работать с ней.

Pascal
1
2
sb:= s[i];
sb:= Chr(RegTab[ord(sb)]);
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 15:41
Если нужна максимальная скорость, то можно по таблице так менять регистр:
Delphi
1
2
3
4
5
6
7
8
9
10
function  MyUpCase3(Value: string): string;
var
  i: integer;
  pb: pbytearray;
begin
  Result := Value;
  pb := @Result[1];
  for i := 0 to Length(Result) - 1 do
    pb^[i] := RegTab[pb^[i]];
end;
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
07.12.2019, 15:46
Цитата Сообщение от Lorrrd Посмотреть сообщение
Функция дикримент, это функция. Зачем её вызывать, когда проще сделать сложение.
Сразу видно специалиста, ни разу не смотревшего на результирующий ассемблерный код.

Ну а табличку этой обработкой можете и построить, особенно, переписав для s: PAnsiChar.

Добавлено через 3 минуты
Цитата Сообщение от Lorrrd Посмотреть сообщение
Символов в верхнем регистре намного меньше. И выгоднее их привести к нижнему.
В латинице+кириллице, включая расширенную -- поровну.
Хотя, если речь про статистику обычного текста, а не про мощность алфавита, то да, наверное операций записи в память будет действительно меньше.
0
Заблокирован
07.12.2019, 15:48
Но основная ошибка что вы портите строку.
Зачем её всю преобразовывать?
Зачем брать из строки сивол, преобразоывать и писать его на место?
Это что строку перевели в нужный регистр а потом пользоватся?
Делать второй проход?
И при том что оригинал испорчен
Такого нельзя делать никогда.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 15:53
Цитата Сообщение от Lorrrd Посмотреть сообщение
вы портите строку.
Кто портит?
0
Заблокирован
07.12.2019, 16:06
Цитата Сообщение от bormant Посмотреть сообщение
Сразу видно специалиста, ни разу не смотревшего на результирующий ассемблерный код.
А мне оно не надо. И какая разница на чём написана? Не важно на чём делается сложение.
Ассемблер или чём другом. Это функция и в любом случае идёт расход ресурсов на её вызов.

Если вы заметили я сделал проще. Просто читаю данные из таблицы. Это намного быстрее.
Тем более если используется юникод
Я делал на своей функции поиска проверку с разными видами преобразований. Таблица оказалась самым эффективным.
Вы будете продолжать меня унижать? Видимо на модераторов правила не распространяются.
Вам я даже минус не могу поставить за ваше оскорбление.

Добавлено через 1 минуту
Цитата Сообщение от AzAtom Посмотреть сообщение
Кто портит?
Тот кто пользуется кодом, который написан в этой теме не мной.

Добавлено через 2 минуты
Смотри сам
Delphi
1
2
3
4
5
6
case s[i] of
      'a'..'z', 'а'..'я':
        Dec(s[i],$20);
      'ё':
        Dec(s[i]);
    end;
Символ берут из строки, преобразовывают и туда-же записывают

Добавлено через 4 минуты
Цитата Сообщение от bormant Посмотреть сообщение
В латинице+кириллице, включая расширенную -- поровну.
Хотя, если речь про статистику обычного текста, а не про мощность алфавита, то да, наверное операций записи в память будет действительно меньше.
И пожалуйста поясните что вы написали?
Вы хотите сказать что в тексте больших и маленьких букв поровну и не стоит заморачиваться в какую сторону переводить?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 16:08
Lorrrd, если нужен оригинал, то просто сделай копию. Часто оригинал строки далее не нужен, как здесь, зачем его зря копировать, если он будет удалён компилятором?
0
Заблокирован
07.12.2019, 16:29
Цитата Сообщение от AzAtom Посмотреть сообщение
Lorrrd, если нужен оригинал, то просто сделай копию. Часто оригинал строки далее не нужен, как здесь, зачем его зря копировать, если он будет удалён компилятором?
Если честно, я вашу фразу не понял. Видимо мне до вас очень далеко.
Вы хотите сказать. Что у вас есть текст, вы в нём производите поиск, для чего приводите весь к одному регистру.
То бишь вам текст больше не нужен. И потом возвращаетесь в начало и начинаете сам поиск.
А я предлагаю делать всё в один проход, не портя оригинального текста, а просто читая символ, налету переводя его в регистронезависимый используя таблицу или просто функцией преобразования и это вы называете в корне неправильным.

При этом я оказываюсь в дураках.
Ну хорошо, я не прав в своих подходах к программированию. Так докажите это.
Так нет же, меня пинают модераторы а потом подключаются все остальные.
Я пытаюсь возразить а меня гонять минусам в бан.
Видимо вам плевать на программирование. Здесь не программисты а гопники развлечься собрались.
0
Модератор
 Аватар для D1973
9955 / 6491 / 2461
Регистрация: 21.01.2014
Сообщений: 27,499
Записей в блоге: 3
07.12.2019, 17:50
Цитата Сообщение от Lorrrd Посмотреть сообщение
Здесь не программисты а гопники развлечься собрались.
Блин, Lorrrd, как же ты задолбал своими детскими обидками... Я тебе сейчас не как модератор, а просто как человек говорю - ЗАДОЛБАЛ!!! Кто тебя, такого гениального, зовет сюда, на форум гопников??? Что ты, гений, забыл тут? Хватит уже свое ЧСВ прокачивать!!! Просто еще раз повторяю - ЗАДОЛБАЛ!!!
0
Заблокирован
07.12.2019, 18:36
D1973,
Вообще это вас следовало бы гнать из модератров.
Это у вас обидки, и вы их вымещаете не меня пользуясь своим положением.
Если это форум гопников то его нужно закрыть. А я сюда пришёл помогать тем, кто действительно в этом нуждается.
Я не гений и ни разу этого не сказал, а только повторил ваши же слова. И это был сарказм.
У нас с вами разные весовые категории это да. И лезете из все модератаров ко мне в основном почему-то только вы и подставляете AzAtom, поскольку всё идёт только после моего обращения к нему. И в этот раз то же. Вы тандемом работаете? Он провоцирует а вы наезжаете?
Тут все хором говорят что всем им нарушать правила можно, а мне нельзя. Потому что я плохой.
И что я такого опять то натворил? Отвечал на провокации, санкционированные лично вами?
Да, я вижу какие вы тут программисты. Рейтинги поднимете друг другу за всякую чушь.
Вот как несколько постов выше.
Модератор поумничал, написав немного по-другому мой же код, но при этом сделал ошибку.
И ему сразу же за это плюс влепили.
На меня гадость написали и автору гадости плюс сразу.
Вот так у вас рейтинги растут.
Кто на кого обижаться должен?
Кто кого задолбал?
Видимо не я один. Вас долбают те кто умнее вас. Я уже пять человек видел заблокированных. А их намного больше. А писали они очень интересные вещи и приводили полезные примеры. А вы пишите чушь и подставляете тех, кто пришёл за помощью и тех кто хочет помочь.
Далеко идти не надо. Вот только что. Я делал одному человеку проект. И просто чтобы не писать самому решил воспользоваться выложенным на этом же форумом кодом.
Я случайно нашёл тему с вопросом. В нём модератор дал ссылку на тему.
Я туда вошёл, там код.
Восторженные отзывы на него и плюсы.
Я применил его, и дал на проверку клиенту. Тот завёл и бац - ошибка.
Я проверять стал. Ошибку нашёл. Думал лоханулся не проверил что сделано по-другому.
Проверил код из темы. Бац - ошибка.
На одних данных нет, на других есть.
Тот кто писал херню сморозил. Индексы в массиве поменял местами. Забыл очевидно что такое многомерный массив.
А клиент к проекту охладел нашёл другой проект и теперь просит чтоб вставить в него то, что этот же код по идее должен был делать.
Вот так ваши гении меня подставили.
Так кто кого задолбал?
И в каждых ваших советах тьма недочётов, как в этой то теме. Простой код и то написать не можете.
Я вас задолбал? Да ваш форум разогнать надо за такие вещи.
Вопрос не в том что я делаю здесь, а что вы делаете в интернете.
А вас персонально надо гнать первым.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 18:52
Цитата Сообщение от Lorrrd Посмотреть сообщение
Он провоцирует а вы наезжаете?
Я провоцирую писать бред и/или фантазии? Это действительно смешно.

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

А вот это "ему поставили плюс, а мне не поставили" это вообще детский сад. Тебе сколько лет?
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
07.12.2019, 18:55
Цитата Сообщение от Lorrrd Посмотреть сообщение
Модератор поумничал, написав немного по-другому мой же код, но при этом сделал ошибку.
И ему сразу же за это плюс влепили.
Ну во-первых bormant это я плюс дал, за доработку моего кода. Дальше уже "закусились серьёзные дядьки".
0
Заблокирован
07.12.2019, 19:30
UR1004SWL,
А за что плюс? Там же ошибка. Меня за меньшее здесь съедают.
Чем вас мой код не устроил? Обратились бы ко мне, я бы вам сделал из моего кода всё что вы хотели.
Там же написано было, что можно переделать. Вы видимо вообще мой пост не прочитали? А почему? Я Нарушитель, в глубоком минусе. А он модератор с плюсами.
Пользуйтесь, пожалуйста.
Если вам хочется попортить строку - пожалуйста.
Вообще по всем мыслимым правилам полагается не писать в ту же строку, а делать отдельную. Временную. Для работы.
Это пишут во всех книгах по программированию. А вы книг не читаете. Вы читаете посты модераторов у которых куча плюсов, да и то липовых.

Добавлено через 25 минут
Цитата Сообщение от AzAtom Посмотреть сообщение
Я провоцирую писать бред и/или фантазии? Это действительно смешно.
Конкретно это - "и это вы называете в корне неправильным" - я так не называл. Поэтому тот пост оставил было без комментариев. Но нет, надо опять меня втягивать в словесные упражнения...
А вот это "ему поставили плюс, а мне не поставили" это вообще детский сад. Тебе сколько лет?
А это и есть провокация. То что ты сейчас делаешь.
И твой любимый модератор наезжает на меня после того как я наехал на твой наезд.
Ты опять сделал полость. "ему поставили плюс, а мне не поставили"
Я такого никогда не писал. Я писал почему ему поставили плюс.
Про себя я не писал.
Хорошо, почему не поставили плюс тому человеку кто эту ошибку исправил?
А почему вообще среди вас не нашлось гения который бы написал
ё: s[i]:='Ё';
Не догадаться было?

На меня гадость написали и автору гадости сразу плюс. Интересно - кто? Я даже знаю. Твой напрник-модератор, который мня гнобит за то что я на него плюю и его это уязвляет.

А ты провокатор и ничуть не лучше их всех. Поскольку всё происходит с твоей подачи. И по их словам ты олицетворяешь весь форум в своём лице. Тебе не стыдно? Ты сам себе не противен?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
07.12.2019, 19:38
Цитата Сообщение от Lorrrd Посмотреть сообщение
А ты провокатор
Провокатор как раз ты. Другие нормально указывают на ошибки и нормально реагируют на указание, а ты начинаешь что-то неадекватное писать и вызывать людей на эмоции.
0
Заблокирован
07.12.2019, 20:05
AzAtom,
Крутишься? Науськиваешь своего дружка-модера?
Заметь, если кто другой что напишет на него толпа не валит и из себя его не выводит.
И модеры не ходят за ним табуном.
Это я такой нехороший.
Ну развлекуха то какая. Довести меня. А потом жёстоко наказать.

Заметь, тебя в этой теме и близко не было. Чего сунулся? И заметь, сразу с наезда на меня.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
07.12.2019, 21:54
Цитата Сообщение от Lorrrd Посмотреть сообщение
Но основная ошибка что вы портите строку.
Зачем её всю преобразовывать?
Зачем брать из строки сивол, преобразоывать и писать его на место?
Потому как ТЗ ровно такое:
Цитата Сообщение от Иван23234 Посмотреть сообщение
Разработать алгоритм преобразования введенной строки к верхнему регистру .
Быстрее только брать не по одному символу, а в регистр по 32/64 бита за раз, но для этого или строка должна быть предварительно выровнена по границе 32/64 бит, или обработку невыровненной "головы" нужно предусмотреть предварительно отдельно, плюс отдельно обработку невыровненного "хвоста".

Цитата Сообщение от Lorrrd Посмотреть сообщение
Это функция и в любом случае идёт расход ресурсов на её вызов.
Не все, что выглядит как функция, является функцией на самом деле. Хинт: магия компилятора (compiler magic).
Assembler
1
2
3
4
; Dec(s^,$20);
802820           sub byte ptr [eax],$20
; Dec(s[i],$20);
802C1020         sub byte ptr [eax+edx],$20
Да, для проверки серии условий попадания в диапазон будет проход по табличке переходов.
Тем не менее, табличку переходов можно залить в константу, а можно проинициализировать при старте тем же самым кодом.

В сухом остатке правила по переводу в верхний регистр для кодировки Windows-1251 таковы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    case s[i] of
      'a'..'z',#$E0..#$FF,#$90,#$9A,#$9C..#$9F,#$BA,#$BF: {'а'..'я','ђ','љ','њ'..'џ','є','ї'}
        Dec(s[i],$20);
      #$B8: {ё}
        Dec(s[i],$10);
      #$A2,#$B3,#$BE: {'ў','і','ѕ'}
        Dec(s[i],1);
      #$83: {'ѓ'}
        Dec(s[i],2);
      #$B4: {'ґ'}
        Dec(s[i],$F);
      #$BC: {'ј'}
        Dec(s[i],$19);
    end;
0
Заблокирован
07.12.2019, 23:58
Может быть и так.
Пусть выбирает заказчик.

Добавлено через 3 минуты
Что либо говорить нет смысла.
Если меня хотят выставить дураком, то обязательно сделают, несмотря на то что сделал.
Обида и зависть опасные болезни. А здесь им подвержены буквально все.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
08.12.2019, 00:06
Lorrrd,
Вы меня опять не поняли, повторю в третий раз: Dec() в исходнике не является вызовом процедуры в буквальном смысле, хотя и синтаксически выглядит как вызов процедуры. Dec() в исходнике компилируется либо непосредственно в инструкцию DEC хх, если второй аргумент опущен или 1, либо в SUB xx,imm/reg. Это универсальный код.
Надеюсь, с этим разобрались.

>Как вы будете определять что нужно а что не нужно преобразовать, что у вас буква а что у вас другой символ или цифра?
По три сдвига регистра вправо и влево на 4, четыре обращения в таблицу перекодировки. Но это уже не исключено, что на одних только выражениях паскаля возможно и не получится выписать оптимально (хотя попробую, интересно, на что хватит оптимизатора).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2019, 00:06

Преобразования символов к нижнему и верхнему регистру
Помагите!! Дан текст преобразовать весь нижний регистр на верхний и наоборот. Буду очень признателен за помощь!:) Что смог...

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

Преобразование строки к верхнему регистру
Подскажите плиз какую-нибудь функцию которая преобразовывала бы строки к верхнему регистру(Visual C++ ).

Функция: преобразование строки к верхнему регистру
Пожалуйста, подскажите как можно реализовать данное задание: написать функцию, которая возвращает преобразованную к верхнему регистру...

Перевод всех букв строки к верхнему регистру
нужно создать программу для перевода маленьких букв английского алфавита в большие


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru