Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ задачка с массивами

Автор: фатальность 6.06.2007 21:20

Пожжжалуйста!!! Помогите! Задачка не сложная, просто я не совсем хорошо разбираюсь.
Пусть в массиве содержатся результаты измерений температуры воздуха, которые проводились ежедневно в течение декабря месяца. Определить:
- сколько дней в декабре температура была выше средней;
- день, когда температуа была ближе всего к средней температуре в декабре;
- минимальную температуру тех дней декабря, которые следуют после последнего из самых теплых дней в этом месяце.

Автор: фатальность 7.06.2007 1:17

Так никто и не поможет? Ну хоть что думаете, подскажите как определить среднюю температуру?

Автор: Айра 7.06.2007 1:38

Цитата
Ну хоть что думаете, подскажите как определить среднюю температуру?

Складываешь все элементы массива и делишь на их количество, то бишь на количество дней))

Автор: фатальность 7.06.2007 1:47

Цитата(Айра @ 6.06.2007 21:38) *

Складываешь все элементы массива и делишь на их количество, то бишь на количество дней))

и на этом спасибо, только как в паскаль засунуть?

Автор: Айра 7.06.2007 2:21

Вроде так:

var sr: real;
t: array[1..31] of real;
...
for i:=1 to 31 do
begin
sr:=sr+t[i]/31;
end;
...

Автор: фатальность 7.06.2007 2:53

Спасибо огромное!!! Попробую. Буду думать. Но если кто поможет в решении указанных задач, буду безмерно благодарна.

Автор: Айра 7.06.2007 3:20

Давай разложим по пунктам:
1. Ты находишь среднюю температуру, как это сделать, ты уже знаешь.
2. Чтобы узнать количество более теплых дней, чем среднее, ты пробегаешь по всему массиву. Если температура больше (t[i]>sr) значит увеличиваешь количество дней (inc(kol), изначально kol:=0).
3. Наиболее близкий по температуре к среднему день я предлагаю искать так: опять идем по массиву, отнимаем от элемента среднее, вычисляем абсолютное значение полученного числа (модуль, стандартная функция abs(razn), razn: real), присваиваем ее min (минимальная разница), а значение i становится номером-nom. Дальше делаем тоже самое, но если модуль новой разницы меньше min, то присваиваем min значение нового модуля (if abs(razn)<min then min:=abs(razn)); nom:=i;). Когда пройдем по всему массиву у нас останется самая маленькая разница и номер такого дня.
4. еще не знаю как сделать wink.gif, если смотреть просто после самого теплого дня, то понятно, но это не совсем по заданию.
В общем, вот мои мысли по решению этой задачи, немного путанно, но попробуй, думаю у тебя получится smile.gif

Автор: мисс_граффити 7.06.2007 3:33

4. В процессе поиска среднего параллельно ищем максимум. Запоминаем его.
Потом идем с конца массива, пока не найдем первый самый теплый день. Запоминаем индекс.
Теперь идем от этого индекса до конца и ищем минимум

Автор: Айра 7.06.2007 12:12

А последний самый теплый день, это же будет максимум или последний день теплее среднего? я все никак не пойму wink.gif

Автор: фатальность 7.06.2007 17:10

Цитата(Айра @ 7.06.2007 8:12) *

А последний самый теплый день, это же будет максимум или последний день теплее среднего? я все никак не пойму wink.gif

Я понимаю что надо найти самый теплый день, а потом из последующих 3-5 дней найти минимальную температуру. Может я заблуждаюсь...

Автор: мисс_граффити 7.06.2007 17:25

я так понимаю, что последний день с температурой равной максимуму.
ну как-то так:
1 7 1 8 13 19 3 19 2 1 7 19 3 4 2

Автор: Айра 7.06.2007 17:39

Цитата
я так понимаю, что последний день с температурой равной максимуму.

Или немного меньшей чем максимум, например на 1-2 градуса:
1 7 1 8 13 19 3 19 2 18 1 7 3 4 2
Но так мороки больше... наверно, твой вариант правильнее.
фатальность, а нельзя ли это как-то уточнить у того, кто дал задание?

Автор: фатальность 7.06.2007 17:45

Задание из книги. С афтором думаю сложно будет связаться)) А препод молчит как партизан.

Автор: мисс_граффити 7.06.2007 17:57

Цитата
- минимальную температуру тех дней декабря, которые следуют после последнего из самых теплых дней в этом месяце.

Автор: фатальность 7.06.2007 18:23

А можно еще вопрос? Вот мне необходимо найти минимальную температуру второй декады декабря. Минимальную температуру нашла без проблем, а как указать что второй декады?

Автор: Айра 7.06.2007 20:04

Ну декада, насколько я помню, это 10 суток. Сколько дней в декабре нам известно, значит цикл поиска минимума, наверно, должен быть таким: for i:=11 to 20 do.

Автор: фатальность 7.06.2007 20:41

Цитата(Айра @ 7.06.2007 16:04) *

Ну декада, насколько я помню, это 10 суток. Сколько дней в декабре нам известно, значит цикл поиска минимума, наверно, должен быть таким: for i:=11 to 20 do.

точно, спасибо!!!
Вот только у меня ничего не получается с последним заданием(

Автор: Айра 7.06.2007 21:32

Вот программка, которая это делает:

uses wincrt;
var t: array[1..31] of real;
max,min: real;
i,j: integer;
begin
randomize;
max:=0;
min:=1000;
for i:=1 to 31 do
begin
t[i]:=(random(21))/2;
write('',t[i]:6:2,' ');
if t[i]>=max then
begin
max:=t[i];
j:=i;
end;
end;
writeln;
for i:=j to 31 do
if t[i]<min then min:=t[i];
writeln('минимальная температура после самого теплого дня равна: ',min:6:2,'');
end.

Что непонятно, спрашивай, объясню smile.gif

Автор: Артемий 7.06.2007 21:39

Айра,массив сделай real.

Автор: Айра 7.06.2007 21:47

Цитата
массив сделай real.

Он real, я сразу сама исправила, ты не заметил smile.gif

Автор: фатальность 7.06.2007 22:15

Спасибо!!!!!!!!!!!!!!! Премного благодарна!