Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Помогите пожалуйста!!!!
помогите решить задачу...
Условие:
в массиве В из 30 элементов определить диапазон значений элементов массива ( разность между максимальным и минимальным элементами).
напишите пож. код задачи, за ранее благодарен)
1 | Автор: zheka | 2011-06-09, 19:53   |  Репутация: [ + 0 ]
1 | Автор: zheka | 2011-06-09, 19:53   |  Репутация: [ + 0 ]
массив одномерный? и по подробней напиши о диапазоне.
2 | Автор: viper-klas | 2011-07-05, 13:48   |  Репутация: [ + 3 ]
Quote (viper-klas)
и по подробней напиши о диапазоне.


Что тут не понятного?
Нужно вывести на вывод расстояние между максимальным и минимальным элементами.
Вот код:

var
a:array[1..30]of integer;
i,q,w,p,pm:integer;
begin
p:=32000;
for i:=1 to 30 do begin
read(a[i]);
if a[i]>pm then begin pm:=a[i];q:=i;end;
if a[i]<p then begin p:=a[i];w:=i;end;
end;
if q>w then writeln(q-w) else writeln(w-q);
end.

"Спасибо" принимается повышением репутации ( Зелёный плюсик:) ). Спасибо


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
3 | Автор: Berestovskiy | 2011-07-07, 17:42   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
var
a:array[1..30]of integer;
i,q,w,p,pm:integer;
begin
p:=32000;
for i:=1 to 30 do begin
read(a[i]);
if a[i]>pm then begin pm:=a[i];q:=i;end;
if a[i]<p then begin p:=a[i];w:=i;end;
end;
if q>w then writeln(q-w) else writeln(w-q);
end.

Намного лучше будет p:=a[1]; pm:=a[1];
Зачем запоминать q и w?
Выводить надо не q-w, а pm-p
4 | Автор: AID | 2011-07-10, 20:41   |  Репутация: [ + 9 ]
4 | Автор: AID | 2011-07-10, 20:41   |  Репутация: [ + 9 ]
Quote (AID)
Выводить надо не q-w, а pm-p


Если так, то будет выводить максимальный элемент минус минимальный т.е. ответ будет не правильным..т.к. нам нужно вывести диапазон:)

Quote (AID)
Намного лучше будет p:=a[1]; pm:=a[1];

А это для чего?


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
5 | Автор: Berestovskiy | 2011-07-12, 15:33 | Изменено: Berestovskiy - Вт, 2011-07-12, 15:33   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
А это для чего?

не помню как в паскале, но ты компили свой код? мне кажется что он будет давать ерор в a[i]>pm, так как pm ранее не задано и это плохо. а p:=32000; тоже не шик. если все значения будут 32000+? тогда твой код даст ошибку.
Quote (Berestovskiy)
Если так, то будет выводить максимальный элемент минус минимальный т.е. ответ будет не правильным..т.к. нам нужно вывести диапазон:)

zheka просит от максимального отнимать минимальный(pm-p)? Так как говорит AID.


Меня все время преследуют умные мысли... но я быстрее!!!
6 | Автор: guru | 2011-07-15, 01:44   |  Репутация: [ + 8 ]
Quote (guru)
не помню как в паскале, но ты компили свой код?

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

Quote (guru)
мне кажется что он будет давать ерор в a[i]>pm, так как pm ранее не задано и это плохо.

изначально пм=0, ну можно было бы присвоить изначально -32000 с копейками..

Quote (guru)
тоже не шик. если все значения будут 32000+? тогда твой код даст ошибку.

просто я не помню максимальное ограничение типа integer ))

Quote (guru)
определить диапазон значений элементов массива

прочитай ещё раз, я на этом сайте уже делал эту задачу другому пользователю, просто Жека не толково условие написал


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
7 | Автор: Berestovskiy | 2011-07-15, 03:09   |  Репутация: [ + 211 ]


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
7 | Автор: Berestovskiy | 2011-07-15, 03:09   |  Репутация: [ + 211 ]
Quote (Berestovskiy)

просто я не помню максимальное ограничение типа integer ))

знать конечно нужно но необязательно - есть такая штука как high() и low() - при определенном извращение они вернут максимальное и минимальное значение типа.
Quote (Berestovskiy)
изначально пм=0,

