Есть задача: Человек работает на работе в 3 смены, и получает з/п по бонусной системе в зависимости от того какой обьем работы он сделал за данную смену (обьем работы измеряется в метрах), оплата в укр. гривнах.
Тоисть: если он сделал до 649 метров - ему считают по 0,2 грн., если от 650-829, считают по 0,45 грн., свыше 830 по 0,6 грн. (это за смену), при чем только для 1 и 2 смены. Для 3й смены расчет должен быть таким 0-749м по 0,2 грн., 750-949 по 0,45 грн., свыше 950 по 0,6 грн. Программа должна пока что правильно считать з/п за смену путем ввода метража смены и номера смены.
Я начинаю изучать Паскаль и применил: для выбора расчета 'по какой тарифной сетке расчитывать' заработок за данную смену => оператор выбота if...then...else. Зависимость выбора расчета смены реализована оператором варианта case.
uses crt;
label m1,m2,m3,m4;
VAR d,a,sm: Integer; {d-день месяца, а-метраж смены,sm-# смены}
b1,b2,b3,c : Real; {Фиксированая константа оплаты,с-результат за смену}
BEGIN
clrscr;
b1:=0.2;
b2:=0.45;
b3:=0.6;
d:=1;
write (d, ' число ’);
m1: if d<=31 then goto m3 {цикл для месяца}
else goto m2;
write (’Введите метраж ’);
m3: Read (a);
m4: write ('# смены (1. .3) ’);
Readln (sm);
case sm of 1,2:
begin
if a>=650 then if a<=831 then c:=a*b2
else c:=a*b3
else c:=a*b1 end;
3:
begin
if a>=750 then if a<=951 then c:=a*b2
else c:=a*b3
else c:=a*b1 end;
else Writeln (’ Ошибка ввода смены !!! (всего 3)’);
goto m4;
end;
writeln ('Заработок за смену ',c :15:2,' грн.');
writeln;
d:=d+1;
write (d,' число');
goto m1;
m2: readln;
END.
Программа неправильно делает расчет для 3й смены 950м считает по 0,45, подозреваю что в работу не включается реализация расчета для 3й смены, непойму только почему, неправильно записал синтаксис оператора? Спасибо.