Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2016, 14:05   #1
panzer_killer
Новичок
Джуниор
 
Регистрация: 13.03.2016
Сообщений: 1
По умолчанию Помогите сделать класс-список.Код есть(без класса)

Здравствуйте. Можете помочь сделать класс-список из готового уже мною кода, где использован список(двусвязный). Задание: запихнуть в списки два числа произвольной длинны и сложить (как на бумаге в столбик)...типо длинная арифметика.
Цитата:
#include <iostream>
#include <cstdlib>
using namespace std;
struct item
{
int digit;
struct item *next;
struct item *prev;
};
using Item = item;

/* Структура, описывающая многоразрядное число */
struct mnumber
{
Item *head;
Item *tail;
int n;
};
using MNumber = mnumber;

MNumber CreateMNumber(char *initStr);
void AddDigit(MNumber *number, int digit);
void PrintMNumber(MNumber number);
MNumber SumMNumber(MNumber n1, MNumber n2);
int main()
{
char *num1 = new char[1000];
char *num2 = new char[1000];
cout << "Enter first string (numbers): ";
cin >> num1;
cout << "Enter second string (numbers): ";
cin >> num2;
MNumber a = CreateMNumber(num1);
MNumber b = CreateMNumber(num2);
MNumber c = SumMNumber(a, b);
PrintMNumber(a);
PrintMNumber(b);
cout<<"\nSumm\t";
PrintMNumber(c);
getchar();
delete[] num1;
delete[] num2;
system("pause");
return 0;
}

/* Создает многоразрядное число из цифр строки */
MNumber CreateMNumber(char initStr[])
{
MNumber number = { NULL, NULL, 0 };
int n;
for (n = strlen(initStr) - 1; n >= 0; n--)
{
AddDigit(&number, initStr[n] - '0');
}

return number;
}

/* Добавляет цифру в многоразрядное число */
void AddDigit(MNumber *number, int digit)
{
Item *p = (Item *)malloc(sizeof(Item));//Функция malloc выделяет блок памяти, размером sizemem байт, и возвращает указатель на начало блока.
//Содержание выделенного блока памяти не инициализируется, оно остается с неопределенными значениями.
p->digit = digit;
p->next = p->prev = NULL;

if (number->head == NULL)
{
number->head = number->tail = p;
}

else
{
number->tail->next = p;
p->prev = number->tail;
number->tail = p;
}
number->n++;
}

/* Возвращает сумму двух многоразрядных чисел */
MNumber SumMNumber(MNumber n1, MNumber n2)
{
MNumber sum = CreateMNumber("");
Item *p1 = n1.head, *p2 = n2.head;
int digit, pos = 0, s1, s2;

while (p1 || p2)
{
if (p1)
{
s1 = p1->digit;
p1 = p1->next;
}

else s1 = 0;

if (p2)
{
s2 = p2->digit;
p2 = p2->next;
}

else s2 = 0;

digit = (s1 + s2 + pos) % 10;
pos = (s1 + s2 + pos) / 10;
AddDigit(&sum, digit);
}

if (pos) AddDigit(&sum, pos);

return sum;
}
void PrintMNumber(MNumber number)
{
Item *p = number.tail, *temp = number.tail;

cout<<"\nNumber: ";

while (p)
{
if ((temp->digit == 0) && (p->prev != NULL))
{
temp = temp->prev;
p = p->prev;
}
else
{
cout<< p->digit;
p = p->prev;
}
}

free(p);
}
panzer_killer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите написать код класс список с++ Ариох Помощь студентам 2 11.09.2015 21:06
Определить класс список элементов. В определение класса включить два конструктора: для опре- деления списка по его размеру и путем vikav89 Общие вопросы C/C++ 1 11.09.2015 14:45
Класс "Книга", список объектов класса+ структура vinovachuk Помощь студентам 0 04.10.2014 17:41
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Как записать без вложения класса в класс? WIN32APIist Общие вопросы C/C++ 2 26.03.2011 13:37