Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
ВнизЗадача с двумя массивами Найти похожие ветки
← →
Борис (2008-11-18 17:38) [0]Привет всем!
Помогите,пожалуйста, решить задачу -
Дано массив X(100) и Y(100). Нужно построить алгоритм, который меняет местами значения єлементов X(k) и Y(k) для єтих массивов, не используя вспомогательных переменных.
Спасибо!
← →
Cobalt © (2008-11-18 18:01) [1]используй стек :)
← →
Jeer © (2008-11-18 18:09) [2]Сведи задачу к обмену значениями двух переменных не используя третью.
← →
Борис (2008-11-18 18:26) [3]Извините начинающего! а примерчик можно?
← →
Riply © (2008-11-18 18:29) [4]> [3] Борис (18.11.08 18:26)
> Извините начинающего! а примерчик можно?
Показывай что и как пытался делать,
иначе эта фраза воспринимается как "решите за меня".
← →
Palladin © (2008-11-18 18:30) [5]Уж додумайся сам, это школьники решают.
← →
Palladin © (2008-11-18 18:31) [6]
> Riply © (18.11.08 18:29) [4]
Ну ты оптимистка :) он же сразу сюда, ни строчки собственного, даже мыслей...
← →
Zlodey (2008-11-18 18:40) [7]
var
Form1: TForm1;
M1: array [0..2] of Integer = ((1), (2), (3));
M2: array [0..2] of Integer = ((4), (5), (6));
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
P: Pointer;
begin
for i := Low(M1) to High(M1) do
begin
GetMem(P, SizeOf(Integer));
try
Move(
M1[i], P^, SizeOf(M1[i]));
Move(
M2[i], M1[i], SizeOf(M1[i]));
Move(
P^, M2[i], SizeOf(P));
finally
FreeMem(P, SizeOf(Integer));
end;
end;
for i := Low(M1) to High(M1) do
ShowMessageFmt("%d", [M1[i]]);
for i := Low(M2) to High(M2) do
ShowMessageFmt("%d", [M2[i]]);
end;
← →
Сергей М. © (2008-11-18 18:42) [8]Бориску нв царство ? (с)
> Борис (18.11.08 17:38)
Спасайся бегством.
Или озвучь сумму.
← →
Palladin © (2008-11-18 18:43) [9]
> Zlodey (18.11.08 18:40) [7]
"не в кассу", P дополнительная переменная )
← →
StriderMan (2008-11-18 18:47) [10]
> Zlodey (18.11.08 18:40) [7]
так это и есть неявное использование третьей переменной. Память выделяется же. даже указатель на нее есть :)
← →
Zlodey (2008-11-18 18:50) [11]Можно и иначе:
var
Form1: TForm1;
M1: array [0..2] of Integer = ((1), (2), (3));
M2: array [0..2] of Integer = ((4), (5), (6));
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
P: Pointer;
begin
for i := Low(M1) to High(M1) do
begin
M1[i] := M1[i] + M2[i];
M2[i] := M1[i] - M2[i];
M1[i] := M1[i] - M2[i];
end;
for i := Low(M1) to High(M1) do
ShowMessageFmt("%d", [M1[i]]);
for i := Low(M2) to High(M2) do
ShowMessageFmt("%d", [M2[i]]);
end;
← →
StriderMan (2008-11-18 18:55) [12]x[i] := x[i] - y[i];
y[i] := y[i] + x[i];
x[i] := - (x[i] - y[i]);
← →
Anatoly Podgoretsky © (2008-11-18 18:56) [13]
> Спасайся бегством.
Так долго бегать придется, если закон не изменили, то до 27 лет.
← →
Тын-Дын © (2008-11-18 21:13) [14]
> Борис (18.11.08 17:38)
См. ветку "Быстрый SWAP", там есть решение.
http://delphimaster.net/view/2-1226768553/
← →
Борис (2008-11-19 10:12) [15]Для "начинающих" со стажем 15 лет, у которых конец дня и на школьные задачки времени нету, скажу- Respect for StriderMan . Zlodey -тоже вариант, но весь кайф в том , чтобы не использовать ни переменные, ни указатели, ни константы ни т.п. Дома вечером на досуге пришел к такому же решению на бумаге (после 19:00 у меня алергия на монитор). Словами классика скажу-"Все гениальное просто". Спасибо всем кто не "умничал".
← →
int64 (2008-11-19 10:28) [16]Zlodey (18.11.08 18:50) [11]
StriderMan (18.11.08 18:55) [12]
А если хотябы один из элементов MaxInt?
← →
Jeer © (2008-11-19 10:40) [17]
> у которых конец дня и на школьные задачки времени нету,
Зачем нам школьные задачи :) Это твоя задача.
А "умничают" для того, чтобы ты понял - простые решения на самом деле состоят из серии сложных.
← →
ivak © (2008-11-22 00:10) [18]капец,обмен без дополнителльной переменной !!! по паскалю в школе проходили на первом месяце:
a := a + b;
b := a - b;
a := a - b;
вроде так...
ну а с массивом тоже самое только ещё for добавить.
← →
Германн © (2008-11-22 02:20) [19]
> ivak © (22.11.08 00:10) [18]
>
> капец,обмен без дополнителльной переменной !!! по паскалю
> в школе проходили на первом месяце:
>
Точнее "пробегали"!
:)
← →
Denis__ © (2008-11-24 13:53) [20]А кто сказал, что массивы из Integer?
А если из реалов, причем в одном очень большие числа, а в другом - маленькие? Или массив поинтеров%) или массив множеств, тогда там тоже не так. ку?
← →
Anatoly Podgoretsky © (2008-11-24 14:05) [21]
> Точнее "пробегали"!
В перерыве между занятиями.
← →
Anatoly Podgoretsky © (2008-11-24 14:05) [22]Denis__ © (24.11.08 13:53) [20]
Например строк.
← →
Denis__ © (2008-11-24 14:08) [23]
> капец,обмен без дополнителльной переменной !!! по паскалю
> в школе проходили на первом месяце
Класс 8 чтоль. Время на решение задачи - 5 минут. Кто справился - получает 5. кто не справляется, тот не просто не понимает о чем речь. У некоторых возникают вопросы типа [20]
← →
Denis__ © (2008-11-24 14:10) [24]
> x[i] := x[i] - y[i];
> y[i] := y[i] + x[i];
> x[i] := - (x[i] - y[i]);
Здесь разве i не переменная?
> Например строк.
Да много чего можно придумать:) Сказал то, что первое в голову пришло
← →
Anatoly Podgoretsky © (2008-11-24 14:18) [25]
> А если хотябы один из элементов MaxInt?
При определенных условиях это не является проблемой.
← →
KilkernnyCat (2008-11-24 16:42) [26]
> Anatoly Podgoretsky
Значит, при неопределенных - проблема...
← →
ivak © (2008-11-26 00:16) [27]
> Здесь разве i не переменная?
i - счётчик)
учи паскаль
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.004 c