|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 05:06:18
|
Есть кусок кода, написанный на С:
int i, j=20; for (i = 0; i < j; i--) printf("." );
Можно ли исправить этот код так, чтобы он напечатал двадцать точек:
1) изменив всего один символ в коде программы 2) добавив --//-- 3) удалив --//-- |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) [ 27-07-04, Tue, 12:12:31 Отредактировано: Большой Грызь ] |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 07:24:11
|
я не программист, но мне кажется, что можно изменить j=20 на j=-20 |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 07:30:50
|
Неверно - цикл не выполнится ни разу.
|
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: a-dagger
Дата : 27-07-04, Втр, 07:31:44
|
Нееее, тогда i сразу будет больше j и не появится ни одной точки. |
Фсе граматичиские ашипки в маих пастах зделаны мной намерино, в здравам уме и тфёрдой памети. |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 07:36:54
|
i<j - это условие выполнения цикла или завершения? |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 07:38:07
|
Эльдар, условие выполнения. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 07:39:56
|
тогда -- заменить на ++, только это помоему замена 2х символов |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 07:44:25
|
Угу. Это замена двух символов. По условию - можно заменить/удалить/добавить лишь один символ. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 07:46:20
|
придумал: -i<j |
|
|
Автор: Урод и мразь
Дата : 27-07-04, Втр, 07:46:22
|
1,2 - можно 3 - нельзя |
Если первое слово Гагарина было: "Поехали!", то последнее слово Икара - "Приплыли!" |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 07:48:53
|
Эльдар, верно. На второй вопрос ты ответил. А как быть с еще двумя?
УиМ а док-во? |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) [ 27-07-04, Tue, 14:49:03 Отредактировано: Большой Грызь ] |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 07:56:15
|
а первый вопрос связан с синтаксисом CИ? ну скажем так: for (i = 0; i < j i--)
|
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 07:58:15
|
Угу.. вопрос таки связан с синтаксисом С.
Но я не понял, какое изменение ты сделал. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Эльдар
Дата : 27-07-04, Втр, 08:00:32
|
там должна быть ; ) |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 08:07:50
|
Это неверный синтаксис. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Урод и мразь
Дата : 27-07-04, Втр, 08:09:13
|
добавить и изменить можно, убрать нет. |
Если первое слово Гагарина было: "Поехали!", то последнее слово Икара - "Приплыли!" |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 08:22:10
|
УиМ, это не док-во давай док-во, КАК можно. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Gunslinger
Дата : 27-07-04, Втр, 09:27:42
|
1->
int i, j=20; for (i = 0; i < j; j--) printf("." );
|
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 09:30:24
|
Gunslinger, верно. Есть ещё один вариант замены Но хитрее |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Gunslinger
Дата : 27-07-04, Втр, 09:31:52
|
А серьезно 3 вариант возможен? Что то я его не вижу... |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 09:48:56
|
На 3-й вопрос ответа, как мне кажется, нет.
Но на 1-й вопрос есть еще один вариант ответа, кроме того, что ты привел. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Урод и мразь
Дата : 27-07-04, Втр, 10:41:39
|
for (i = 0; i + j; i--) for (i = 0; -i < j; i--)
|
Если первое слово Гагарина было: "Поехали!", то последнее слово Икара - "Приплыли!" |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 10:59:58
|
Угу
Ловите очередную задачку.
Дано: 1) есть компьютер с процессором, любая команда которого может прочитать из памяти за один раз только один байт. 2) есть таймер, который раз в секунду вызывает процедуру прерывания, увеличивающую некоторую целочисленную переменную в памяти (счётчик), длина которой четыре байта. Необходимо: Прочитать точное значение счётчика не запрещая прерывания (!) Проблема: Процессор умеет читать лишь по одному байту за раз, т.е. 4-байтную переменную невозможно прочитать одной командой, а, значит, между чтениями последовательных байтов может произойти прерывание, которое изменит значение счётчика.
Решение? |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Gunslinger
Дата : 27-07-04, Втр, 11:32:02
|
Класс задача, в жизни бы не догадалься, Вынес задачу на обсуждение в фирме где я работаю и нашел ответ: int i, j=20; for (i = 0; i + j; i--) printf("." );
На 20-ом обороте i+j будет равняться 0, и цикл остановиться.
А еще есть?
|
|
|
Автор: Урод и мразь
Дата : 27-07-04, Втр, 11:35:53
|
> Прочитать точное значение счётчика не запрещая прерывания (!)
точное значение в какой момент?
Читаем 4 байта. Читаем ещё раз. Сравниваем. Если изменились - только что произошло прерывание, читаем третий раз.
|
Если первое слово Гагарина было: "Поехали!", то последнее слово Икара - "Приплыли!" |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 11:36:46
|
Ганслингер, УиМ опередил в 22-ом посте
А "еще" - без понятия я нашёл только два. |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 11:38:00
|
Читаем 4 байта. Читаем ещё раз. Сравниваем. Если изменились - только что произошло прерывание, читаем третий раз.
Правильно
|
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Gunslinger
Дата : 27-07-04, Втр, 11:41:16
|
Упс, Посты задом наперед идут
А скорость выполнения одной команды чему равняеться? Может он может все 4 команды считывания выполнить за секунду?
Ну можно считывать по одному байту справа налево, так что если счетчик и измениться мы об этом не узнаем...
А вообще какова скорость выполнения одной команды? |
|
|
Автор: Большой Грызь
Дата : 27-07-04, Втр, 11:47:28
|
Скорость выполнения одной команды достаточно высока, чтобы время, затраченное даже на сотню чтений из памяти, было ничтожно мало по сравнению с секундой.
По одному байту, что слева направо, что справа налево - не поможет Возьми пример не с байтами, а с цифрами: на счетчике 0099, считываем справа налево 9, 9, приходит прерывание и превращает 0099 в 0100, считываем дальше 1 и 0. И получили мы 0199, что и близко не стоит ни с 0099, ни с 0100
Но УиМ опять успел дать ответ |
Жизнь человека немного стоит по сравнению с его делом. Но чтобы делать дело, надо жить. (Э. Хемингуэй) |
|
|
Автор: Gunslinger
Дата : 28-07-04, Срд, 01:48:55
|
Понятно А вообще то мое "Еще?" в прошлом посте было об еще задачах на эту тему. |
|