42618

Системы счисления. Десятичная система счисления

Лабораторная работа

Информатика, кибернетика и программирование

Для задачи Rounder функция min имеет вид: void minvoid { Rounder s; int res = s.round1234567; printf d n res; } Калькулятор зарплаты SlryClcultor Работая в компании за первые 200 часов работник получает зарплату в размере p1 долларов в час каждый месяц. void minvoid { SlryClcultor s; double res = s.clcHours82812140; printf lf n res; } Убежать из прямоугольника EscpeFromRectngle Вы находитесь в точке x y внутри прямоугольника нижний левый угол которого имеет координаты 0 0 а правый верхний w...

Русский

2013-10-30

100 KB

4 чел.

Лабораторная работа №5

СИСТЕМЫ СЧИСЛЕНИЯ

   В повседневной жизни мы пользуемся десятичной системой счисления, которая имеет 10 цифр: 0, 1, …, 8, 9. Каждое натуральное число  можно представить в виде

n = an * 10n + an-1 * 10n-1 + … + a1 * 10 + a0

   Например, 123 = 1 * 102 + 2 * 101 + 3 * 100.

   В двоичной системе счисления пользуются лишь двумя цифрами: 0 и 1. В восьмеричной – цифрами от 0 до 7, а в шестнадцатеричной – цифрами от 0 до 9 и буквами от 'A' до 'F', которые соответствуют числам от 10 до 15. В следующей таблице показаны записи чисел от 1 до 16 в разных системах счисления:

десятичная

двоичная

восьмеричная

шестнадцатиричная

1

1

1

1

2

10

2

2

3

11

3

3

4

100

4

4

5

101

5

5

6

110

6

6

7

111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

16

10000

20

10

   Если b – основание системы счисления, то числу n, имеющему в ней запись , в десятичной системе соответствует число

n = an * bn + an-1 * bn-1 + … + a1 * b + a0

   Примеры перевода чисел из разных систем счисления в десятичную:

   1. 1111 из двоичной: 11112 = 1 * 23 + 1 * 22 + 1 * 21 + 1 = 1510

   2. 16 из восьмеричной: 168 = 1 * 81 + 6 = 1410

   3. FF из шестнадцатеричной: FF16 = 15 * 161 + 15 = 25510

    Для перевода из десятичной системы счисления в двоичную (восьмеричную, шестнадцатеричную, …) пользуются делением в столбик. При делении числа n на 2 под числом n записываем остаток от деления n на 2, под двойкой – частное. Процесс деления оканчиваем, когда частное станет равным 1. Далее следует записать последнее частное (единицу) и все остатки от деления в обратном порядке. Например, найдем двоичное представление числа 20:

20

2

 

 

 

0

10

2

 

 

 

0

5

2

 

 

 

1

2

2

 

 

 

0

1

   Записав остатки в обратном порядке, получим: 2010 = 101002.

   Найдем шестнадцатеричное представление числа 511:

511

16

 

15 = F

31

16

 

15 = F

1

   Из таблицы получим: 51110 = 1FF16.

   При умножении на 10 в десятичной системе счисления к числу приписывается справа 0. Например, 71 * 10 = 710. Аналогично при умножении на b числа n в b - значной системе счисления к числу n приписывается справа 0. Например:

   5 * 2 = 10, в двоичной системе счисления: 1012 * 210 = 10102;

   255 * 162 = 65280, в шестнадцатеричной системе счисления: FF16 * 1610 * 1610 = FF0016;

   Упражнение 2.1. Найти двоичное, восьмеричное и шестнадцатеричное представление десятичного числа 31.

   Упражнение 2.2. Найти двоичное представление следующих чисел:

а) 22 + 24           б) 26 – 1          в) 3 * 82

 3. Методы класса

    При сдаче задач следует писать функцию – метод класса. Например, рассмотрим две достаточно простые задачи с объяснениями и реализацией.

Округление (Rounder)

   Для заданного числа n найти ближайшее целое, которое делится на b. Если таких чисел несколько, то найти наибольшее.

   Класс: Rounder

   Метод: int round(int n, int b)

   Ограничения: 1 ≤ n ≤ 106, 2 ≤ b ≤ 500.

   Вход. Два числа n и b.

    Выход. Ближайшее целое к n, которое делится на b. Если n находится строго посредине двух чисел, делящихся на b, то вернуть наибольшее.

   Пример входа

n

b

5

10

4

10

100

3

49

7

   Пример выхода

   10

   0

   99

   49

 РЕШЕНИЕ

   Ближайшим к n целым, делящимся на b, будет число  . Если n находится строго посредине двух чисел, делящихся на b, это значение будет наибольшим среди них. В языке Си выражение примет вид: (n + b / 2) / b * b.

   Класс Rounder и метод round имеют следующий вид:

#include < stdio.h >

class Rounder

{

public:

  int round(int n, int b)

  {

    return ((n + (b / 2)) / b) * b;

  }

};

   Заметим, что после объявления класса следует ставить точку с запятой. Методом называется функция, объявленная в классе. Функцию следует объявить публичной (public) для того чтобы ее можно было вызывать извне. Именно в таком виде следует сдавать задачу.

   Для тестирования метода следует написать функцию main. Она должна содержать создание экземпляра класса, вызов метода с конкретными входными данными и вывод результата. Для задачи Rounder функция main имеет вид:

void main(void)

{

  Rounder s;

  int res = s.round(123456,7);

  printf("%d\n",res);

}

Калькулятор зарплаты (SalaryCalculator)

   Работая в компании, за первые 200 часов работник получает зарплату в размере p1 долларов в час каждый месяц. За остальные часы до конца месяца ставка работника составляет p2 долларов в час. Вычислить, какое наименьшее количество часов должен работать работник в месяц, чтобы получить суммарную зарплату в salary долларов.

   Класс: SalaryCalculator

   Метод: double calcHours(int p1, int p2, int salary)

   Ограничения: 1 ≤ p1, p2 ≤ 100, 1 ≤ salary ≤ 106.

   Вход. Ежемесячная зарплата работника в час за первые 200 часов и за последующие часы.

   Выход. Наименьшее количество часов должен работать работник в месяц, чтобы получить суммарную зарплату в salary долларов.

   Пример входа

p1

p2

salary

10

15

1000

10

15

3000

82

8

12140

   Пример выхода

   100.0

   266.6666666666667

   148.0487804878049

РЕШЕНИЕ

   За 200 часов работник получит t = p1 * 200 долларов. Если эта сумма больше salary, то достаточно работать salary / p1 часов. Иначе следует отработать 200 часов с зарплатой p1 долларов в час, а остальное время с зарплатой p2 долларов в час. При этом количество часов, когда зарплата будет составлять p2 долларов в час, равна (salaryt) / p2.

#include < stdio.h >

class SalaryCalculator

{

public:

  double calcHours(int p1, int p2, int salary)

  {

    int t = p1 * 200;

    if (t >= salary) return 1.0 * salary / p1;

    return 200 + 1.0 * (salary - t) / p2;

  }

};

   Для тестирования функции calcHours следует написать функцию main.

void main(void)

{

  SalaryCalculator s;

  double res = s.calcHours(82,8,12140);

  printf("%lf\n",res);

}

Убежать из прямоугольника (EscapeFromRectangle)

   Вы находитесь в точке (x, y) внутри прямоугольника, нижний левый угол которого имеет координаты (0, 0), а правый верхний (w, h). Найти наименьшее расстояние, которое Вам следует преодолеть чтобы достичь границы прямоугольника.

   Класс: EscapeFromRectangle

   Метод: int shortest(int x, int y, int w, int h)

   Ограничения: 2 ≤ w, h ≤ 1000, 1 ≤ x ≤ w-1, 1 ≤ y ≤ h-1.

   Вход. Целочисленные координаты Вашего положения (x, y) и правой верхней вершины прямоугольника (w, h).

   Выход. Наименьшее расстояние, которое следует преодолеть для достижения границы прямоугольника.

   Пример входа

x

y

w

h

1

1

5

5

653

375

1000

1000

161

181

762

375

   Пример выхода

   1

   347

   161

РЕШЕНИЕ

   Находим расстояния от точки (x, y) до всех четырех сторон прямоугольника, которые соответственно равны x, y, wx, hy. Возвращаем наименьшее из этих значений.

#include < stdio.h >

class EscapeFromRectangle

{

public:

  int shortest(int x, int y, int w, int h)

  {

    int res = x;

    if (y < res) res = y;

    if (w - x < res) res = w - x;

    if (h - y < res) res = h - y;

    return res;

  }

};

   Далее при разборах задач с Топкодера функцию main приводить не будем.

Наибольший прямоугольник (BiggestRectangleEasy)

   У Джона есть n спичек, каждая из которых имеет длину 1. Он хочет составить из них прямоугольник наибольшей площади. Ломать спички нельзя. Джону не обязательно использовать все спички.

   Класс: BiggestRectangleEasy

   Метод: int findArea(int n)

   Ограничения: 4 ≤ n ≤ 10000.

   Вход. Количество спичек n, которое имеется в наличии у Джона.

   Выход. Наибольшая площадь прямоугольника, который может составить Джон при помощи имеющихся у него спичек.

   Пример входа

n

11

5

7254

   Пример выхода

   6
   1
   3288782

РЕШЕНИЕ

   Если одна из сторон прямоугольника равна x, то другую можно найти по формуле:

