С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
AsperincheG

Напечатать все слова, которые встречаются в последовательности по одному разу

26.03.2009, 12:59. Показов 1745. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте! Вот прошу вашу помощь с решением данной задачи!

Дана последовательность от 1 до 30 слов, в каждом из которых от 1 до 5 строк латинскими буквами, между соседними словами запятые, за последним словом точка. Напечатать все слова , которые встречаются в последовательности по одному разу.

Заранее спасибо!

Прошу прощения слово Pascal не правельно написал!
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2009, 12:59
Ответы с готовыми решениями:

Напечатать гласные, которые входят в текст по одному разу и согласные, которые не входят в текст по одному разу
Друзья, помогите решить следующую задачу: Дан произвольный текст. Напечатать в алфавитном...

Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу.
1.8. 2.Составить программу печати в возрастающем порядке всех цифр, входящих в десятичную запись...

Напечатать все слова, которые встречаются в последовательности по одному разу
Очень нужно написать прогу, помогите кто может пожалуйста. Вот задание: Дана последовательность...

10
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
26.03.2009, 17:36
Если не нужно делать проверку правильности ввода строки, а просто решить, то можно так.
Pascal
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
uses crt;
var s:string;
    ss:array[1..100] of string;{массив слов}
    k,j,n,i,l:integer;
begin
clrscr;
writeln('vvedite text');
readln(s);
k:=1;
for i:=1 to length(s) do
if s[i]=',' then k:=k+1 {если запятая, считаем}
else ss[k]:=ss[k]+s[i];{иначе составляем слово}
 
for i:=1 to k do {идем по массиву}
  begin
   n:=0;
   for j:=1 to k do{и по его "клону"}
   if ss[i]=ss[j]then n:=n+1;{если слово совпадает, считаем}
   if n>1 then s:=ss[i];{если больше одного раза}
   for l:=1 to k do{то снова идем по следующему "клону" массива}
   if ss[l]=s then ss[l]:='';{и все эти слова заменяем на пустую строку}
  end;
for i:=1 to k do
if ss[i]<>'' then write(ss[i],' ');{если не пустая строка, выводим}
readln
end.
Добавлено через 2 часа 17 минут 27 секунд
Все таки раз есть условие, то его надо проверять, хоть и не сильно хотелось. Кроме того забыл про точку и упусиил одну строку, выделил красным.
Pascal
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
uses crt;
const ds=['a'..'z',',','.']; {допустимые символы}
var s,s1:string;
    ss:array[1..100] of string;
    k,j,n,i,l,z,m,len:integer;
begin
clrscr;
writeln('Введите последовательность слов из строчных латинских букв,в конце точка.');
repeat {проверим правильность ввода}
readln(s);
k:=0;
for i:=1 to pos('.',s)do
if not (s[i] in ds) then{если есть недопустимые символы}
k:=k+1;
z:=0;
for i:=1 to pos('.',s) do
if s[i]=','then z:=z+1; {считаем запятые}
len:=0;m:=0;
s1:=copy(s,1,pos('.',s)-1)+',';
while pos(',',s1)>0 do
  begin
    len:=length(copy(s1,1,pos(',',s1)-1));{проверяем длину слов}
    delete(s1,1,pos(',',s1));
    if len>5 then m:=m+1; {если больше 5 букв, считаем}
  end;
if k>0 then writeln('Введены недопустимые символы.');
if z>29 then writeln('Больше 30 слов.');
if m>0 then writeln('Есть слова больше 5 букв.');
if pos('.',s)=0 then {если нет точки}
writeln('Не введена точка в конце последовательности.');
if (pos('.',s)=0)or(k>0)or(z>29)or(m>0) then writeln('Повторите ввод!');
until (pos('.',s)>0)and(k=0)and(z<=29)and(m=0); {если все нормально, продолжаем}
s:=copy(s,1,pos('.',s)-1)+',';{берем строку до точки, точку меняем на запятую}
k:=1;
for i:=1 to length(s) do
if s[i]=',' then k:=k+1
else ss[k]:=ss[k]+s[i];
for i:=1 to k do
  begin
   n:=0;
   for j:=1 to k do
   if ss[i]=ss[j]then n:=n+1;
   if n>1 then s:=ss[i];
   for l:=1 to k do
   if ss[l]=s then ss[l]:='';
  end;
