Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1225992268
palva
2008-11-06 20:24
2009.01.04
Гастарбайтеров станет больше


2-1227650952
Аврам
2008-11-26 01:09
2009.01.04
алгоритм кубиков для арканоида


2-1227123674
Alex_Ford
2008-11-19 22:41
2009.01.04
Как хранить пароли?


2-1226488903
Vova
2008-11-12 14:21
2009.01.04
DeleteFile


2-1227282378
СиничЪ
2008-11-21 18:46
2009.01.04
Цветной текст в Form.Caption





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский