IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Swap, Help.Кому не лень
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 234
Пол: Мужской
Реальное имя: AHTOH

Репутация: -  1  +


Можно поподробнее про ф-цию swap:
В одной книге писалось про пузырьковую сортировку:
Цитата
for i:=1 to 10 do
if m[i] > m[i+1] then swap (m[i],m[i+1]);

Но ведь у ф-ции swap должен быть один параметр.
В результатате чего вызывает ошибку.


З.Ы. как я понял ф-ция swap меняет местами....(какую то хрень).

Сообщение отредактировано: suriv -


--------------------
Хочу в репу !

Cмотри,а то ведь получишь!
Админ.

Не получит - его фиг догонишь!
Админ №2.

P.S Вы еще третьего админа притащите сюда :D
ваш аффтар :D
Звали? :D (админ № не помню какой)

ха больше нифига не напишете
афтар

Уверен? (Moderator)
А еще можно ? (супмодер)
Хватит его мучать ! Избили уж... (админ)
Не хватит. я тоже напишу (тоже Админ)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






suriv
Не путай... В Паскале есть встроенная функция Swap, которая получает число типа Word или Integer, и меняет в нем старший и младший байты местами.
Для функции сортировки нужен другой Swap, который нужно писать самому - это должна быть процедура, которая обменивает значения 2-х переменных, т.е. вот так:
Код

Procedure Swap(a, b: Integer); {хотя тип может быть и другим}
 Var T: Integer;
 Begin
   T := a; a := b; b := T
 End;


Напиши эту процедуру перед процедурой сортировки, и не будет никаких ошибок :D
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Да, совершенно верно.. можно вообще обойтись без вызова процедуры, хотя так код более структурирован.

Кстати здесь:
Код
T := a; a := b; b := T

Можно обойтись без дополнительной переменной T !
smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Oleg_Z
Для новичка лучше все-таки использовать Т smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Зато:
1. меньше код.
2. быстрее. smile.gif
3. меньше по размеру.
4. уже не будет новичком smile.gif
5. Меньше памяти на 2 байта smile.gif

:P
smile.gif
Цитата
Но ведь у ф-ции

Кстати это процедура rolleyes.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 247
Пол: Мужской

Репутация: -  1  +


!!! Самый быстрый своп:
Код

asm
xor a,b
xor b,a
xor a,b
end;


Не самый! Самый быстрый с использованием доп. переменной! ВFAQ'e доказательство!

Сообщение отредактировано: Oleg_Z -


--------------------
In byte we trust
ICQ World.ru
mail[dog]digitalator[dot]com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской

Репутация: -  0  +


Цитата
Можно обойтись без дополнительной переменной T !

Как?
А то я не помню а сам не додумаюсь нинак :p2:


--------------------
collect the infotrons and find Exit
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






murphy
Код

a := a + b;
b := a - b;
a := a - b;
:D
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской

Репутация: -  0  +


volvo

Спасибо
я приблизительно так и пытался но чего-то запутался
:D


--------------------
collect the infotrons and find Exit
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 247
Пол: Мужской

Репутация: -  1  +


Цитата
Код
a := a + b;
b := a - b;
a := a - b;

Ксорами быстрее будит smile.gif ... и красивее

p.S. неправда! Самый быстрый обмен с использованием доп. переменной. В FAQ'e есть доказательство.

Сообщение отредактировано: Oleg_Z -


--------------------
In byte we trust
ICQ World.ru
mail[dog]digitalator[dot]com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Хорошо, а как написать процедуру для переменных любых типов? Т. е.:

procedure swap(var x, y)

Я нашел способ, только нужно указывать размер перемнной:

Код
Procedure Swap (var a, b; size: Word);
var p: Pointer;
Begin
GetMem (p, size);
Move (a, p^, size);
Move (b, a, size);
Move (p^, b, size);
FreeMem (p, size);
End;
;)

Код в теги заключаем...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 17.05.2024 4:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name