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

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

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

 
 Ответить  Открыть новую тему 
> Редактирования строки
сообщение
Сообщение #1


Гуру
*****

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

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


Вот написал процедуру для редактирования строки, но она не коректно работает
если был нажат пробел. Где ошибка?
procedure edit_string(x,y:byte; var s:string);
var i,j:byte;
ch:char;
temp:string;
begin
i:=length(s);
temp:=s;
repeat
gotoxy(x,y);
write(s);
if temp>=s then
for j:=1 to ((length(temp)-length(s))) do write('*');
{ На месте звездочки должен стоять пробел, но так лучше видно ошибку }
gotoxy(i+x,y);
temp:=s;
ch:=readkey;
if ch=#0 then
begin
ch:=readkey;
case ch of
#75: if i>0 then dec(i);
#77: if i<length(s) then inc(i);
#83: delete(s,i+1,1);
end;
end
else
case ch of
#8: begin
delete(s,i,1);
dec(i);
end;

'a'..'z','A'..'Z':begin
insert(ch,s,i+1);
inc(i);
end;
'0'..'9':begin
insert(ch,s,i+1);
inc(i);
end;
'+'..'-','*'..'/':begin
insert(ch,s,i+1);
inc(i);
end;
' ':begin
insert(' ',s,i+1);
inc(i);
end;

end;
until ch=#13;
end;


Програма для проверки:
uses crt;
var s:string;
begin
clrscr;
write('Name ');
s:='pascal.dax.ru';
edit_string(6,1,s);
writeln;
writeln('Result : ',s);
readln;
end.


Сообщение отредактировано: volvo -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
написал процедуру для редактирования строки, но она не коректно работает

А рассказать, ЧТО должна делать процедура, нельзя? Это "Совершенно секретно"? Как проверять, не зная необходимой функциональности???

Кстати, в FPC твоя процедура вообще не компилируется - выдает
Error: duplicate case label на строке:
'+'..'-','*'..'/':begin
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

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

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


Цитата
А рассказать, ЧТО должна делать процедура, нельзя?

Она должна редактировать строчку, в данном случае s.
Например при нажатии Backspace, удаляет символ слева
от курсора, при нажатии срелок - перемещает курсор и т.д

x,y - это координаты положения начала редактирующей строки.
Цитата
Кстати, в FPC твоя процедура вообще не компилируется - выдает Error: duplicate case label

В Borland Pascal 7.0 все компилируется нормально.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


Цитата(Bokul @ 16.04.2006 18:03) *

В Borland Pascal 7.0 все компилируется нормально.


Это от того, что интервал '*'..'/' включает в себя +'..'-'. Оставь только '*'..'/'.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

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

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


Цитата
Это от того, что интервал '*'..'/' включает в себя +'..'-'. Оставь только '*'..'/'.

Да, согласен.
Ище вопрос: в какой интервал входят знаки %?()"!;_


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Цитата(Bokul @ 16.04.2006 19:27) *

Да, согласен.
Ище вопрос: в какой интервал входят знаки %?()"!;_

Это несколько интервалов, иначе попадут цифры и буквы. И зачем заморачиваться? Судя по твоему коду,нет разницы пробел введен, цифра, буква или знак. Напиши один интервал " ".."я". Там все будет. yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

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

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


Цитата
Это несколько интервалов, иначе попадут цифры и буквы. И зачем заморачиваться? Судя по твоему коду,нет разницы пробел введен, цифра, буква или знак. Напиши один интервал " ".."я". Там все будет.

Спасибо , не знал.


Ошибку нашел, вот

Код
if temp>=s then


надо проверять их длины, а я даже не знаю что этим проверяю unsure.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




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