![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Shults99 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
После использования файлом блоков-функций из других 5-ти файлов
строки не обнуляются несмотря на то, что в каждом блоке-функции стоит Delete(строка,1,20);. Т.е. тогда, когда используется следующая блок- функция выводит результат с остатками строки предыдущего файла, содержащего функцию со строкой. В чем дело? Должны быть ответы и без хлама всякого, который выводится из предыдущей блок-функции. Вот пример файла программы program prog24;
uses crt;
var
S1,S2,S3,S4,S5,S6:string;
i,L:integer;
{$I c:\prog23a}
{$I c:\prog23b}
{$I c:\prog23v}
{$I c:\prog23g}
{$I c:\prog23d}
begin
RightBlank(S1);
BlankDel(S2,S3);
Upper(S4,S5);
Newstr(S6,L);
Beep;
end.
и пример одного из 5 файлов, содержащих функции (остальные подобны вплане того, что самостоятельно, когда их переделываешь в программу они работают) function Newstr(S6:string; L:integer):integer;
Var
i : integer;
Begin
WriteLn('Zapolnyaem stroku simvolami C. Zadaniye 23 b');
WriteLn('Vvedite kolichestvo simvolov L');
ReadLn(L);
FillChar(S6[i], L, 'C');
S5[0]:=#80; { Устанавливаем байт длины }
for i:=1 to 20 do
begin
Write(S6[i]);
end;
Writeln(' ');
Write('Nagmite Enter');
Delete(S6,1,20);
readln;
End;
-------------------- |
![]() ![]() |
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
пока не вникал что ты там написал, но если тебе надо "обнулить" строку, то зачем использовать delete ? Ведь можно s='';
а уж если ты исползуешь delete, то для полно очистки в той ф-и что ты привет, тебе нужно не delete(s, 1, 20) , a delete(s, 1, L) вот если я правильно понял что ты хочешь. Сообщение отредактировано: klem4 - 27.09.2005 18:43 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Shults99 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4
Все исправил - заменил на s=''; во всех файлах, которые имеют функции, да только та же самая картина - ответы то выдаются, но если, допустим, в ответе в строке изменились первые 3 символа, а остальные должны быть стерты s='';, то такого, на самом деле, нет - после первых трех правильных символов идет "птичий язык" - симолы в кодировке IBM или какой ещё не знаю+измененные старые ответы. -------------------- |
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Так, для начала , зачем вот этот изврат ?
{$I c:\prog23a}
{$I c:\prog23b}
{$I c:\prog23v}
{$I c:\prog23g}
{$I c:\prog23d}
Добавлено : Таак function Newstr(S6:string; L:integer):integer;
Var
i : integer;
Begin
WriteLn('Zapolnyaem stroku simvolami C. Zadaniye 23 b');
WriteLn('Vvedite kolichestvo simvolov L');
ReadLn(L);
FillChar(S6[i], L, 'C'); //
<- i не определена + что делает эта строчка ?
S5[0]:=#80; { Устанавливаем байт длины }
for i:=1 to 20 do
begin
Write(S6[i]);
end;
Writeln(' ');
Write('Nagmite Enter');
Delete(S6,1,20);
readln;
End;
может это мне уже к вечеру хреново, но помойму ты пытаешься заполнить неопределенный ЭЛЕМЕНТ строки СИМВОЛАМИ 'C' - это не имеет смысла вообще никакого помойму ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
GoodWind |
![]()
Сообщение
#5
|
![]() Автооответчик ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
заполнять надо не элемент, а всю строку
![]() FillChar(S6, L, 'C');
-------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
Shults99 |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4
i:=1; поставил. {$I c:\prog23a} - так написяно в учебнике - я велосипед изобретать не стал. " FillChar(S6[i], L, 'C'); // <- i не определена + что делает эта строчка ? " Она заполняет строку длиной L символами 'С' - как и задано в задаче. GoodWind Заполнять надо как раз диапазон длиной L Господа! Просьба дать ответ - почему остаток строк при переходе уже ко второй функции BlankDel(S2,S3);
содержит старые элементы, хоть я их и удаляю и использую другие S ?? До самого что-то не допирает. S1,S2,S3,S4,S5,S6:string;
-------------------- |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Правда? А что именно у тебя делает функция BlankDel мы должны сами догадаться? Хотя есть предположение, что ты просто не передаешь параметры, как Var, и поэтому все изменения не передаются в вызывающую программу...
|
klem4 |
![]()
Сообщение
#8
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Согласен с Volvo, я тоже об этом думал
зы i:=1 тебе там не нужно, до цикла for ты ее не используешь. Добавлено Цитата " FillChar(S6[i], L, 'C'); // <- i не определена + что делает эта строчка ? " Она заполняет строку длиной L символами 'С' - как и задано в задаче. В твоем случае она этого не делает, тебе же объяснили, не FillChar(S6[i], L, 'C'); , а FillChar(S6, L, 'C'); Сообщение отредактировано: klem4 - 28.09.2005 17:03 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Shults99 |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Я думал, что будет достаточно того, что я привел в первом своем посте. Принцип построения функций в файлах один и тот же - всего их 5: всё постить не хоцца чо та. Вот функция BlankDel - она из строки с пробелами делает строку без пробелов. function BlankDel(S2,S3:string):integer;
var
i,n:integer;
begin
Writeln('Vvedite stroku S2 c probelami. Zadaniye 23 v');
readln(S2);
begin
n:=0;
for i:=1 to 20
do if S2[i]<>' ' then
begin
S3[i-n]:=S2[i];
end
else n:=n+1;
{Proverka sodergimogo S2}
Writeln('');
Writeln('Kopiya Stroki S2 (bez probelov)');
for i:=1 to 20 do
begin
Write(S3[i]);
end;
end;
Writeln(' ');
Write('Nagmite Enter');
S2:='';
S3:='';
{ Delete(S2,1,20);
Delete(S3,1,20);}
readln;
end;
Ещё раз - что значит передавать параметры, как var ? И куда это писать? -------------------- |
klem4 |
![]()
Сообщение
#10
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Елки - палки ! Поставиь в заголовках функций var ! и как-то ты жестоко пробелы удаляешь ... вот так не проще ?
while(pos(' ', s)<>0) do
delete(s, pos(' ',s), 1);
Сообщение отредактировано: klem4 - 28.09.2005 18:59 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Shults99,
function BlankDel(
Var
S2,S3:string):integer;
Должно заработать... |
Shults99 |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4
В следующий раз - без ёлы-палы. Не хочешь, не отвечай - пойду на другой форум. ![]() Пробелы удаляются и ладно. Сдирать просто коды откуда-то - пошлятина. Если буду программить после заданий на Паскале - буду и более простые алгоритмы составлять. volvo klem4 Ни х..чего не работает!! -------------------- |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Так, заканчиваем сеанс гадания. Заархивируй все файлы и присоедини архив к сообщению (вместе с ПОЛНЫМ заданием, что именно ты хочешь, чтобы программа делала), тогда может быть ошибка и будет найдена. Иначе (по кускам программы) этого сделать невозможно...
Цитата Пробелы удаляются и ладно. Ну-ну... Вот они у тебя и удаляются, что ты ошибку найти не можешь... |
Shults99 |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
... ok
Прикрепленные файлы ![]() -------------------- |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Значит, так: все прекрасно работает... Просто для того, чтобы это откомпилировалось, надо добавить самой первой строкой программы:
{$V-}
, иначе Паскаль не позволяет передавать тип String[20] в параметр, имеющий просто тип String (т.е. длина строк должна совпадать идеально... {$V-} снимает это ограничение)... А вот насчет процедуры NewStr - ты неправильно заполняешь строку... FillChar(S6, L, 'C'); { Здесь все в порядке }
S5[0]:=#80; { Во-первых, почему S5 а не S6 ??? }
ну, и потом, я так понял, что это - пример из Борландовского файла помощи для Турбо-Паскаля? Но ведь там описана строка длиной в 80 символов, а ты откуда взял это самое число 80? Вот правильный вариант для твоего случая: FillChar(S6, L, 'C');
S6[0] := Chr(L); { <--- устанавливаешь длину строки !!! }
WriteLn(S6); { <--- именно так !!! }
Если ты не печатаешь строку через WriteLn, а печатаешь посимвольно, то смысла в использовании FillChar просто нет, т.к. тут самое главное - правильно установить длину строки, и сделать это так, чтобы WriteLn отобразил строку корректно !!! Символ за символом-то ясно, что оно будет в любом случае выдавать правильный результат... Вот и у тебя строка заполнена неверно, а результат будет выдаваться похожий на правду... |
Shults99 |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: ![]() ![]() ![]() |
Наконец-то все работает.
Только ещё с 1-цы начинать FillChar(S6
[1]
, L, 'C'); { Здесь все в порядке }
S5[0]:=#80; { Во-первых, почему S5 а не S6 ??? }
Фух.. Спасибо.. всем. Сообщение отредактировано: volvo - 29.09.2005 18:58 -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 25.07.2025 3:07 |