HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail | |||
| |||
|
program transport; uses crt; var x, a:integer; begin clrscr; writeln('введите номер соответсвующей вашему запросу:'); writeln('1-маршрутное такси'); writeln('2-транвай'); writeln('3-автобус'); writeln('4-такси'); readln(x); writeln('введите колличесво пассажиров'); readln(a); writeln('общая стоимость проезда='); case x of 1:if a>12 then write(a*5,', ', 'используется более одного транспорта') else writeln(a*5); 2:writeln(a*2); 3:writeln(a*3); 4:if a>4 then if a mod 40 <>0 then write(((a div 4)*40 )+40, 'используется более одного транспорта') else write((a div 4)*40, 'используется более одного транспорта') else writeln('40') end; readkey end. |
Комментарии 1. Форматирование: 4:if a>4 then if a mod 40 <>0 then write(((a div 4)*40 )+40, 'используется более одного транспорта') else write((a div 4)*40, 'используется более одного транспорта') else writeln('40') end; 2. Используйте значимые имена переменных. х не говорит ничего, однако transport_type сразу проясняет о чем идет речь. Желательно заменить также а на n_people. 3. Используйте константы вместо числовых литер в программах. Опять же 2:writeln(a*2); не говорит ни о чем, однако если написано type_streetcar:writeln(n_people*streetcar_fare);, человек читающий данный код легко поймет о чем идет речь. 4. Если придерживаться пп. 1 и 2, то меньше будет в программах ляпов, таких как if a mod 40 <>0 Наверняка имелось в виду: if a mod 4 <>0 а запись if a mod taxi_capacity <>0 не дала бы вам ошибиться. 5. Для такси внутренний оператор сравнения лишен смысла. Можно написать: 4:begin write(40*(1+trunc((a-1)/4))); if (a>4) then write(' используется более одного транспорта.'); writeln; end; или с учетом 1,2: type_taxi: begin write(taxi_fare*(1+trunc((n_people-1)/taxi_capacity))); if (n_people > taxi_capacity) then write(' используется более одного транспорта.'); writeln; end; 6. Можно пойти еще дальше и ввести специальный тип: type transport = record capacity:integer; { вместимость } fare:real; { плата за проезд } fare_per_person:boolean; { true если каждый пассажир платит отдельную плату, false если идет оплата средства транспорта. } end; var route_taxi, streetcar, bus, taxi : transport; begin route_taxi.capacity := 12; route_taxi.fare := 5.0; route_taxi.fare_per_person := true; streetcar.capacity := 170; { для примера 170 человек } streetcar.fare := 2.0; streetcar.fare_per_person := true; bus.capacity := 120; bus.fare := 3.0; bus.fare_per_person := true; taxi.capacity := 4; taxi.fare := 40.0; taxi.fare_per_person := false; а потом написать специальную процедуру, подсчитывающую плату за проезд: procedure printFare(n_people:integer,tr:transport); var fare:real; begin if (tr.fare_per_person) then { каждый платит за себя } fare:=n_people * tr.fare else { плата за всю машину } fare:=tr.fare * (1+trunc((n_people-1)/tr.capacity)); write(fare); if (n_people>tr.capacity) then write(' используется более одного транспорта, '); end; и тогда вся программа может быть записана так: writeln('общая стоимость проезда='); case x of 1:printFare(n_people,route_taxi); 2:printFare(n_people,streetcar); 3:printFare(n_people,bus); 4:printFare(n_people,taxi); end; Более того, здесь отчетливо напрашивается объектно-ориентированное решение. И я рад возможности проиллюстрировать использование объектов на данном простом примере. const type_route_taxi = 1; type_streetcar = 2; type_bus = 3; type_taxi = 4; type transport = object capacity:integer; { вместимость } fare:real; { плата за проезд } fare_per_person:boolean; { true если каждый пассажир платит отдельную плату, false если идет оплата средства транспорта. } constructor init(_capacity:integer;_fare:real;_fare_type:boolean); procedure printFare(n_people:integer); end; constructor transport.init(_capacity:integer;_fare:real;_fare_type:boolean); begin capacity:=_capacity; fare:=_fare; fare_per_person:=_fare_type; end; procedure transport.printFare(n_people:integer); var fare_tot:real; begin if (fare_per_person) then { каждый платит за себя } fare_tot:=n_people * fare else { плата за всю машину } fare_tot:=fare * (1+trunc((n_people-1)/capacity)); write(fare_tot:7:2); if (n_people>capacity) then write(' (используется более одного транспорта) '); end; var route_taxi, streetcar, bus, taxi : transport; transport_type, n_people:integer; begin { конструктры } route_taxi.init(12,5.0,true); streetcar.init(170,2.0,true); bus.init(120,3.0,true); taxi.init(4,40.0,false); writeln('введите номер соответсвующей вашему запросу:'); writeln('1-маршрутное такси'); writeln('2-трамвай'); writeln('3-автобус'); writeln('4-такси'); readln(transport_type); writeln('введите колличесво пассажиров'); readln(n_people); writeln('общая стоимость проезда='); case transport_type of type_route_taxi :route_taxi.printFare(n_people); type_streetcar :streetcar.printFare(n_people); type_bus :bus.printFare(n_people); type_taxi :taxi.printFare(n_people); end; end. Я понимаю, что данная тема не для начинающих, и кроме того, использовать объекты в такой простой программе, что стрелять из пушек по воробьям, но возможно, в дальнейшем, когда вы будете изучать объектно-ориентированное программирование, данный пример поможет вам понять, что к чему. Пока же вы, зная, что должна делать данная программа, можете просто проследить за ходом ее выполнения. to top
Автор: strike |
uses crt; var x,y: longint; begin clrscr; write('Input X,Y: ');readln(x,y); if x=0 then if y=0 then write('в начале координат') else write('на оси ОY') else if y=0 then write('на оси ОX') else if x>0 then if y>0 then write ('в углу I') else write('в углу IV') else if y>0 then write('в углу II') else write('в углу III'); readln end. |
Комментарии 1. Тут без форматирования тяжело понять, что к чему. uses crt; var x,y: longint; begin clrscr; write('Input X,Y: ');readln(x,y); if x=0 then if y=0 then write('в начале координат') else write('на оси ОY') else if y=0 then write('на оси ОX') else if x>0 then if y>0 then write ('в углу I') else write('в углу IV') else if y>0 then write('в углу II') else write('в углу III'); readln end. to top Решение Автор: strike |
Uses crt; Var a,b,i,t: integer; Begin write(‘введите числа a и b: ’);readln(a,b); t:=0; for i:= a to b do if i mod 10=0 then t:=t+1; write(‘количество чисел: ’,t); readln; end. |
Комментарии ОК. Если в условии задачи ничего не сказано про оптимальное решение. Потому как оптимальным было бы: if (a mod 10 = 0) then i:=1 else i:=0; t:=i + abs(a-b) mod 10; Да, кстати, если в вашем примере a>b, то решение будет неверным. to top
Автор: strike |
uses crt; var f1,f2 :text; s,s1 :string; procedure algoritm(s:string; var s1:string); var t :string; begin t:=copy(s,1,pos(s,' ')-1); delete(s,1,pos(s,' ')); if length(t) > 5 then s1:=s1+t; end; begin assign (f1,'ex.txt');reset(f1); assign (f2,'ex2.txt');rewrite(f2); while not eof(f1) do begin readln(f1,s); algoritm(s,s1); writeln(f2,s1); end; close(f1); close(f2); end. |
HOME EXAMPLES |
|