Ocena użytkownikóww: ***** / 1
Nadesłany przez Tomasz Lubiński, 28 sierpnia 2007 01:00
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.
upca_d/upca.dpr:
program upca;
//www.algorytm.org
//UPC-A
//(c) 2007 Tomasz Lubinski
{$APPTYPE CONSOLE}
uses
SysUtils;
var
UPC_A : array [0..13] of Integer;
valid : boolean = false;
UPC_A_str : string;
Systems : array [0 .. 9] of String = (
'zwykły kod UPC', 'zarezerwowany', 'waga prduktów ważonych w sklepie',
'lekarstwa', 'artykuł nie będący żywnością', 'kupony', 'zarezerwowany',
'zwykły kod UPC', 'zarezerwowany', 'zarezerwowany' );
function checkSum(UPC_A: array of Integer): boolean;
var
sum: Integer;
begin
sum := 3 * UPC_A[0] +
1 * UPC_A[1] +
3 * UPC_A[2] +
1 * UPC_A[3] +
3 * UPC_A[4] +
1 * UPC_A[5] +
3 * UPC_A[6] +
1 * UPC_A[7] +
3 * UPC_A[8] +
1 * UPC_A[9] +
3 * UPC_A[10];
sum := sum mod 10;
sum := 10 - sum;
sum := sum mod 10;
if sum = UPC_A[11] then
result := true
else
result := false;
end;
procedure UPCAValidator(UPCANumber: String);
var
i : integer;
begin
if (length(UPCANumber) <> 12) then
valid := false
else
begin
for i := 0 to 11 do
UPC_A[i] := strToInt(UPCANumber[i+1]);
if checkSum(UPC_A) then
valid := true
else
valid := false;
end;
end;
begin
writeln('Podaj numer UPC-A (bez spacji i myslinikow)');
readln(UPC_A_str);
UPCAValidator(UPC_A_str);
if valid then
begin
writeln('Numer UPC-A jest prawidłowy');
writeln('Numer systemu: ' + Systems[UPC_A[0]]);
end
else
begin
writeln('Numer UPC-A jest nieprawidłowy');
end;
end.