Другие языки программирования и технологии
Помогите написать задачу на Pascal 7.0
Дана строка текста.Выбрать слова состоящие из одинаковых букв(aaa, xx, gggg) и выдать их на экран в порядке возрастания длинны
Доброго времени суток.
Вариантов масса. Вот один из возможных.
type
TWordInfo = record
WrdStart, WrdLen : Byte; {посколько строка ТР, то достаточно такого типа}
end;
const WordDelim : set of Char = [' '];
var
A : array[1..255] of TWordInfo;
J, n, SLen : integer;
n := 0;
J := 1;
SLen := Length(S);
while J <= SLen do begin
while (J <= SLen) and (S[J] in WordDelims) do Inc(J); {пока разделители продвигаемся по строке}
if J <= SLen then Inc(n); {увеличили счетчик}
A[n].WrdStart := J; {запомнили позицию начала слова}
while (J <= SLen) and not(S[J] in WordDelims) do Inc(J); {ищем конец слова}
A[n].WrdLen := J - A[n].WrdStart; {получили длину слова}
end;
Теперь массив А содержит информацию о начальной позиции каждого слова и его длине. Дальше дело техники. Сортируем массив по возрастанию поля A[n].WrdLen, а потом берем из массива начало очередного слова и его длину, выделяем из строки подстроку и проверяем ее на предмет одинаковых символов в ней и если да, выводим ее на экран.
Сортировать можно так
for i := 1 to n do
for j := 1 to n - i do
if A[j].WrdLen > A[j + 1].WrdLen then begin
T := A[j];
A[j] := A[j + 1];
A[j + 1] := T;
end;
Переменная Т имеет тип элемента массива.
Выделять подстроки можно так
for i:=1 to n do begin
S1 := Copy(S, A[ i ].WrdStart, A[ i ].WrdLen);
{проверочку на одинаковые символы в S1 сами сделайте}
end;
Удачи!
Вариантов масса. Вот один из возможных.
type
TWordInfo = record
WrdStart, WrdLen : Byte; {посколько строка ТР, то достаточно такого типа}
end;
const WordDelim : set of Char = [' '];
var
A : array[1..255] of TWordInfo;
J, n, SLen : integer;
n := 0;
J := 1;
SLen := Length(S);
while J <= SLen do begin
while (J <= SLen) and (S[J] in WordDelims) do Inc(J); {пока разделители продвигаемся по строке}
if J <= SLen then Inc(n); {увеличили счетчик}
A[n].WrdStart := J; {запомнили позицию начала слова}
while (J <= SLen) and not(S[J] in WordDelims) do Inc(J); {ищем конец слова}
A[n].WrdLen := J - A[n].WrdStart; {получили длину слова}
end;
Теперь массив А содержит информацию о начальной позиции каждого слова и его длине. Дальше дело техники. Сортируем массив по возрастанию поля A[n].WrdLen, а потом берем из массива начало очередного слова и его длину, выделяем из строки подстроку и проверяем ее на предмет одинаковых символов в ней и если да, выводим ее на экран.
Сортировать можно так
for i := 1 to n do
for j := 1 to n - i do
if A[j].WrdLen > A[j + 1].WrdLen then begin
T := A[j];
A[j] := A[j + 1];
A[j + 1] := T;
end;
Переменная Т имеет тип элемента массива.
Выделять подстроки можно так
for i:=1 to n do begin
S1 := Copy(S, A[ i ].WrdStart, A[ i ].WrdLen);
{проверочку на одинаковые символы в S1 сами сделайте}
end;
Удачи!
а чем ты на уроках слушаешь?
Похожие вопросы
- Помогите написать задачу в Pascal.
- Помогите написать программу! Турбо Паскаль 7.0
- Помогите с Pascal 7.0!Кто чем может!
- turbo pascal 7.0 Определить принадлежность к области точек с заданными координатами!!!
- Для тех кто разбирается в Turbo Pascal 7.0 помогите плиз))))
- Turbo pascal 7.0,задача
- Turbo Pascal 7.0 помогите пожалуйста!!!
- Какой язык програмирования выбрать? Уже заканчиваю изучение Turbo pascal 7.0, какой изучать потом? Напишите поконкретнее
- turbo pascal 7.0!
- Помогите пожалуйста написать задачи на "Pascal"? Хотя бы несколько.