Получите минимальное количество градусов, записанных за день

#pascal

Вопрос:

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

 Program P1;

Type 
    Hour = 0..23;
    Degrees = -40..40;
    Temperature = array [Hour] of Degrees;

var 
    t : Temperature;
    i, min_t, max_t, hour_t_min, hour_t_max : integer;

    procedure test;
    begin
        for i := 0 to 23 do
        begin
            writeln('Enter the temperature at hour ', i);
            readln(t[i]);
            min_t := t[0];
         
            if min_t > t[i] then 
            begin 
                min_t := t[i]; 
                ora_t_min := i; 
            end;

            if max_t < t[i] then 
            begin 
                max_t := t[i]; 
                ora_t_max := i; 
            end;
        end;
    
        writeln('temp min ', min_t, ' at hour ', hour_t_min);
        writeln('temp max ', max_t, ' at hour ', hour_t_max);
    end; {procedure}

begin { main }
    test;

end.
 

Ответ №1:

Min_t (и max_t) должны быть инициализированы снаружи и перед циклом. Вы назначаете min_t:=t[0] в каждом цикле, это неправильно, и max_t не инициализируется. Кроме того, я думаю, что это опечатка, ora_t_min и ora_t_max следует изменить на hour_t_min и hour_t_max:

Что-то вроде этого:

 min_t := 40;
max_t := -40;
for i := 0 to 23 do
    begin
        writeln('Enter the temperature at hour ', i);
        readln(t[i]);
        if min_t > t[i] then begin min_t := t[i]; hour_t_min := i; end;
        if max_t < t[i] then begin max_t := t[i]; hour_t_max := i; end;
    end;
    writeln('temp min ', min_t, ' at hour ', hour_t_min);
    writeln('temp max ', max_t, ' at hour ', hour_t_max);
end;