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

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

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

 
 Ответить  Открыть новую тему 
> Обнуление строк при использовании файлов с кодом
сообщение
Сообщение #1


Новичок
*

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

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


После использования файлом блоков-функций из других 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;



--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

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

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


пока не вникал что ты там написал, но если тебе надо "обнулить" строку, то зачем использовать delete ? Ведь можно s='';

а уж если ты исползуешь delete, то для полно очистки в той ф-и что ты привет, тебе нужно не delete(s, 1, 20) , a delete(s, 1, L)

вот если я правильно понял что ты хочешь.

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


klem4
Все исправил - заменил на s=''; во всех файлах, которые имеют функции, да только та же самая картина - ответы то выдаются, но если, допустим, в ответе в строке изменились первые 3 символа, а остальные должны быть стерты s='';, то такого, на самом деле, нет - после первых трех правильных символов идет "птичий язык" - симолы в кодировке IBM или какой ещё не знаю+измененные старые ответы.


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

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

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


Так, для начала , зачем вот этот изврат ?

{$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' - это не имеет смысла вообще никакого помойму blink.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Автооответчик
*****

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

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


заполнять надо не элемент, а всю строку smile.gif
FillChar(S6, L, 'C'); 


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


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;


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Правда? А что именно у тебя делает функция BlankDel мы должны сами догадаться? Хотя есть предположение, что ты просто не передаешь параметры, как Var, и поэтому все изменения не передаются в вызывающую программу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

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

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


Согласен с Volvo, я тоже об этом думал

зы
i:=1 тебе там не нужно, до цикла for ты ее не используешь.


Добавлено

Цитата
" FillChar(S6[i], L, 'C'); // <- i не определена + что делает эта строчка ? "

Она заполняет строку длиной L символами 'С' - как и задано в задаче.


В твоем случае она этого не делает, тебе же объяснили, не FillChar(S6[i], L, 'C'); , а FillChar(S6, L, 'C');

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


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 ? И куда это писать?


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

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

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


Елки - палки ! Поставиь в заголовках функций var ! и как-то ты жестоко пробелы удаляешь ... вот так не проще ?

 while(pos(' ', s)<>0) do
delete(s, pos(' ',s), 1);


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Shults99,

function BlankDel(Var S2,S3:string):integer;

Должно заработать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


klem4
В следующий раз - без ёлы-палы. Не хочешь, не отвечай - пойду на другой форум. angry.gif
Пробелы удаляются и ладно. Сдирать просто коды откуда-то - пошлятина. Если буду программить после заданий на Паскале - буду и более простые алгоритмы составлять.

volvo klem4
Ни х..чего не работает!!


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Так, заканчиваем сеанс гадания. Заархивируй все файлы и присоедини архив к сообщению (вместе с ПОЛНЫМ заданием, что именно ты хочешь, чтобы программа делала), тогда может быть ошибка и будет найдена. Иначе (по кускам программы) этого сделать невозможно...

Цитата
Пробелы удаляются и ладно.
Ну-ну... Вот они у тебя и удаляются, что ты ошибку найти не можешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


... ok


Прикрепленные файлы
Прикрепленный файл  PROG23x_24.rar ( 2.61 килобайт ) Кол-во скачиваний: 157


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 отобразил строку корректно !!! Символ за символом-то ясно, что оно будет в любом случае выдавать правильный результат... Вот и у тебя строка заполнена неверно, а результат будет выдаваться похожий на правду...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

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

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


Наконец-то все работает.
Только ещё с 1-цы начинать
FillChar(S6[1], L, 'C'); { Здесь все в порядке }
S5[0]:=#80; { Во-первых, почему S5 а не S6 ??? }

Фух.. Спасибо.. всем.

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


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 24.04.2024 8:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name