Помощь - Поиск - Пользователи - Календарь
Полная версия: строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
qweds
Задана строка s
задан массив букв m
----------------------
Найти номера букв в строке s которых нет в массиве m (пробелы не в счет).

Renbo
а в чём проблемы? или ты думал за тебя всю прогу напишут?
qweds
Код


        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 раза unsure.gif
volvo
Цитата
из кода видно, что это неправильный подход
Конечно, неправильный... Надо же было додуматься, работать только по ветке 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
Цитата(qweds @ 10.04.2007 10:42) *
соответственно проверяю по 1 символу из массива каждый символ в строке, но из кода видно, что это неправильный подход т.к. результат будет выводиться 3 раза (для случая если все символы недопустимые)
или почти 3 раза unsure.gif

Не три раза, а 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 как всегда меня опередил smile.gif
qweds
СПАСИБО, все работает good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.