IPB

Здравствуйте, гость ( Вход | Регистрация )

> Pascal, Заморозки, Найти период времени на прот. которого были заморозки
pupil
сообщение 16.11.2008, 6:23
Сообщение #1


Новичок
*

Группа: Продвинутые
Сообщений: 6
Регистрация: 16.11.2008
Город: Казахстан



Входной файл 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
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 5)
creer
сообщение 16.11.2008, 9:25
Сообщение #2


Студент
**

Группа: Продвинутые
Сообщений: 121
Регистрация: 28.10.2007
Город: Екатеринбург
Учебное заведение: УГТУ-УПИ
Вы: студент



Проходим по массиву. В момент перехода с "+" на "-" начинаем считать количество элементов, при переходе с "-" на "+" сравниваем с предыдущим таким значением. Не забыть про края только. Ничего принципиально сложного (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
pupil
сообщение 17.11.2008, 14:36
Сообщение #3


Новичок
*

Группа: Продвинутые
Сообщений: 6
Регистрация: 16.11.2008
Город: Казахстан



написал для нахождения общего кол-ва отрицательных элементов, не работает, что не так?
как сделать чтобы находил не сумму всех, а только тех которые идут один за другим.
вот код:
Код
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
сообщение 17.11.2008, 18:54
Сообщение #4


Студент
**

Группа: Продвинутые
Сообщений: 121
Регистрация: 28.10.2007
Город: Екатеринбург
Учебное заведение: УГТУ-УПИ
Вы: студент



Возможно нужно написать вместо read(f,n); - readln(f,n); а вместо readln(f,d[i]); - read(f,d[i]);
Массив не обязательно начинать с -10000 (IMG:style_emoticons/default/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 должен быть максимальный период.
Писал сразу здесь, может что-то пропустил (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Julia
сообщение 18.11.2008, 4:41
Сообщение #5


Ассистент
****

Группа: Julia
Сообщений: 593
Регистрация: 23.2.2007
Город: Улан-Удэ
Учебное заведение: БГУ
Вы: преподаватель



Вы не можете описать массив с таким диапазоном индексов. Лучше вообше без массива обойтись.

...
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
сообщение 18.11.2008, 10:21
Сообщение #6


Новичок
*

Группа: Продвинутые
Сообщений: 6
Регистрация: 16.11.2008
Город: Казахстан



Спасибо большое что помогли, хотя еще кое что исправлять пришлось. А массив от -10000 это просто так, оно в принципе роли не играет (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 21:26

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru