Diskuze: Metoda vracející hodnotu - zápis výsledku.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Takovéto jednoduché příklady compiler většinou sám optimalizuje do druhé varianty.
Zde maličký příklad... Zkompiloval jsem projekt s těmito metodami...
private int FourBytesToInt(byte[] array)
{
int res = 0;
res += array[0] * 256 * 256 * 256;
res += array[1] * 256 * 256;
res += array[2] * 256;
res += array[3];
return res;
}
private byte[] IntToFourBytes(int intValue)
{
byte[] array = new byte[4];
array[0] = (byte)(intValue >> 24);
array[1] = (byte)(intValue >> 16);
array[2] = (byte)(intValue >> 8);
array[3] = (byte)intValue;
return array;
}
Pomocí dekompilace jsem dostal zpátky už jen tohle... zvláštně dobrá je druhá metoda, kde to zůstalo vše v returnu.
private int FourBytesToInt(byte[] array)
{
return 0 + (int) array[0] * 256 * 256 * 256 + (int) array[1] * 256 * 256 + (int) array[2] * 256 + (int) array[3];
}
private byte[] IntToFourBytes(int intValue)
{
return new byte[4]
{
(byte) (intValue >> 24),
(byte) (intValue >> 16),
(byte) (intValue >> 8),
(byte) intValue
};
}
takovéto jednoduché příklady compiler vůbec nebude dělat jako metodu, ale prostě je inline-ne.
To co si poslal je decompile určitě develop codu.. jinak ti compiler vždycky spočítá konstanty, pokud mu v tom nic nebrání.
Dekuji. Nasel jsem si priklad: Posloupnost naplnena x poctem cisel. Mam v ni
najit nejvetsi a nejmensi cislo a udelat z nej rozdil a zaroven udelat soucin ze
sudych cisel. Bohuzel, jsem nikde nenasel spravne reseni, mohl by mi to někdo
zkontrolovat prosim? Samozrejme program pracuje jak ma, jde mi hlavně o
optimalizaci.
Btw. jedná se o C++ konzolovou aplikaci, nedopatrenim jsem toto tema zalozil v
.NET sekci, omlouvam se.
Děkuji
int PosloupnostCisel(int &roz, int pp);
int main()
{
int pocetPrvku, roz = 0, soucin;
cin >> pocetcisel;
soucin = PosloupnostCisel(roz, pocetcisel);
if (soucin == 0)
cout << "Soucin nelze vypocitat, protoze se v posloupnosti nenachazi sude cislo" << endl;
else
cout << "Soucin: " << soucin << endl;
cout << "Rozdil nejvetsiho cisla a nejmensiho cisla je: " << roz << endl;
system("pause");
return 0;
}
int PosloupnostCisel(int &roz, int pp)
{
int cislo, soucin = 1, maximum = -RAND_MAX, minimum = RAND_MAX;
bool kontrolaSoucinu = false;
for (int i = 1; i <= pp; i++)
{
cout << "Zadej cislo: ";
cin >> cislo;
if (cislo > maximum)
maximum = cislo;
if (cislo < minimum)
minimum = cislo;
if (cislo % 2 == 0)
{
soucin *= cislo;
kontrolaSoucinu = true;
}
}
roz = maximum - minimum;
if (kontrolaSoucinu)
return soucin;
else
return 0;
}
Zobrazeno 6 zpráv z 6.