Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Choco
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 13
#1

Подскажите, где ошибка - C++

18.12.2013, 07:42. Просмотров 203. Ответов 4
Метки нет (Все метки)

Представить большие числа в виде массивов и суммировать. Попытки.
#include "stdafx.h"
#include <iostream>
#include <cstring>

#define BASE 10 //система счисления
typedef int digit; //взят только для разрядов числа
typedef unsigned long int size_length; //тип для длинны числа

using namespace std;

struct long_value
{ //тип для длинных чисел
digit *values; //массив с цифрами числа записанными в обратном порядке
size_length length; //длинна числа
};

long_value sum(long_value&, long_value&);

void normalize(long_value l) {
/*Нормализация числа - приведение каждого разряда в соответствие с системой счисления.
*
*/
for (size_length i = 0; i < l.length - 1; ++i) {
if (l.values[i] >= BASE) { //если число больше максимального, то организовавается перенос
digit carryover = l.values[i] / BASE;
l.values[i + 1] += carryover;
l.values[i] -= carryover * BASE;
} else if (l.values[i] < 0) { //если меньше - заем
digit carryover = (l.values[i] + 1) / BASE - 1;
l.values[i + 1] += carryover;
l.values[i] -= carryover * BASE;
}
}
}


int main()
{
const int arrSize = 20;
int massiv[arrSize];
int a, b;
int sum;
sum = sum(a, b);
system("pause");
return 0;
}

long_value sum(long_value a, long_value b)
{
/* функция для суммирования двух длинных чисел. Если суммируются числа разной длинны
* то более длинное передется в качестве первого аргумента. Возвращает новое
* ненормализованное число.
*/
long_value s;
s.length = a.length + 1;
s.values = new digit[s.length];

s.values[a.length - 1] = a.values[a.length - 1];
s.values[a.length] = 0;
for (size_length i = 0; i < b.length; ++i)
s.values[i] = a.values[i] + b.values[i];
return s;
}
Часть кода есть в интернете
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 07:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите, где ошибка (C++):

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Подскажите где ошибка - C++
Напишите программу для преобразования футов в дюймы. Организуйте ввод числа футов и вывод на экран соответствующего числа дюймов....

подскажите где ошибка - C++
подскажите пожалуйста где ошибка, почему работает не как надо? Ввести файл F . Все нули в файле заменить единицами, а единицы ...

Подскажите где ошибка - C++
Листинг с книги с ошибкой. Подскажите пожалуйста. // stacktp.h - шаблон стека #ifndef STACKTP_H_ #define STACKTP_H_ template...

Подскажите где ошибка - C++
Трабл в том, что при вводе значений он выдаёт отрицательный ответ. Помогите пожалуйста. Задание: Найти радиус описанной окружности...

Подскажите где ошибка... - C++
Создать класс 2-D координат. Определить операторы &quot;+&quot; и &quot;-&quot; как дружественные функции, а операторы присваивания и сравнения как методы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Demy85
58 / 58 / 5
Регистрация: 28.05.2012
Сообщений: 220
Завершенные тесты: 1
18.12.2013, 09:19 #2
Choco, А какая именно ошибка тебя интересует? Их тут несколько:
1. Переменная sum не может использоваться в качестве функции. Переименуй переменную sum и/или функцию sum.
2. В функцию sum согласно описанию передается структура long_value, а ты передаешь переменные типа int.
3. В функции sum перед возвратом значения не производиться нормализация числа.
Пока это все что в глаза бросается.
Choco
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 13
18.12.2013, 09:38  [ТС] #3
Спасибо. Исправила:
1. Переименовала в summa
2. Передала переменные long_value
3. Нормализованная запись числа – это запись вида a = ± m * P^q ?
Demy85
58 / 58 / 5
Регистрация: 28.05.2012
Сообщений: 220
Завершенные тесты: 1
18.12.2013, 09:47 #4
Цитата Сообщение от Choco Посмотреть сообщение
Нормализованная запись числа – это запись вида a = ± m * P^q ?
Ой неправильно понял коммент в функции. Тут надо вызывать нормализацию не в самой функции о после неё (насколько я понял):
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
  const int arrSize = 20;
  int massiv[arrSize];
  int a, b;
  int sum;
  sum = summa(a, b);
  normalize(sum); /* Наверное подразумевалось вот так.*/
  system("pause");
  return 0;
}
Добавлено через 2 минуты
Хотя почему не вызвать нормализацию в самой функции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
long_value sum(long_value a, long_value b)
{
  /* функция для суммирования двух длинных чисел. Если суммируются числа разной длинны
   * то более длинное передется в качестве первого аргумента. Возвращает новое
   * нормализованное число.
  */
  long_value s;
  s.length = a.length + 1;
  s.values = new digit[s.length];
 
  s.values[a.length - 1] = a.values[a.length - 1];
  s.values[a.length] = 0;
  for (size_length i = 0; i < b.length; ++i)
    s.values[i] = a.values[i] + b.values[i];
  normalize(s); /* Например вот так. */
  return s;
}
Choco
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 13
18.12.2013, 22:54  [ТС] #5
Точно
Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 22:54
Привет! Вот еще темы с ответами:

Подскажите где ошибка - C++
#include &quot;stdafx.h&quot; #include &quot;EXEL.h&quot; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int tmain; int...

Подскажите где ошибка - C++
Ругаться на 15-ю строчку Ниже условие и код. Данный массив строк, состоящих из трех символов. Отсортировать строки по первой букве в...

Подскажите где ошибка - C++
Здравствуйте. Дали задание &quot;Дано пятизначное число. (Может быть например такое 00001). С помощью битовых операций запишите его в ячейку...

Подскажите где ошибка - C++
Вот условие По заданному числу n от 1 до 365 определите, на какое число какого месяца приходится день невисокосного года с номером n. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.12.2013, 22:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru