2011-02-09 2 views
0

Эта программа правильно написана с помощью массива?Как написать массивы в pascal?

Program Malaria_Outbreak (input,output); 

Var 
    BC:real; 
    LO:real; 
    count:integer; 
    Num:integer; 
    BloodTest:integer; 
    Registration:integer; 
    Clinic:string; 
    DoctorFee:integer; 
    Total:integer; 
    NMB_Payable:real; 
    Company:string; 
    Name:string; 
    Patient:Array[1..10] of string 

Begin 
    clrscr; 
    BC:=(0.8); 
    LO:=(0.7); 
    Count:=(0); 
    Num:=(0); 
    BloodTest:=(Num * 700); 
    Registration:=(500); 
    Writeln('Please enter the name of the patient'); 
    Readln(Name); 
    While (Name <> 'END')Do 
    Begin 
     For count:= 1 to 10 Do 
     Begin 
      Writeln('Please enter the clinic the patient attends'); 
      Readln(Clinic); 
      If (Clinic = 'Type 1') Then 
      Begin 
       DoctorFee:=(800); 
      End; 
      If (Clinic = 'Type 2') Then 
      Begin 
       DoctorFee:=(1200); 
      End; 
      Writeln('The doctor fee for the patient is $',DoctorFee); 
      Writeln('Please enter the number of blood tests the patient has had'); 
      Readln(Num); 
      BloodTest:=(Num * BloodTest); 
      Writeln('The blood test for the patient is $',BloodTest); 
      TMB:=(Registration + DoctorFee + BloodTest); 
      Writeln('The total medical bill for the patient is $',TMB); 
      Writeln('Please enter the insurance company the clinic is affiliated with'); 
      Readln(Company); 
      If (Company = 'Blue Cross') Then 
      Begin 
       NMB_Payable:=(BC * TMB); 
      End; 
      If (Company = 'LOJ') Then 
      Begin 
       NMB_Payable:=(LO * TMB); 
      End; 
      Writeln('The net medical bill for the patient is $',NMB_Payable); 
     End; 
    Readln; 
    Readln; 
End 
+1

Я позвонил, чтобы выделить ваш код. Вы можете сделать это, используя кнопку '{}'. – GolezTrol

+1

Кажется, это так. Вы пытались скомпилировать его? Кроме того, пожалуйста, немного почистите его, есть много тривиальных круглых скобок и нет внутреннего отступа. – Christian

+1

Вы спрашиваете: «Это нормально». Ну, ты попробовал? Вы получаете ошибки? – GolezTrol

ответ

2

Выглядит хорошо, но вы можете включить ; после типа данных (string)

Patient : Array[1..10] of String; 
2

Есть некоторые проблемы в коде.

  • Ваш код не отформатирован. Особенно отсутствие отступов затрудняет понимание того, что происходит. (Благодаря GolezTrol для крепления, что)

  • Вы упускаете с запятой (;) после Array[1..10] of string

  • end; Некоторые заявление отсутствует. Либо While (Name <> 'END')Do begin, либо For count:= 1 to 10 Do begin должен иметь соответствие end;.

  • Переменная Tmb не объявляется.

  • Bloodtest всегда будет 0. Он инициализируется 0, и единственный раз, когда вы пишете Bloodtest, находится в этой строке: BloodTest := (Num * BloodTest);. Это, вероятно, не то, что вы хотите сделать.

  • DoctorFee неинициализирован, если пользователь не набирает номер Type 1 или Type 2. NMB_Payable имеет аналогичную проблему.

  • Существует переменная Count, которая инициализируется, но никогда не используется впоследствии. Не наносит никакого ущерба, но для удобства чтения я бы его очистил.

Чтобы ответить на ваш вопрос: Нет, вы не используете массив, который объявлен, и я не думаю, что эта программа делает то, что вы хотите, чтобы это сделать.

Если вы объясните, что вы пытаетесь выполнить, мы сможем помочь вам в этом.

+1

Чтобы завершить очистку кода, вы также можете добавить, что два теста (в клинике и компании) должны использовать конструкцию If-Then-Else (вместо двух If-Then), как если бы первый тест прошел успешно, нет необходимости выполните второй тест. – LudoMC

1

Я не вижу, где он записывается в массив вообще, и где он вообще не использует массив. Он просто обрабатывает каждый элемент, который он получает, и ничего не переносится для хранения в массиве в первую очередь.

Он также собирается спросить и оплатить каждого пациента 10 раз. Я слышал о двойном биллинге, но это сумасшествие!

Вы всегда должны запускать свой код и видеть, что на самом деле происходит. Совершенно очевидно, что вы этого не сделали.

Смежные вопросы