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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Dr.Demion
0 / 0 / 0
Регистрация: 09.07.2009
Сообщений: 5
#1

Полиморфизм - C++

09.07.2009, 22:11. Просмотров 2125. Ответов 14
Метки нет (Все метки)

Имеется такая задача

Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого цифра.
Помогите пожалуйста разобраться что значит Число представляется массивом, каждый элемент которого цифра. и порядок реализации виртуальных арифметических операций.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2009, 22:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Полиморфизм (C++):

С++ и полиморфизм - C++
Здравствуйте. Ответьте пожалуйста на несколько вопросов: 1. Что такое абстрактная функция простыми словами? 2. Что такое...

полиморфизм - C++
Всем привет, изучаю С++ недавно, я новичек в этом языке программирования, читаю про ООП, понял все за исключением полиморфизма, что делает...

полиморфизм=( - C++
Ув.Знатаки Доброго времени суток!Вот есть проблемка с написание полиморфизма,вот написал класс,написал наследование,а вот как теперь сюда...

Полиморфизм в с++ - C++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем дали задание реализовать полиморфзим для функции Scale для...

Полиморфизм - C++
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое полиморфизм. Можно ли как-то просто и...

Полиморфизм - C++
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с местоположением . Определить наследуемые классы -...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
<Norton>
Отдыхающий:)
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
09.07.2009, 22:27 #2
1)
число 123 =
mas[1] = 1;
mas[2] = 2;
mas[3] = 3;
0
Dr.Demion
0 / 0 / 0
Регистрация: 09.07.2009
Сообщений: 5
09.07.2009, 22:32  [ТС] #3
тогда как будет выглядеть процесс сложения двух чисел
0
<Norton>
Отдыхающий:)
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
09.07.2009, 22:45 #4
вот прога для конвертирования числа в масив
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
#include <iostream>
#include <conio>
using namespace std;
int main()
{
    int n,k=0,a=0,b,tk;
    int mas[5];
        cout<<"Number = ";
    cin>>n;
        b=n;
        k=0;
    while(b>0)
        {
        b=b/10;
                k++;
        }
        b=n;
        tk=k;
        while(b>0)
        {
                a=b % 10;
                b=b / 10;
                mas[--tk] = a;
        }
    for(int i=0;i<k;i++)
        cout<<mas[i];
    getch();
    return 0;
}
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
09.07.2009, 22:50 #5
Цитата Сообщение от Dr.Demion Посмотреть сообщение
огда как будет выглядеть процесс сложения двух чисел
В столбик.. (математика вроде начальных классов.)
0
Dr.Demion
0 / 0 / 0
Регистрация: 09.07.2009
Сообщений: 5
09.07.2009, 23:00  [ТС] #6
Умножение и деление двоичных чисел?
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
09.07.2009, 23:07 #7
Цитата Сообщение от Dr.Demion Посмотреть сообщение
Умножение и деление двоичных чисел?
http://www.swarthmore.edu/NatSci/ech...inaryMath.html
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
09.07.2009, 23:13 #8
<Norton>, помоему так будет немного быстрее, числа в массиве в обратном порядке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
 
using namespace std;
void main()
{
    int mas[10] = {0};
    int number, i(0);
    cout << "Input number: ";
    cin >> number;
    while (number>0)
    {
        mas[i] = number%10;
        number = number/10;
        i++;
    }
    for(int j=9;j>=0;--j)
        if(mas[j])
            cout<<mas[j]<<" ";
    cin.get();
    cin.get();
}
0
Dr.Demion
0 / 0 / 0
Регистрация: 09.07.2009
Сообщений: 5
10.07.2009, 00:06  [ТС] #9
Спасибо. Как что нибудь получится отпишусь...
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
10.07.2009, 00:09 #10
Вот вывод на экран в двоичном виде
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include <iostream>
 
using namespace std;
void Bin(int ch)
{
    int i, ch2,n(8), s[8];
    ch2 = ch;
    for (i = 0; i < n; i++)
        s[i] = 0;
    for (i = 0; ch != 0; i++) 
    {
        s[i] = abs(ch) % 2;
        ch = abs(ch) / 2;
    }
    for (i = 0; i < n-1; i++)
    {
        if (s[i] != 1) 
            s[i] = 0;
        else 
        {
            s[i] = 1;
            break;
        }
    }
    if (ch2 < 0) 
    {
        for (i = n-1 ; i >= 0; i--)
            if (s[i] == 1)
                s[i] = 0;
            else
                s[i] = 1;
        
        for (i = 0; i < n-1; i++)
        {
            if (s[i] == 1) 
                s[i] = 0;
            else 
            {
                s[i] = 1;
                break;
            }
        }
    }
    for (i = n -1; i >= 0; i--)
        cout << s[i];
}
 
