Sfida Programimi

Kësaj radhe ju duheni ta krijoni një skript i cili do të jetë në gjendje ti pranoj (2) dy numra Romak dhe ti mbledh ato. Numrat Romak të cilët do ti pranoj skripta nuk duhet të jenë më të mëdhenj se L (apo 50 në sistemin e numrave Arab). Mbledhja e numrave Romak nuk është e lejuar të bëhet me anë të aritmetikës të sistemit numerik Arab (kjo e nënkupton konvertimin e numrave Romak në ato Arab si parakusht).

Skripta e juaj duhet të bëj mbledhjen e numrave Romak me anë të aritmetikës Romake, dhe çdo hap ta shfaq në ekran. Përveç kësaj, skripta duhet ti shtyp vlerat e numrave të dhënë si dhe shumën edhe në format të numrave Arab.

Për ta kuptuar më mirë këtë sfidë lexoni shembullin e mëposhtëm:

Hyrja:

XIV + VI

Dalja:

XIV (14) + VI (6)
XIIII + VI
XVIIIII
XVV
XX (20)

Pra, së pari notacioni zbritës largohet, ku kjo nënkupton që IV bëhet IIII, apo IX bëhet VIIII. Pas kësaj bëhet vargëzimi i vlerave si në shembullin e lartë-shfaqur: XIIII + VI => XVIIIII. Përfundimisht, pas vargëzimit bëhet thjeshtëzimi — ky është VV => X në rastin e lart-shfaqur — dhe rikthimi i notacionit zbritës. Pasi që shembulli i lartë-shfaqur nuk përmban rikthimin e notacionit zbritës, ja një shembulli tjetër:

Hyrja:

V + IV

Dalja:

V (5) + IV (4)
V + IIII
VIIII
IX (9)

Programi le të shkruhet për modin tekstual. Hyrjet mund të futen nga tastiera, apo edhe të lexohen nga skeda. Daljet mund të paraqiten në terminal apo edhe të shkruhen në skedë. Programi të kodohet ashtu që gjatësia e një rreshti mos të kalojë 80 karakterë. Për këtë sfidë, programi mund të shkruhet në C, C++, C#, Java, Visual Basic, VB .NET, Perl, PHP. Nëse dëshironi që programin ta shkruani në ndonjë gjuhë tjetër programuese që nuk është cekur më lartë, atëherë ju lutemi që së pari të na kontaktoni nëpërmjet adresës së shfaqur më poshtë, në mënyrë që të jemi të sigurt se a mundemi ta vlerësojmë programin tuaj në atë gjuhë.

Sfidat dergojini ne info [at] ishqip [pik] com

Sfida eshte ideuar nga pr-tech.net


Zgjidhjet

Zgjidhja ne PHP nga Jonian Dervishi :

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
59
60
61
62
63
64
65
66
67
68
69
70
<form action=''>
Numri i pare
<input type='text' name='n1' />
Numri i dyte
<input type='text' name='n2' />
<input type='submit' value='Mblidh' name='mblidh' />
</form>
 
<?php
/* 
 
	Program per te mbledhur numrat romak.
	Ne kete program nuk behet konverim i numrave romak ne numra
	arab por llogaritet gjatesia e numrave te konvertuar ne 'i'
	Programi llogarit numrat deri ne L
 
	31.08.2008
	Programuar nga : Jonian Dervishi
	Programuar ne PHP , perdoret HTML per te pranuar hyrjen nga perdoruesi.
*/
 
if(isset($_GET['mblidh'])) {
 
	$hyrje_n1 = strtolower($_GET['n1']); // merr numrat e futur nga perdoruesi dhe i kthen ne karaktere te vogla
	$hyrje_n2 = $_GET['n2'];
 
	function kthe_numrat_romak($numri_romak) {
		$v = 'iiiii';
		$x = 'iiiiiiiiii';
		$l = 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii';
 
		$numri = strlen($numri_romak); // numri i karaktereve perberese te numrit romak
 
		$ndarja=array(); // array ku do te ruhen numrat
 
		for ($i=0;$i<=$numri;$i++) {
			$ndarja[$i] = $numri_romak[$i];
			//nese numri eshte v dhe ai ka perpara nje i do te thote qe vlera e tij eshte iiii
			if($ndarja[$i] == 'v' && $ndarja[$i-1] == 'i') {
				$vlera_v = strlen($v);
				for ($i_v=0;$i_v<$vlera_v;$i_v++) {
				$ndarja[$i][$i_v] = 'i';
				}
				$ndarja[$i] = str_repeat('i',strlen($ndarja[$i])-strlen($ndarja[$i-1]-1)); //perseritet i sa gjatesia e numrit aktual te kthyer ne 'i' duke i hequr gjatesine e numrit para-ardhes te kthyer ne 'i' - 1 qe te ngelet vlera e numrit aktual 'iii' qe nese i shtojme edhe 'i' e para-ardhesit te dali 'iiii'
			}
			if($ndarja[$i] == 'x' && $ndarja[$i-1] == 'i') {
				$vlera_x = strlen($x);
				for ($i_x=0;$i_x<$vlera_x;$i_x++) {
				$ndarja[$i][$i_x] = 'i';
				}
				$ndarja[$i] = str_repeat('i',strlen($ndarja[$i])-strlen($ndarja[$i-1]-1)); // i njejti veprim qe u be me 'iv'
			}
				if($ndarja[$i] == 'l' && $ndarja[$i-1] == 'x') {
				$vlera_l = strlen($l);
				for ($i_l=0;$i_l<$vlera_l;$i_l++) {
				$ndarja[$i][$i_l] = 'i';
				}
				$ndarja[$i] = str_repeat('i',strlen($ndarja[$i])-strlen($x)-10); // i njejti veprim qe u be me iv por tani hiqen 'iiiiii' qe nese i shtojme edhe 'iiiiii' te numrit para-ardhes te arrijme ne 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiii'
			}
 
		}
	$origjinal = array('v','x','l');
	$zevendesim = array($v,$x,$l);
	$dalje_numri = str_replace($origjinal,$zevendesim,implode('',$ndarja));//behet kthimi i v,x,l ne 'i'
	return $dalje_numri;
	}
	$numri_romak = kthe_numrat_romak($hyrje_n1).kthe_numrat_romak($hyrje_n2);
	echo strlen($numri_romak);
}
?>