for i:=1 to k do
if ss[i]<>'' then write(ss[i],' ');
readln
end.
Почему-то в коде не выделяется. Это строка № 33.
0
0 / 0 / 0
Регистрация: 27.03.2009
Сообщений: 23
27.03.2009, 15:41
А почему когда проверяешь программу в строке For i:=1 to pos('.',s) do он находит ошибку(Error 94:"." expected)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.03.2009, 15:58
У меня ничего не выводит, скопирвал код отсюда. Точку может просить только если лишний end; или после последнего end нет точки.
0
0 / 0 / 0
Регистрация: 27.03.2009
Сообщений: 23
27.03.2009, 16:03
Большое спасибо

Добавлено через 4 минуты 36 секунд
Хех у меня всё равно показывает на скобку и выводит эту ошибку
0
0 / 0 / 1
Регистрация: 28.10.2009
Сообщений: 23
29.10.2009, 00:12
Подскажите, почти такое же задание, но вместо Напечатать все слова , которые встречаются в последовательности по одному разу. нужно Напечатать в алфавитном порядке все согласные буквы, которые не входят ни в одно слово.

Вот в этом скрипте, как заставить его проверить гласные и убрать из списка лишнние?
Создать const gl=['a'..'z',',','.']; {допустимые согласные (введя их вручную)}

Pascal
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
29
30
31
32
33
34
35
36
37
38
39
40
41
uses crt;
const ds=['a'..'z',',','.']; {допустимые символы}
var s,s1:string;
    ss:array[1..100] of string;
    k,j,n,i,l,z,m,len:integer;
begin
clrscr;
writeln('Введите последовательность слов из строчных латинских букв,в конце точка.');
repeat {проверим правильность ввода}
readln(s);
k:=0;
for i:=1 to pos('.',s)do
if not (s[i] in ds) then{если есть недопустимые символы}
k:=k+1;
z:=0;
for i:=1 to pos('.',s) do
if s[i]=','then z:=z+1; {считаем запятые}
len:=0;m:=0;
s1:=copy(s,1,pos('.',s)-1)+',';
while pos(',',s1)>0 do
  begin
    len:=length(copy(s1,1,pos(',',s1)-1));{проверяем длину слов}
    delete(s1,1,pos(',',s1));
    if len>5 then m:=m+1; {если больше 5 букв, считаем}
  end;
if k>0 then writeln('Введены недопустимые символы.');
if z>29 then writeln('Больше 30 слов.');
if m>0 then writeln('Есть слова больше 5 букв.');
if pos('.',s)=0 then {если нет точки}
writeln('Не введена точка в конце последовательности.');
if (pos('.',s)=0)or(k>0)or(z>29)or(m>0) then writeln('Повторите ввод!');
until (pos('.',s)>0)and(k=0)and(z<=29)and(m=0); {если все нормально, продолжаем}
s:=copy(s,1,pos('.',s)-1)+',';{берем строку до точки, точку меняем на запятую}
 
[U]-ТУТ нужен алго для сравнивания согласных из заданного массива и сравнивания его с введенными словами, и ещё как то записать в алфавитном порядке... ---[/U]
 
  end;
for i:=1 to k do
if ss[i]<>'' then write(ss[i],' ');
readln
end.
Поможете?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.10.2009, 08:10
Цитата Сообщение от Drez Посмотреть сообщение
Напечатать в алфавитном порядке все согласные буквы, которые не входят ни в одно слово.
Если буква не входит ни в одно слово, значит она не входит вообще в строку и задача совсем простая. Завести константу строку, где по алфавиту написать все согласные буквы и проверять по порядку есть ли они в строке. Если нет, вывести на экран.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
const sg:string='BCDFGHKLMNPQRSTVWXZbcdfghklmnpqrstvwxz';
var s:string;
     i,j,k:byte;
