Как я могу создать отдельное окно результатов в pascal? - PullRequest
0 голосов
/ 23 апреля 2020

в то время, когда я нахожусь в процессе обучения pascal, но у меня есть какой-то вопрос, на который Google не может ответить, поэтому я пытаюсь создать программу, которая анализирует, какой избыточный вес у человека связан с набором данные. дело в том, что я не знаю, как создать другое окно или очистить окно, чтобы на экране отображались только результаты, мой учитель хочет что-то вроде этого (не обращайте внимания на испанца sh; D):

А вот мой код:

Program AddNums(output);

uses crt;

var
  s, b, a, v: integer;

begin
  clrscr;
  GotoXY(20, 1);
  writeln('Ejercicio 2 - Actividad 2');

  GotoXY(25, 3);
  writeln('Calculadora de Pesos');
  write('Introduce la cantidad de personas para analizar sus pesos: ');
  readln(s);

  for a := 1 to s do
  begin
    writeln('Introduzca el peso de la persona numero', a, ':');
    readln(v)
  end;

  clrscr;
  if (v <= 90) then
    write('Cantidad de personas con Sobrepeso: ...........', v + 1);
  else if (v <= 30) then
    write('Cantidad de personas con Bajo Peso: ...........', v + 1);
  else if (v <= 30 AND v >= 90) then
    write('Cantidad de Personas con Peso normal: ...........', v + 1);
  else
    write('null');

end.


And this

- это ошибка, с которой я сейчас сталкиваюсь

(35,4) Fatal: Syntax error, ";" expected but "ELSE" found

Fatal: компиляция прервана

Надеюсь, вы, ребята, помогите мне !!

1 Ответ

0 голосов
/ 23 апреля 2020

Последние несколько строк вашего кода необходимо исправить, как показано ниже, чтобы скомпилировать, а затем вам нужно проверить, что код выполняет то, что вы хотите. Затем программа должна скомпилироваться, и, если вы запустите ее в среде, подобной Lazarus, IDE for Free Pascal, она появится в окне консоли, как прокомментировал @TomBrunberg. В основном это были две проблемы:

  • Первым трем else с предшествует точка с запятой (;). Это синтаксическая ошибка. Каждый else является частью if ... then ...else блока. Единственная причина, когда точка с запятой разрешена, это когда она находится внутри составного оператора, например, блока begin ... end, как в
      begin
        DoSomething;
      end
    else
      write('Cantidad de personas con Sobrepeso: ...........', v + 1)
  • Другая проблема заключалась в том, что у вас было

(v <= 30 AND v >= 90)

Проблема синтаксиса в том, что в Pascal, and имеет более высокий приоритет оператора, чем <=, поэтому компилятор пытается и не может оценить 30 and v. Это терпит неудачу, потому что результат должен иметь тип Boolean, который это не может быть. Чтобы избежать этой проблемы, вам нужно закрыть круглые скобки, например:

(v <= 30) and (v >= 90)

Затем выражения с обеих сторон and оба вычисляются как логические значения, так что компилятор может затем удачно объединить с and. Однако , как указал @Tom в комментарии, объединенное выражение никогда не может быть оценено как True, потому что v не может быть меньше или равно 30 и больше или равно 90: возможно, вы означало ИЛИ?

Исправленный код

  if (v <= 90) then
    write('Cantidad de personas con Sobrepeso: ...........', v + 1)
  else if (v <= 30) then
    write('Cantidad de personas con Bajo Peso: ...........', v + 1)
  else if (v <= 30) AND (v >= 90) then
    write('Cantidad de Personas con Peso normal: ...........', v + 1)
  else
    write('null');
  readln;  

* В конце readln программа заставляет программу ждать, пока вы нажмете Enter , чтобы она осталась на экране достаточно долго, чтобы вы могли увидеть его - без readln окно консоли просто закрылось бы и исчезло бы sh.

...