Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 491
от 17.11.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 241, Экспертов: 45
В номере:Вопросов: 2, Ответов: 3


Вопрос № 108988: Здравствуйте! В принцыпе в переходе от HEX к BIN все понятно! Вот не пойму для чего в селекторе вы указывали (вместе с ord) цифры 48, 55 и 87! Напишыте пожалуйста! case ord(c16[i]) of 48..57: c2:=c2+masBin[ord(c16[i])-48]; //для 0..9<b...
Вопрос № 109115: Уважаемые знатоки, помогите, пожалуйста, с такой задачкой: элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Соседними элементами А (i,j) в матрице называются элементы А (k,l), где i-1<=k<=i+1,...

Вопрос № 108.988
Здравствуйте! В принцыпе в переходе от HEX к BIN все понятно! Вот не пойму для чего в селекторе вы указывали (вместе с ord) цифры 48, 55 и 87! Напишыте пожалуйста!

case ord(c16[i]) of
48..57: c2:=c2+masBin[ord(c16[i])-48]; //для 0..9
65..70: c2:=c2+masBin[ord(c16[i])-55]; //для A..F
97..102: c2:=c2+masBin[ord(c16[i])-87]; //для a..f
Отправлен: 12.11.2007, 00:45
Вопрос задал: БАБУИН (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Мироненко Николай Николаевич!

Поскольку число в 16-ичной система счисления моет состоять из символов {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} либо {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}, а обращаться к элементу массива нужно только по ЦЕЛОЧИСЛЕННОМУ индексу, то приходится изначально символ переводить в его код с помощью функции ORD.

Код символа 'A' равен 55, символа 'a' равен 97, а символа '0' - 48.
Получаем что при значениях c16[i] равных от '0' до '9' будем обращаться к таким элементам массива:
masBin[ord('0')-48] = masBin[0]
masBin[ord('1')-48] = masBin[1]
masBin[ord('2')-48] = masBin[2]
masBin[ord('3')-48] = masBin[3]
masBin[ord('4')-48] = masBin[4]
masBin[ord('5')-48] = masBin[5]
masBin[ord('6')-48] = masBin[6]
masBin[ord('7')-48] = masBin[7]
masBin[ord('8')-48] = masBin[8]
masBin[ord('9')-48] = masBin[9]

Аналогично рассмотрим диапазоны и для букв.
от 'A' до 'F'
masBin[ord('A' )-48] = masBin[10]
masBin[ord('B')-48] = masBin[11]
masBin[ord('C')-48] = masBin[12]
masBin[ord('D')-48] = masBin[13]
masBin[ord('E')-48] = masBin[14]
masBin[ord('F')-48] = masBin[15]

от 'a' до 'f'
masBin[ord('a')-48] = masBin[10]
masBin[ord('b')-48] = masBin[11]
masBin[ord('c')-48] = masBin[12]
masBin[ord('d')-48] = masBin[13]
masBin[ord('e')-48] = masBin[14]
masBin[ord('f')-48] = masBin[15]

Вот такая арифметика, и немного смекалки для компактного решения поставленной задачи ;).

Возможно более понятно для этой же задачи будет запись выше описанного кода в таком виде:
case c16[i] of
'0'..'9': c2:=c2 + masBin[ord(c16[i]) - Ord('0')];
'A'..'F': c2:=c2 + masBin[ord(c16[i]) - Ord('A')+10];
'a'..'f': c2:=c2 + masBin[ord(c16[i]) - Ord('a')+10];


Где +10 - "поправка на ветер", поскольку в массиве соответствующие знач ения для букв начинаются с элемента с индексом 10.

Good Luck!!!

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 12.11.2007, 01:18
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо за обьяснение! Теперь понял где беруться эти цифры!

Отвечает: Стома С.С.
!!!
Здравствуйте, Мироненко Николай Николаевич!

В DOSе и в Windows существует кодировка которая называется ANSI.
Разновидность набора ANSI, содержащая символы русского алфавита, называется Windows-1251.
цифры 0..9 хранятся в компьютере как числа 48..57
буквы A..F 65..70 и нижний регистр соответственно догадались
ord - это операция с порядковыми типами которая возвращает его порядковый номер

В DOS'е кодировка называется "ОЕМ" или "ср866". По сравнению с кодировкой ANSI (windows-1251), расположение русских букв там совершенно другое.
-----
∙ Отредактировал: sir henry (Академик)
∙ Дата редактирования: 12.11.2007, 05:10
Ответ отправил: Стома С.С. (статус: 2-ой класс)
Ответ отправлен: 12.11.2007, 01:26
Оценка за ответ: 4
Комментарий оценки:
Спасибо!!!


Вопрос № 109.115
Уважаемые знатоки, помогите, пожалуйста, с такой задачкой: элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Соседними элементами А (i,j) в матрице называются элементы А (k,l), где i-1<=k<=i+1, j-1<=l<=j+1, (k,l)<>(i,j). 1.Подсчитать количество локальных минимумов заданной матрицы размером 10*10(оформить в виде процедуры). 2. Найти сумму модулейэлементов, расположенныхвыше главной диагонали (оформить в виде функции). Помогите, пожалуйста, а то я даже не знаю с чего начать.
Отправлен: 12.11.2007, 20:09
Вопрос задала: Cмирнова Наталья Викторовна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Verena
Здравствуйте, Cмирнова Наталья Викторовна!
По поводу первой части. "Соседей" будем оббегать в дополнительном цикле и сравнивать с текущим элементом. По поводу второй - индексы элементов над главной диагональю соотносятся как j < i (на самой диагонали i=j). Только следует учитывать, что смысл это имеет только для квадратной матрицы. Решение в приложении.
Удачи!

Приложение:

---------
Эта история - не для истории, понимаешь?

Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 12.11.2007, 21:36


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.1 от 14.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное