Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.04;
Скачать: CL | DM;

Вниз

Задача с двумя массивами   Найти похожие ветки 

 
Борис   (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
2-1227282378
СиничЪ
2008-11-21 18:46
2009.01.04
Цветной текст в Form.Caption


15-1226050249
cosinus
2008-11-07 12:30
2009.01.04
Посоветуйте книгу


2-1227341687
Андрей (начинающий)
2008-11-22 11:14
2009.01.04
смена цвета в StringGrid


15-1225800022
El
2008-11-04 15:00
2009.01.04
Баннеры


3-1212563525
allucard
2008-06-04 11:12
2009.01.04
Database not assigned