void main()
{
    int mas[10] = {0};
    int number, i(0);
    cout << "Input number: ";
    cin >> number;
    Bin(number);
    cin.get();
    cin.get();
}
0
<Norton>
Отдыхающий:)
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 10:05 #11
M128K145, сначала сделал также как и вы, но потом переделал, чтоб не путаться с порядком чисел

Добавлено через 53 секунды
Вот для сложения:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio>
using namespace std;
int main()
{
    int a1[5],a2[5],sum[5];
    a1[0]=9;a1[1]=9;a1[2]=9;
    a2[0]=1;a2[1]=1;a2[2]=1;
        for(int i=0;i<5;i++)
        sum[i]=0;
    for(int i=3;i>0;i--)
    {
        sum[i]+=(a1[i-1]+a2[i-1])%10;
        sum[i-1]=(a1[i-1]+a2[i-1])/10;
    }
    for(int i=0;i<4;i++)
        cout<<sum[i];
    getch();
    return 0;
}
Добавлено через 36 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio>
using namespace std;
int main()
{
    int a1[5],a2[5],sum[5];
    a1[0]=9;a1[1]=9;a1[2]=9;
    a2[0]=1;a2[1]=1;a2[2]=1;
        for(int i=0;i<5;i++)
        sum[i]=0;
    for(int i=3;i>0;i--)
    {
        sum[i]+=(a1[i-1]+a2[i-1])%10;
        sum[i-1]=(a1[i-1]+a2[i-1])/10;
    }
    for(int i=0;i<4;i++)
        cout<<sum[i];
    getch();
    return 0;
}
0
YurA_280784
Заблокирован
10.07.2009, 10:49 #12
Вот программа которая переводит целое в массив значений, то что написано выше работает лишь для конкретно заданного числа, если необходим новый ввод то исправлять нужно тело проги, а не вводить!!!Вот так думаю правильней
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
#include <windows.h>
#include <stdio.h>
#include <math.h>
 
int *mass = (int *)malloc(sizeof(int));
 
