Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
3 / 3 / 0
Регистрация: 28.06.2009
Сообщений: 81

Строки. Удаление слов из массива

05.08.2009, 21:33. Показов 3960. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан массив слов. Из массива слов удалить слова, в которых нет повторяющихся букв.
Напишите функцию Good (m : string) : boolean, которая возвращает "подходит" ли слово или нет, тип возвращаемого значения - boolean.

Пример ввода:

3
Fg
gh
dhd
Пример вывода:

dhd
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2009, 21:33
Ответы с готовыми решениями:

Удаление слов из строки, выход за пределы массива
Нужно удалить все лова из чисел, примитивным способом не выделяя дополнительной памяти типа SetLength(); Валится на последнем удалении...

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

Строки. Удаление слов
1)Даны два слова(1 строка) . Из первого слова удалить все буквы, которые встречаются во втором слове.

14
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.08.2009, 22:18
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
uses crt;
function Good(m:string):boolean;
var i,j:byte;
begin
for i:=1 to length(m)-1 do
for j:=i+1 to length(m) do
if m[i]=m[j] then{если есть одинаковые}
 begin
  Good:=false;{не подходит для удаления}
  break;
 end;
end;
var mas:array[1..100] of string;
    n,i,j:byte;
begin
clrscr;
repeat
write('Введите количество слов, не более 50 n=');
readln(n);
until n in [1..50];
writeln('Введите ',n,' слов:');
for i:=1 to n do
readln(mas[i]);
{удаляем из массива ненужные слова}
i:=1;
while i<=n do
 begin
  if Good(mas[i]) then
   begin
    for j:=i to n-1 do
    mas[j]:=mas[j+1];
    n:=n-1;
   end
  else i:=i+1;
  end;
writeln('Слова, содержащие повторяющиеся буквы:');
for i:=1 to n do
writeln(mas[i]);
readln
end.
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
06.08.2009, 04:35
Puporev, Я вот смотрю Вы каждый раз пишете что-то в духе:
Pascal
1
for i:=1 to length(m)-1 do
А ведь это столько лишних операций, намного проще завести переменую:
Pascal
1
2
var
  l:byte;
и один раз, перед циклами, записать:
Pascal
1
l:=length(m)
Ну и потом соответственно цикл сделать вот таким:
Pascal
1
for i:=1 to l-1 do
P.S. Да такой вариант который я предлагаю не всегда подходит, но Ваш вариант выполняет очень много лишних операций.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
06.08.2009, 21:02
2lexus_ilia: Хороший компилятор ( например компилятор C ) такую замену сам может сделать
А тут это не так важно - это же тестовые задания для начинающих.
Вот если обучать на проф. программиста - тогда другое дело.
0
3 / 3 / 0
Регистрация: 28.06.2009
Сообщений: 81
06.08.2009, 23:05  [ТС]
А в моей функции чё не так ?
Pascal
1
2
3
4
5
6
7
8
9
10
11
function Good(m:string):boolean;
 var i,j,p:byte;
 begin
  j:=length(m);
  for i:=1 to j do
  begin
   p:=pos(m[i],m);
   if p=0 then Good:=false;
   break;
  end;
 end;
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
06.08.2009, 23:18
ELipskij, у тебя логика не верная в функции.
ты проходишь всю строку, берешь каждый символ и проверяешь, если текущего символа нет в строке, то Good:=false.
Но на первом же символе ты после проверки выходишь из цикла...
0
3 / 3 / 0
Регистрация: 28.06.2009
Сообщений: 81
06.08.2009, 23:45  [ТС]
А.. ну да точно я пропустил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Good(m:string):boolean;
var i,j,p:byte;
begin
j:=length(m);
for i:=1 to j do
begin
 p:=pos(m[i],m);
 if p=0 then 
 begin
  Good:=false;
  break;
 end;
end;
end;
А теперь???
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
07.08.2009, 00:51
ELipskij, читаю твой алгоритм по строкам:
Pascal
1
for i:=1 to j do
-перебираем все буквы слова
Pascal
1
p:=pos(m[i],m);
- р - первое вхождение текущего символа... т.е. тут всегда будет р = i (!!!)
Pascal
1
if p=0 then
- если p=0, т.е. символ не нашли... а исходя из предыдущей строки понятно, что символ всегда будет найден и это условие никогда не выполнится.
Pascal
1
2
3
4
begin
  Good:=false;
  break;
 end;
этот кусок никогда не выполнится.

Добавлено через 2 минуты 33 секунды
ELipskij, чем тебе вариант, предложенный Puporev, не нравится?
Pascal
1
2
3
4
5
6
7
8
9
10
11
function Good(m:string):boolean;
var i,j:byte;
begin
for i:=1 to length(m)-1 do
for j:=i+1 to length(m) do
if m[i]=m[j] then{если есть одинаковые}
 begin
  Good:=false;{не подходит для удаления}
  break;
 end;
end;
очень разумное решение данной функции.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
07.08.2009, 00:54
очень разумное решение данной функции.
O(n*n) однако.
Можно сделать О(n)
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
07.08.2009, 00:59
Цитата Сообщение от odip Посмотреть сообщение
O(n*n) однако.
Можно сделать О(n)
не понял... это ты о чем?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
07.08.2009, 07:22
O(n*n) однако.
Можно сделать О(n)
Конечно можно, просто написал как проще для понимания новичку.
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
uses crt;
function Good(m:string):boolean;
var i:byte;
begin
for i:=1 to length(m)-1 do
if pos(m[i],copy(m,i+1,255))>0 then
 begin
  Good:=false;{не подходит для удаления}
  break;
 end;
end;
var mas:array[1..100] of string;
    n,i,j:byte;
begin
clrscr;
repeat
write('Введите количество слов, не более 50 n=');
readln(n);
until n in [1..50];
writeln('Введите ',n,' слов:');
for i:=1 to n do
readln(mas[i]);
{удаляем из массива ненужные слова}
i:=1;
while i<=n do
 begin
  if Good(mas[i]) then
   begin
    for j:=i to n-1 do
    mas[j]:=mas[j+1];
    n:=n-1;
   end
  else i:=i+1;
  end;
writeln('Слова, содержащие повторяющиеся буквы:');
for i:=1 to n do
writeln(mas[i]);
readln
end.
Puporev, Я вот смотрю Вы каждый раз пишете что-то в духе:

Код Pascal1
for i:=1 to length(m)-1 do
А ведь это столько лишних операций, намного проще завести переменую:

Код Pascal1
2
var
l:byte;
Если я ничего не путаю, то длина строки содержится в нулевой ячейке строкового массива и оттуда вызывается. Поэтому не понимаю о каких лишних операциях речь и зачем создавать еще одну переменную для хранения этой величины, если уже есть s[0]. Зато если длина строки в программе динамически меняется при вставке или удалении элементов, то с дополнительной переменной точно пролетите.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
07.08.2009, 19:48
не понял... это ты о чем?
http://ru.wikipedia.org/wiki/«... _«o»_малое
O(N*N) значит что при размере массива в N элементов нужно выполнить действий <= const*N*N.
O(N) значит что при размере массива в N элементов нужно выполнить действий <= const*N.

Понятно что при больших числах N алгоритм имеющий сложность O(N) намного лучше алгоритма O(N*N).
Но как правильно заметил Puporev в задачах для новичков есть своя специфика.
А именно - большая эффективность не нужна, новичкам главное, чтобы они поняли хотя бы простой алгоритм

Добавлено через 2 минуты 5 секунд
длина строки содержится в нулевой ячейке строкового массива
Для коротких строк Паскаля ( от 0 до 255 символов ) это верно.
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
08.08.2009, 10:45
Вот это не показывает длину строки:

Pascal
1
2
3
4
5
6
var s : string;
begin
  write('enter text: ');
  readLn(s);
  write(s[0]);
end.
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,892
08.08.2009, 11:16
Конечно не покажет, потому что нужно так:
Pascal
1
2
3
4
5
6
7
var s : string;
begin
  write('enter text: ');
  readLn(s);
  write(Ord(s[0]));
  ReadLn;
end.
Если я ничего не путаю, то длина строки содержится в нулевой ячейке строкового массива и оттуда вызывается. Поэтому не понимаю о каких лишних операциях речь и зачем создавать еще одну переменную для хранения этой величины, если уже есть s[0].
Абсолютно поддерживаю Puporev'a, в данном случае. Раньше, я думал как и Илья. Но после некоторых изысканий, выянилось, что компилятор TP заменяет вызов функции
Pascal
1
b := length(str1);
на
Assembler
1
2
mov     al, byte ptr str1
mov     b, al
Всего две операции!!! Тут не идет речи о вызове функции или о цикле - всего две операции.
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
09.08.2009, 10:19
всего две операции
Если положить в регистр - то одна
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2009, 10:19
Помогаю со студенческими работами здесь

Удаление слов из строки
С клавиатуры ввести предложения. Вытереть с него слово, порядковый номер которого задает пользователь. Если номер слова превышает реальное...

Удаление слов из строки
Здравствуйте! помогите пожалуйста!!! нужно удалить из строки все слова, заканчивающиеся на букву к, если они есть. проверку сделала, а...

Удаление слов из строки.
Необходимо реализовать на языке Си функцию удаление нечетных слов из строки. void drop_strings(char string, int kol) { int i, k; ...

Удаление слов из строки
Имеются слова &quot;in&quot; &quot;it&quot; &quot;is&quot; &quot;on&quot; &quot;the&quot; которые надо удалить из строки &quot;He is sitting on the table and watching films&quot;. Мне нужно,...

Удаление слов из Строки
Подсчитать количество слов в строке. Если в строке более 5 слов, удалить из строки все слова, содержащие менее 4 символов, а затем...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru