Hodnotící systém – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hodnotící systém – PHP – Fórum – Programujte.comHodnotící systém – PHP – Fórum – Programujte.com

 

Tester
~ Anonymní uživatel
4 příspěvky
17. 2. 2016   #1
-
0
-

Zdravím, v PHP jsem vytvořil hodnotící systém. Uživatel zadá počet stupňů a procentuální horní hranici posledního stupně. Poté se vygeneruje pole, ve kterém jsou uvedena procenta která přísluší jednotlivým hodnotícím stupňům. Při testování jsem však narazil na problém se zaokrouhlováním. Pokud u níže uvedeného skriptu použiji round, tak se mi jako poslední stupeň nastaví číslo 73 (místo čísla 74), pokud round nepoužiji, tak číslo 73 zcela ve výpise chybí. Dokázali by mi ještě někdo poradit, jak tento skript opravit. Stači, když ve výpise budou uvedena pouze celá čísla. Děkuji

<?
$stupne = 5;
$procenta = 74;
 
$krokovani = round(($procenta-1)/($stupne-1));
 
for($i = 0; $i<$stupne; $i++){
 
        if($stupne == ($i+1)) {
             $hm = 100;
        }
        else {
                $hm = (($i+1) * $krokovani);
        }
        if($i == 0) {
                $sm = 0;
        }
        else{
                $sm =  ($i * $krokovani) +1;
        }
        
        $hranice[$i+1] = range($sm,$hm);
 
}
 
echo '<pre>';print_r($hranice);'<pre>';
?>

Nahlásit jako SPAM
IP: 178.20.137.–
Kit+15
Guru
17. 2. 2016   #2
-
0
-

#1 Tester
Problém bude zřejmě tady: 

$krokovani = round(($procenta-1)/($stupne-1));

Proč je tam $procenta-1 ?

Možná by bylo lepší vytvořit jednorozměrné pole, ve kterém jako index bude procento a hodnotou bude známka. Hodnocení se pak bude počítat mnohem lépe.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tester
~ Anonymní uživatel
4 příspěvky
17. 2. 2016   #3
-
0
-

#2 Kit

Hlavní problém, tam bude asi s tím zaokrouhlováním. Pokud např. použiji níže uvedené hodnoty

$stupne = 5; $procenta = 61;

tak se vše zobrazuje v pořádku.

Nahlásit jako SPAM
IP: 31.134.216.–
Kit+15
Guru
17. 2. 2016   #4
-
0
-

#3 Tester
Ten příklad jsem si zkusil. Výsledkem bylo dvourozměrné pole, které mi nedávalo smysl. Jakým způsobem se to dále používá?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tester
~ Anonymní uživatel
4 příspěvky
17. 2. 2016   #5
-
0
-

Mam webovou aplikaci, kde je % vyhodnoceni uspesnosti
A na zaklade tech procent chci udelit znamku..z toho duvodu jsem vytvoril ten skript

Uzivatel si sam muze stanovit pocet hodnoticich stupnu a % horni hranici posledniho stupne

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 31.134.216.–
Kit+15
Guru
17. 2. 2016   #6
-
0
-

#5 Tester
V tom případě je lepší udělat jedno pole s indexy 0-100 (podle procent) a jako hodnotu vložit tu známku.

Také se to dá úplně prostě bez pole jednoduchým cyklem. Proč jsou jako vstup nějaká procenta a ne přímo body? Například že v testu někdo dosáhl 32 bodů z maximálních 45 a mám 5 stupňů hodnocení? To by bylo mnohem praktičtější. 

<?php
$znamka = 5;
$body = 32;
$max = 45;

$krok = $max * 1.0 / $znamka;
while ($body > $krok) {
    $body -= $krok;
    $znamka -= 1;
}
echo $znamka;

Pokud chceš vkládat procenta, stačí zadat $max = 100;

Jak vidíš, funkce round() zde není potřebná.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
18. 2. 2016   #7
-
0
-

 Zkousel jsi excel?

<?
$stupne = 5;
$procenta = 74;
$krokovani = round(($procenta-1)/($stupne-1));
for($i = 0; $i<$stupne; $i++)
        {
        if($stupne == ($i+1)) {$hm = 100;}
        else                  {$hm = (($i+1) * $krokovani);}
        if ($i == 0) {$sm = 0;}
        else         {$sm =  ($i * $krokovani) +1;}
        $hranice[$i+1] = range($sm,$hm);
        }
?>

krok = round( (74-1) / (5-1) ) = round (73/4) = round (18.25) = 18
i | sm | hm | hm-sm
0 | 0 | 18 | 18 // if($i == 0) { $sm = 0; }
1 | 19 | 36 | 17
2 | 37 | 54 | 17
3 | 55 | 72 | 17
4 | 73 | 100 | 27 // if($stupne == ($i+1)) { $hm = 100;}

Ten program je evidentne uplne spatne. Znova a poradne! Cele to smaz, kazde pismenko a zacni od zacatku

Nahlásit jako SPAM
IP: 2001:718:2601:26c:24ec:e0...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Hodnotící algoritmus — založil Kobi

C++ a system() — založil Ezechiel

System() v C++ — založil

Os.system — založil Priwi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý