Не получается программа

Рейтинг: 1Ответов: 2Опубликовано: 22.10.2014

Здравствуйте!

Паскаль не знаю, поэтому, возможно, ошибка в синтаксисе. В алгоритме вроде всё верно написал. Помогите довести её до рабочего вида. Срочно надо. :)

Задача:

В заданный текст произвольной длины (>0) входят только цифры и большие латинские буквы. Определить, удовлетворяет ли он условию: текст содержит (помимо букв) только одну цифру, причём её числовое значение равно длине текста.

Третья версия кода(рабочая): (Почему не работает в констуркции case закоментированый косок код, т.е. присвоение K:= k+1;)

program D_6_41_M(input, output);

var
  i, b, k: integer;
  s: char;

begin
  i := 0; b := 0; k := 0;
  read(s);
  while(ord (s) <> ord('.')) do
  begin
    if ((ord(s) >= ord('A')) and (ord(s) <= ord('Z'))) then begin b := b + 1; end
    else begin
      case s of
        '1': i := 1; //k:= k+1;
        '2': i := 2; //k:= k+1;
        '3': i := 3; //k:= k+1;
        '4': i := 4; //k:= k+1; 
        '5': i := 5; //k:= k+1;
        '6': i := 6; //k:= k+1;
        '7': i := 7; //k:= k+1;
        '8': i := 8; //k:= k+1;
        '9': i := 9; //k:= k+1; 
        '0': i := 0; //k:= k+1;
      end;
    end;
    read(s);
  end;

  if (b = i) then
    writeln('Uslovie vypolneno')
  else
    writeln('Uslovie NE vypolneno');

 end.

Спасибо.

Ответы

▲ 2Принят
  1. Вместо Readln нужно использовать Read, чтобы читать ввод посимвольно, а не построчно.
  2. По задаче правильное условие для цикла -- Eof, а не сравнение на точку.
  3. Логика заполнения b и i вообще странная. Во-первых, если встречен недопустимый символ, то из программы можно сразу выйти. Во-вторых, в b разумно хранить количество цифр, поэтому увеличивать её нужно каждую итерацию, а не только в частном случае. В-третьих, непонятно зачем суммирование в i.
▲ 1

После end перед else не должно быть точки с запятой.