функция возвращает строку, которая получается из строки С1 путем побитной дизъюнкции со строкой С2
Как это может быть? Дизъюнкция, это "Или" как я понимаю %)
функция возвращает строку, которая получается из строки С1 путем побитной дизъюнкции со строкой С2
Как это может быть? Дизъюнкция, это "Или" как я понимаю %)
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
20 декабря 2008 в 17:05
даа)) за это огромное спасибо))
20 декабря 2008 в 14:00
Не будем гадать как правильно а как нет. Как это часто бывает, задание требует уточнения. Мало информации. Не указан язык, тип "строк" … хорошо еще что дизъюнкция а не XOR
По заданию – все выполнено, 2 строки на входе, одна на выходе, применена побитная дизъюнкция. Правильно ли она применена или нет, полностью или частично, тут не указано
Главное "перевели автору задание".
20 декабря 2008 в 13:03
Эм символ окончания?? а потом вы приводите код на делфи. Паскалевские строки это не нуль-терминальные.
Собственно всё это неважно, не про то речь. В задании сказано, что на вход подаются две строки, а на выходе одна. Про то, что они будут одинаковой длины – ни слова. Как следствие задача решена неверно.
20 декабря 2008 в 12:02
> Ведь отсутствие символов во второй строке – нулевые байты.
Зависит от конкретной реализации. Нельзя гарантированно сказать что после последнего символа строки есть нули. Ну один нуль понятно – символ окончания, а после!? там может быть все что угодно, да и извлечение символа с несуществующей позиции выдаст ошибку.
Тогда:
Извлекать символы в цикле с проверкой, и задавать символ 00, если указатель вышел за пределы строки
For I:=1 to Max( Length(Str1),Length(Str2) ) do begin
if I<=Length(Str1) then Ch1:=Str1[I] else Ch1:=#00;
if I<=Length(Str2) then Ch2:=Str2[I] else Ch2:=#00;
Str3:=Str3+chr( ord(Ch1) OR ord(Ch2) ) ;
end;
что то типа такого)
можно еще сравнить строки
скопировать наибольшую, и в ней произвести замену первых символов напросуммированные с символами короткой
20 декабря 2008 в 11:02
А зачем одинаковая длина? Ведь отсутствие символов во второй строке – нулевые байты. То есть непарные символы первой строки передадутся без изменений.
20 декабря 2008 в 4:00
спасибо, Александр, Ягами-сан))
20 декабря 2008 в 2:00
дизъюнкция как и любая другая логическая функция может быть применена не только к логическому типу (множество {0,1} ) но и к байтам данных.
то есть, байт = 8 логических значений или 8 бит. операция OR будет применена для каждого бита.
"Byte1 OR Byte2" вернет Byte3, составленный из битов
(1.1 or 2.1).(1.2 or 2.2 )…(1.8 or 2.8 )
Например:
10110000 (176) OR 11000010(194) =11110010(242)
———————————–
> функция возвращает строку, которая получается
> из строки С1 путем побитной дизъюнкции со строкой С2
тебе надо брать от каждой строки по одному символу(переводить их в байты)и складывать их операцией OR.
Внимание: необходимо чтобы Длины С1 и С2 были одинаковы.
20 декабря 2008 в 0:05
побитной дизъюнкции со строкой С2
20 декабря 2008 в 0:05
дизъюнкция – это функция двух переменных (они же – операнды операции). Переменные могут принимать значения из множества {0,1}. Результат также принадлежит множеству {0,1}. Вычисление результата производится по простому правилу, либо по таблице истинности. Вместо значений {0,1} может использоваться любая другая пара подходящих символов, например"ложь", "истина".
Правило: результат равен 0, если оба операнда равны 0; во всех остальных случаях результат равен 1.
20 декабря 2008 в 0:05
а это уже верно!!
20 декабря 2008 в 0:05
это-то я понимаю, а вот что делать с этим заданием – нет..