begin
writeln('s:');
readln(s);
for i:=1 to length(sg) do
 begin
  k:=0;
  for j:=1 to length(s) do
  if sg[i]=s[j] then k:=k+1;
  if k=0 then write(sg[i],' ');
 end;
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 08:43
2Puporev, а тут разве нельзя банальным pos() обойтись вместо: ( или я чо та туплю???)
Pascal
1
2
3
4
5
6
 begin
  k:=0;
  for j:=1 to length(s) do
  if sg[i]=s[j] then k:=k+1;
  if k=0 then write(sg[i],' ');
 end;
так кажется будет и короче и проще...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
const
  sg:string='BCDFGHKLMNPQRSTVWXZbcdfghklmnpqrstvwxz';
var
  s:string;
  i:byte;
begin
  writeln('s:');
  readln(s);
  for i:=1 to length(sg) do
    if pos(sg[i],s)=0 then
      write(sg[i],' ');
end.
2
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.10.2009, 08:47
Inadequate, Конечно можно, это я туплю. Встать-то встал, не еще не проснулся.
Pascal
1
2
3
for i:=1 to length(sg) do
for j:=1 to length(s) do
if pos(sg[i],s) =0 then write(sg[i],' ');
0
0 / 0 / 1
Регистрация: 28.10.2009
Сообщений: 23
29.10.2009, 09:20
Обьеденил с предыдущим:
Pascal
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uses crt;
const ds=['a'..'z',',','.']; {допустимые символы}
var s,s1:string;
    ss:array[1..100] of string;
    k,j,n,i,l,z,m,len:byte;
    sg:string='BCDFGHKLMNPQRSTVWXZbcdfghklmnpqrstvwxz';
begin
clrscr;
writeln('Введите последовательность слов из строчных латинских букв,в конце точка.');
repeat {проверим правильность ввода}
readln(s);
k:=0;
for i:=1 to pos('.',s)do
if not (s in ds) then{если есть недопустимые символы}
k:=k+1;
z:=0;
for i:=1 to pos('.',s) do
if s[i]=','then z:=z+1; {считаем запятые}
len:=0;m:=0;
s1:=copy(s,1,pos('.',s)-1)+',';
while pos(',',s1)>0 do
  begin
    len:=length(copy(s1,1,pos(',',s1)-1));{проверяем длину слов}
    delete(s1,1,pos(',',s1));
    if len>5 then m:=m+1; {если больше 5 букв, считаем}
  end;
if k>0 then writeln('Введены недопустимые символы.');
if z>29 then writeln('Больше 30 слов.');
if m>0 then writeln('Есть слова больше 5 букв.');
if pos('.',s)=0 then {если нет точки}
writeln('Не введена точка в конце последовательности.');
if (pos('.',s)=0)or(k>0)or(z>29)or(m>0) then writeln('Повторите ввод!');
until (pos('.',s)>0)and(k=0)and(z<=29)and(m=0); {если все нормально, продолжаем}
s:=copy(s,1,pos('.',s)-1)+',';{берем строку до точки, точку меняем на запятую}
begin
  k:=0;
  for j:=1 to length(s) do
  if sg[i]=s[j] then k:=k+1;
  if k=0 then write(sg[i],' ');
 end 
  end;
for i:=1 to k do
if ss[i]<>'' then write(ss[i],' ');
readln
end.
Но что-то тут не то, ss[i] sg[i] их заменят на символьные ss и sg?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.10.2009, 10:21
Drez, Вам все написали, кода 5 строчек. Если Вам нужно обязательно заморочиться, удачи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2009, 10:21
Помогаю со студенческими работами здесь

Напечатать все слова, которые встречаются в последовательности по одному разу
Здравствуйте. У меня такая проблема...вот задача: «Задана фраза-последовательность, содержащая от...

Напечатать все слова, которые встречаются в последовательности по одному разу
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 прописных...

Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу.
Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по...

Напечатать все слова, которые встречаются в последовательности по одному разу
Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных русских...

Напечатать все слова последовательности, которые встречаются в ней по одному разу
2. Предложение состоит из слов. Между словами один или несколько пробелов, после последнего слова...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru