![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Yanochka |
|
|||
![]() Fallen Angel ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1256 Регистрация: 7.10.2004 Где: Москва Репутация: нет Всего: 79 |
-------------------- ![]() |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
Задача 1
Условие задачи. Разработать программу простейшего редак-тора текстов. С экрана вводится произвольный текст. Текст построчно со-храняется в файле. Прочитать текст построчно из файла и в ка-ждой строке удалить лишние пробелы между словами, кроме од-ного. Вывести преобразованный текст в другое экранное окно. Пояснения к решению задачи. Решение задачи с большим объ-емом входной информации, типа многострочного текста, требует обеспечения работы пользователя в более удобной форме, чем обычный ввод данных с клавиатуры компьютера. Чтобы один раз введенный текст не приходилось набирать заново, его предлагается сохранять в файле. Если в условии задачи предлагается работать с текстом, то для работы с текстом надо определить текстовый файл. Запихиваешь текст в Мемо ( Memo1.Lines.LoadFromFile(filename) ). Потом считываешь построчно, пробегаешь циклом удаляя пробелы, и записываешь новую строку в новый ММемо. Понятно? --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Yanochka |
|
|||
![]() Fallen Angel ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1256 Регистрация: 7.10.2004 Где: Москва Репутация: нет Всего: 79 |
не, не понятно, не могу по алгоритму составить текст функции для удаления лишних пробелов в одной строке текста.
Добавлено @ 18:36 у меня есть первое решение, так мне выдает ошибку после того как текст введен, и не удаляет пробелы -------------------- ![]() |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
for k:=1 to Memo1.LinesCount do
for i:=1 to Lendth(Memo1.Lines[k]) do begin if copy(Memo1.Lines[k],i,1)=' ' then del(Memo1.Lines[k],i,1); end; --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Yanochka |
|
|||
![]() Fallen Angel ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1256 Регистрация: 7.10.2004 Где: Москва Репутация: нет Всего: 79 |
У меня вот как
function Stroka(s:string):string; var i,k:integer; begin k:=length(s); for i:=1 to k do while (s[i]=' ') and (s[i+1]=' ') do begin delete(s,i+1,1); k:=k-1;end; Stroka:=s; -------------------- ![]() |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
чуть не дочитал условие
![]() --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Yanochka |
|
|||
![]() Fallen Angel ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1256 Регистрация: 7.10.2004 Где: Москва Репутация: нет Всего: 79 |
не знаю
![]() Вот смотри что у меня:
-------------------- ![]() |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
вместо while надо if
Добавлено @ 18:56 алгоритм правильный: найти пробел - если за ним еще пробел то удалить предыдущий и вернуть позицию на 1 назад --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Vit |
|
||||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Удаление двойных пробелов:
Добавлено @ 05:07 Не самое лучшее решение...
Лучше так:
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||||
|
|||||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
есть решение:
for i:=1 to Memo1.LinesCount do begin for j:=1 to length( Memo1.Lines[i]) do begin if copy(memo1.Lines[i],j,1)=' ' and copy(memo1.Lines[i],j+1,1)=' ' then delete(memo1.Lines[i],j+1,1); end; Memo2.Lines[i]:=Memo1.Lines[i]; end; --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Vladimir13, хех... а ошибок то в этом коде... проверяйте границы массивов, потом вылавливать такие ошибки замучаешся - их лучше такие не делать. Да и алгоритм работать будет со сбоями...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
можно поставить условие
if j= length( Memo1.Lines[i]) and copy(memo1.Lines[i],j,1)=' ' then memo2.Lines[i]:=Memo1.Lines[i] --------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Yanochka |
|
|||
![]() Fallen Angel ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1256 Регистрация: 7.10.2004 Где: Москва Репутация: нет Всего: 79 |
У меня выходит когда хочу запусть на исполнение : Invalid threading model (STAThreadATTribute is required)
потом когда ввожу текст, потом записать пытаюсь тогда ошибка : index was outside the bonus of the array Это сообщение отредактировал(а) Yanochka - 19.12.2004, 22:41 -------------------- ![]() |
|||
|
||||
Vladimir13 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 8.12.2004 Где: Волгоград, Россия Репутация: 1 Всего: 1 |
что то лучше чем ничто. Прежде чем критиковать - убедись, что то, что ты предложил работает. а мое и подработать можно при желании
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr |
|||
|
||||
Vit |
|
||||||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А что ты делаешь? И смысл задачи? Это учебная задача или реальная? Если учебная то алгоритм будет такой:
Если реальная то я уже дал тебе решение:
Добавлено @ 02:12
Подработать можно, но очень сложно, код неправильно изначально разработан, доработать - это его заново переписать, а решение я уже давал, вот и ещё раз даю... -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |