Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 23.04.2009
Сообщений: 20

Немного о линейном алгоритме

23.04.2009, 21:38. Показов 5223. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать прогу нахождения мин и макс трех чисел используя только линейный алгоритм. очень надо прямо сегодня
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2009, 21:38
Ответы с готовыми решениями:

Вычислить в линейном числовом массиве суммы положительных и отрицательных элементов
Вычислить в линейном числовом массиве суммы положительных и отрицательных элементов. (Pscal)

Разместить элементы файла в динамической памяти в односвязном линейном списке
Задача "Разместить элементы файла в динамической памяти в односвязном линейном списке. Из связного списка, содержащего целые числа, удалить...

Определить, есть ли в линейном массиве число b
Заполнить пропуски. Есть ли в линейном массиве число b? Type LinMass = Array Of Integer; Var A : LinMass; N, i, b : __; begin ...

45
45 / 10 / 3
Регистрация: 03.03.2009
Сообщений: 254
24.04.2009, 08:54
Студворк — интернет-сервис помощи студентам
Это же легко....Смотриш if-ами все возможнаые перестановки 3 чисел:
PureBasic
1
2
3
4
5
6
a<=b<=c //a=max, c=min
a<=c<=b //a=max, b=min
c<=a<=b //c=max, b=min
c<=b<=a //c=max, a=min
b<=c<=a //b=max, a=min
b<=a<=c //b=max, c=min

P.S. Если хочешь на си напишу...
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 08:59
Для 2х целых вроде так.
c:=a+b;
d:=abs(a-b);
max1:=(a+b) div 2
Для 3х повторяем это для второй пары, а потом для max1 и max2
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 09:17
"не используя ветвления алгоритма". Применительно к этим блок-схемам, подозреваю, что цикл ветвлением не является

Добавлено через 1 минуту 14 секунд
Цитата Сообщение от Puporev Посмотреть сообщение
Для 2х целых вроде так.
c:=a+b;
d:=abs(a-b);
max1:=(a+b) div 2
Для 3х повторяем это для второй пары, а потом для max1 и max2
abs по идее внутри себя содержит ветвление (без ветвления не представляю, как его можно сделать)
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 09:20
abs по идее внутри себя содержит ветвление
Тогда уж и знак минус содержит ветвление и все арифметические действия, наприме +, значит не минус не /, не * и т.д.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 09:22
Нет. Знаки плюс, минус, все битовые операции - это элементарные операции языка (т.е. через другие операции они не представляются). Точно так же можно не заморачиваться, а написать c=max(a,b); т.к. на многих cистемах где-то в хидерах есть объявление макроса max, но это, сам понимаешь, неверное решение
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 09:33
Abs(x) стандартная математическая функция, такая же как скажем sqr, или sqrt. Что, в линейных алгоритмах это запрещено применять? А если бы условие задачи было найти максимальный по модулю элемент? И если Вы слышали про слово бит, это не значит, что нужно всем про это рассказывать.
0
28 / 27 / 11
Регистрация: 12.03.2009
Сообщений: 85
24.04.2009, 09:42
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uses
   crt;
const
   ARRAY_LEN = 3;
var
   a: array[1..ARRAY_LEN] of integer;
   max, min: integer;
 
procedure InitArray;
var
   i: integer;
begin
   Randomize;
   ClrScr;
   WriteLn('Source: ');
   for i := 1 to ARRAY_LEN do begin
       a[i] := Random(10);
       Write(a[i]);
   end;
   WriteLn;
end.
 
procedure MaxMin(var vmax, vmin: integer);
var
   i := 1;
begin
   vmax := a[1];
   vmin := a[1];
   for i := 2 to ARRAY_LEN do begin
       if a[i] > vmax then vmax := a[i];
       if a[i] < vmin then vmin := a[i];
   end;
end;
 
procedure Show;
begin
   WriteLn('Max: ', max,' Min: ', min);
   ReadLn;
end;
 
begin
    InitArray;
    MaxMin(max, min);
    Show;
end.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 09:43
Цитата Сообщение от Puporev Посмотреть сообщение
Abs(x) стандартная математическая функция, такая же как скажем sqr, или sqrt. Что, в линейных алгоритмах это запрещено применять?
Эти задачи - не прикладные, а обучающие. Можно использовать abs или нельзя - я не знаю. Если можно, то на мой взгляд задача как "задача повышенной сложности" - полное фуфло.

Цитата Сообщение от Puporev Посмотреть сообщение
И если Вы слышали про слово бит, это не значит, что нужно всем про это рассказывать.
Поясни. Это желание оскорбить или что?
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 09:46
"задача повышенной сложности"
Это задача повышенной сложности для тех, кто первую неделю изучают Паскаль, тема линейные алгоритмы.
Это желание оскорбить или что?
Или что.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 09:49
Цитата Сообщение от Puporev Посмотреть сообщение
Это задача повышенной сложности для тех, кто первую неделю изучают Паскаль, тема линейные алгоритмы.
В таком допущении твой вариант ответа можно считать правильным. Но меня такой ответ не устраивает, т.к. он не "математический" (не знаю, как по другому сказать). Если это и вправду ответ, то я снимаю высказанное ранее замечание "интересная задача". Без претензий к кому либо. Для процесса обучения задача, несомненно, очень интересная и полезная

