» »

c# Nujna pomoč

c# Nujna pomoč

enrikio ::

V šoli smo dobili nalogo, ki jo moramo rešiti v C# (Visual Studio). Koda naj bi bila zelo kratka, vendar se mi ne sanja kako program napisati. Spodaj sem podal nalogo. Vsem hvala za pomoč!



1.1 Navodilo za izdelavo davčne številke


Davčna številka je sestavljena iz osmih številk; sedem je naključno izbranih, osma pa je izračunana
po modulu 11:

 prvih sedem mest je osnovna številka, ki je naključno izbrana iz nabora številk od 1.000.000
do 9.999.999,
 na osmem mestu je kontrolna številka, izračunana po modulu 11.


Postopek izračuna kontrolne številke:

 posamezno številko osnovne številke pomnožimo s konstantnimi ponderji 8, 7, 6, 5, 4, 3 in
2,
 zmnožke seštejemo,
 seštevek delimo z 11,
 ostanek deljenja odštejemo od 11 in razlika je kontrolna številka.
Če je ostanek deljenja 1 in je razlika zato 10, je kontrolna številka 0. Če je ostanek deljenja 0 in je
razlika zato 11, se ta osnovna številka izključi iz nabora možnih davčnih številk.


Primer:


 osnovna številka: 1 5 0 1 2 5 5
 konstantni ponderji: 8,7,6,5,4,3,2
 seštevek zmnožkov: 8 + 35 + 0 + 5 + 8 + 15 + 10 = 81
 seštevek delimo z 11: 7
 ostanek je: 4
 razlika do 11: 7 (kontrolna št.)
 davčna številka: 15012557

Yacked2 ::

Primer v javi, najlažje boš napisal funkcijo ki ti z generira vse 8 mestne številke in jih sproti spušča skozi funkciji, ki jih preveri, če je pravilka naj so izpiše.

Spodnja funkcija vrne True/False na vnešeno davčno številko:
public static boolean check(int stevilka)
	{
		boolean pravilnost = false;
		char[] cifre = ("" + stevilka).toCharArray();
		int vsota = 0;
		int n = 8;
		
		for(int i =0; i < cifre.length-1;i++)
		{
			int a = Character.digit(cifre[i],10); 
			vsota = vsota + (n*a);
			n--;
			
		}
		int mod = vsota % 11;
		int ostanek = 11-mod;
		if(ostanek == 10)
		{
			ostanek=1;
		}
		int last = Character.digit(cifre[7], 10);
		
		if(last==ostanek)
		{
			pravilnost=true;
		}
		
		return pravilnost;
	}
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Zgodovina sprememb…

  • spremenil: Yacked2 ()

enrikio ::

Tole je bilo pa hitro! Najlepša ti hvala za pomoč!!!:)

Sukaaloo ::

Zelo zanimiva naloga...osebno imam rad C# toda tole je že kar zahtevno, me pa zanima če bi lahko kdo napisal CELO nalogo saj jo rad kasneje preučim, prosim če bi si kdo vzel čas...Hvala že za vnaprej :)

darkolord ::

Še ena kratka C# varjanta zgornje kode:

public static bool check(int stevilka)
{
	var razlika = 11 - stevilka.ToString().Take(7).Select ((x, i) => (int)Char.GetNumericValue(x) * (8 - i)).Sum() % 11;
	if (razlika == 10) razlika = 0;
	return (stevilka > 10000000 && stevilka <= 99999999 && Char.GetNumericValue(stevilka.ToString()[7]) == razlika);
}

garamond ::

In še krajši Python zgornje kode. Zelo klobasast in nepregleden :D
def ctrl(num):
    diff = 11 - sum([int(x) * (8 - i) for (i, x) in enumerate(str(num)[:-1])]) % 11
    return 10000000 < num < 99999999 and str(diff)[-1] is str(num)[-1]


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne (strani: 1 2 3 424 25 26 27 )

Oddelek: Programiranje
1344333689 (73692) Macketina
»

Izvršba na bančnem računu (strani: 1 2 )

Oddelek: Loža
9131074 (28355) OZZY
»

Slučajnost?

Oddelek: Loža
212815 (2028) MrStein
»

Kontrolna vrednost -

Oddelek: Programiranje
51014 (739) harvey
»

Davčna številka v bazi - vprašanje redundatnosi

Oddelek: Pomoč in nasveti
3214181 (13419) gokky

Več podobnih tem