Другие языки программирования и технологии

Не корректно работает программа. Что не так?

Не правильно выводит дни, должно быть 172, а выводит 0.

program Friday13;

const
pp: array [1..12] of byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function day(m, y, k, n: integer): integer;

begin
n := 0;
k := 0;
m := 1;
for y := 2001 to 2100 do
begin
while m <= 12 do
begin
n := n mod 7;
if n = 0 then k := k + 1;
n := n + pp[m];
if (m = 2) and (y mod 4 = 0) then n := n + 1;
m := m + 1
end;
m := 1
end;
end;

var
k: integer;

begin

writeln('Count of "Friday 13" in 2001..2100: ', k);

end.
program Friday13;

const
pp: array [1..12] of byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function day(): integer;
var
n, k, m, y : integer;//объявление переменных для функции
begin
n := 0;
k := 0;
m := 1;
for y := 2001 to 2100 do
begin
while m <= 12 do
begin
n := n mod 7;
if n = 0 then k := k + 1;
n := n + pp[m];
if (m = 2) and (y mod 4 = 0) then n := n + 1;
m := m + 1
end;
m := 1
end;
day := k;//для того, чтобы функция вернула значение
end;

var
k: integer;

begin

k := day();//вызываем функцию и записываем результат в переменную k
writeln('Count of "Friday 13" in 2001..2100: ', k);

end.
Komil_ Usmanov
Komil_ Usmanov
22 714
Лучший ответ
1. Ваша функция ничего не возвращает
2. Функция - говнокод. Потому что: переменные не нужно называть одной буквой, когда не очевидно за что она отвечает. Исключение - индекс массива, и то не надо.
3. Внутри функции инициализируются передаваемые в неё параметры. Вопрос: зачем тогда их передавать?
4. k не инициализированно, поэтому 0 по умолчанию для Pascal. В Си был бы вообще жуткий мусор из кучи.
5. Функция нигде не вызывается и не передает своего посчитанного значения дальше
Abubakr Ali
Abubakr Ali
5 124
Вызвать функцию забыл в основном теле программы.
Роман Соловьёв лол, я скажу бред, но я давно не занималась и мало что помню
как ее вызвать? хд