Помощь - Поиск - Пользователи - Календарь
Полная версия: Pascal, Заморозки > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
pupil
Входной файл cool.in
Выходной файл cool.out

Имеются минимальные суточные температуры за N дней (1<=N<=10000). Определить продолжительность периода в течении которого ежедневно были заморозки.

Входные данные
В первый строке записано число N - кол. дней. Во второй - минимальные суточные температуры, разделенные пробелами.

Выходные данные
Число - длинна наибольшего периода на протяжении которого были заморозки

Пример
Cool.in
10
4 -5 -4 -2 -10 0 1 -2 -1 1

Cool.out
4
creer
Проходим по массиву. В момент перехода с "+" на "-" начинаем считать количество элементов, при переходе с "-" на "+" сравниваем с предыдущим таким значением. Не забыть про края только. Ничего принципиально сложного smile.gif
pupil
написал для нахождения общего кол-ва отрицательных элементов, не работает, что не так?
как сделать чтобы находил не сумму всех, а только тех которые идут один за другим.
вот код:
Код
Program zamorozki;
Type day = 1..10000;
var n: day;
    d: array [-10000..10000] of integer;
    x,i: integer;
    f,f1: text;
begin
     assign(f,'cool.in'); reset(f);
     assign(f1,'cool.out'); rewrite(f1);
     read(f,n);
     for i:=1 to n do
     begin
     readln(f,d[i]);
     end;
     x:=0;
     for i:=1 to n do
     if d[i]<=0 then x:=x+1;
     writeln(f1,x);
     close(f);
     close(f1);
end.
creer
Возможно нужно написать вместо read(f,n); - readln(f,n); а вместо readln(f,d[i]); - read(f,d[i]);
Массив не обязательно начинать с -10000 smile.gif
я бы написал как-то так
Граничные условия
d[0]:=1;
d[n+1]:=1;
переменные
curr:=0;
max:=0;
Затем цикл
Код
for i:=1 to n do
begin
  if (d[i-1]>0) and (d[i]<=0) then
    curr:=0;
  if (d[i]<=0) then
    curr:=curr+1;
  if (d[i]<=0) and (d[i+1]>0) then
    if (curr>max) then max:=curr;
end;

В переменной max должен быть максимальный период.
Писал сразу здесь, может что-то пропустил smile.gif
Julia
Вы не можете описать массив с таким диапазоном индексов. Лучше вообше без массива обойтись.

...
readln;
read(temp);
max:=0;
While not eof(f) do
begin
while (temp>0) and not eof(f) do
read(temp);
if temp<=0 then
begin
curr:=0;
while (temp<=0) and not eof(f) do
begin
inc(curr);
read(temp)
end;
if curr>max then
max:=curr
end;
...

Не проверяла, может что-то пропустила
pupil
Спасибо большое что помогли, хотя еще кое что исправлять пришлось. А массив от -10000 это просто так, оно в принципе роли не играет smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.