Помогите, пожалуйста, сделать сабж... Дано: 1.Открытый текст; 2.Квадратная таблица, заполненная буквами латинского алфавита в случайном порядке. При шифровании в этом квадрате находят букву открытого текста и записывают в шифртекст букву, расположенную ниже ее в том же столбце. Если буква текста оказывается в нижней строке таблицы, то для шифртекста берут самую верхнюю букву из того же столбца. нужно именно пхп... в нете полно всякого но на пыхе нет... а для счастья не хватает
.::BARS::. найдите на C и перепишите, даже синтаксис сильно не изменится Что именно не получается? Или это "ой, дали задание, а мне лень думать, напишу на античат"?
Аха)) Даже текст поста автор писан скорее всего не сам) Видел 1в1 вопрос чтоб написали на других языках)))) Ну прям буква в букву. Могу линки дать))))
PHP: echo '<form method="post"> Исходный текст:<br /> <textarea rows="10" cols="40" name="text">'. $_POST['text'] .'</textarea><br /> <input type="submit" name="go" value="Шифровать!" /> </form>'; if(isset($_POST['go'])){ $text = $_POST['text']; $alphabet = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я', ' ', ',', '.'); shuffle($alphabet); $c=0; echo '<br><br><table border=\'1\'>'; for ($i=0; $i<6; $i++){ echo '<tr>'; for ($j=0; $j<6; $j++){ echo '<td>'.$alphabet[$c].'</td>'; $new_arr[$i][$j]=$alphabet[$c]; $c++; } echo '</tr>'; } echo '</table><br><br>'; echo array_search($text[4],$new_arr[1]); $strlen = strlen($text); for($i=0; $i<$strlen; $i++){ for ($j=0; $j<6; $j++){ if (array_search($text[$i],$new_arr[$j])){ $number_a_coll=array_search($text[$i],$new_arr[$j]); $number_a_st=$j; if ($number_a_st==5){ $number_a_st=0; }else{ $number_a_st++; } echo $number_a_coll; $cryptogram .= $new_arr[$number_a_st][$number_a_coll]; } } if (!array_search($text[$i],$alphabet)){ $cryptogram .= $text[$i]; } } echo '<b>Зашифрованный текст:</b><br /><textarea rows="10" cols="40">'; echo $cryptogram; echo '</textarea>'; } кому интересно последнии пропуски заполнил пробелом и . ,
Вообщем получилось вот что ) Тут я не генерировал массив,а записал вручную, т.к сутьбыла не в сгенерировать,записать в фаил,расшифровать. PHP: $height=3; // высота квадрта,при генирации или задаем ее или вычисляем $width= 11; // длинна. Зная строку узнаем count() . Я посчитал вручную)) $kvadrat = array("1" => array(1 => "а","б","в","г","д","е","ё","ж","з","и","к"), "2" => array(1 => "л","м","н","о","п","р","с","т","у","ф","х"), "3" => array(1 => "ц","ч","щ","ь","ъ","ы","э","ю","я"," ",".")); $text = "мача"; // текст исходный $text_array = str_split($text); // разбиваем текст на массив $count = count($text_array); // узнаем кол-во элементов $c=0; foreach ($text_array as $a) { // в цикле проходим все эллементы строки for ($i=1; $i<=$height; $i++) { // в цикле ищем в каждой строке букву $q1=array_search($a,$kvadrat[$i]);// ищем во всех строках букву if($q1 !="") {$st = $i;$pl=$q1;} // записываем ключи массива } $st1=$st+1; if($st1 > $height) {$st1=1;} // если больше чем строк то берем первую //echo "$a -> [$st][$pl] -->[$st1][$pl].<br>"; // для дебага выводим $result[$c]= $kvadrat[$st1][$pl]; $c++; // счетчик букв =) } //print_r($result); echo "Зашифровали \"$text\" в \""; for ($i=0; $i<=count($result); $i++) { echo $result[$i]; } echo "\""; Может местами не очень оптимизированно, но старался понятнее. Комментировал где мог)
-=Zhenek=-, суть квадрата не просто делать замену по массиву с верхнего на нижний со сдвигом... а еще и заполнение массива рандомно... =)) хотя впринцыпе суть уловлена... только уже сам разобрался..
.::BARS::. массивы - это слишком тяжело, можно обойтись и строкой: PHP: /* abcdef ghijkl mnopqr stuvwx yz1234 567890 */ $alpha = 'abcdefghijklmnopqrstuvwxyz1234567890'; $row_size = sqrt(strlen($alpha)); if (is_float($row_size)) die 'Алфавит не умещается в таблицу'; function encode($str, $dir=1) { global $alpha, $row_size; $alpha_size = $row_size*$row_size; $arr = str_split($str); $out = array(); foreach($arr as $val) { $tmp = strpos($alpha, $val); if ($tmp === false) {die('Буквы нет в алфавите');} $out[] = $alpha[($tmp + $dir * $row_size + $alpha_size) % $alpha_size]; } return implode('', $out); } function decode($str) { return encode($str, -1); } $str = 'valvalval'; $tmp = encode($str); $tmp2 = decode($tmp); echo $str.'--'.$tmp.'--'.$tmp2;
Поидее только полученную таблицу нужно записать. И при расшифровке считывать и засшифровывать. Поэтому я выбрал массивы. Считать с файла в массив проще. а в коде не особо запутанно))) На то массивы и придумали))