Цитата Сообщение от Puporev Посмотреть сообщение
Или что.
Ну тогда поясни, что ты хотел сказать, упомянов про биты
0
2 / 2 / 0
Регистрация: 23.04.2009
Сообщений: 20
24.04.2009, 10:39  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Для 2х целых вроде так.
c:=a+b;
d:=abs(a-b);
max1:=(a+b) div 2
Для 3х повторяем это для второй пары, а потом для max1 и max2
зачем тогда c, d? непонятно
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 10:43
зачем тогда c, d? непонятно
Конечно же max1:=(c+d) div 2;
Извини, не то написал.
0
45 / 10 / 3
Регистрация: 03.03.2009
Сообщений: 254
24.04.2009, 10:44
a<=b<=c //a=max, c=min
a<=c<=b //a=max, b=min
c<=a<=b //c=max, b=min
c<=b<=a //c=max, a=min
b<=c<=a //b=max, a=min
b<=a<=c //b=max, c=min
0
2 / 2 / 0
Регистрация: 23.04.2009
Сообщений: 20
24.04.2009, 10:46  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Конечно же max1:=(c+d) div 2;
Извини, не то написал.
А что делать с мин?
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.04.2009, 11:40
Так Вам что всю задачу решить что ли? По-моему это задача не для двоешников, а отличники, если они не дутые, сами должны решать.

Добавлено через 37 минут 30 секунд
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses crt;
var a,b,c,mx,mn,mx1,mn1,mx2,mn2:integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
mx1:=(a+b+abs(a-b)) div 2;{1й макс}
mx2:=(mx1+c+abs(mx1-c)) div 2;{2й макс}
mx:=(mx1+mx2+abs(mx1-mx2)) div 2;{итог}
mn1:=(a+b-abs(a-b)) div 2;{1й мин}
mn2:=(mn1+c-abs(mn1-c)) div 2;{2й мин}
mn:=(mn1+mn2-abs(mn1-mn2)) div 2;{итог}
writeln('max=',mx,'  min=',mn);
readln
end.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 16:43
irmaks, если после сдачи задания всё-таки заглянешь сюда, отпишись, правильно это было или нет. Мне интересно (для самообразования)
0
 Аватар для EnzoMatrix
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
24.04.2009, 16:48
Evg, если так сильно не нравится модуль, то можешь его ручками расписать как замену старшего бита на 0, поэтому модуль операция линейная по сути
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 16:54
Цитата Сообщение от CartmanRules Посмотреть сообщение
Evg, если так сильно не нравится модуль, то можешь его ручками расписать как замену старшего бита на 0, поэтому модуль операция линейная по сути
То что ты написал - неверно. -1 представляется как 0xffffffff, а потому модуль от -1 таким образом посчитается неправильно.

Я на самом деле ничего не имею против этого решения, если оно не выходит за рамки понятия линейный алгоритм. Просто если вдруг есть вариант без вызова стандартных процедур, то мен было бы интересно услышать, потому самому сделать у меня не получилось
0
 Аватар для EnzoMatrix
121 / 121 / 14
Регистрация: 14.03.2009
Сообщений: 462
24.04.2009, 16:58
косяк признаю, единицу добавить надо еще
ЗЫ тебя понял, тож интересно
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2009, 17:05
Цитата Сообщение от CartmanRules Посмотреть сообщение
ЗЫ тебя понял, тож интересно
Мне уже несколько раз мерещилось, что вот оно. Ан нет

Добавлено через 5 минут 18 секунд
Хотя вот что-то нарожалось. У меня уже двоится всё в глазах, проверьте кто-нибудь правильность

C
1
2
3
4
5
int a,b,c,d,e;
// Даны числа a и b. Правда тут мы учитываем, что они 32-битные (к примеру)
c = a - b; // если a<b, то c - отрицательное
d = (unsigned)c >> 31; // d=1, если a<b; d=0, если a>=b
e = a*d + b*(1-d); // если d=1, то значение выражения равно a, если 0, то b
т.е. так мы нашли минимум
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2009, 17:05

В заданном линейном массиве удалить все положительные элементы
Входные данные: Во входном потоке в первой строке задано натуральное число N - количество элементов целочисленного массива (N &lt; 100) ...

Реализовать алгоритм двоичного поиска в линейном отсортированном массиве
реализовать алгоритм двоичного поиска в линейном отсортированном массиве.описать лучшие и худшие случаи для определения трудоемкости...

Функция в линейном процессе
Здравствуйте, требуется ваша помощь. Вычислить величину Z по приведенным ниже формулам. Программу написал, но например при x=0 и...

В линейном массиве найти максимальный элемент
В линейном массиве найти максимальный элемент. Вставить порядковый номер максимального элемента после него, сдвинув все остальные на одну...

Написать функцию нахождения максимального значения в линейном односвязном списке
Нужно написать функцию нахождения максимального значения в линейном односвязном списке. Помогите хотя бы с алгоритмом.. завтра экзамен :(


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru