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

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

23.04.2009, 21:38. Показов 5227. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru