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

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

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

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

18.12.2013, 07:42. Просмотров 199. Ответов 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++
Листинг с книги с ошибкой. Подскажите пожалуйста. // stacktp.h - шаблон стека #ifndef STACKTP_H_ #define STACKTP_H_ template...

Подскажите, где ошибка - C++
Не могу понять, почему не комплируется. Программирую первый день) #include &lt;iostream&gt; #include &lt;istream&gt; #include &lt;ostream&gt; using...

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

Подскажите где ошибка? - C++
Добрый день! Только только начинаю изучать с++. Подскажите где ошибка? Если переписать код так, чтобы вместо string была инт,...

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

Подскажите, где ошибка? - C++
Задача такая: В одномерном массиве, вводимом с клавиатуры, вычислить 1) кол-во отрицательных элементов массива 2)сумму модулей...

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

Подскажите где ошибка - C++
Выдаёт ошибку при компиляции #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; class Toy { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Demy85
58 / 58 / 5
Регистрация: 28.05.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 211
Завершенные тесты: 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
Точно
Спасибо
Yandex
Объявления
18.12.2013, 22:54     Подскажите, где ошибка
Ответ Создать тему
Опции темы

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