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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
program revente;
{$IF (not defined(FPC)) and (RTLVersion >= 13.0) }
{$APPTYPE CONSOLE}
{$IFEND}
uses SysUtils;
function getInitialPrice: integer;
var S: string;
E: integer;
V: integer;
begin
repeat
write('entrer le prix initial de lobjet a vendre (1 a 2 milliard) : ');
readln(S);
val(S, V, E);
until (E = 0) and ((V > 0) and (V < 2000000000));
writeln('');
result := V;
end;
function getObjectType: integer;
var
S: string;
E: integer;
V: integer;
begin
repeat
writeln('indiquez le type d''objet (1 a 5) : ');
writeln(' 1 : armes classique');
writeln(' 2 : armes exotique');
writeln(' 3 : armures');
writeln(' 4 : bijoux');
writeln(' 5 : autres');
write('votre choix : ');
readln(S);
val(S, V, E);
until (E = 0) and ((V > 0) and (V < 6));
writeln('');
result := V;
end;
function GetMerchantType: integer;
var
S: string;
E: integer;
V: integer;
begin
repeat
writeln('indiquez le type de marchand (1 a 3) : ');
writeln(' 1 : honnete');
writeln(' 2 : filou');
writeln(' 3 : escroc');
write('votre choix : ');
readln(S);
val(S, V, E);
until (E = 0) and ((V > 0) and (V < 4));
writeln('');
result := V;
end;
function getSkillValue: integer;
var
S: string;
E: integer;
V: integer;
begin
repeat
write('entrez la valeur de diplomatie ou de bluff (0 a 20) : ');
readln(S);
val(S, V, E);
until (E = 0) and ((V >= 0) and (V < 21));
writeln('');
result := V;
end;
function getSellTime: integer;
var
S: string;
E: integer;
V: integer;
begin
repeat
write('entrez le nombre de jours de vente pour cet objet (1 a 365) : ');
readln(S);
val(S, V, E);
until (E = 0) and ((V > 0) and (V < 366));
writeln('');
result := V;
end;
var
modifier,
initialPrice,
finalPrice,
priceLimit : single;
begin
Randomize;
modifier := 0.7;
// initial price
initialPrice := GetInitialPrice;
priceLimit := initialPrice * 0.7;
// object type
case getObjectType of
1 : modifier := 0.4;
2 : modifier := 0.3;
3 : modifier := 0.4;
4 : modifier := 0.45;
5 : modifier := 0.5;
end;
// merchant type
case getMerchantType of
1 : modifier := modifier + ((random(5)+1)*0.01); // +0.01% .. +0.05%
2 : modifier := modifier - ((random(4)+2)*0.01); // -0.02% .. -0.05%
3 : modifier := modifier - ((random(11)+5)*0.01); // -0.05% .. -0.15%
end;
// bluff skill : 0..19.5%
modifier := modifier + ((getSkillValue + random(20))*0.005); // +0.00% .. 19.5%
// sell time
case GetSellTime of
0 : modifier := modifier - 0.1;
15..30 : modifier := modifier + 0.02;
31..60 : modifier := modifier + 0.04;
61..90 : modifier := modifier + 0.07;
91..120 : modifier := modifier + 0.1;
121..180 : modifier := modifier + 0.13;
181..365 : modifier := modifier + 0.20;
end;
// final price calculation
if modifier < 0.1 then // minimum price = 10% of initial price
modifier := 0.1
else
if modifier > 0.7 then // maximum price = 70% of initial price
modifier := 0.7;
finalPrice := initialPrice * modifier;
writeln('Le prix de votre objet est de ', format('%.2n credits (modificateur : %.1f%%)',[finalPrice, modifier*100]));
readln;
end. |
Partager