Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
Машенька=)
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 18
1

Вывести на экран только строчные русские буквы

04.02.2011, 01:47. Просмотров 2761. Ответов 10
Метки нет (Все метки)

Помогите пожалуйста написать программу на Delphi

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

Большое спасибо))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2011, 01:47
Ответы с готовыми решениями:

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

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

Строки:вывести строчные русские буквы
Дана задача "Дан текст из k символов. Вывести на экран только строчные русские буквы, входящие в...

Как вывести на экран в алфавитном порядке все прописные русские буквы?
Дан текст из k символов. Вывести на экран в алфавитном порядке все прописные русские буквы. Код...

Напечатать в алфавитном порядке: все строчные русские согласные буквы
МНОЖЕСТВА Текст задан строкой, напечатать в алфавитном порядке: все строчные русские согласные...

10
Mawrat
12857 / 5761 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
04.02.2011, 08:23 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const
  //Множество строчных русских букв.
  D = ['а'..'п', 'р'..'я,' 'ё'];
var
  S1, S2 : String;
  i, Len : Integer;
begin
  S1 := Memo1.Text;
  Len := Length(S1);
  //Первоначально длину результирующей строки делаем такой же,
  //как и у S1.
  SetLength(S2, Len);
  //Переписываем в S2 только заданные буквы.
  j := 0;
  for i := 1 to Len do begin
    if S1[i] in D then begin
      Inc(j);
      S2[j] := S1[j];
    end;
  end;
  //Корректируем длину результирующей строки в соответствие с количеством
  //записанных в неё символов.
  SetLength(S2, j);
  
  //Ответ.
  Memo2.Text := S2;
end;
1
anonimus
2156 / 1246 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
04.02.2011, 10:04 3
а может лучше сверять не с множеством? так например
Delphi
1
if (ord(S1[i]) >=192)and(ord(S1[i]) <=223) then begin //значит заглавная
0
Mawrat
12857 / 5761 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
04.02.2011, 12:11 4
По разному можно. 192 - 223 - это коды заглавных русских букв, согласно кодовой странице CP1251 (Win-1251), а по условию задачи нужны строчные.
Задание набора символов через множество и с таким разделением: ['а'..'п', 'р'..'я,' 'ё'] позволяет сделать код совместимым и с CP866 (DOS) и с CP1251 (Windows). Т. е., если компилировать код в Delphi - получим CP1251, а если в Pascal - будет CP866. И в обоих случаях множество будет задано верно.
Если код используется в Delphi Console, то получим несоответствие - компиляция пройдёт на кодовой странице CP1251, а выполнение будет происходит в консольном окне, для которого установлена по умолчанию CP866. Поэтому в случае консольного приложения следует добавлять код переключения на кодовую страницу CP1251:
Delphi
1
2
3
4
5
6
7
8
9
...
uses
  SysUtils, Windows;
...
begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
...
end.
Если после переключения в окне консоли русские буквы будут отображаться неверно, тогда следует открыть системное меню консольного окна - слева вверху окна. В этом меню выбрать: Свойства... - закладка "Шрифт" - выбрать шрифт Lucida Console.
1
04.02.2011, 12:11
anonimus
2156 / 1246 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
04.02.2011, 12:39 5
а по условию задачи нужны строчные
ну так все остальные строчные
0
Mawrat
12857 / 5761 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
04.02.2011, 13:42 6
Если через исключение диапазона кодов заглавных букв - тогда и латиница будет копироваться и прочие знаки. Всё же лучше чётко задать набор букв - или через множество, или как ты предложил - через коды, но с дополнительными условиями.
1
Машенька=)
0 / 0 / 0
Регистрация: 06.05.2010
Сообщений: 18
05.02.2011, 00:08  [ТС] 7
Mawrat, программа не работает. Надо чтобы например из РПОлоывПГШПдроух на экран выводились лоывдроух((
0
Mawrat
12857 / 5761 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
05.02.2011, 01:46 8
Вот это работает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.Button1Click(Sender: TObject);
const
  //Множество строчных русских букв.
  D = ['а'..'п', 'р'..'я', 'ё'];
var
  S1, S2 : String;
  i, j, Len : Integer;
begin
  S1 := Memo1.Text;
  Len := Length(S1);
  //Первоначально длину результирующей строки делаем такой же,
  //как и у S1.
  SetLength(S2, Len);
  //Переписываем в S2 только заданные буквы.
  j := 0;
  for i := 1 to Len do begin
    if S1[i] in D then begin
      Inc(j);
      S2[j] := S1[i];
    end;
  end;
  //Корректируем длину результирующей строки в соответствие с количеством
  //записанных в неё символов.
  SetLength(S2, j);
  
  //Ответ.
  Memo2.Text := S2;
end;
1
Arriba
256 / 172 / 27
Регистрация: 17.10.2008
Сообщений: 770
06.02.2011, 00:51 9
Mawrat, скажи пожалуйста, по каким причинам ты ограничиваешь длинну переменной S2 ? Какой то выйгрыш будет от этого или с памятью вопрос?
0
Mawrat
12857 / 5761 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
06.02.2011, 01:32 10
В начале, строка S2 имеет нулевую длину, поэтому такой код привёл бы к ошибке:
Delphi
1
S2[j] := S1[i];
Поэтому, предварительно, под S2 была выделена память. Была установлена длина строки S2 равной длине S1. - Т. к. по условию задачи, в S2 может быть переписано максимум Length(S1) символов (если ни одной русской строчной буквы в S1 не окажется).
Без предварительного выделения памяти, код можно переписать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
const
  //Множество строчных русских букв.
  D = ['а'..'п', 'р'..'я', 'ё'];
var
  S1, S2 : String;
  i : Integer;
begin
  S1 := Memo1.Text;
  //Переписываем в S2 только заданные буквы.
  for i := 1 to Length(S1) do 
    if S1[i] in D then S2 := S2 + S1[i];
  
  //Ответ.
  Memo2.Text := S2;
end;
Этот код проще, но зато он по быстродействию сильно уступает первому варианту.
0
Arriba
256 / 172 / 27
Регистрация: 17.10.2008
Сообщений: 770
06.02.2011, 03:11 11
Mawrat, Ясно, спасибо, ты как с динамическим массивом работаешь...
Понятно, знать всё таки быстродействие.
0
06.02.2011, 03:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2011, 03:11

Вывести все строчные гласные латинские буквы
Выведите все строчные гласные латинские буквы, встречающиеся в данной строке ровно один раз. ...

Вывести строчные гласные буквы, встречающиеся в тексте
Доброго времени суток.Потребовалась ваша помощь. Задание: Составить программу печати по одному...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru