![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
suriv |
![]() ![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 234 Пол: Мужской Реальное имя: AHTOH Репутация: ![]() ![]() ![]() |
Можно поподробнее про ф-цию swap:
В одной книге писалось про пузырьковую сортировку: Цитата for i:=1 to 10 do if m[i] > m[i+1] then swap (m[i],m[i+1]); Но ведь у ф-ции swap должен быть один параметр. В результатате чего вызывает ошибку. З.Ы. как я понял ф-ция swap меняет местами....(какую то хрень). Сообщение отредактировано: suriv - 26.11.2004 9:48 -------------------- Хочу в репу !
Cмотри,а то ведь получишь! Админ. Не получит - его фиг догонишь! Админ №2. P.S Вы еще третьего админа притащите сюда :D ваш аффтар :D Звали? :D (админ № не помню какой) ха больше нифига не напишете афтар Уверен? (Moderator) А еще можно ? (супмодер) Хватит его мучать ! Избили уж... (админ) Не хватит. я тоже напишу (тоже Админ) |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
suriv
Не путай... В Паскале есть встроенная функция Swap, которая получает число типа Word или Integer, и меняет в нем старший и младший байты местами. Для функции сортировки нужен другой Swap, который нужно писать самому - это должна быть процедура, которая обменивает значения 2-х переменных, т.е. вот так: Код Procedure Swap(a, b: Integer); {хотя тип может быть и другим} Var T: Integer; Begin T := a; a := b; b := T End; Напиши эту процедуру перед процедурой сортировки, и не будет никаких ошибок :D |
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Да, совершенно верно.. можно вообще обойтись без вызова процедуры, хотя так код более структурирован.
Кстати здесь: Код T := a; a := b; b := T Можно обойтись без дополнительной переменной T ! ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Oleg_Z
Для новичка лучше все-таки использовать Т ![]() |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Зато:
1. меньше код. 2. быстрее. ![]() 3. меньше по размеру. 4. уже не будет новичком ![]() 5. Меньше памяти на 2 байта ![]() :P ![]() Цитата Но ведь у ф-ции Кстати это процедура ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Digitalator |
![]()
Сообщение
#6
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
!!! Самый быстрый своп:
Код asm xor a,b xor b,a xor a,b end; Не самый! Самый быстрый с использованием доп. переменной! ВFAQ'e доказательство! Сообщение отредактировано: Oleg_Z - 3.04.2005 8:46 -------------------- |
murphy |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Можно обойтись без дополнительной переменной T ! Как? А то я не помню а сам не додумаюсь нинак :p2: -------------------- collect the infotrons and find Exit
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
murphy
Код a := a + b; b := a - b; a := a - b; |
murphy |
![]()
Сообщение
#9
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 98 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Спасибо я приблизительно так и пытался но чего-то запутался :D -------------------- collect the infotrons and find Exit
|
Digitalator |
![]()
Сообщение
#10
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Код a := a + b; b := a - b; a := a - b; Ксорами быстрее будит ![]() p.S. неправда! Самый быстрый обмен с использованием доп. переменной. В FAQ'e есть доказательство. Сообщение отредактировано: Oleg_Z - 3.04.2005 8:45 -------------------- |
CMOS |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хорошо, а как написать процедуру для переменных любых типов? Т. е.:
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; Код в теги заключаем... |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 6:22 |