В чем заключается ошибка в представленном коде?

Я разрабатываю программу для конкретной задачи, но компилятор выдает следующую ошибку: `<br/> case14.pas(10) : Встречено ';', а ожидалось ':' <br/>`. Можете помочь проанализировать мой код и указать, в чем может быть проблема? Вот сам код: <br/> 

```pascal
program case14; 
var 
  f, a, R1, R2, S: integer; 
begin 
  writeln ('Введите цифру от 1 до 4 включительно!'); 
  Readln(f); 
  Writeln('Введите значение стороны равностороннего треугольника'); 
  Readln(a); 
  case f of 
    1: R1 := (a * sqrt(3) / 4); 
       writeln('R1=', ' ', R1); 
       R2 := R1 * 2; 
       writeln('R2=', ' ', R2); 
       S := sqr(a) * sqrt(3) / 4; 
       writeln('S=', ' ', S); 
  end; 
end.
``` 

Обратите внимание на ошибки в коде, которые могут вызывать эту проблему.
  • 29 октября 2024 г. 19:42
Ответы на вопрос 3
В представленном коде есть несколько ошибок, которые могут привести к указанной вами ошибке компиляции. Основная причина ошибки в том, что после каждого ключевого слова `case` и его разветвлений должен следовать однобуквенный оператор, а не несколько. В вашем коде в случае `1` у вас сразу после двоеточия `:` идет несколько операторов, один из которых - `writeln`, и это вызывает ошибку.

Вот правильная структура для `case` в Pascal:

```pascal
case выражение of 
  значение1: операторы1;  // Убедитесь что после значения идет только один оператор
  значение2: операторы2;  // Или коммутатор разрешает блок операторов
end;
```

Исправленный код может выглядеть так:

```pascal
program case14; 
uses math; // Добавьте это, если собираетесь использовать sqrt
var 
  f, a: integer; 
  R1, R2, S: real; // Лучше использовать real для дробных значений
begin 
  writeln ('Введите цифру от 1 до 4 включительно!'); 
  Readln(f); 
  Writeln('Введите значение стороны равностороннего треугольника'); 
  Readln(a); 
  case f of 
    1: begin // Используйте блок begin-end, если нужно выполнить несколько операций
         R1 := (a * sqrt(3) / 4); 
         writeln('R1=', ' ', R1); 
         R2 := R1 * 2; 
         writeln('R2=', ' ', R2); 
         S := sqr(a) * sqrt(3) / 4; 
         writeln('S=', ' ', S); 
       end; 
    // Добавьте здесь другие случаи, если нужно
  end; 
end.
```

Пояснения исправлений:
1. Я добавил блок `begin-end` для случая `1`, чтобы можно было выполнить несколько операторов.
2. Я изменил тип переменных `R1`, `R2` и `S` на `real`, чтобы избежать потери дробной части при вычислениях (если это имеет значение в вашей задаче).
3. Убедитесь, что вы используете `uses math`, если вы собираетесь использовать математические функции, такие как `sqrt`.

Теперь ваш код должен компилироваться без ошибок. Если нужно добавить другие случаи, просто добавьте их аналогично, используя правильный синтаксис.
1. Составные конструкции имеет смысл писать так: 
case f of
    1 : begin 
            R1:=(a*sqrt(3)/4);
            writeln('R1=',' ',R1);
            { что-то ещё... }
        end;

2. Есть большие сомнение что в R1 после этого: a*sqrt(3)/4) будет integer . Подумайте над этим.

3.
program case14;
var f : integer;
var a, R1, R2, S: Real; 
begin
    writeln ('Введите цифру от 1 до 4 включительно!');
    Readln(f);
    Writeln('Введите значение стороны равностороннего треугольника');
    Readln(a);
case f of
    1:  
        begin
            R1:=(a*sqrt(3)/4);
            writeln('R1=',' ',R1);
            R2:=R1*2;
            writeln('R2=',' ',R2);
            S:=sqr(a)*sqrt(3)/4;
            writeln('S=',' ',S);
        end;
end;
end.
Криво написан case
Похожие вопросы