Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (9) здесь было Вс Фев 11, 2018 12:54 pm
Самые активные пользователи за неделю
Ярослав
 


Домашняя работа №8.

Перейти вниз

Домашняя работа №8.

Сообщение автор Gragory023 в Пн Фев 20, 2017 4:13 pm

Не приходят в голову идеи как сделать эти задания!!! Огорчён
В первом не понятен пример. 35 в 18-ю даёт 1H - что тут Н?
и как тут использовать функции?

Второе тоже не понятно, даже как начинать(((((

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Ярослав в Вт Фев 21, 2017 12:44 am

Начнём с первой.

В системах счисления с основанием до 10 цифры понятно какие:
0 1 2 3 4 5 6 7 8 9
Для систем счисления с основанием больше 10 нам нужны ещё цифры. Чтобы выйти из ситуации, вместо последующих цифр используют буквы латинского алфавита:
a = 10
b = 11
c = 12
d = 13
e = 14
и так далее. Например, h — 8-я буква алфавита, значит, она равна 9+8 = 17. Заглавность букв значения не имеет.

Переводить число из десятичной системы счисления в другую проще на самом деле с конца. Находим последнюю цифру; отбрасываем её. Этот процесс очень аналогичен тому, что мы делали в Д/З, где надо было узнать число цифр в числе, посчитать их сумму. Там мы делали / 10, % 10. А в системе счисления с основанием N будет / N, % N.

Конечно, остаётся вопрос, как, получая цифры от последней к первой, напечатать их на экран в правильном порядке: от первой к последней. Но тут могло бы помочь вместительное хранилище данных, например, массив.


Последний раз редактировалось: Ярослав (Вт Фев 21, 2017 12:48 am), всего редактировалось 1 раз(а)
avatar
Ярослав
Admin

Posts : 591
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Ярослав в Вт Фев 21, 2017 12:47 am

По поводу второй задачи. Забьём пока на требование использовать функции. Всегда полезно начать планировать программу с анализа тех данных, которые нам придётся во время программы хранить, обрабатывать, изменять и отображать.

Если перечень данных ясен, заводим под них правильные переменные (нужно определиться с типом и названием).

Когда переменные есть, начать писать программу проще. Обычно я пишу задачу от начала к концу, то есть если описание задачи начинается со слов: игроки ходят по очереди, то я начну прописывать, как делается один ход (что происходит с данными? в чём заключается ход?), а потом в какой-то момент зациклю происходящее, чтобы оно повторялось сколько надо раз.
avatar
Ярослав
Admin

Posts : 591
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Gragory023 в Вт Фев 21, 2017 12:48 pm

Вот что у меня пока получается,
Код:
   int number, result, firstresult;
   int system_calculate;
   cout << "Please enter number then system calculated which you wont to convert" << endl;
   cin >> number >> system_calculate;
   
   
   result = number%system_calculate;
   number = number - result;
   firstresult = number / system_calculate;

   
   cout << firstresult << '+' << result << endl;




}
как можно сделать, чтоб числа конвертировались в буквы, и как использовать массив для записи, ведь мы не знаем сколько там будет переменных((((?????

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Ярослав в Вт Фев 21, 2017 1:32 pm

Чтобы конвертировать цифры в буквы, нужно написать отдельную функцию. На вход ей подаётся численное значение (например, 11), а на выходе она выдаёт букву (например, b). При этом она должна делать соотвествие

число 0 -> символ '0'
число 1 -> символ '1'
....
число 9 -> символ '9'
число 10 -> символ 'a'
число 11 -> символ 'b'...
....

Видно, что тут два разных диапазона — цифры и буквы. Эти два случая можно разделить с помощью if/else. А как именно число превратить в нужный символ — это вычисления в типе данных char, сверяясь с таблицей ASCII.


Последний раз редактировалось: Ярослав (Вт Фев 21, 2017 1:39 pm), всего редактировалось 1 раз(а)
avatar
Ярослав
Admin

Posts : 591
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Ярослав в Вт Фев 21, 2017 1:37 pm

Нужно завести достаточно большой массив, чтобы в него поместился любой результат. Навскидку может показаться, что 20 знаков хватит на всё про всё. Однако если подумать, двоичная форма записи занимает очень много места; так, 32-битное целое число (int) может занимать до 32 знаков в ширину.

Обычно для постепенного заполнения массива заводят ещё одну целочисленную переменную, которая говорит, сколько элементов в массиве заполнены верными значениями. Начинается она с нуля (массив не заполнен вовсе). По мере того, как найдена очередная цифра, кладём её в массив и увеличиваем счётчик заполненности на 1. Получим в массиве запись числа задом наперёд (на 0-й позиции идёт последняя цифра); но мы умеем распечатывать массив в обратном порядке.

Начало правильное. В любом случае для обработки всего числа нужно будет операции зациклить.
avatar
Ярослав
Admin

Posts : 591
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Gragory023 в Вт Фев 21, 2017 2:27 pm

Ну вот, что то уже получилось, осталось только понять как массив использовать для накопления?
Код:
   
      result = number%system_calculate;
      number = number - result;
      firstresult = number / system_calculate;

   if (result<10)
      cout << firstresult << result << endl;
   else {
      char result1 = result + 55;
      cout << firstresult << result1 << endl;

   }
}

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Ярослав в Вт Фев 21, 2017 2:34 pm

Покажу маленький пример, может, сможешь сделать по аналогии:
Код:
char digits[100]; // массив для хранения цифр в новой системе счисления
int filled = 0; // показывает, сколько цифр уже записано

...
char digit = 'a'; // каким-то способом узнали, что очередная цифра — это 'a'
digits[filled] = digit; // кладём 'a' в массив на 0-ю позицию
filled++; // массив теперь заполнен на 1 элемент

...
digit = '9'; // очередная цифра, например, '9'
digits[filled] = digit; // кладём следующим за последним элементом новую цифру
filled++; // массив заполнен на 1 элемент больше

То есть инструкции по докладыванию элемента в конец массива одинаковые:
Код:
digits[filled] = digit;
filled++;
Каким бы ни были digit и filled, эти операции добавляют один элемент в массив и увеличивают счётчик заполненности на 1. То есть их можно использовать как часть программы, в том числе в цикле.

Когда число закончилось, массив заполнен не полностью: первые filled символов корректны, а остальные — мусор. Распечатаем массив, но не весь, а только первые filled элементов:
Код:
for (int i = 0; i < filled; i++)
   cout << digits[i];
cout << endl;
avatar
Ярослав
Admin

Posts : 591
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Домашняя работа №8.

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения