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

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

Восстановить пароль Регистрация
 
Choco
 Аватар для Choco
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 13
18.12.2013, 07:42     Подскажите, где ошибка #1
Представить большие числа в виде массивов и суммировать. Попытки.
#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++
Подскажите где ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Demy85
58 / 58 / 5
Регистрация: 28.05.2012
Сообщений: 210
Завершенные тесты: 1
18.12.2013, 09:19     Подскажите, где ошибка #2
Choco, А какая именно ошибка тебя интересует? Их тут несколько:
1. Переменная sum не может использоваться в качестве функции. Переименуй переменную sum и/или функцию sum.
2. В функцию sum согласно описанию передается структура long_value, а ты передаешь переменные типа int.
3. В функции sum перед возвратом значения не производиться нормализация числа.
Пока это все что в глаза бросается.
Choco
 Аватар для 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
Сообщений: 210
Завершенные тесты: 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
 Аватар для Choco
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 13
18.12.2013, 22:54  [ТС]     Подскажите, где ошибка #5
Точно
Спасибо
Yandex
Объявления
18.12.2013, 22:54     Подскажите, где ошибка
Ответ Создать тему
Опции темы

Текущее время: 10:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru