Zadanie - klasa reprezentująca liczbę

Odpowiedz Nowy wątek
2017-02-16 11:03
0

Cześć :)

Mam do zrobienia zadanie w C++, od razu mówię, że raczej średnio się w nim orientuję. Bardzo proszę o waszą pomoc.

Zadanie:
Zdefiniuj klasę Liczba, która przechowuje w tablicy cyfry liczby dziesiętnej. Zdefiniuj operacje
wypisywania liczby, nadawania jej wartości (w postaci parametru konstruktora będącego napisem)
oraz mnożenia przez liczbę typu int. W przypadku gdy w czasie mnożenia okaże się, że tablica jest
za mała, procedura mnożąca powinna kopiować jej zawartość do większej. Zdefiniuj wreszcie
metodę silnia, która policzy silnię zadanej jako parametr liczby typu int.

#include <iostream>
#include <sstream>
 
using namespace std;
 
class liczba{
 
    private:
        int tab[];
        int t;
    public:
        liczba(string s);
        void wypisz();
        void mnozenie(int i);
        int silnia();
 
};
 
liczba::liczba(string s){
 
    for(int i=0;i<s.length();i++){
 
        t=s.length();
 
        if((s[i]==0)||(s[i]==1)||(s[i]==2)||(s[i]==3)||(s[i]==4)||(s[i]==5)||(s[i]==6)||(s[i]==7)||(s[i]==8)||(s[i]==9))
        {
            tab[i]=(int)s[i];
        }
 
    }
 
}
 
void liczba::mnozenie(int z){
 
    int d=1;
    int l;
    for(int i =0;i<t;i++)
    {
        d*10;
    }
    for(int i =0;i<t;i++)
    {
        l=d*tab[i];
    }   
    l*=z;
    ostringstream ss;
    ss << l;
    string s = ss.str();
    for(int i=0;i<s.length();i++)
    {
 
            tab[i]=(int)s[i];
 
    }
}
int liczba::silnia()
{
    int d=1;
    int l;
    for(int i =0;i<t;i++)
    {
        d*10;
    }
    for(int i =0;i<t;i++)
    {
        l=d*tab[i];
    }
    return l;
}
void liczba::wypisz(){
    for(int i =0;i<t;i++)
    {
        cout<<tab[i];
    }
}
 
int main()
{
    string s="123245";
    int i=2;
 
    liczba *l1 = new liczba(s);
    l1->wypisz();
    i=l1->silnia();
    cout<<"\n"<<i;  
 
}
 
edytowany 4x, ostatnio: kq, 2017-02-16 11:14

Pozostało 580 znaków

2017-02-17 17:51
0

Dobrze przełożone?

#include <iostream>
#include <string>

using namespace std;

class Liczba{

    private:
    int *tab;
    int n;

    public:
    Liczba ();
    ~Liczba();
    string liczba;
    void wypisz(int *tab, int n);   

};

Liczba::Liczba(){

    tab = new int[n]; 

     for (int i=0; i<liczba.length(); i++) {
        tab[i] = liczba[i] - '0';
    }

    cout<<"Podaj liczbe: ";
    cin>>liczba;

    n=liczba.length();

}

Liczba::~Liczba(){

    delete[] tab;

}

void Liczba::wypisz(int tab[], int n){

    for(int i=0; i<n; i++){

        cout<<tab[i];

    }

    cout << endl;

}

int main()
{

      Liczba w;

//co tu umieścić by wypisało się

}

Pozostało 580 znaków

2017-02-17 17:53
0

Źle.

I mam nadzieję, że sam wpadniesz na to, dlaczego źle i co trzeba zrobić, by było dobrze. Podpowiedź: Powtórz notatki / skrypt / podręcznik / cokolwiek na temat klas.

Pozostało 580 znaków

2017-02-17 17:54
0

PS. Wychodzę na jakąś godzinę / półtorej. Będziesz musiał sam sobie radzić przez ten czas.

Pozostało 580 znaków

2017-02-17 18:26
0

W skryptach, które mam znalazłem tylko przeciążenie << które nie wiem czy nawet prawidłowo działa. Nie mam żadnego podobnego zadania do tego i w dalszym ciągu jestem w szarej d...

#include <iostream>
#include <cstring>

using namespace std;

class Liczba{

    private:
    int *tab;
    int n;
    int lc;

    public:
    Liczba ();
    ~Liczba();
    string liczba;
    void wypisz(int *tab, int n);   
    void tablica(int n){

        tab = new int[n]; 

    }

    Liczba operator+(Liczba&);  
    friend ostream& operator<<(ostream&,Liczba&);

};

Liczba::Liczba(){

     for (int i=0; i<liczba.length(); i++) {
        tab[i] = liczba[i] - '0';
    }

    cout<<"Podaj liczbe: ";
    cin>>liczba;

    n=liczba.length();

}

Liczba::~Liczba(){

    delete[] tab;

}

void Liczba::wypisz(int tab[], int n){

    for(int i=0; i<n; i++){

        cout<<tab[i];

    }

    cout << endl;

}

int main()
{

    Liczba x;

    cout<<x;

}

Liczba Liczba::operator+(Liczba&x){

    Liczba w;
    int i=0, p=0, d;
    while(i<lc||i<x.lc){
        d=x.tab[100-1-i]+tab[100-1-i]+p;
        w.tab[100-1-i]=d%10;
        p=d/10;
        i++;    
    }
    w.lc=i;
    return w;   
}

ostream& operator<<(ostream&out, Liczba&x){

    if(x.lc){
        for(int i=0; i<x.lc; i++){
            out<<(int)x.tab[100-x.lc+i];    
        }   
    }
    else{
        out<<0; 
    }
    return out;         
}

Pozostało 580 znaków

2017-02-17 19:56
0

Nie bierz się za coś więcej, póki nie zrobisz podstawy. Mówiłem, że źle zrobiłeś już wczytywanie i wypisywanie w klasie - czemu bierzesz się za dodawanie, zamiast poprawić poprzednie błędy?

Albo operator <<, albo funkcja wypisz. Oba spełniają tę samą rolę. Jeśli nikt nie mówił Ci o przeciążaniu operatora >>, to na razie odpuść i zrób poprawnie chociaż bez tego.

Wróć do kodu z postu Zadanie - klasa reprezentująca liczbę i popraw błędy, które tam są. Bo nie zrobiłeś tego wciąż. (natomiast nawaliłeś kolejne błędy) Dopiero, jak doprowadzisz ten kod do działania, wtedy przejdziemy dalej.

Pozostało 580 znaków

2017-02-18 10:20
1

1) Podpowiedź: Jak klasa ma uzyskać stringa.

2) Od 13:00 dzisiaj mnie nie ma aż do poniedziałku. Albo będziesz musiał radzić sobie sam, albo znajdź kogoś innego.

3) Nie rób na chybcika, bo nic tak nie zrobisz. Zastanów się, zanim napiszesz jakąkolwiek linijkę. Nie pisz, póki nie jesteś pewny, że to, co napiszesz, działa i będziesz wiedział, dlaczego. Inaczej będziesz dalej produkował więcej błędów, niż poprawnych fragmentów.

4) Rób po kolei. Nie bierz się za następny problem, póki nie rozwalisz poprzedniego. Nie ma sensu rozwijanie błędnego kodu.

Tyle, jeśli chodzi o rady ode mnie na ten moment :)

Ok, dzięki. Na razie juz mi się z nim nie pali, to pomyślę nad nim na spokojnie. - tyryry 2017-02-18 23:14

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0