С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165

итератор

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

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

вот код!!
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2011, 09:53
Ответы с готовыми решениями:

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

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

Итератор
#include &lt;iostream&gt; #include &lt;list&gt; using namespace std; list&lt;int&gt;::iterator pos (list&lt;int&gt; a,list&lt;int&gt;::iterator it) { for (it;...

17
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:04
В задача требуется создать класс с массивом из 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  [ТС]
ну сложение нас так учили перегружать , но для сложения мне сначало нужно перевести число из 10-ной системы в 2-ную....... пробовал так _itoa(t, f, 2), где t-число, f-строка (типа char), 2- система счисления.. но у меня не возвращает это значение....
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:29
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  [ТС]
конструктор вы имеете в виду
C++
1
2
3
Long1();
Long1(int );
Long1(const int);
по поводу "Хреново вас учили"- отчасти я согласен, потому что матерьяла ноль , даже нет никаких пособий...... приходится все научным тыком изучать!!!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:41
По конструкторам - да.
А насчет нет материала - это ты не прав! Материала -ДОФИГА! Две своих книжки я тебе назвал. Но есть еще БОЛЬШАЯ КУЧА книжек, и очень ХОРОШИХ!
Просто в программировании самому думать надо. Примеров на все случаи жизни не бывает. По аналогии надо делать и изменять по своей потребности.
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:48  [ТС]
да да да я с вами полностью согласен по поводу книг, стараюсь учить, вашу книгу тоже скачал, читаю когда свободное вреся есть!!! в вашем задачнике нашел небольшую ошибку, есть задача с классом 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
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2011, 10:53
А при чём тут "Итератор!!!"?
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 10:54  [ТС]
НАДО НАПИСАТЬ ПРОГРАММУ ИСПОЛЬЗУЯ ИТЕРАТОР!!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 10:55
Цитата Сообщение от 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  [ТС]
в смысле нет поля t???
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 11:00
Да. В твоем классе поле 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  [ТС]
спасибо!!! постараюсь её все написать задачу!!!
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.05.2011, 11:13
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
А обычная функция сложения чаще реализуется так:
C++
1
friend Long1 operator+(const Long1 &L, const Long1 &R);
Вы знаете, вот тут я с вами не согласен. Да, я и сам, например, так пишу, мне удобнее работать с двумя операндами явно, а не с одним явным и одним скрытым, но есть мнение, что дружественность надо использовать только там, где это существенно упрощает задачу, и здесь вполне можно перегрузить сложение как метод.
Это я всё к тому, что говорить, что делают обычно вот так, а так не делают - неверно, очень многие перегружают все операторы, какие возможно, как методы, а не глобально.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.05.2011, 11:40
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
НАДО НАПИСАТЬ ПРОГРАММУ ИСПОЛЬЗУЯ ИТЕРАТОР
Ещё раз перечитал задание. Где это там написано?
0
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
08.05.2011, 11:41  [ТС]
в задании не написано,это все препод придумал
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.05.2011, 11:50
2008kedr2008, что значит "используя итератор"? Нужно представить данные в каком-нибудь стандартном контейнере и итерировать их стандартным итератором этого контейнера, или же написать собственный итератор для собственного представления данных?
В общем, пока вы чётко и ясно не сформулируете задание - вас так и будут швырять из вопроса в вопрос.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
08.05.2011, 13:15
Цитата Сообщение от silent_1991 Посмотреть сообщение
Вы знаете, вот тут я с вами не согласен. Да, я и сам, например, так пишу, мне удобнее работать с двумя операндами явно, а не с одним явным и одним скрытым, но есть мнение, что дружественность надо использовать только там, где это существенно упрощает задачу, и здесь вполне можно перегрузить сложение как метод.
Это я всё к тому, что говорить, что делают обычно вот так, а так не делают - неверно, очень многие перегружают все операторы, какие возможно, как методы, а не глобально.
В данном случае важно, что это "функция сложения". Если мы реализуем метод, то левым аргументом может быть ТОЛЬКО ОБЪЕКТ РЕАЛИЗУЕМОГО КЛАССА. А если делаем дружественную функцию, то можно ее перегрузить, например, для вешественного или целого ЛЕВОГО аргумента. И получим нормальную коммутативную операцию сложения. Метод не позволяет реализовать коммутативность.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2011, 13:15
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru