algorytm.org

Implementacja w Php

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 Php
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
Nadesłany przez Karol Nowacki, 13 kwietnia 2011 13:22
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

zlns_gramatyka_1_php.php:
<?php

//zamiana liczby na słowa z uwzględnieniem polskiej gramatyki
//www.algorytm.org

function numberToText($liczba) {

	$separator = ' ';
	$jednosci = array('', ' jeden', ' dwa', ' trzy', ' cztery', ' pięć', ' sześć', ' siedem', ' osiem', ' dziewięć');
	$nascie = array('', ' jedenaście', ' dwanaście', ' trzynaście', ' czternaście', ' piętnaście', ' szesnaście', ' siedemnaście', ' osiemnaście', ' dziewietnaście');
	$dziesiatki = array('', ' dziesieć', ' dwadzieścia', ' trzydzieści', ' czterdzieści', ' pięćdziesiąt', ' sześćdziesiąt', ' siedemdziesiąt', ' osiemdziesiąt', ' dziewięćdziesiąt');
	$setki  = array('', ' sto', ' dwieście', ' trzysta', ' czterysta', ' pięćset', ' sześćset', ' siedemset', ' osiemset', ' dziewięćset');
	$grupy = array(
		array('' ,'' ,''),
		array(' tysiąc' ,' tysiące' ,' tysięcy'),
		array(' milion' ,' miliony' ,' milionów'),
		array(' miliard',' miliardy',' miliardów'),
		array(' bilion' ,' biliony' ,' bilionów'),
		array(' biliard',' biliardy',' biliardów'),
		array(' trylion',' tryliony',' trylionów')
	);

	$wynik = ''; $znak = '';
	if ($liczba == 0)
		return 'zero';
	if ($liczba < 0) {
		$znak = 'minus';
		$liczba = -$liczba;
	}
	$g = 0;
	while ($liczba > 0) {


		$s = floor(($liczba % 1000)/100);
		$n = 0;
  		$d = floor(($liczba % 100)/10);
  		$j = floor($liczba % 10);


  		if ($d == 1 && $j>0) {
  			$n = $j;
  			$d = $j = 0;
  		}

  		$k = 2;
  		if ($j == 1 && $s+$d+$n == 0)
  			$k = 0;
  		if ($j == 2 || $j == 3 || $j == 4)
  			$k = 1;

  		if ($s+$d+$n+$j > 0)
  			$wynik = $setki[$s].$dziesiatki[$d].$nascie[$n].$jednosci[$j].$grupy[$g][$k].$wynik;

  		$g++;
  		$liczba = floor($liczba/1000);
	}
	return trim($znak.$wynik);

}


for ($i = 0; $i<10; $i++) {
	$l = rand(0, 1000000000) - 500000000;
	echo $l.' = '.numberToText($l).'<br />'.PHP_EOL;
}

Dodaj komentarz