const a: array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
b: array [1..12] of integer = (0,31,59,90,120,151,181,212,243,273,304,334);
begin if (m>=1) and (m=1) and (d
then numerday := b[m]+d
else numerday := 0
end;
Пример 5. Определение дня и месяца в невисокосном году по номеру дня.
а). Процедура на Паскале.
procedure date (n: integer; var d,m: integer);
const b: array [1..12] of integer = (0,31,59,90,120,151,181,212,243,273,304,334);
var n: integer;
label m1;
begin for m:=1 to 11 do
if n
if n
then m := 12
else m := 0;
m1: if m>0
then d := n – b[m]
else d := 0
end;
Пример 6. Установить, является ли данное целое число n простым.
а). Словесный алгоритм. Надо перебрать все натуральные числа k, меньшие квадратного корня из заданного числа n. Если для какого-то k число n делится на k нацело, то n составное, в противном случае оно простое.
б). Функция на Паскале.
function simple (n: integer): boolean;
var k,m: longint; b: boolean;
label m1;
begin b := true;
m := trunc (sqrt (n) );
for k:=2 to m do
if (n mod k)=0 then
begin b := false;
goto m1
end;
m1: simple := b
end;
Пример 7. Определить количество простых делителей в полном разложении заданного числа n.
а). Словесный алгоритм. Перебором в возрастающем порядке найдем наименьшее число k, на которое делится данное число n. Если k=n, значит число n простое и состоит из одного простого множителя. Если k
б). Рекурсивная функция на Паскале (функция, в которой один из операторов представляет собой вызов себя самой).
function fn (n: longint): integer;
var k,m: longint; p: integer;
label m1;
begin p := 1;
m := trunc (sqrt (n) );
for k:=1 to m do
if (n mod k)=0 then
begin p := 1+fn (n div k);
goto m1
end;
m1: fn := p
end;
Пример 8. Описать событие: “Карта К1 бьет карту К2, включая учет козырной масти”.
а). Функция на Паскале.
type
suit = (spades, clubs, diamonds, hearts);
value = (c7,c8,c9,c10,jack,queen,king,ace);
card = record s: suit; v: value end;
function beat (sc: suit; c1,c2: card): boolean;
begin
if c1.s=sc
then beat := ( (c2.s sc) or ( (c2.s = sc) and (c1.v > c2.v) ) )
else beat := ( (c1.s=c2.s) and (c1.v > c2.v) )
end;
Пример 9. Определение количества простых чисел, меньших или равных данному числу n.
а). Алгоритм (решето Эратосфена).
Сначала все числа от 2 до n считаются простыми. Затем, начиная с 2, для каждого числа k, для которого уже установлено, что оно простое, произво¬дится следующая процедура: все числа, кратные k, считаются составными. Процедура заканчивается, когда k2>n. После этого подсчиты¬вବется число простых чисел.
б). Функция на Паскале.
function eratosphen (n: integer): integer; {n
var
simple: set of 2..255; {Множество простых чисел}
k,m,p,s: integer;
begin
simple := [2..n]; {Сначала все числа от 2 до n считаются простыми}
m := trunc (sqrt (n) );
for k:=2 to m do
if (k in simple) then
begin
p := 2*k;
while p
begin
simple := simple – [p]; {Число p не является простым}
p := p+k
end
end;
s := 0;
for k:=2 to n do
if (k in simple) then s := s+1;
eratosphen := s
end;
4.2. Алфавит языка Паскаль.
Текст программы на Паскале состоит из собственно текста программы и ком¬ме¬нтариев. Коммента¬рием называется последовательность любых символов расширенного кода ASCII, ограниченная парой фигурных скобок { и }, либо парой (* и *), либо парой /* и */. Собственно текст программы состоит из слов в специальном алфавите, который является подмножеством системы знаков ASCII. Алфавит Паскаля состоит из букв (в число букв включены прописные и строчные буквы латин¬ского алфавита и символ подчеркивания ‘_’), пробела, цифр и следующих специальных символов (разделитель символов – верти¬кальная черта):
8th Май 2011
|
Теги:
|