IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Язык Паскаль, Тип данных - строки
Провинциалка
сообщение 31.10.2010 14:57
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Прошу помочь в написании программы для задачи:
"В заданном предложении в каждом слове удалить все последующие вхождения первой буквы предложения. Новый текст вывести на печать".
Альтруисты, откликнитесь! wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 31.10.2010 15:12
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


lol.gif эгоисты молчат..

Какие мысли по поводу задачи?smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 31.10.2010 18:53
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Мыслей много всяких. Одна из них - понять смысл задачи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 31.10.2010 23:32
Сообщение #4


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Тебе нужно взять первую букву, а потом идти по строке и удалять остальные такие. Интересное уточнение "в каждом слове" - будто буквы могут быть не в слове)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 1.11.2010 11:15
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> а потом идти по строке и удалять остальные такие

Неправильно.
Правильно так:

> а потом идти по строке-источнику и писать в строку-приёмник всё, кроме остальных таких.

А то, что ты сказал, будет работать за O(n^2). Хотя хоть как-то работать будет.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 1.11.2010 12:59
Сообщение #6


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Разве? По-моему, в первом варианте будет меньше действий, и тоже один проход по строке..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 1.11.2010 14:39
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Удаление элемента из строки - за сколько, по-твоему, работает?
Оно, между прочим, весь хвост сдвигает.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 1.11.2010 19:14
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Цитата
Удаление элемента из строки - за сколько, по-твоему, работает?
Оно, между прочим, весь хвост сдвигает.

А добавление в строку - создает новую. Тогда уж на первом проходе посчитать удаляемые символы, создать строку нужного размера и только потом копировать в нее символы.

Но новичка оптимизации только запутают.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 1.11.2010 19:40
Сообщение #9


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> А добавление в строку - создает новую.

Реаллокации весьма редки, у дельфей менеджер памяти хороший, можно наращивать по единице, и не париться.

> Тогда уж на первом проходе посчитать удаляемые символы, создать строку нужного размера и только потом копировать в нее символы.

Ну вообще да, лучше заранее создать буфер нужной длины.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 1.11.2010 20:42
Сообщение #10


Гость






Спасибо всем кто откликнулся на мою мольбу. Попробую написать программу, хотя очень сомневаюсь что мне - первокурснице, это по зубам! (Слишком бестолковый у нас преподаватель по программированию языка высокого уровня). А надо бы к среде.
 К началу страницы 
+ Ответить 
Archon
сообщение 1.11.2010 20:55
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Покажи, что написала, а мы подскажем что не так.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 1.11.2010 21:37
Сообщение #12


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


а почему нельзя просто:
k:=0;
осуществлять проход по строке и при встрече нужного символа увеличивать значение k на 1,
а иначе а[i-k]:=a[i];
Обрезать строку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 1.11.2010 21:53
Сообщение #13


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> а почему нельзя просто:

Ну на самом деле это в глубине души и есть добавление в новую строку только того, что надо, просто новая строка собирается прямо на месте старой. Это правильный алгоритм, вообще я уже предлагал запостить его в FAQ в виде удаления из массива нескольких элементов по некоторому признаку без использования допмассивов.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 1.11.2010 22:43
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Вроде так, но программа не работает! (Или это ахинея?)

Program stroka1;
uses crt;
var s,s1,s2,s3:string;
i,j,k:byte;
c:char;
begin
clrscr;
writeln('Введите 1 предложение:');
readln(s);
s:=' '+s;
i:=1;
s2:='';
while i<=length(s) do
if (s[i]<>' ')and(s[i-1]=' ') then
begin
j:=i;
s1:='';
while(j<=length(s))and(s[j]<>' ') do
begin
s1:=s1+s[j];
j:=j+1;
end;
c:=s1[1];
s3:=copy(s1,2,length(s1)-1);
for k:=length(s3)downto 1 do
if s3[k]=c then delete(s3,k,1);
s2:=s2+s1[1]+s3;
i:=i+length(s1);
end
else
begin
s2:=s2+s[i];
i:=i+1;
end;
delete(s2,1,1);
write(s2);
readln
end.

wacko.gif

Сообщение отредактировано: Lapp - 2.11.2010 0:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 1.11.2010 23:30
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Ты выделяешь в предложении слова и удаляешь из каждого слова повторы первой буквы этого слова, а надо первой буквы предложения. Вообще, для решения задачи выделять слова не нужно. Достаточно, как сказали выше, взять первую букву предложения и удалить её из всей оставшейся части строки. Одного цикла достаточно.

PS Добавь тег [code] вокруг текста программы, а то его сложно читать.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 1.11.2010 23:40
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Уважаемый Archon! Позвольте задать вам глупый вопрос: Что означает "Добавь тег [code] вокруг текста программы"?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 2.11.2010 0:04
Сообщение #17


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Провинциалка @ 1.11.2010 23:40) *
Что означает "Добавь тег [code] вокруг текста программы"?

1. пометь программный код блоком;
2. кликни меню CODE над формой ввода;
3. выбери нужный пункт (Pascal/Delphi);
4. увидишь, что вставились теги перед и после кода;
5. то же самое можно делать "вручную" (просто набрать с клавы);
6. читай Правила! Там все есть.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 2.11.2010 0:29
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


Видимо я должна была писать программу на Pascal в среде Delphi. Если так, то к сожалению у меня установлен только Turbo Pascal.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 2.11.2010 0:45
Сообщение #19


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Нет, Б**! Надо написать вот так:
Цитата
[.code=pas]вот здесь твой код[./code]
Только БЕЗ точек! БЕЗ! Похфиг на чем ты писала! это на форуме, когда вводишь сообщение написать надо. А в данный момент нажми "изменить" свое уже написаное сообщение, и вставь туда теги [code]

Добавлено через 10 мин.
Хотя Lapp это уже сделал smile.gif , поэтому, если хочешь, посмотри, пожалуйста, как, нажав на "изменить сообщение". НО ничего менять не надо!

Сообщение отредактировано: sheka - 2.11.2010 0:48
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Провинциалка
сообщение 2.11.2010 1:04
Сообщение #20


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Женский
Реальное имя: Ольга

Репутация: -  2  +


А программу подредактировать поможешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 10:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"