🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
6 messages
6 total messages Started by Charlie Mon, 14 Jan 2008 14:50
Dzialania na liczbach zapisanych jako string lub char
#135374
Author: Charlie
Date: Mon, 14 Jan 2008 14:50
193 lines
5797 bytes
Witam, mam nastepujace zadanie:
Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
projektach na lepsza ocene wszystkie implementowane operacje
obowiązkowo powinny działać dla liczb ujemnych.

Co to jest duża liczba całkowita?



Dużą liczbą całkowitą nazywamy liczbę, która:

1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
języku JAVA, czyli int, long, float czy double;

2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
zaokrągleń.



Oznacza to, że jedynym typem zdolnym spełnić wszystkie te wymogi jest
typ String lub  char[] (czyli tablice znaków), a inaczej mówiąc
tablica znaków, gdzie każdy znak reprezentuje konkretną cyfrę w naszej
liczbie, a ww. operacje będą sprowadzały się do zaimplementowania
znanych nam ze szkoły podstawowej operacji dodawania, mnożenia,
odejmowania i dzielenia pisemnego (pod kreską, czy jak kto woli) na
ciągach znaków. Po zaimplementowaniu poniższej funkcja main powinna
zadziałać poprawnie i podać wyniki jak poprawnie. Jeżeli coś jest
niejasne, patrz UWAGI poniżej.



Przykład:



public class Projekt{

    public static void main(String[] args) {

           DuzaLiczba dl1 = new DuzaLiczba();

           DuzaLiczba dl2 = new DuzaLiczba(1500);

           DuzaLiczba dl3 = new
DuzaLiczba("15000000000000000000000001");

           System.out.println("Linia 1: "+dl1) ;

           System.out.println("Linia 2: "+dl2) ;

           System.out.println("Linia 3: "+dl3) ;

           dl1 = dl2.dodaj(dl3);

           System.out.println("Linia 4: "+dl1) ;

           System.out.println("Linia 5: "+dl2) ;

           DuzaLiczba dl4= dl2.odejmij(dl3);

           System.out.println("Linia 6: "+dl4) ;

           System.out.println("Linia 7: "+dl2) ;



           dl1 = dl2.mnoz(new DuzaLiczba("2"));

           System.out.println("Linia 8: "+dl1) ;

           System.out.println("Linia 9: "+dl2) ;

           dl4= dl2.podziel(new DuzaLiczba("3"));

           System.out.println("Linia 10: "+dl4);

           System.out.println("Linia 11: "+dl2);

           dl4=dl1.dodaj(dl2).odejmij(dl2).mnoz(dl2).podziel(dl3);

           System.out.println("Linia 12: "+dl4);

           System.out.println("Linia 13: "+dl1);

           System.out.println("Linia 14: "+DuzaLiczba.silnia(new
DuzaLiczba(10)));

           System.out.println("Linia 15: "+DuzaLiczba.fibbonaci(new
DuzaLiczba(6)));

           dl1 = new DuzaLiczba("1234");

           dl4 = new DuzaLiczba("1235");

           dl4 = DuzaLiczba.odejmij(dl4, new DuzaLiczba("1"));

           if(dl1.jestRowna(dl4)==true)

              System.out.println("Linia 16: dl1 jest rowna dl4");

           else

              System.out.println("Linia 16: dl1 jest rozna od dl4");



           DuzaLiczba.podziel(dl4, new DuzaLiczba("2"));

           if(dl1.jestMniejsza(dl4)==true)

              System.out.println("Linia 17: dl1 jest mniejsza od
dl4");

           else

              System.out.println("Linia 17: dl1 jest wieksza od dl4");

           DuzaLiczba.mnoz(dl4, new DuzaLiczba("3"));

           if(dl1.jestMniejsza(dl4)==true)

              System.out.println("Linia 18: dl1 jest wieksza od dl4");

           else

              System.out.println("Linia 18: dl1 jest mniejsza od
dl4");

   }

}

class DuzaLiczba{

....

}







Podszedlem do tego w ten sposob ze potworzylem konstruktory najpierw:


public String liczba;


		public DuzaLiczba(){
			liczba="0";
		}

		public DuzaLiczba(int a){
			liczba=""+a;
		}

		public DuzaLiczba (String s){
			liczba=s;
		}




//I TUTAJ POWINNO BYC DODAWANIE:


	public void dodaj(DuzaLiczba a){
			char[]l1 = liczba.toCharArray();
			char[]l2 = a.liczba.toCharArray();
)




Zastanawiam sie co z tym zrobic dalej. Mam te liczby zapisane w
tablicach znakow. Musze napewno sprawdzic czy sa rowne. Jesli jedna
jest krotsza to np uzupelnic ja zerami. Nie wiem jak to zrobic, czy
nie lepiej odwrocic tablice zeby zera dopisywac z prawej?

Jesli juz mam dwie rowne tablice to chyba moge je juz dodwac. Czy
zrobic to jakas petla?

Moze nie bawic sie tutaj tablicami char, tylko zrobic to poprostu na
stringach?

Wiem ze zeby zrobic ze znaku liczbe to trzeba odjac od niej kod ascii
zera.
Re: Dzialania na liczbach zapisanych jako string lub char
#135375
Author: Mentos
Date: Wed, 16 Jan 2008 11:20
27 lines
1812 bytes
Charlie pisze:
> Witam, mam nastepujace zadanie:
> Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
> przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
> powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
> mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
> dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
> projektach na lepsza ocene wszystkie implementowane operacje
> obowiązkowo powinny działać dla liczb ujemnych.
> 
> Co to jest duża liczba całkowita?
> 
> 
> 
> Dużą liczbą całkowitą nazywamy liczbę, która:
> 
> 1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
> języku JAVA, czyli int, long, float czy double;
> 
> 2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
> zaokrągleń.



A BigInteger nie spelnia wymogow??

pozdrawiam
Re: Dzialania na liczbach zapisanych jako string lub char
#135376
Author: Leonard Milcin
Date: Wed, 16 Jan 2008 11:34
32 lines
1948 bytes
Mentos wrote:
> Charlie pisze:
>> Witam, mam nastepujace zadanie:
>> Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
>> przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
>> powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
>> mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
>> dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
>> projektach na lepsza ocene wszystkie implementowane operacje
>> obowiązkowo powinny działać dla liczb ujemnych.
>>
>> Co to jest duża liczba całkowita?
>>
>>
>>
>> Dużą liczbą całkowitą nazywamy liczbę, która:
>>
>> 1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
>> języku JAVA, czyli int, long, float czy double;
>>
>> 2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
>> zaokrągleń.
> 
> 
> 
> A BigInteger nie spelnia wymogow??

Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
istniejącego rozwiązania;-)

Pozdrawiam,
Leonard
Re: Dzialania na liczbach zapisanych jako string lub char
#135377
Author: jvv
Date: Wed, 16 Jan 2008 12:03
11 lines
1257 bytes
> > A BigInteger nie spelnia wymogow??
> 
> Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
> istniejącego rozwiązania;-)
> 
Nauczyciel zapewne nie wie, ze istnieje klasa BigInteger - uczyl sie pewnie
javy z kasiazki: java - to proste :))))

-- 
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Dzialania na liczbach zapisanych jako string lub char
#135378
Author: Leonard Milcin
Date: Wed, 16 Jan 2008 13:09
21 lines
1672 bytes
jvv wrote:
>>> A BigInteger nie spelnia wymogow??
>> Raczej nie. Wątpię, żeby nauczyciel zaakceptował wrapper naokoło
>> istniejącego rozwiązania;-)
>>
> Nauczyciel zapewne nie wie, ze istnieje klasa BigInteger - uczyl sie pewnie
> javy z kasiazki: java - to proste :))))
> 

Hmm... jestem przekonany, że nauczyciel Wie, co to jest BigInteger (a w
każdym bądź razie nie widzę powodów by sądzić, że nie wie) a jego celem
jest zmuszenie uczniów do myślenia i zaimplementowania własnej wersji
wedle własnych możliwości. Uważam, że to całkiem dobry pomysł na zadanie.

Pozdrawiam,
Leonard

-- 
It is wrong always, everywhere, and for anyone, to believe anything
upon insufficient evidence.
                                         -- William Kingdon Clifford
Re: Dzialania na liczbach zapisanych jako string lub char
#135380
Author: lukaszoliwa1
Date: Mon, 06 Jan 2014 11:30
196 lines
6517 bytes
W dniu poniedziałek, 14 stycznia 2008 15:50:44 UTC+1 użytkownik Charlie napisał:
> Witam, mam nastepujace zadanie:
> Napisz klasę realizującą obliczenia na wielkich liczbach. Liczby
> przechowywane są jako łańcuchy znaków o dowolnej długości. Klasa
> powinna zawierać funkcje umożliwiające dodawanie, odejmowanie,
> mnożenie i dzielenie dwóch wielkich liczb. Operacje mnożenia i
> dzielenia są obowiązkowe w projektach na ocenę 4. Dodatkowo w
> projektach na lepsza ocene wszystkie implementowane operacje
> obowiązkowo powinny działać dla liczb ujemnych.
> 
> Co to jest duża liczba całkowita?
> 
> 
> 
> Dużą liczbą całkowitą nazywamy liczbę, która:
> 
> 1) nie mieści się w żadnym z zakresów typów domyślnie dostępnych w
> języku JAVA, czyli int, long, float czy double;
> 
> 2) pamiętane są wszystkie cyfry bez względu na pozycję i bez żadnych
> zaokrągleń.
> 
> 
> 
> Oznacza to, że jedynym typem zdolnym spełnić wszystkie te wymogi jest
> typ String lub  char[] (czyli tablice znaków), a inaczej mówiąc
> tablica znaków, gdzie każdy znak reprezentuje konkretną cyfrę w naszej
> liczbie, a ww. operacje będą sprowadzały się do zaimplementowania
> znanych nam ze szkoły podstawowej operacji dodawania, mnożenia,
> odejmowania i dzielenia pisemnego (pod kreską, czy jak kto woli) na
> ciągach znaków. Po zaimplementowaniu poniższej funkcja main powinna
> zadziałać poprawnie i podać wyniki jak poprawnie. Jeżeli coś jest
> niejasne, patrz UWAGI poniżej.
> 
> 
> 
> Przykład:
> 
> 
> 
> public class Projekt{
> 
>     public static void main(String[] args) {
> 
>            DuzaLiczba dl1 = new DuzaLiczba();
> 
>            DuzaLiczba dl2 = new DuzaLiczba(1500);
> 
>            DuzaLiczba dl3 = new
> DuzaLiczba("15000000000000000000000001");
> 
>            System.out.println("Linia 1: "+dl1) ;
> 
>            System.out.println("Linia 2: "+dl2) ;
> 
>            System.out.println("Linia 3: "+dl3) ;
> 
>            dl1 = dl2.dodaj(dl3);
> 
>            System.out.println("Linia 4: "+dl1) ;
> 
>            System.out.println("Linia 5: "+dl2) ;
> 
>            DuzaLiczba dl4= dl2.odejmij(dl3);
> 
>            System.out.println("Linia 6: "+dl4) ;
> 
>            System.out.println("Linia 7: "+dl2) ;
> 
> 
> 
>            dl1 = dl2.mnoz(new DuzaLiczba("2"));
> 
>            System.out.println("Linia 8: "+dl1) ;
> 
>            System.out.println("Linia 9: "+dl2) ;
> 
>            dl4= dl2.podziel(new DuzaLiczba("3"));
> 
>            System.out.println("Linia 10: "+dl4);
> 
>            System.out.println("Linia 11: "+dl2);
> 
>            dl4=dl1.dodaj(dl2).odejmij(dl2).mnoz(dl2).podziel(dl3);
> 
>            System.out.println("Linia 12: "+dl4);
> 
>            System.out.println("Linia 13: "+dl1);
> 
>            System.out.println("Linia 14: "+DuzaLiczba.silnia(new
> DuzaLiczba(10)));
> 
>            System.out.println("Linia 15: "+DuzaLiczba.fibbonaci(new
> DuzaLiczba(6)));
> 
>            dl1 = new DuzaLiczba("1234");
> 
>            dl4 = new DuzaLiczba("1235");
> 
>            dl4 = DuzaLiczba.odejmij(dl4, new DuzaLiczba("1"));
> 
>            if(dl1.jestRowna(dl4)==true)
> 
>               System.out.println("Linia 16: dl1 jest rowna dl4");
> 
>            else
> 
>               System.out.println("Linia 16: dl1 jest rozna od dl4");
> 
> 
> 
>            DuzaLiczba.podziel(dl4, new DuzaLiczba("2"));
> 
>            if(dl1.jestMniejsza(dl4)==true)
> 
>               System.out.println("Linia 17: dl1 jest mniejsza od
> dl4");
> 
>            else
> 
>               System.out.println("Linia 17: dl1 jest wieksza od dl4");
> 
>            DuzaLiczba.mnoz(dl4, new DuzaLiczba("3"));
> 
>            if(dl1.jestMniejsza(dl4)==true)
> 
>               System.out.println("Linia 18: dl1 jest wieksza od dl4");
> 
>            else
> 
>               System.out.println("Linia 18: dl1 jest mniejsza od
> dl4");
> 
>    }
> 
> }
> 
> class DuzaLiczba{
> 
> ....
> 
> }
> 
> 
> 
> 
> 
> 
> 
> Podszedlem do tego w ten sposob ze potworzylem konstruktory najpierw:
> 
> 
> public String liczba;
> 
> 
> 		public DuzaLiczba(){
> 			liczba="0";
> 		}
> 
> 		public DuzaLiczba(int a){
> 			liczba=""+a;
> 		}
> 
> 		public DuzaLiczba (String s){
> 			liczba=s;
> 		}
> 
> 
> 
> 
> //I TUTAJ POWINNO BYC DODAWANIE:
> 
> 
> 	public void dodaj(DuzaLiczba a){
> 			char[]l1 = liczba.toCharArray();
> 			char[]l2 = a.liczba.toCharArray();
> )
> 
> 
> 
> 
> Zastanawiam sie co z tym zrobic dalej. Mam te liczby zapisane w
> tablicach znakow. Musze napewno sprawdzic czy sa rowne. Jesli jedna
> jest krotsza to np uzupelnic ja zerami. Nie wiem jak to zrobic, czy
> nie lepiej odwrocic tablice zeby zera dopisywac z prawej?
> 
> Jesli juz mam dwie rowne tablice to chyba moge je juz dodwac. Czy
> zrobic to jakas petla?
> 
> Moze nie bawic sie tutaj tablicami char, tylko zrobic to poprostu na
> stringach?
> 
> Wiem ze zeby zrobic ze znaku liczbe to trzeba odjac od niej kod ascii
> zera.

Cześć, i jak tam udało się napisać kod?
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads