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

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

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

> Обнуление строк при использовании файлов с кодом
Shults99
сообщение 27.09.2005 17:50
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
klem4
сообщение 27.09.2005 18:41
Сообщение #2


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

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

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


пока не вникал что ты там написал, но если тебе надо "обнулить" строку, то зачем использовать 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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shults99
сообщение 27.09.2005 19:36
Сообщение #3


Новичок
*

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

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


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


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 27.09.2005 19:51
Сообщение #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 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 28.09.2005 7:28
Сообщение #5


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

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

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


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


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shults99
сообщение 28.09.2005 15:56
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.09.2005 16:06
Сообщение #7


Гость






Правда? А что именно у тебя делает функция BlankDel мы должны сами догадаться? Хотя есть предположение, что ты просто не передаешь параметры, как Var, и поэтому все изменения не передаются в вызывающую программу...
 К началу страницы 
+ Ответить 
klem4
сообщение 28.09.2005 16:59
Сообщение #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 - 28.09.2005 17:03


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shults99
сообщение 28.09.2005 18:54
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 28.09.2005 18:58
Сообщение #10


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

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

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


Елки - палки ! Поставиь в заголовках функций 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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.09.2005 19:02
Сообщение #11


Гость






Shults99,

function BlankDel(

Var

 S2,S3:string):integer;

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


Новичок
*

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

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


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

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


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


Гость






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

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


Новичок
*

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

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


... ok


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


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.09.2005 1:20
Сообщение #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
сообщение 29.09.2005 17:24
Сообщение #16


Новичок
*

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

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


Наконец-то все работает.
Только ещё с 1-цы начинать
FillChar(S6

[1]

, L, 'C'); { Здесь все в порядке }
 S5[0]:=#80;  { Во-первых, почему S5 а не S6 ??? }

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

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


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

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

 

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