Задана строка s задан массив букв m ---------------------- Найти номера букв в строке s которых нет в массиве m (пробелы не в счет).
Автор: Renbo 10.04.2007 13:24
а в чём проблемы? или ты думал за тебя всю прогу напишут?
Автор: qweds 10.04.2007 13:42
Код
for j:=1 to length(s) do begin if s[j]=' ' then else begin for i:=1 to v do begin if m[i]=s[j] then else writeln('nedopustimyi symvol ',s[j], ' na pozicii' , j);
end; end; end;
соответственно проверяю по 1 символу из массива каждый символ в строке, но из кода видно, что это неправильный подход т.к. результат будет выводиться 3 раза (для случая если все символы недопустимые) или почти 3 раза
Автор: volvo 10.04.2007 13:51
Цитата
из кода видно, что это неправильный подход
Конечно, неправильный... Надо же было додуматься, работать только по ветке Else... Вот так не пробовал:
for j:=1 to length(s) do begin if s[j] <> ' ' then begin found := false; { <--- Надо запоминать, было ли найдено что-то в массиве или нет } for i:=1 to v do begin found := false or (m[i] = s[i]);
if not found then writeln('nedopustimyi symvol ',s[j], ' na pozicii' , j); end;
?
Автор: hiv 10.04.2007 14:12
Цитата(qweds @ 10.04.2007 10:42)
соответственно проверяю по 1 символу из массива каждый символ в строке, но из кода видно, что это неправильный подход т.к. результат будет выводиться 3 раза (для случая если все символы недопустимые) или почти 3 раза
Не три раза, а v-раз будет выводить сообщение о недопустимом символе, если он не имеется в массиве M, а если имеется - v-1 раз. По заданию нужно наоборот:
var .... ns :boolean; {вводим логическую переменную} ....
for j:=1 to length(s) do if s[j]<>' ' then begin {так нагляднее} i:=1; ns:=false; while (not ns) and (i<v) do begin {ищем первое совпадение символа в массиве} inc(i); ns:=(m[i]=s[j]); {если символы совпали, то ns=true правда} end; if not ns then writeln('nedopustimyi symvol ',s[j], ' na pozicii' , j);
end;
ЗЫ: Код не проверял и не компилил... Volvo как всегда меня опередил