Страница 2 из 2

Re: Глава 24, задачи В и Г

СообщениеДобавлено: 02.11.2016 22:18:02
Oleg_D
Герман писал(а):Объясните, пожалуйста, на пальцах, какое условие является решающим для переменной FLAG?

Флаг здесь нужен для того, чтобы знать, найден ли символ впервые (Flag=false), или повторно (Flag=true). В первом случае печатаем и символ, и позицию, а во втором -- только позицию.

Re: Глава 24, задачи В и Г

СообщениеДобавлено: 03.11.2016 00:29:51
Герман
Спб.

Re: Глава 24, задачи В и Г

СообщениеДобавлено: 02.12.2017 16:54:04
xc6_egor
[quote="Oleg_D"]Для начала давайте объясним всем, что речь идёт о задачах 24-В и 24-Г:

24-В) Для введенной пользователем строки напечатать позиции всех встречающихся в ней символов, кроме пробелов, в алфавитном порядке. Для символов, которые встречаются несколько раз, напечатать позиции в одной строке.

Код: Выделить всё
var  S: string;
     c: char;
     i: integer;
     flag: boolean; { признак для печати очередной строки }
begin
  Write('S = ');  Readln(S);
  { Char(33) - первый символ после пробела }
  for c:=Char(33) to Char(255) do begin
    flag:= false;
    for i:=1 to Length(S) do if c=S[i] then begin
      if not flag then Write(c, ' - ');
      Write(i,' ');
      flag:= true;
    end;
    if flag then Writeln;
  end;
  Readln;
end.




Добрый день, подскажите пожалуйста, почему в этом варианте решения программа при проработки этих строк:
" if not flag then Write(c, ' - ');
Write(i,' ');"
Выводит на экран "c" один раз, хотя когда прогоняешь ее по строчкам, то по идеи она должна была бы напечатать эту букву столько раз сколько она там стретилась.

Спасибо за ответ

Re: Глава 24, задачи В и Г

СообщениеДобавлено: 03.12.2017 22:25:29
MysticCoder
потому что перед write стоит проверка if not flag then, а flag устанавливается а true чуть ниже, при нахождении первого символа