3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
1

итератор

08.05.2011, 09:53. Показов 1419. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
скажите как в этой задачи перевести десятичное число в двоичное???
вот условие задачи!!!
итератор

вот код!!
main.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include "long.h"
 
using namespace std;
 
int main(int argc, char *argv[])
{ string c; //Êîìàíäà
    Long1 h1, h2;
    cin>>h1;
 
 cout<<h1<<h1.Transfer();
    system("PAUSE");
    return EXIT_SUCCESS;
}
long.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "long.h"
#include <iostream>
#include <math.h>
#include <cstdlib>
using namespace std;
istream& operator>>(istream& in, Long1& h1){ //Ââîä ñ êëàâèàòóðû
         string s1; //Ñòðîêà ââîäèìàÿ ñ êëàâèàòóðû
         int i;
      
             in>>s1;
         for(i=0; i<s1.size(); i++){ //Ïåðåíîñèì ñòðîêó â øåñòíàäöàòåðè÷íîå ÷èñëî
         
         }
         for(i=s1.size()-1; i>=0; i--){ //Îòïðàâëÿåì ìåíüøèå ýëèìåíòû â íà÷àëî ñïèñêà
           h1.n.push_back(s1[i]);}
           
         return in;
};
ostream& operator<<(ostream& out, const Long1& h1){ //Âûâîä íà ýêðàí
    Conclusion(h1); //Âûâîäèì ðàçðÿäû
    out<<endl;
    return out;
};
void Conclusion(Long1 h1){ //Âûâîä ðàçðÿäîâ
    int i;
    h1.it=h1.n.end(); //Óêàçàòåëü íà êîíåö ÷èñëà
    for(h1.it--, i=h1.n.size()-1; i>=0; h1.it--, i--) //Âûâîäèì â îáðàòíîì ïîðÿäêå
    cout<<*h1.it;
};
     
long Long1::Transfer(){ //Ïåðåâîä ÷èñëà èç øåñòíàäöàòåðè÷íîé ñèñòåìû ñ÷èñëåíèÿ â äåñÿòè÷íóþ
   
    it=n.begin();
    
  //if((*it%2)==0)
    
    return 
}
long.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef Long
#define Long 
#include <list>
#include <iostream> 
 
 
using namespace std;
class Long1{
      public:
      friend istream& operator>>(istream&, Long1&); //Ââîä ÷èñëà
      friend ostream& operator<<(ostream&, const Long1&); //Âûâîä ÷èñëà
      int Check();
      Long1 operator+(Long1&);
         long Transfer(); 
     private:
     friend void Conclusion(Long1); //Âñïîìîãàòåëüíàÿ ôóíêöèÿ äëÿ âûâîäà
     list<unsigned char> n; //Êëàññ äëÿ õðàíåíèÿ öèôð ÷èñëà
     list<unsigned char>::iterator it; //Èòåðàòîð
      
      };
 
 
#endif
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2011, 09:53
Ответы с готовыми решениями:

Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка
не могу понять что должно быть результатом. может подскажете примеры? пожалуйста. Задание:...

Итератор
Добрый день. Я начинающий. Есть проект пытаюсь сделать построение-отладку выдает ошибку типа: ...

Итератор
#include &lt;iostream&gt; #include &lt;list&gt; using namespace std; list&lt;int&gt;::iterator pos (list&lt;int&gt;...

Итератор
Вот задача: Реализовать шаблон упорядоченного массива как двусвязного списка. Операцию доступа по...

17
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:04 2
В задача требуется создать класс с массивом из char. У тебя это список из char. Единственная функция, которая присваивает значение в твой список - это функция ввода. Ну и вводи цифры как символы.
И попутный вопрос: почему сложение у тебя определено так
C++
1
Long1 operator+(Long1&);
Ссылка-то зачем? Ты меняешь правый аргумент?
Обычно похожую сигнатуру имеют функции с присваиванием:
C++
1
Long1& operator+=(const Long1& r);
А обычная функция сложения чаще реализуется так:
C++
1
friend Long1 operator+(const Long1 &L, const Long1 &R);
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:11  [ТС] 3
ну сложение нас так учили перегружать , но для сложения мне сначало нужно перевести число из 10-ной системы в 2-ную....... пробовал так _itoa(t, f, 2), где t-число, f-строка (типа char), 2- система счисления.. но у меня не возвращает это значение....
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:29 4
1. Хреново вас учили! Читай мои книжки: Экспересс-курс и Объектно-ориентированное программирование. Кстати, задачка - из моего сборника...
2. Не надо ничего переводить... Если б ты конструктор написал:
C++
1
Long1(int t);
Вот там надо инт в цифры разложить.
А в функции ввода ВВОДИШЬ СИМВОЛ_ЦИФРУ и кладешь в список.
Ну, можно класть не символ, а непосредственно цифру:
C++
1
d = ch - '0'; n.push_back(d);
B сложение делаешь в цикле посредством итератора, складывая поэлементно, и учитывая перенос в следующую цифру.
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:35  [ТС] 5
конструктор вы имеете в виду
C++
1
2
3
Long1();
Long1(int );
Long1(const int);
по поводу "Хреново вас учили"- отчасти я согласен, потому что матерьяла ноль , даже нет никаких пособий...... приходится все научным тыком изучать!!!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:41 6
По конструкторам - да.
А насчет нет материала - это ты не прав! Материала -ДОФИГА! Две своих книжки я тебе назвал. Но есть еще БОЛЬШАЯ КУЧА книжек, и очень ХОРОШИХ!
Просто в программировании самому думать надо. Примеров на все случаи жизни не бывает. По аналогии надо делать и изменять по своей потребности.
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:48  [ТС] 7
да да да я с вами полностью согласен по поводу книг, стараюсь учить, вашу книгу тоже скачал, читаю когда свободное вреся есть!!! в вашем задачнике нашел небольшую ошибку, есть задача с классом FAzzyNumber , там опечатка FUzzyNumber=) ПО ПОВАДУ РЕАЛИЗАЦИИ!!
C++
1
2
3
4
5
6
7
8
9
Long1::Long1(){
              t=0;
 };
 Long1::Long1(int t1){
                  t=t1;
 };
 Long1::Long1(const Long1 &u1){
 t=u1.t;                   
 };
но я так и непонял для чего это???
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2011, 10:53 8
А при чём тут "Итератор!!!"?
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:54  [ТС] 9
НАДО НАПИСАТЬ ПРОГРАММУ ИСПОЛЬЗУЯ ИТЕРАТОР!!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:55 10
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
да да да я с вами полностью согласен по поводу книг, стараюсь учить, вашу книгу тоже скачал, читаю когда свободное вреся есть!!! в вашем задачнике нашел небольшую ошибку, есть задача с классом FAzzyNumber , там опечатка FUzzyNumber=) ПО ПОВАДУ РЕАЛИЗАЦИИ!!
C++
1
2
3
4
5
6
7
8
9
Long1::Long1(){
              t=0;
 };
 Long1::Long1(int t1){
                  t=t1;
 };
 Long1::Long1(const Long1 &u1){
 t=u1.t;                   
 };
но я так и непонял для чего это???
1. По-первых, в твоем классе нет поля t.
2. Во-вторых, конструкторы для того, чтобы при объявлении можно было инициализировать объекты
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:56  [ТС] 11
в смысле нет поля t???
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 11:00 12
Да. В твоем классе поле t отсутствует.
вот тебе пример - переделаешь для себя

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class LongLong
{   public:
    // Конструкторы
    LongLong(const string &s);          // инициализация строкой
    LongLong(const long &number=0);
// операции c с присваиванием
    LongLong& operator+=(const LongLong &r);
    LongLong& operator-=(const LongLong &r);
    LongLong& operator*=(const LongLong &r);
    LongLong& operator/=(const LongLong &r);
    LongLong& operator%=(const LongLong &r);
// операции без присваивания
    friend LongLong operator+(const LongLong &l, const LongLong &r);
    friend LongLong operator-(const LongLong &l, const LongLong &r);
    friend LongLong operator*(const LongLong &l, const LongLong &r);
    friend LongLong operator/(const LongLong &l, const LongLong &r);
    friend LongLong operator%(const LongLong &l, const LongLong &r);
// ввод – вывод
    friend istream& operator>>(istream &is, LongLong &r);
    friend ostream& operator<<(ostream &os, const LongLong &r);
private:
    vector<char> v;
};
Помимо приведенных дружественных операций можно добавить еще операции длинных чисел с целыми, например
C++
1
2
friend LongLong operator+(const LongLong &l, const long &r);
friend LongLong operator+(const long &l, const LongLong &r);
Само число находится в поле-контейнере. Каждая цифра — это один элемент вектора, младшая цифра расположена в контейнере по младшему индексу. Например, число 765 будет расположено так: v[0]=5,v[1]=6,v[2]=7.
Конструкторов всего два: конструктор копирования создается автоматически, а конструктор без аргументов нам просто не нужен, так как в конструкторе инициализации задан аргумент по умолчанию. Реализацию покажем на примере конструктора с аргументом-целым (листинг 11.18).
C++
1
2
3
4
5
6
7
8
9
10
Листинг 11.18. Конструктор инициализации длинного целого
LongLong::LongLong(const long &number)
{  long t = number, i = 0; 
   char digit;
   while(t>0)
   { digit = t % 10;
     v.push_back(digit);
     t/=10; i++;
   }
}
Операции с длинными числами, естественно, выполняются поэлементно. Покажем реализацию самого простого метода — сложения с присваиванием (листинг 11.19).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Листинг 11.19. Метод сложения с присваиванием
LongLong& LongLong::operator+=(const LongLong &r)
{ typedef vector<char>::size_type sizeT;
  sizeT size = (v.size()>r.v.size())?v.size():r.v.size();   // большая длина
  unsigned carry = 0, sumDigit;             // перенос и цифра суммы
  LongLong Summa;                           // результат-сумма
  for(sizeT i = 0; i < size; i++)
  { sumDigit = digit(i) + r.digit(i) + carry;
    carry = sumDigit/10;                    // вычисляем новый перенос
    Summa.v.push_back(sumDigit%10);         // добавляем цифру в сумму
  }
  if (carry) Summa.v.push_back(carry);      // добавляем последний перенос
  v = Summa.v;
  return *this;
}
Нам потребовалась вспомогательная функция digit(), которая выдает очередную цифру длинного целого. Функция очень проста и ее реализацию можно прописать непосредственно в приватной части класса:
C++
1
2
char digit(unsigned i) const
{ if(i<v.size()) return v[i]; else return 0; }
Ну, и наконец, реализация функции вывода тоже тривиальна:
C++
1
2
3
4
5
ostream& operator<<(ostream &os, const LongLong &r)
{ for(int i = 0; i < r.v.size(); i++)
  os << int(r.v[r.v.size()-i-1]);       // вывод в обратном порядке
  return os;
}
Единственный нюанс — это вывод цифр числа (элементов вектора) в обратном порядке, поскольку число в векторе «лежит» от младшей цифры к старшей, а читаем мы числа от старшей цифры к младшей.
Реализацию остальных методов оставляем читателю. Используйте для реализации дружественных функций уже реализованные операции с присваиванием, например
C++
1
2
LongLong operator+(const LongLong &l, const LongLong &r)
{ LongLong tmp = l; tmp+=r; return tmp; }
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 11:04  [ТС] 13
спасибо!!! постараюсь её все написать задачу!!!
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.05.2011, 11:13 14
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А обычная функция сложения чаще реализуется так:
C++
1
friend Long1 operator+(const Long1 &L, const Long1 &R);
Вы знаете, вот тут я с вами не согласен. Да, я и сам, например, так пишу, мне удобнее работать с двумя операндами явно, а не с одним явным и одним скрытым, но есть мнение, что дружественность надо использовать только там, где это существенно упрощает задачу, и здесь вполне можно перегрузить сложение как метод.
Это я всё к тому, что говорить, что делают обычно вот так, а так не делают - неверно, очень многие перегружают все операторы, какие возможно, как методы, а не глобально.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2011, 11:40 15
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
НАДО НАПИСАТЬ ПРОГРАММУ ИСПОЛЬЗУЯ ИТЕРАТОР
Ещё раз перечитал задание. Где это там написано?
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 11:41  [ТС] 16
в задании не написано,это все препод придумал
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.05.2011, 11:50 17
2008kedr2008, что значит "используя итератор"? Нужно представить данные в каком-нибудь стандартном контейнере и итерировать их стандартным итератором этого контейнера, или же написать собственный итератор для собственного представления данных?
В общем, пока вы чётко и ясно не сформулируете задание - вас так и будут швырять из вопроса в вопрос.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 13:15 18
Цитата Сообщение от silent_1991 Посмотреть сообщение
Вы знаете, вот тут я с вами не согласен. Да, я и сам, например, так пишу, мне удобнее работать с двумя операндами явно, а не с одним явным и одним скрытым, но есть мнение, что дружественность надо использовать только там, где это существенно упрощает задачу, и здесь вполне можно перегрузить сложение как метод.
Это я всё к тому, что говорить, что делают обычно вот так, а так не делают - неверно, очень многие перегружают все операторы, какие возможно, как методы, а не глобально.
В данном случае важно, что это "функция сложения". Если мы реализуем метод, то левым аргументом может быть ТОЛЬКО ОБЪЕКТ РЕАЛИЗУЕМОГО КЛАССА. А если делаем дружественную функцию, то можно ее перегрузить, например, для вешественного или целого ЛЕВОГО аргумента. И получим нормальную коммутативную операцию сложения. Метод не позволяет реализовать коммутативность.
0
08.05.2011, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2011, 13:15
Помогаю со студенческими работами здесь

итератор
Привет всем! подскажите пожалуйста литературу где подробно описана реализация итераторов ...

Итератор С++
помогите пожалуйста написать итератор, накапливающий сумму пройденных элементов!!!

Итератор ?
Как выглядит итератор на вложеный контейнер? Например осуществить доступ к 1-му символу 3-го...

итератор
Привет. Не получается создать итератор. std::vector&lt;std::list&lt;size_t&gt; &gt; adjacentList; если...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru