Другие языки программирования и технологии
Задание_Кто соображает в программировании на паскале? Надо написать небольшую программу, а я в предмете плохо понимаю))
Вводится строка текста. Строка может быть пустая или из одних пробелов. Разделители представляют собой множество символов – ‘ /?.,<;>:”!’*%’. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями.Составить вектор номеров позиций начал слов, являющихся анаграммой первого слова. Анаграмма – слово той же длины, состоящее из тех же букв в любом порядке, что и оригинал.
Доброго времени суток.
Александр, в задаче требуется найти анаграммы, а не подсчитать число слов. Да и число слов не подсчитается, если будет идти подряд несколько разделителей. Впрочем, ладно.. .
Задача не то, чтобы из элементарных, но и не запредельной сложности. Совсем не запредельной.. . Все что требуется, это выделять слова из предложения используя информацию о разделителях слов и, собственно, поиск анаграмм. Проверку слова на анаграмму можно делать разными способами, я решил не мудрствуя сравнивать отсортированные символы у первого слова и претендента. Для этого объявлена функция SortChars. В общем, программка получилать такой.
program Anagram;
uses Crt;
const
WordDelim : set of Char = [' ',',','.']; {разделители слов, поставьте свои}
var
s, s1, s0 : String;
j, k, N, L : Integer;
A : array[1..100] of Byte;
Anagr : Boolean;
{сортирует символы слова}
function SortChars(S: String): String;
var
i, j, Len : Integer;
Ch : Char;
begin
Len := Length(S);
for i := 1 to Len do
for j := 1 to Len - i do
if S[j] < S[j + 1] then begin {если текущий элемент меньше следующего переставим их}
Ch := S[j]; {сначала сохраним в промежуточной переменной}
S[j] := S[j + 1]; {переставляем элементы}
S[j + 1] := Ch; {восстанавливаем значение}
end;
SortChars := S;
end;
begin
ClrScr;
Write('Введите предложение: ');
ReadLn(s);
s := s + ' ';
s1 := '';
j := 1; {индекс символа}
N := 0; {номер слова}
L := 0; {длина первого слова}
while j <= Length(s) do begin
if not (s[j] in WordDelim) then s1 := s1 + s[j]; {накапливаем, если не разделитель}
if (s[j] in WordDelim) or (j = Length(s)) then {разделитель или последний символ}
if s1 <> '' then begin {очередное слово не пустое}
if L = 0 then begin {это первое слово}
s0 := s1; {запомним его}
L := Length(s1); {и его длину}
end
else begin
if L = Length(s1) then begin {длины равны, возможно анаграмма}
if SortChars(s0) = SortChars(s1) then begin {точно, анаграмма}
N := N + 1;
A[N] := j - L;
end;
end;
end;
s1 := ''; {очищаем накопитель}
end;
Inc(j);
end;
for j:=1 to N do Write(A[j]:4); {вывод вектора}
ReadLn;
end.
Удачи!
Александр, в задаче требуется найти анаграммы, а не подсчитать число слов. Да и число слов не подсчитается, если будет идти подряд несколько разделителей. Впрочем, ладно.. .
Задача не то, чтобы из элементарных, но и не запредельной сложности. Совсем не запредельной.. . Все что требуется, это выделять слова из предложения используя информацию о разделителях слов и, собственно, поиск анаграмм. Проверку слова на анаграмму можно делать разными способами, я решил не мудрствуя сравнивать отсортированные символы у первого слова и претендента. Для этого объявлена функция SortChars. В общем, программка получилать такой.
program Anagram;
uses Crt;
const
WordDelim : set of Char = [' ',',','.']; {разделители слов, поставьте свои}
var
s, s1, s0 : String;
j, k, N, L : Integer;
A : array[1..100] of Byte;
Anagr : Boolean;
{сортирует символы слова}
function SortChars(S: String): String;
var
i, j, Len : Integer;
Ch : Char;
begin
Len := Length(S);
for i := 1 to Len do
for j := 1 to Len - i do
if S[j] < S[j + 1] then begin {если текущий элемент меньше следующего переставим их}
Ch := S[j]; {сначала сохраним в промежуточной переменной}
S[j] := S[j + 1]; {переставляем элементы}
S[j + 1] := Ch; {восстанавливаем значение}
end;
SortChars := S;
end;
begin
ClrScr;
Write('Введите предложение: ');
ReadLn(s);
s := s + ' ';
s1 := '';
j := 1; {индекс символа}
N := 0; {номер слова}
L := 0; {длина первого слова}
while j <= Length(s) do begin
if not (s[j] in WordDelim) then s1 := s1 + s[j]; {накапливаем, если не разделитель}
if (s[j] in WordDelim) or (j = Length(s)) then {разделитель или последний символ}
if s1 <> '' then begin {очередное слово не пустое}
if L = 0 then begin {это первое слово}
s0 := s1; {запомним его}
L := Length(s1); {и его длину}
end
else begin
if L = Length(s1) then begin {длины равны, возможно анаграмма}
if SortChars(s0) = SortChars(s1) then begin {точно, анаграмма}
N := N + 1;
A[N] := j - L;
end;
end;
end;
s1 := ''; {очищаем накопитель}
end;
Inc(j);
end;
for j:=1 to N do Write(A[j]:4); {вывод вектора}
ReadLn;
end.
Удачи!
Ну ты дал тоже!.. Кому ж захочется за так мозг себе морщить,... Тем более задача не из элементарных.. Стучи в агент поговорим...
даю алгоритм давно паскаль не юзал не помню тонкости
под рукой счас нету и времени нету
const s_razd="/?.,<;>:”!’*%";
Var
i,j:integer;
col_word:byte;
Begin
так вот запрос строки
inputln(s);
for i:=1 to len(s) dв
if s in s_razd then inc(col_word);
writeln(s);
writeln ("количество слов в строке ",col_word);
end.
синтакси по помощи в pascakt доведешь до ума
под рукой счас нету и времени нету
const s_razd="/?.,<;>:”!’*%";
Var
i,j:integer;
col_word:byte;
Begin
так вот запрос строки
inputln(s);
for i:=1 to len(s) dв
if s in s_razd then inc(col_word);
writeln(s);
writeln ("количество слов в строке ",col_word);
end.
синтакси по помощи в pascakt доведешь до ума
Похожие вопросы
- Недавно начал изучать программирование с паскаля.Помогите сделать программу которой я ввел бы 3 числа или больше а она
- Написал небольшую программу, не могу понять почему не работает цикл while и оператор else
- Помогите написать небольшую программу на ассемблере (TASM). Подробности внутри.
- Помогите написать небольшую программу на TurboPascal.
- Программирование на Паскале Помогите, пожалуйста , написать программу на паскале
- Как написали первую программу для программирования?
- Хочу потренироваться в программировании и написать небольшую программку для своего ПК. Что нужно из программ установить
- Напишете пожалуйста программу по этой задаче. ( Паскаль)
- Очень срочно!!! Помогите с заданиями по ИНФОРМАТИКЕ, надо написать несколько программ:
- напишите пожалуйста программы по паскалю.