Конкурс. Программирование.

Автор Proydoha, 22-07-2011, 17:28:47

« предыдущая - следующая »

0 Пользователей и 6 гостей просматривают эту тему.

Proydoha

27-07-2011, 12:34:47 #90 Последнее редактирование: 27-07-2011, 12:36:28 от Proydoha
Цитироватья в замешательстве! какой-то странный метод у Proydoha... напоминает обычный пузырек но тут какое то temp со значением 42

Переставить два значения в массиве, не используя промежуточной переменной, нельзя. temp нужен для этого. А ещё для того, что бы понять когда перестановок не произошло. Если temp равен сорока двум, то перестановки произошли и массив просматривается снова.

Jeka

Цитата: Proydoha от 27-07-2011, 12:34:47
Цитироватья в замешательстве! какой-то странный метод у Proydoha... напоминает обычный пузырек но тут какое то temp со значением 42

Переставить два значения в массиве, не используя промежуточной переменной, нельзя. temp нужен для этого. А ещё для того, что бы понять когда перестановок не произошло. Если temp равен сорока двум, то перестановки произошли и массив просматривается снова.
я знаю что 2 переменные без третьей не переставить! как по твоему я тогда писал свою программу?) почему 42?? сделал бы 0 или 1))) было бы как-то очевидней)) просто число смутило как будто с небес взято)))

Jeka

Цитата: Sasha от 27-07-2011, 12:23:18
Да. Я по определенным соображениям отказался от идеи запускать ваши программы в отдельном процессе, передавая параметры в main, а просто скопировал ваши функции в одну программу и поочередно вызвал, замерив такты процессора.
Я никогда не видел такого способа передачи и вобще сама конструкция ввела меня немного в замешательство, не представляю как это внутри работает.
Саш, ИМХО напрасно ты кричал на пройдоху. он сделал все верно. вот что написано в книге
Синтаксис вызова функции при этом[передаче массива в качестве параметра] может быть следующим :
FunctionName(ArrayName);
тогда прототип функции включает указание в качестве параметра типа передаваемого массива и следующих за ним прямоугольных скобок. например
void FunctionName(char[]);

ДРУГОЙ ВАРИАНТ
другой вариант синтаксиса передачи массива в функцию - когда прототипа функции содержит символ ОПЕРАЦИИ ВЗЯТИЕ АДРЕСА ПООООСЛЕ указания типа аргумента (что наверное имел в виду пройдоха)
char Functiuon(char&)
при этом синтаксис вызова функции принимает вид
FunctionName(*ArrayName);



Proydoha

Цитата: Jeka от 27-07-2011, 13:42:23
я знаю что 2 переменные без третьей не переставить! как по твоему я тогда писал свою программу?) почему 42?? сделал бы 0 или 1))) было бы как-то очевидней)) просто число смутило как будто с небес взято)))

Сорок два это ж ответ на вопрос жизни смерти и всего такого прочего из книжки Дугласа Адамса, которую я пообещал себе однажды прочитать.

А 32167 - читкод на пятерых чОрных драконов в какой-то из частей героев меча и магии.

Sasha

27-07-2011, 15:04:19 #94 Последнее редактирование: 27-07-2011, 15:05:56 от Sasha
Та не кричал я, понятно что если компилятор схавал и работает, то так делать можно, но я считаю это не правильный подход и опять же надо разбираться как такая передача организована в асм коде потом.

Ща вам открою большую тайну! Поменять местами 2 переменные, не используя третьей можно! Специально вчера проверил как это влияет на время, получилось что все же использовать буферную переменную все равно будет быстрее, в конкретном случае процентов на 28 тактов процессора.
skype: ab.sasha

Proydoha

27-07-2011, 15:08:19 #95 Последнее редактирование: 27-07-2011, 15:10:11 от Proydoha
Цитата: Sasha от 27-07-2011, 15:04:19
Поменять местами 2 переменные, не используя третьей можно!

Сложением/вычитанием?
Написать функцию для этих целей?

Чё-то первое, что пришло в голову, выглядит не очень умным ходом.

Jeka

Цитата: Proydoha от 27-07-2011, 14:02:48
Цитата: Jeka от 27-07-2011, 13:42:23
я знаю что 2 переменные без третьей не переставить! как по твоему я тогда писал свою программу?) почему 42?? сделал бы 0 или 1))) было бы как-то очевидней)) просто число смутило как будто с небес взято)))

Сорок два это ж ответ на вопрос жизни смерти и всего такого прочего из книжки Дугласа Адамса, которую я пообещал себе однажды прочитать.

А 32167 - читкод на пятерых чОрных драконов в какой-то из частей героев меча и магии.
ООО БОГИ)

Jeka

Цитата: Proydoha от 27-07-2011, 15:08:19
Цитата: Sasha от 27-07-2011, 15:04:19
Поменять местами 2 переменные, не используя третьей можно!

Сложением/вычитанием?
Написать функцию для этих целей?

Чё-то первое, что пришло в голову, выглядит не очень умным ходом.
функция будет работать медленнее думаю. ну нам не учили каклибо по другому менять местами переменные нежели через тмп. так что доверяя своему родному университету я закрою глаза на Сашину истину жизни!

Jeka

к стати, Саша,  а как ты замерял такты процессора?

Sasha

Ну сложением и вычитанием как вариант. Или же сложением и вычитанием адрессов переменных. Написать отдельную функцию - этого я не понял, все равно она чтото должна будет использовать для хранения. Можно при помощи исключающего или. Можно сравнивать биты переменных, если они равны - оставлять как есть, если не равны применять к ним операцию отрицания. Вот все варианты что мне известны. Женя, твой универ тебя не обманул, это вопрос из разряда, а знаете ли вы, который могут задать на собеседовании программисту, где-то с целью проверки его мышления, где-то с целью понизить его запросы, в реальной жизни это применимо разве что, если память твого железа ограничена так что каждый байт на счету)

Есть разные тулзы и библиотеки позволяющие замерить такты процессора, время выполнения итд. Все зависит от задачи. Когда-то сравнивал их работу - все давали отличающиеся результаты, так что каким верить хз. Но в целом пропорции сохранялись, такого чтобы один подход сказал что метод A лучше B, а другой наоборот не было.
skype: ab.sasha

Sasha

Задание #4
Время выполнения: 5 дней
Количество баллов: 10

Дан двумерный массив, заполненный нулями и единицами. Необходимо "перевернуть" этот массив на 180 градусов.

Пример
Входной массив:
0 1 0 1 1
0 0 1 0 1
1 0 0 1 1
Выходной массив:
1 1 0 0 1
1 0 1 0 0
1 1 0 1 0
skype: ab.sasha

Proydoha

Выглядит не очень сложным.

user4923

Тю... И че тут сложного??? Взял и переписал все цифри считывая по арабски (начиная снизу справа налево). ;D
Тормоза придумали трусы...

46.98.1.79 - это мой ftp

Sasha

Цитата: user4923 от 27-07-2011, 22:01:47
Тю... И че тут сложного??? Взял и переписал все цифри считывая по арабски (начиная снизу справа налево). ;D
Участвуй)
skype: ab.sasha

Jeka

я не понял что надо сделать с матрицей??? как это перевернуть