void main()
{
    printf("\tProgramma predstavlyaushaya chislo massivom\r\n");
    printf("Vvedite chisto \t ");
    int num;scanf("%d",&num);
    int razryad = 0,i = num;
    while(1 < (i = i/10))
        razryad++;
    if(0 < razryad)
    {
        mass = (int *)realloc((void *)mass,(razryad + 1)*sizeof(int));
        for(i = razryad + 1; -1 < i; i--)
        {
            mass[i] = num/pow(10,i);
            num = num - mass[i]*pow(10,i);
            printf("%d\r\n",mass[i]);
        }
    }
    else
        printf("Neverni vvod\r\n");
    printf("\r\n1 - vvesti novoe chislo\r\n");
    scanf("%d",&num);
    if(num == 1)
        main();
}
0
Миниатюры
Полиморфизм  
<Norton>
Отдыхающий:)
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
10.07.2009, 19:28 #13
Вот пограмма, которая запршивает 2 числа, конвертирует их в масивы и складывает
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
39
40
41
#include <iostream>
#include <conio>
using namespace std;
int* i2a(int n,int &k);
int main()
{
    int *a1,*a2,sum[5];
        int n1,n2,k1,k2;
        cout<<"n1 = ";
        cin>>n1;
        cout<<"n2 = ";
        cin>>n2;
        a1 = i2a(n1,k1);
        a2 = i2a(n2,k2);
        n1=k1>k2 ? k1 : k2;
        for(int i=0;i<5;i++)
        sum[i]=0;
    for(int i=0;i<n1+1;i++)
    {
        sum[i]+=(a1[i]+a2[i])%10;
        sum[i+1]=(a1[i]+a2[i])/10;
    }
    for(int i=n1-1;i>=0;i--)
        cout<<sum[i];
    getch();
    return 0;
}
int* i2a(int n,int &k)
{
        int a=0,b;
    int *mas=new int;
        k=0;
        b=n;
        while(b>0)
        {
                a=b % 10;
                b=b / 10;
                mas[k++] = a;
        }
        return mas;
}
0
<Norton>
Отдыхающий:)
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
11.07.2009, 21:59 #14
Вот перемножение 2-ух чисел:
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
#include <iostream>
#include <conio>
using namespace std;
int main()
{
        int a1[5],a2[5];
        long int pr[10];
        int i,j,k=1;
        a1[0]=1;a1[1]=5;
        a2[0]=1;a2[1]=5;
        //Обнуляем масив произведения
        for(i=0;i<10;i++)
        pr[i]=0;
        //Перемножение
        for(i=1;i>=0;i--)
        {
                for(j=1;j>=0;j--)
                {
                pr[j+k]+=(a1[i]*a2[j])%10;
                pr[j+k-1]+=(a1[i]*a2[j])/10;
                }
                k--;
                cout<<pr[0]<<pr[1]<<pr[2]<<endl;
        }
         for(i=0;i<3;i++)
        cout<<pr[i];
        cout<<"\npr[1] = "<<pr[1];
    getch();
    return 0;
}
Добавлено через 19 минут 46 секунд
Извините, не то скинул
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <conio>
using namespace std;
int* i2a(int n,int &k);
int kol(int n);
int main()
{
        int *a1,*a2,pr[10];
        int i,j,k1,k2,n1,n2;
        cout<<" num1 = ";
        cin>>n1;
        cout<<" num2 = ";
        cin>>n2;
        a1=i2a(n1,k1);
        a2=i2a(n2,k2);
        //Обнуляем масив произведения
        for(i=0;i<10;i++)
        pr[i]=0;
        //Перемножение
        for(i=k1-1;i>=0;i--)
                for(j=k2-1;j>=0;j--)
                {
                pr[j+i]+=(a1[i]*a2[j])%10;
                pr[j+i-1]+=(a1[i]*a2[j])/10;
                pr[j+i-1]+=(pr[j+i])/10;
                pr[j+i]%=10;
                }
         for(i=0;i<kol(n1*n2);i++)
        cout<<pr[i];
    getch();
    return 0;
}
int kol(int n)
{
        int b=n,k=0;
        while(b>0)
        {
                b/=10;
                k++;
        }
        return k;
}
int* i2a(int n,int &k)
{
        int a=0,b,tk;
    int *mas=new int;
        k=kol(n);
        b=n;
        tk=k;
        while(b>0)
        {
                a=b % 10;
                b=b / 10;
                mas[--tk] = a;
        }
        return mas;
}
Не всегда нормально РАБОТАЕТ!
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
11.07.2009, 22:55 #15
Цитата Сообщение от Dr.Demion Посмотреть сообщение
Создать абстрактный базовый класс Integer (целое) с виртуальными арифметическими операциями и функцией вывода на экран. Определить производные классы Decimal (десятичное) и Binary (двоичное), реализующие собственные арифметические операции и функцию вывода на экран. Число представляется массивом, каждый элемент которого цифра.
примерно так будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Integer.h
#ifndef INTEGER_H
#define INTEGER_H
 
class Integer {
public:    
  virtual ~Integer() { }
 
  virtual void print() = 0;  
};
 
#endif // INTEGER_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
24
// Binary.h
#ifndef BINARY_H
#define BINARY_H
 
#include "Integer.h"
#include <string>
#include <vector>
 
class Binary : public Integer {
public:
  Binary(int number); // create binary from int
  Binary(const std::string &str); // create binary from string
 
  virtual void print();
 
  friend Binary operator+(const Binary&, const Binary&);
  friend Binary operator*(const Binary&, const Binary&);
  friend Binary operator/(const Binary&, const Binary&);
 
private:
  std::vector<int> binary_number;
};
 
#endif // BINARY_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Decimal.h
#ifndef DECIMAL_H
#define DECIMAL_H
 
#include "Integer.h"
#include <vector>
 
class Decimal : public Integer {
public:
  Decimal(int number);
 
  virtual void print();
 
  friend Decimal operator+(const Decimal&, const Decimal&);
  friend Decimal operator*(const Decimal&, const Decimal&);
  friend Decimal operator/(const Decimal&, const Decimal&);
 
private:
  std::vector<int> decimal_number;
};
 
#endif // DECIMAL_H
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2009, 22:55
Привет! Вот еще темы с ответами:

Полиморфизм c++ - C++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты производного класса, отсортировать их и сложить...

Полиморфизм - C++
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как и для чего он нужен

Полиморфизм - C++
Я хотел реализовать множество, используя множественное наследование, но когда написал template &lt;class T&gt; class set { protected: ...

Полиморфизм - C++
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом динамично их создавать ,то можно вызывать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.07.2009, 22:55
Ответ Создать тему
Опции темы

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