изначально пм не 0, вернее возможно ноль а возможно -5698 или 16589, а может и ноль - переменная не инициализированная переменная по умолчанию должна принимать пустое значение - в паскале этим значением может оказаться и 0 и любая белеберда выпавшая из памяти
Quote (Berestovskiy)
ну можно было бы присвоить изначально -32000 с копейками..

это некорректная ерунда - работай с теми данными которые у тебя есть, что тебе мешает во временную переменную записать не 32000 а первое значение массива, которое будет первичным значением максимум и минимума и уже от него ты ищешь остальные, а так задавая хардом значение ты ограничиваешь себя в диапазоне поиска - в твоем случае значения больше 32000 как сказал guru не буду учитываться, и это было бы даже если бы указал макс значение интегер.


If you can't make it GOOD make it LOOK GOOD. B.Gates
8 | Автор: DoVe | 2011-07-15, 10:56   |  Репутация: [ + 48 ]
Quote (DoVe)
знать конечно нужно но необязательно - есть такая штука как high() и low() - при определенном извращение они вернут максимальное и минимальное значение типа.


не слышал о таком в паскале:)
Quote (DoVe)
изначально пм не 0, вернее возможно ноль а возможно -5698 или 16589, а может и ноль - переменная не инициализированная переменная по умолчанию должна принимать пустое значение - в паскале этим значением может оказаться и 0 и любая белеберда выпавшая из памяти


Если мне не отказывает память - то всегда ноль выдавало, и благодаря контестерам и прочим я в этом убедился

Quote (DoVe)
это некорректная ерунда - работай с теми данными которые у тебя есть, что тебе мешает во временную переменную записать не 32000 а первое значение массива, которое будет первичным значением максимум и минимума и уже от него ты ищешь остальные, а так задавая хардом значение ты ограничиваешь себя в диапазоне поиска - в твоем случае значения больше 32000 как сказал guru не буду учитываться, и это было бы даже если бы указал макс значение интегер.


тогда пришлось было бы делать два цикла, в первом считать все числа, после присвоить pm:=a[1]; и после сделать опять цикл на проверку..


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
9 | Автор: Berestovskiy | 2011-07-15, 19:08   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
Если мне не отказывает память - то всегда ноль выдавало, и благодаря контестерам и прочим я в этом убедился

это зависит от того какой адресс в памяти будет под переменную выделено, если пустое - то наверное 0, если нет - то наверное не ноль. старые данные из памяти не выгружаются(точнее не все программы ее выгружают) а удаляются только к ним адреса(или что-то в этом роде).

И на конец народная мудрость: "7 раз проверь - 1 раз отрежь"!
Quote (Berestovskiy)
я сам себе ходячий компилятор, передал уйму задач и уже знаю где и что как будет работать))


Меня все время преследуют умные мысли... но я быстрее!!!
10 | Автор: guru | 2011-07-15, 21:08   |  Репутация: [ + 8 ]
Quote (guru)
если пустое - то наверное 0, если нет - то наверное не ноль.


железная логика)))

Quote (guru)
"7 раз проверь - 1 раз отрежь"!


7 раз отмерь, вообщето)))


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
11 | Автор: Berestovskiy | 2011-07-17, 14:13   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
не слышал о таком в паскале:)

это твое упущение, если ты не слышал о чем то это не значит что этого нет, а изобретение велосипеда и не нужно и не к чему хорошему не приводит
Quote (Berestovskiy)
то всегда ноль выдавало,

твои несколько десятков/сотен/тысяч тестов - это не 100 процентный результат, все должно быть обосновано и отлажено, написанный софт падает в непредсказуемых местах и в непредсказуемое время, и такая ошибка оказывается очень часто банальна
Quote (Berestovskiy)
Quote (guru)
если пустое - то наверное 0, если нет - то наверное не ноль.
если свободной памяти хватает под приложение, то ему выделится чистая ячейка(и) в которой буду хранится переменный в НУЛЛах. (как происходит на серверах контестеров и с простыми паскалевскими программками). если программа тяжеловесная, требует частого обращения к памяти то очень скоро произойдет ссылка пустой переменной на занятую ячейки в которой будет чушь...

железная логика)))


If you can't make it GOOD make it LOOK GOOD. B.Gates
12 | Автор: DoVe | 2011-07-17, 22:53 | Изменено: DoVe - Пн, 2011-07-18, 10:49   |  Репутация: [ + 48 ]
  • Страница 1 из 1
  • 1
Поиск: