Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Арифметические операции в разных системах счислени 
V
    Опции темы
LiToRBoL
Дата 6.1.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Определить подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10. Результат выполнения проверить на десятичных числах.
Задачу необходимо решить без использования строк.

10011=1*2^0+1*2^1+0*2^2+0*2^3+1*2^4 


Код

#include <stdio.h>
#include <math.h>
#include <conio.h>

int perevod(int a,int z)

{  int   d=0, s;  \\ d - число в десятичной системе счисления
   double n,  p;

          for (int i=0; i<n; i++)
         {
          s=a%pow10(i+1);\\ этот кусок 
          p=s/pow10(i)\\ не пашет))) но он должен выдовать разряд числа по идеи
                     d+=p*pow(z,n-i-1);
                 }

           return ; \\ хз чего должна возвращать функция

}
void main()
        {
    
    int a, z, i, n; \\ a - вводимое число, z - система счисления, n - количество цифер в числе
    int summa=0, proiz=1;
    
     
     for (i=1; i<3; i++)
         {
     printf ("\nVvedite chislo\n");
     scanf ("%d%n", &a, &n);



     printf ("\nVvedite osnovanie SS\n");
     scanf ("%d", &z);

     summa+=perevod(a,z);
     proiz*=perevod(a,z);
     }

     printf ("summa rovna %d\n", summa);
         printf ("proizvedenie rovno %d\n", proiz);

         }


Знаю что больше половины написанного бред, но я не волшебник я только учусь))) 
Спасите плиз сроки сдачи горят, буде чрезмерно благодарен!!!



Это сообщение отредактировал(а) LiToRBoL - 6.1.2009, 12:42
PM MAIL   Вверх
LiToRBoL
Дата 7.1.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Народ помагите плиз кто шарит в этом! plz plz plz!
PM MAIL   Вверх
Kallikanzarid
Дата 7.1.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Как это без помощи строк? А где хранятся числа? 0_о
PM MAIL   Вверх
mes
Дата 7.1.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Kallikanzarid @  7.1.2009,  19:33 Найти цитируемый пост)
Как это без помощи строк? А где хранятся числа? 0_о 

представлены интом  smile то есть int i = 6; это  6 в десятеричной, или 10 в шестяричной, или 12 в четверичной  smile

Цитата(LiToRBoL @  6.1.2009,  10:56 Найти цитируемый пост)
но он должен выдовать разряд числа по идеи

Код

unsigned get_digit (unsigned a, unsigned pos) // pos -индекс позиции разряда. 
{  
    return  (a/pow10(pos))%10;
}


Добавлено @ 21:00
Цитата(LiToRBoL @  6.1.2009,  10:56 Найти цитируемый пост)
 return ; \\ хз чего должна возвращать функция

Код

return d;


Это сообщение отредактировал(а) mes - 7.1.2009, 21:03


--------------------
PM MAIL WWW   Вверх
Kallikanzarid
Дата 7.1.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Тогда я знаю, как складывать такие числа: a + b
PM MAIL   Вверх
mes
Дата 7.1.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Kallikanzarid @  7.1.2009,  20:47 Найти цитируемый пост)
Тогда я знаю, как складывать такие числа: a + b 

не пойдет :
7+7 =  14(10)
7+7 =  15 (9)
7+7 =  16 (8)
 smile 


--------------------
PM MAIL WWW   Вверх
LiToRBoL
Дата 8.1.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Суть задачи в том чтобы в подпрамме перевести 2 числа из заданой системы счисления в 10 и тупо вывести их сумму и произведениею.

Это сообщение отредактировал(а) LiToRBoL - 8.1.2009, 15:19
PM MAIL   Вверх
mes
Дата 8.1.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(LiToRBoL @  8.1.2009,  14:14 Найти цитируемый пост)
Суть задачи в том чтобы в подпрамме перевести 2 числа из заданой системы счисления в 10 и тупо вывести их сумму и произведениею.

ну а в чем проблема? на вопросы первого топика имхо ответы получены. Если есть еще, то уточните какие smile


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 8.1.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



а при чем тут сложение и умножение числел а разных системах счисления?? складываются и умножаются-то всеравно двоичные числа, раз железо двоичное
просто они выводятся в какой-то СС
PM MAIL ICQ   Вверх
mes
Дата 8.1.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  8.1.2009,  16:23 Найти цитируемый пост)
а при чем тут сложение и умножение числел а разных системах счисления?? складываются и умножаются-то всеравно двоичные числа, раз железо двоичное
просто они выводятся в какой-то СС 

