Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2019, 22:24   #1
sss2208
Новичок
Джуниор
 
Регистрация: 10.05.2019
Сообщений: 1
По умолчанию Массивы в Pascal.

Вообщем тут такое задание: Ввести с клавиатуры строку S длиной до 80 символов из букв латинского и русского алфавита. В строку S1 перенести все буквы латинского алфавита, а в строку S2 - все буквы русского алфавита. Можете помочь с решением?
Вот мой код, к сожалению неправильный(.
Код:
program lab6v9;
uses crt;
var
s:string[80];
sl,su:string;
i,j,m:integer;
begin
clrscr;
writeln('Please enter string 80');
readln(s);
for i:= 1 to length(s) do
if (s[i] in ['a','b','c','D', 'E', 'F', 'G', 'H', 'I' ,'K','L', 'M', 'N' ,'O', 'P',
'Q', 'R', 'S', 'T', 'V', 'X', 'Y', 'Z']) then
s1[j]:=s[i];
if s[i] in (['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']) then
s2[m]:=s[i];
write('Latuna:=',s1);
writeln;
write('Rus:=',s2);
writeln;
end.

Последний раз редактировалось sss2208; 10.05.2019 в 22:37.
sss2208 вне форума Ответить с цитированием
Старый 11.05.2019, 08:58   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Можно описать константное множество
Код:
const mLat = ['A' .. 'Z'];
и выполнять разделение строки по принадлежности к mLat.
Перед циклом очистим строку.
Код:
...
Lat := '';
{Начало цикла}
if (UpCase(s[i] in mLat) then {UpCase - переводим символ в верхний регистр}
   Lat := Lat + s[i];   {добавление в строку}
else
   Rus := Rus + s[i]; {сюда всё остальное}
...
PS:
Длина строки в Паскале хранится в нулевом байте.
При добавлении элементов в строку, необходимо заботиться о состоянии этого байта. Это можно сделать, но лишние хлопоты. При слиянии строк процедуры слияния сами об этом заботятся.
Как-то так, ...

Последний раз редактировалось ViktorR; 11.05.2019 в 20:33. Причина: Дополнение.
ViktorR вне форума Ответить с цитированием
Старый 11.05.2019, 17:19   #3
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Вот только строка – массив лишь по сути, но массивом не называется.
taras-proger77 вне форума Ответить с цитированием
Старый 11.05.2019, 17:21   #4
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от sss2208 Посмотреть сообщение
if (s[i] in ['a','b','c','D', 'E', 'F', 'G', 'H', 'I' ,'K','L', 'M', 'N' ,'O', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Y', 'Z']) then
Наифга?
Код:
if ((s[i]>='a') and (s[i]<='z')) or ((s[i]>='A') and (s[i]<='Z'))
taras-proger77 вне форума Ответить с цитированием
Старый 11.05.2019, 17:22   #5
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от sss2208 Посмотреть сообщение
s:string[80];
80 - дефолтное ограничение длины для просто
Код:
string
.
taras-proger77 вне форума Ответить с цитированием
Старый 11.05.2019, 17:47   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
Наифга?
Код:

Код:
if ((s[i]>='a') and (s[i]<='z')) or ((s[i]>='A') and (s[i]<='Z'))

Нафига?

Код:
if lowerCase( s[i] ) in ['a'..'z'] then // ...
Вадим Мошев вне форума Ответить с цитированием
Старый 11.05.2019, 19:28   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
80 - дефолтное ограничение длины для просто string.
255
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.10.2020, 13:18   #8
canadamoscow
Пользователь
 
Аватар для canadamoscow
 
Регистрация: 16.05.2020
Сообщений: 57
По умолчанию

На PascalABC.NET
Код:
begin
  var s := ReadlnString;
  var s1 := s.Where(t-> (t.toLower in 'а'..'я') or (t.toLower = 'ё')).Println;
  var s2 := s.WHere(t-> t.toLower in 'a'..'z').Println;;
end.
canadamoscow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Массивы Andrew5674 Помощь студентам 0 30.05.2013 18:52
Массивы. Pascal Andrew5674 Помощь студентам 2 30.05.2013 15:45
Pascal: Массивы, подпрограммы, текст на языке Pascal WarriorCow Помощь студентам 4 22.02.2012 15:28
pascal, массивы nastya8984999 Помощь студентам 1 31.03.2009 20:12