Дана стока состоящая из латинских букв,в которой слова разделены пробелами(одним или несколькими).Напечатать те строки,которые отличны от последнего слова
10-11 класс
|
и удовлетворяют след. свойству:
- слово совпадает с начальным отрезком латинского алфавита ('a','ab','abc' и т.д.)
P.s. Только решить её надо не использую строки.Вместо них array of char...
Пример ввода:
writeln('Введите предложение, символ конца - точка');
i := 0;
repeat
inc(i);
read(a[i])
until (a[i] = '.')or(i = n);
Заранее огромное спасибо.
const
Letters = ['a'..'z', 'A'..'Z'];
LineEnds = [#13, #10, #0, '.'];
MAX_LEN = 255;
var
txt: array [0..MAX_LEN] of char;
bnd: array [0..MAX_LEN, 0..1] of integer;
tsz, bsz: integer; // размеры массивов
isLetter, isWord, f1, f2: boolean;
i, j: integer;
begin
repeat
read(txt[tsz]);
// Определение границ слов
isLetter := txt[tsz] in Letters;
if isLetter and not isWord then
bnd[bsz, 0] := tsz;
if isWord and not isLetter then begin
bnd[bsz, 1] := tsz;
bsz := bsz + 1;
end;
isWord := isLetter;
tsz := tsz + 1;
until txt[tsz-1] in LineEnds;
if bsz > 1 then begin
for i := 0 to bsz-2 do begin
j := 0; f2 := true;
f1 := (bnd[bsz-1, 1] - bnd[bsz-1, 0]) = (bnd[i, 1]-bnd[i, 0]); // совпадение длин
while (j < bnd[i, 1] - bnd[i, 0]) and f2 do begin
f1 := f1 and (txt[bnd[i, 0] + j] = txt[bnd[bsz-1, 0] + j]);
f2 := f2 and (LowCase(txt[bnd[i, 0] + j]) = Chr(Ord('a') + j));
j := j + 1;
end;
// вывод
if f2 and not f1 then begin
for j := bnd[i, 0] to bnd[i, 1] - 1 do
write(txt[j]);
writeln;
end;
end;
end;
end.
а какой компилятор паскаля используете?
Странное условие "решить, не используя строки". Это выворот мозгов у авторов вопроса ("мне надо не столько решение, сколько вас поморочить"). В реальной жизни, когда программист пишет программу. он использует любые доступные средства языка, а не искусственно поставленные ему кем-то ограничения. В Паскаль.abc вообще есть возможность одним оператором разбить строку на элементы динамического массива, каждый из которых будет словом исходной строки.
Другие вопросы из категории
Читайте также
Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти количество слов в строке.
кодируются одним и тем же минимально возможным количеством бит. Было передано закодированное сообщение, состоящее из 240 символов. Определите информационный объем пе-реданного сообщения.
пробела, за последним словом-точка. Составить программу на языке Паскаль
1) Все слова, которые встречаются в последовательность по одному разу
а) Вывести все числа, которые встречаются в этом массиве по нескольку раз;
б) Вывести все числа, которые встречаются в массиве только по одному разу.
будем называть словами. подсчитать количество букв a в последнем слове данной последовательности
В TPascal