Насколько я понял, надо и реализовать собственные функции так, чтоб, к примеру, функция  int add(int a,int b, unsigned base) 
вернула бы 16  при вызове add (7,7,8);  smile 


Это сообщение отредактировал(а) mes - 8.1.2009, 17:35


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 8.1.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



mes, но в исходнике 7 эквивалентно 0x7, и вообще скомпилируется оно в "push 7"
а если записать
int a=7;
add(a,1,8);

и чтото мне непонятно, как тогда числа хранятся?
т.е. числа хранятся в чемто вроде "dectimal coded ***s" (по аналогии с BCD) ?
 
PM MAIL ICQ   Вверх
mes
Дата 8.1.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  8.1.2009,  16:42 Найти цитируемый пост)
mes, но в исходнике 7 эквивалентно 0x7, и вообще скомпилируется оно в "push 7"

а вобще, причем тут ассемблер ?!  берите выше  smile 

Цитата(GoldFinch @  8.1.2009,  16:42 Найти цитируемый пост)
и чтото мне непонятно, как тогда числа хранятся?

инт-значение расматривается как строка символов  десятичной системы.
с помощью этой строки записано число в другой системе-счисления.

Цитата(GoldFinch @  8.1.2009,  16:42 Найти цитируемый пост)
т.е. числа хранятся в чемто вроде "dectimal coded ***s" (по аналогии с BCD) ?

подобно.. насколько я помню, там на каждую цифру отводится 4 бита..
в задании же битовое представление не важно и  грубо говоря предпологается, что значения хранятся в  десятиричной системе (а не в двоичной) smile

Это сообщение отредактировал(а) mes - 8.1.2009, 19:00


--------------------
PM MAIL WWW   Вверх
LiToRBoL
Дата 8.1.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Я изначально неправильно понял суть задачи.
Нужно организовать 2 подпрограммы: В одной сложение в другой перемножение. Результаты этих подпрограмм перевести в десятичную систему счисления.
PM MAIL   Вверх
Kallikanzarid
Дата 8.1.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



LiToRBoL, если хочешь, чтобы тебе помогли, выложи текст задачи полностью. А то пока ничего не понятно  smile 
PM MAIL   Вверх
vinter
Дата 8.1.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



+выложи его в Цнтре Помощи, тут могут помочь доработать, а не писать за тебя


--------------------
Мой блог
PM MAIL WWW   Вверх
LiToRBoL
Дата 8.1.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Определить подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10. Результат выполнения проверить на десятичных числах.
Задачу необходимо решить без использования строк.
PM MAIL   Вверх
mes
Дата 8.1.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Kallikanzarid @  8.1.2009,  19:50 Найти цитируемый пост)
А то пока ничего не понятно  smile  

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

Код


unsigned add_u (unsigned a, unsigned b, unsigned base)
// сложение столбиком безнаковых чисел в определенной системе счисления
{
     unsigned res = 0; // результат
     unsigned m = 0; // мысленное

     for (unsigned ps=1; a || b || m; ps*=10, a/=10, b/=10)
     {
        unsigned d = a%10 + b%10 + m;
        res += d%base * ps;
        m=d/base;
     }
     return res;
}
unsigned muld_u (unsigned a, unsigned digit, unsigned base)
// умножение столбиком безнаковoго числа на цифру в определенной системе счисления
{
       unsigned res = 0;
       unsigned m = 0;

       for (unsigned  ps=1; a || m; a/=10, ps*=10)
       {
          unsigned d = a%10 * digit +m;
          res += d % base * ps;
          m=d/base;
       }
     return res;
}

unsigned mul_u (unsigned a, unsigned b, unsigned base)
// умножение столбиком безнаковых чисел в определенной системе счисления
{
     unsigned res = 0;

     for (unsigned ps=1; b && a; b/=10, ps*=10)
     {
          res = add_u (res, muld_u (a, b%10, base)*ps, base);
     }

     return res;
}



--------------------
PM MAIL WWW   Вверх
LiToRBoL
Дата 9.1.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 6.1.2009

Репутация: нет
Всего: нет



Спасибо огромное, много есть чего не понятного. Буду разбераться.
Еще раз спасибо. 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.