begin hidecursor; repeat write('Сторона квадрата от 20 до 100 a='); read(a); until a in [20..100]; repeat writeln('Введите 2 числа для определения соотношени m<n:'); read(m,n); until m<n; clearwindow; k:=m/n;//отношение kg:=windowwidth div a+1; //кол. кв. по горизонтали kv:=windowheight div a+1; //по вертикали for j:=1 to kg do for p:=1 to kv do begin for i:=1 to 50 do //рисуем 50 вложенных квадратов в 1 месте begin kvadrat; x1:=trunc(x1+(x2-x1)*k); y1:=trunc(y1+(y2-y1)*k); x2:=trunc(x2+(x3-x2)*k); y2:=trunc(y2+(y3-y2)*k); x3:=trunc(x3+(x4-x3)*k); y3:=trunc(y3+(y4-y3)*k); x4:=trunc(x4+(x1-x4)*k); y4:=trunc(y4+(y1-y4)*k); end; x1:=a*(j-1); y1:=a*(p-1); //на новое место x2:=a*j; y2:=a*(p-1); x3:=a*j; y3:=a*p; x4:=a*(j-1); y4:=a*p; end;
При переводе из системы в систему, дробные части в 99% случаев имеют погрешность и переводить их можно до бесконечности, так что ограничемся 6 знаками после запятой.
В переводе дробной части, делаем на оборот, не деление, а умножение, но умножение только дробной части: 0.43*2=0.86 0.86*2=1.72 0.72*2=1.44 0.44*2=0.88 0.88*2=1.76 0.76*2=1.52 0.52*2=1.04
Так можно продолжать до бесконечности, но мы уже посчитали 6 значений, тут записываем целые части чисел полученных, сверху вниз: 0110111 - это 0.43 в двоичной.
Просто склеим эти два числа через точку и получим: 162.43 = 10100010.0110111
Двоичная -> восьмиричная
Проще всего перевести в восьмиричную из двоичной, все что нужно, это представить число в виде троек: целая часть: 010'100'010 - целая часть (дописали спереди 0, просто что бы было целая тройка чисел) 011'011'100 - дробная часть (дописали уже два 0 в конце числа, то же что бы было по три цифры)
Теперь дело за малым, смотрим в прикрепленную картинку, берем целую часть, первые три цифры, смотрим по столбику для двоичной системы, ищем там 010, когда нашли, ведем пальчиком по рядочку на соответствующую цифру в столбике для восьмиричной системы, это будет 2. Проделываем ту же операцию для следующих трех цифр: 100 - в восьмиричной это 4, ну и наконец 010 как уже знаем - 2. Получается число 242 - целая часть.
Абсолютно точно так же считаем дробную часть: 011 - 3 011 - 3 100 - 4 Дробная часть это 334
Склеиваем через точечьку: 242.334 Хотите большую точность? Не вопрос! Делите точно так же как мы переводили из 10чной в 2чную, только теперь не на 2, а на 8, принцип перевода везде одинаковый :)
Двоичная -> Шеснадцатиричная Теперь попробуем перевести в 16ричную, у вас этого не написанно, но если это ошибка в условии, то не помешает, если ещё и учесть, что это не сложно! Снова благодарим простой принцип перевода и табличку, ведь всё что нужно сделать на этот раз, это то ж самое, что и при переводе в восьмиричную, с тем лишь изменением, что формируем не тройки чисел а четверки: Целую часть 10100010 для удобства представим так: 1010'0010 Дробную часть 01101110 тоже запишем вот так: 0110'1100 Тот же алгоритм действий по табличке, только пальцем ведем до столбца с цифрой 16 вверху, получится что 1010 из двоичной в шестнадцатеричной это 'A', ну и так далее: Целая часть: 1010 = A 0010 = 2 A2
Дробная часть: 0110 = 6 1110 = E 6E
Уже по классике, склеиваем через точечьку: 162.43 в шестнадцатиричной это A2.6E
сортировки – от пузырька, до параллельной кеш-независимой сортировки;
динамическое программирование;
алгоритмы сжатия данных – кодирование Хаффмана, арифметическое кодирование, сжатие подпоследовательностей;
символические вычисления – как организовать;
как сделать статическую структуру динамической – как сделать быструю (O(logN)) вставку в упорядоченный массив.