Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Табулирование функции, упакованные числа  (Прочитано 9280 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Люсь
Команда клуба

ru
Offline Offline
Пол: Женский

« : 24-01-2009 09:37 » 

Прошу помочь мне, толково объяснив, что тут может иметься в виду?


Задача №2
Протабулируйте функцию, заданную в виде ряда, с шагом h=0,01. Сравните полученные результаты с данными, полученными с использованием стандартной функции.
ln = 〖x=(x-1)- 1/2  (x-1)〗^2+1/3 〖(x-1)〗^3- …;
x € [0.5 ; 0.6]

Комментарии: Насколько мне помнится, что-то похожее решали в вычислительной математике, но непонятно, как табулировать функцию средствами высшей математики? На каком слагаемом остановиться в вычисляемом ряде? Там многозначительное троеточие.....




Задача №6
В переменной типа unsigned упакованы 5 восьмеричных чисел от 0 до 1. Реализовать алгоритм выборки значения числа по заданному с клавиатуры номеру. Номера позиций чисел изменяются от 1 до 5.


Комментарии: Ваще не поняла. Объясните пожалуйста, как это может быть реализовано? В каких языках программирования есть возможность такое вытворить?
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 24-01-2009 10:17 » 

В первой задаче, наверное, нужно установить какую-то погрешность, меньше которой члены уже не вычислять - ряд сходящийся. А потом при сравнении с результатом стандартной функции учитывать взятую погрешность, как вариант.

Вторая задача - для языков C/C++ подходит точно (и далее везде, где есть побитовые операции). Не совсем понял принцип упаковки 8-ричных чисел (они ещё и дробные, насколько я понимаю). Если знать, как именно пакуются числа, то всё просто: вычисляется битовое смещение, а дальше побитовыми операциями либо отбрасывается всё лишнее (в переменной остаётся только нужное число), либо конкретный диапазон бит ещё как-то декодируется - зависит от принципа упаковки.
Записан
Люсь
Команда клуба

ru
Offline Offline
Пол: Женский

« Ответ #2 : 24-01-2009 10:56 » 

Спасибо, по первой задаче точно, нужно вводить погрешность, вспомнила Улыбаюсь Попробую решить...

По второй - чё-то как-то я не осилила до сих пор побитовые сдвиги и операции... Алекс1153, помогай, а? Я знаю, это по твою душу )
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 24-01-2009 13:14 » 

По второй я не понял что значит от 0 до 1?

На пять восьмеричных чисел нужно 15 бит
поз.          f edc  ba9 876 543 210
данные = 0111 000 111 000 111
в восьмеричной это будет 70707

в С++ сдвиг делается очень просто - оператор <<

например

1 << 0 = 000000001
1 << 1 = 000000010
1 << 2 = 000000100
1 << 3 = 000001000 
1 << 4 = 000010000
1 << 5 = 000100000
1 << 6 = 001000000
1 << 7 = 010000000
1 << 8 = 100000000

и тд

Таким образом ты получаешь маску для проверки бита в позиции: аргумент сдвига-1. Далее умножая число на маску определяем состояние бита числа в искомой позиции

Те если с клавиатуры ввели номер 3 (кстати слева или справа? ок не важно  я возьму слева)

Значит число начинается с позиции 3(номер числа) * 3 (число бит 8-ричной цифры) = 9
Поскольку мы считаем от нуля то 9-1=8 или с восьмого бита начинается искомое число

пусть наше закодированное число А, тогда первый (старший бит) третьего 8-ричного числа будет:

// для наглядности А=ххх ххх 101 ххх ххх; х - либо 0 либо 1 для примера не имеет значения.

bit2 = А&(1<<(3*3-1))?1:0;       // допустим это 1 для наглядности внизу

аналогчно находим остальные биты:

bit1 = А&(1<<(3*3-2))?1:0;       // допустим это 0 для наглядности внизу
bit0 = А&(1<<(3*3-3))?1:0;       // допустим это 1 для наглядности внизу

Остаётся только сложить эти биты чтобы получить искомое число.

bit1<<1;             // bit1: было 0 стало 00 - для наглядности
bit1|=bit0;          // bit1: было 00 стало 01 - для наглядности
bit2<<2;             // bit2: было 1 стало 100 - для наглядности
bit2|=bit1;          // bit2: было 100 стало 101 - для наглядности

В переменной  bit2 искомое число - 5
« Последнее редактирование: 24-01-2009 17:18 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 24-01-2009 16:00 » 

Люсь, я не знаю, что значит "табулироватьт функцию" Улыбаюсь А ещё не все символы отображаются

А про биты Джон уже написал
Записан

Люсь
Команда клуба

ru
Offline Offline
Пол: Женский

« Ответ #5 : 26-01-2009 10:38 » new

Спасибо!
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines