Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 00:43   #1
focus888
 
Регистрация: 29.04.2009
Сообщений: 5
Печаль Модуль Не фурычит

Ребята помогайте, сил ни каких уже нет!
Проблема заключаеться в следующем, при выполнении процедуры конкретно в модуле выдает результат зуками, ну кто читает поймет, т.е не буквы а страшные символы.И в тоже время если процедуру записать просто как программу, а не процедуру и работать без вызова, то она отличьно работает!!!!
И еще иногда переменным присваиваеться значение из прошлых запусков программы.
Повторюсь, такие проблемы только при зписи тела в виде модуля, просто так прога работеет!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!

program lab_11;
uses modul,crt;
var w:integer;
s1,s2:string;
BEGIN
clrscr;
write('Введите первую строку: ');readln(s1);
write('Вторую: ');readln(s2);
writeln;
repeat
writeln('1 - Обмен самого большого слова первой стркис самым маленьким из второй');
readln(w);
writeln('========================== ============================');
case w of
1:F1(s1,s2);

5:w:=5;
end;
until w=5;
END.


А ТЕПЕРЬ САМ МОДУЛЬ!!!!!!!!!!!!!!!!!!!!!!!
unit MODUL;

interface
procedure F1(s1,s2:string);


implementation
procedure F1(s1,s2:string);

var sl1,sl2,sl:string;
i,j,n1,n2,k1,k2,n,k:integer;

BEGIN
i:=1;j:=1;
repeat
if s1[i]=' ' then while (s1[i]=' ') and (i<length(s1)) do inc(i);
if s1[i]<>' ' then
begin
n:=i;
while (s1[i]<>' ') and (i<=length(s1)) do inc(i);
k:=i;
sl:=copy(s1,n,k-n);
if length(sl1)=0 then
begin
sl1:=sl;n1:=n;k1:=k;
end;
if (length(sl1)<length(sl)) then
begin
sl1:=sl;k1:=k;n1:=n;
end;
end;
until i>=length(s1);

n:=1;k:=1;

repeat
if s2[j]=' ' then while (s2[j]=' ') and (j<length(s2)) do inc(j);
if s2[j]<>' ' then
begin
n:=j;
while (s2[j]<>' ') and (j<=length(s2)) do inc(j);
k:=j;
sl:=copy(s2,n,k-n);
if length(sl2)=0 then
begin
sl2:=sl;n2:=n;k2:=k;
end;
if (length(sl2)>length(sl)) then
begin
sl2:=sl;k2:=k;n2:=n;
end;
end;
until j>=length(s2);

delete(s1,n1,k1-n1);
insert(sl2,s1,n1);
delete(s2,n2,k2-n2);
insert(sl1,s2,n2);

writeln;
writeln('Первое слово:',sl1,'#');
writeln('Второе слово:',sl2,'#');
writeln;
writeln('Превоя строка после изменения: ',s1);
writeln('Вторая строка: ',s2);
readln;
END;
END.{MODUL}
focus888 вне форума Ответить с цитированием
Старый 22.05.2009, 01:22   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Код:
if length(sl2)=0 then
В этой строке узнаётся длина неинициализированной переменной sl2. Само собой, в ней оказывается всякий мусор, и в том числе может оказаться результат работы предыдущей программы.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 22.05.2009, 02:29   #3
tsergey
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 123
По умолчанию

Цитата:
if length(sl2)=0 then - здесь на самом деле неизвестно чему равна sl2


procedure F1(s1,s2:string); - а вот здесь возможно на переменные s1 и s2 нужно поставить возврат значения в основную программу
это можно сделать при помощи var s1:string;var s2:string;
на сколько я понял программа выполняется до тех пор пока не будет введена цифра 5.И при этом все проведенные операции над строками необходимо каждый раз сохранять.
tsergey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль ponchikpk Паскаль, Turbo Pascal, PascalABC.NET 6 15.05.2009 11:14
Модуль Graph Викдон Паскаль, Turbo Pascal, PascalABC.NET 6 12.11.2008 10:54
модуль RasUnit beegl Компоненты Delphi 2 28.06.2008 20:22
Модуль Graph LEX.darnica Помощь студентам 13 27.11.2007 19:15