algorytm.org

Implementacja w Java

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana liczby na słowa z polską gramatyką - Implementacja w Java
Ocena użytkownikóww: *****  / 7
SłabyŚwietny
Nadesłany przez Krzysztof Kranc, 06 czerwca 2012 20:09
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

translation.java:
//Zamiana liczby na slowa z polska gramatyka
//Krzysztof Kranc
//www.algorytm.org

import java.util.InputMismatchException;
import java.util.Scanner;

public class translation {
	public static String translacja(long liczba) {
		String[] jedności = { "", "jeden ", "dwa ", "trzy ", "cztery ",
				"pięć ", "sześć ", "siedem ", "osiem ", "dziewięć ", };

		String[] nastki = { "", "jedenaście ", "dwanaście ", "trzynaście ",
				"czternaście ", "piętnaście ", "szesnaście ", "siedemnaście ",
				"osiemnaście ", "dziewiętnaście ", };

		String[] dziesiątki = { "", "dziesięć ", "dwadzieścia ",
				"trzydzieści ", "czterdzieści ", "pięćdziesiąt ",
				"sześćdziesiąt ", "siedemdziesiąt ", "osiemdziesiąt ",
				"dziewięćdziesiąt ", };

		String[] setki = { "", "sto ", "dwieście ", "trzysta ", "czterysta ",
				"pięćset ", "sześćset ", "siedemset ", "osiemset ",
				"dziewięćset ", };

		String[][] grupy = { { "", "", "" },
				{ "tysiąc ", "tysiące ", "tysięcy " },
				{ "milion ", "miliony ", "milionów " },
				{ "miliard ", "miliardy ", "miliardów " },
				{ "bilion ", "biliony ", "bilionów " },
				{ "biliard ", "biliardy ", "biliardów " },
				{ "trylion ", "tryliony ", "trylionów " }, };

		// INICJACJA ZMIENNYCH
		long j = 0/* jedności */, n = 0/* nastki */, d = 0/* dziesiątki */, s = 0/* setki */, g = 0/* grupy */, k = 0/* końcówwki */;
		String słownie = "";
		String znak = "";

		// OPERACJA DOTYCZąCA ZNAKU

		if (liczba < 0) {
			znak = "minus ";
			liczba = -liczba; // bezwględna wartość ponieważ, jeśli będziemy
								// operować na liczbie z minusem tablica będzie
								// przyjmowała wartości ujemne i zwróci nam błąd
		}
		if (liczba == 0) {
			znak = "zero";
		}

		// PĘTLA GŁÓWNA
		while (liczba != 0) {
			s = liczba % 1000 / 100;
			d = liczba % 100 / 10;
			j = liczba % 10;

			if (d == 1 & j > 0) // if zajmujący się nastkami
			{
				n = j;
				d = 0;
				j = 0;
			} else {
				n = 0;
			}

			// <---- KOŃCÓWKI

			if (j == 1 & s + d + n == 0) {
				k = 0;

				if (s + d == 0 && g > 0) // jeśli nie będzie dziesiątek ani setek, wtedy otrzymamy samą grupę
				{ // przykładowo 1000 - wyświetli nam się "tysiąc", jeśli
				  // zakomentujemy tego if'a to otrzymamy "jeden tysiąc"
					j = 0;
					słownie = grupy[(int) g][(int) k] + słownie;					
				}
			} else if (j == 2) {
				k = 1;
			} else if (j == 3) {
				k = 1;
			} else if (j == 4) {
				k = 1;
			} else {
				k = 2;
			}

			// KONIEC KOŃCÓWEK -->
			
			if (s+d+n+j > 0) {				
				słownie = setki[(int) s] + dziesiątki[(int) d] + nastki[(int) n]
					+ jedności[(int) j] + grupy[(int) g][(int) k] + słownie;
			}

			// POZBYWAMY SIĘ TYCH LICZBY KTÓRE JUŻ PRZEROBILIŚMY czyli
			// przykładowo z 132132 zostaje nam 132 do obróbki
			liczba = liczba / 1000;
			// ORAZ ZWIĘKSZAMY G KTÓRE ODPOWIEDZIALNE JEST ZA NUMER POLA W
			// TABLICY WIELOWYMIAROWEJ
			g = g + 1;
		}
		// KONIEC PĘTLI GŁÓWNEJ

		// DODANIE ZNAKU I ZWRÓCENIE METODY
		słownie = znak + słownie;
		return słownie;

	}

	public static void main(String[] args) {
		Scanner skaner = new Scanner(System.in);
		boolean isNotNumber = true;

		do {
			try {
				System.out.println("Wprowadź liczbę!");
				long liczba = skaner.nextLong();
				System.out.println(translation.translacja(liczba));
				isNotNumber = false;
			} catch (InputMismatchException ime) {
				System.err.println("Złe dane!");
				skaner.nextLine();
				System.out.println("Wprowadź dane powownie");
			}

		} while (isNotNumber);
		skaner.close();
	}
}
Dodaj komentarz