ЕГЭ информатика B8

22-03-2011

Мобильное приложение для решения задания B8 ЕГЭ по информатике.

Сейчас я особо не занимаюсь этим сайтом так как готовлюсь к ЕГЭ, чтоб его. Так вот, все думаю когда то писали шпоры, а я решил написать прогу, скорее web приложение которое поможет мне при сдаче ЕГЭ.

Готовясь к информатике заметил что почти во всех заданиях B8 встречается одна и та же по типу задача, в которой обычно требуется найти последовательность букв с какой то позиции по какую то. Пример задания:

Строки (цепочки символов латинских букв) создаются по следующему правилу: первая строка состоит из одного символа латинской буквы “A”. Каждая из последующих цепочек создается такими действиями: в очередную строку сначала дважды записывается предыдущая строка, затем справа приписывается буква, чей порядковый номер в алфавите соответствует номеру строки (на i м шаге пишется “i” я буква алфавита).
Вот первые 4 строки созданные по этому правилу:
1) A
2) AAB
3) AABAABC
3) AABAABCAABAABCD
Латинский алфавит (для справки):
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Запишите шесть символов подряд, стоящие в восьмой строке с 100-го по 105-место (считая слева направо).

Встречаются разные варианты этой задачи в некоторых требуется найти количество определенных букв в какой то строке, встречаются еще и с русским алфавитом.

Итак цель написать web приложение которое смогло бы решить все варианты этой задачи и была бы удобна для использования с телефона. Не знаю о чем подумали вы, но я подумал о jQuery Mobile. Почитав немного документации написал разметку. Приложение будет состоять из одной страницы в которой будет выводиться форма состоящая из 4х полей это: поле для выбора алфавита, количества строк, начальной позиции и конечной позиции. Стилей писать не придется так как jQuery Mobile так устроен, остается написать разметку

Получилась она вот такой:

   <div data-role="page" data-theme="c">
       <div data-role="header">
           <h1>Информатика B8</h1>
       </div>
       <div data-role="content">   
           <form action="" method="get">
               <div data-role="fieldcontain">
                   <label for="select-choice-1" class="select">Выберите алфавит:</label>
                   <select name="lang" id="select-choice-1">
					   <option value="lt">Латинский</option>
					   <option value="ru">Русский</option>
                   </select>
               </div>
               <div data-role="fieldcontain">
                   <label for="line">Количество строк:</label>
                   <input type="number" name="line" id="line">
               </div>
               <div data-role="fieldcontain">
                   <label for="beg_pos">Начальная позиция:</label>
                   <input type="number" name="beg_pos" id="beg_pos">
               </div>
               <div data-role="fieldcontain">
                   <label for="end_pos">Конечная позиция:</label>
                   <input type="number" name="end_pos" id="end_pos">
               </div>
               <button type="submit" data-theme="b" name="calc" value="calc">Посчитать</button>
           </form>
       </div>
       <div data-role="footer">
           <h4><a href="http:\\prootime.ru">prootime.ru</a></h4>
       </div>
   </div>

В headerе нужно подключить вот эти скрипты:

stylesheet - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css
script - http://code.jquery.com/jquery-1.4.3.min.js
script - http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js

На вид примерно что то вроде этого:

Осталось написать PHP код. Он будет очень даже простой, просто поставим на сабмит формы PHP код и будем выполнять алгоритм который был дан в задании:

if(!empty($_REQUEST['calc'])){

   //язык
   $language = $_REQUEST['lang'];

   if($language == 'lt'){

       $arr = range('A','Z');

   }
   else{

       $arr = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');

   }

   //номер строки
   $str_num = $_REQUEST['line'];

   //начальная и конечная позицим
   $beg_pos = $_REQUEST['beg_pos'];
   $end_pos = $_REQUEST['end_pos'];

   if($beg_pos > $end_pos){

       echo 'Ошибка! Значения начала отреза больше конеца.';

   }
   else{

       //конечная строка
       $end_str = '';
       
       for($i = 0; $i <= $str_num-1; $i++){
           
           $end_str = $end_str.$end_str.$arr[$i];
           
       }

       echo mb_substr($end_str, $beg_pos-1, $end_pos - $beg_pos + 1, 'utf8');
       echo '
Всего букв - '.strlen($end_str); for($i = 0; $i <= $str_num-1; $i++){ echo '
'.$arr[$i].' - '.mb_substr_count($end_str,$arr[$i], 'utf8'); } } }

Единственное на что бы хотел обратить внимание это на функции начинающиеся с mb_ это нестандартные функции и требуют модуль mbstring если он не подключен то они конечно не сработают. А вообще выполняют то же самое что эти же функции без mb_. Почему я их использовал, потому что этим функциям можно передать третьим параметром кодировку в которой функция должна работать. А так как нам нужно работать еще и с кирилицей это то что нам нужно.

ДЕМО ВЕРСИЯ
посмотреть в действии
СКАЧАТЬ
скачать на компьютер
reckless8.29.2011 07:08
Demo не працює(
PROTESTER3.15.2012 04:03
1 Где проверка на кол-во строк их не должно быть больше чем букв. (Ага скрипт за лимиты уйдет и упадет.) 2 1 Раз срабатывает потом нет, приходится закрывать страницу и по новой все
ОСТАВИТЬ КОММЕНТАРИЙ