y = (n – 2*x) / 2

   Площадь полученного прямоугольника равна S(x) = x * (n – 2*x) / 2. Она будет наибольшей в такой точке x, в которой S’(x) = 0. Имеем: S’(x) = (n – 4*x) / 2 = 0, x = n / 4. То есть искомым прямоугольником будет квадрат.

   Если n не делится на 4, то выполняя целочисленные деления, получим правильный результат.

#include < stdio.h >

class BiggestRectangleEasy

{

public:

  int findArea(int n)

  {

    int x = n / 4;

    int y = (n - 2 * x) / 2;

    return x * y;

  }

};


 

А также другие работы, которые могут Вас заинтересовать

21788. Система количественных оценок риска 94 KB
  Как отмечалось ранее тема 2 одним из наиболее распространенных методов количественной оценки риска является статистический метод. Главными инструментами статистического метода расчета риска являются: среднее значение х изучаемой случайной величины последствий какоголибо действия например дохода прибыли и т. как случайные величины подчиняются закону близкому к нормальному широко используется в литературе по проблеме количественной оценки экономического риска.
21789. Теоретические аспекты риск-менеджмента 70 KB
  Основные принципы управления рисками 3. Анализ риска 4. Методы количественного анализа риска 1. Содержание рискменеджмента Рискменеджмент – система управления рисками на предприятии которая представляет собой совокупность методов приемов и мероприятий позволяющих в определенной степени прогнозировать наступление рисковых событий и принимать меры к исключению или снижению отрицательных последствий наступления таких событий.
21790. Риск и доход 72 KB
  Величина FV показывает будущую стоимость сегодняшней величины PV при заданном уровне доходности. Концепция риска и доходности в финансовом менеджменте Риск и доходность в финансовом менеджменте и анализе рассматриваются как две взаимосвязанные категории. Активы с которыми ассоциируется относительно больший размер возможных потерь рассматриваются как более рисковые; вполне естественно что к таким активам предъявляются и большие требования в отношении доходности.
21791. Управление рисками и антикризисное управление 81 KB
  Главная задача антикризисного управления обеспечение такого положения предприятия на рынке когда оно может преодолеть временные трудности в том числе и финансовые посредством использования всех возможностей современного менеджмента. главной целью его является обеспечение стабильного положения на рынке компании при любых экономических политических и социальных изменениях в стране; в его рамках применяются в основном те управленческие инструменты которые наиболее эффективны в устранении временных финансовых затруднений и решении других...
21792. Санитарные требования к транспортированию, приему, хранению, механической кулинарной обработке пищевых продуктов 75 KB
  ПЛАН ЛЕКЦИИ : Санитарные требования к транспортированию пищевых продуктов. Санитарные требования к приему и хранению пищевых продуктов. Санитарные требования к механической кулинарной обработке пищевых продуктов.
21793. Санитпрные требования к содержанию предприятий общественного питания 110.5 KB
  Санитарные требования к содержанию территории и помещений предприятий общественного питания. Цель способы и средства дезинфекции в предприятиях общественного питания. Гигиена и санитария общественного питания: Учебник для техн.
21794. Санитарные требования к тепловой обработке пищевых продуктов, хранению и раздаче готовой пищи 91 KB
  Санитарные требования к изготовлению кремовых изделий и пирожков во фритюре. Органолептическими признаками готовности мясных изделий являются выделение бесцветного сока в месте прокола и серый цвет на разрезе продукта при этом температура в центре готовых изделий должна быть не ниже 85 град. C для натуральных рубленых изделий и не ниже 90 град. C для изделий из котлетной массы.
21795. Гигиенические требования к факторам внешней среды и благоустройству предприятий общественного питания 112.5 KB
  Гигиена воздуха: а физические свойства воздуха; б химический состав воздуха; в загрязнение воздуха вредными примесями влияющими на организм и условия труда работников предприятия общественного питания. При этом оценивая влияние различных факторов внешней среды на организм человека обычно выделяют преимущественный фактор который по своим параметрам имеет наибольшее отклонение от требований организма человека например повышенная температура воздуха или запылённость его. 2 вопрос – Гигиена воздуха Среди факторов внешней среды...
21796. Санитарный надзор в области гигиены паитания 88.5 KB
  Санитарный надзор в области гигиены паитания План лекции Предмет и задачи гигиены и санитарии Органы и службы государственного санитарного надзора Министерства здравоохранения Украины Основные направления предупредительного и текущего государственного санитарного надзора за предприятиями общественного питания Краткий обзор развития науки о питании Литература основная Закон Украины €œОб обеспечении санитарного и эпидемического благополучия населения€ от 24. Гигиена и санитария общественного питания: Учебник для технол. Гигиена и...