Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Странная работа компиляторов с задачей

Автор: Vinchkovsky 11.01.2007 18:26

Вот сама задача:

Цитата
Задача 1.
Даны два слова А и В. Проверьте, можно ли из букв слова А составаить В. Каждый символ из А использовать не более 1 раза.

И решение:
program Zadacha1;
uses Crt;
var c:boolean;
a,b:string;
function Sovmestimost(a,b:string):boolean;
var len1,len2,i,ii,res:integer;
aM,bM:array [1..20] of string;
d3:boolean;
begin
len1:=length(a);
len2:=length(b);
for i:=1 to len1 do aM[i]:=copy(a,i,1);
for i:=1 to len2 do bM[i]:=copy(b,i,1);
for i:=1 to len2 do
for ii:=1 to len1 do
if bM[i]=aM[ii] then begin res:=res+1; aM[ii]:=''; bM[i]:='*' end;
if res=len2 then d3:=true else d3:=false;
Sovmestimost:=d3
end;
begin
clrscr;
readln(a);
readln(b);
if length(a)>length(b) then c:=Sovmestimost(a,b) else c:=Sovmestimost(b,a);
if c=true then writeln('YES') else writeln('NO');
readln
end.

На этот раз точно верное.
Так вот, в чем проблема: при первом запуске проги все делается ОК (напр., вводим poker и kop), тоесть пишется YES. Но при повторном при тех же словах пишется NO. Помогает только повторный запуск Турбо Паскаля. Пробовал на двух версиях. Так в чем дело - настройках компилятора, "особенностями машинной арифметики", моем решении? Странно, до этого было все нормально. wink.gif

Автор: volvo 11.01.2007 18:51

Res := 0;
нигде не забыл? При перезапуске комилятора, естественно, все чистится, и при первом прогоне ЛОКАЛЬНАЯ переменная инициализируется нулем... А вот при втором - мусором...

Автор: Vinchkovsky 11.01.2007 19:15

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