Nie jesteś zalogowany na forum.
Strony: 1
W sumie to nie wiem czy mogę to tutaj umieścić ale kod jest całkowicie mój (napisany od czystej kartki) więc mogę z nim zrobić co zechcę, jednak bardziej mi chodzi o to czy znajdę tu jakiś odzew..
Mianowicie chodzi o to jak jeszcze bardziej usprawnić poniższy kod i czy w ogóle się da:
<?php echo'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="author" content="Baczus" >
<meta name="copyright" content="Copyright CC BY-SA 2015 Baczus">
<!-- Creative Commons Uznanie autorstwa - Na tych samych warunkach (CC BY-SA)
Link do licencji dla nieznających:
http://creativecommons.org/licenses/by-sa/3.0/deed.pl
-->
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<title>10 >> 2</title>
<style type="text/css">
#error {
display: none;
}
</style>
</head>
<body style="background-color: black;">
<center><font color="white">
<font size="24px"><p style="font-family: monospace">Binaryzacja</font></p>
<form action="binaryzacja.php" method="post">
<center>
<font size="5">
Podaj liczbę: </font><input type="text" name="coto" /><br>
Na ilu bitach ją zapisać: <select name="iletego">
';
for ($i=0;$i<20;$i++){
$oktet = ($i+1)*8;
echo '<option>'.$oktet.'
';
}
echo '</select>
<input type="submit" name="submit" value="Prześlij"/>
</center>
</form><br>
<div id="error">';
$hasz = $_POST["coto"];
$bity = $_POST["iletego"];
$maximum = pow(2,$bity)-1;
echo '</div>';
$programowane = $hasz-$hasz%1;
$ile = $bity+1;
if (0<$hasz){
if ($hasz<$maximum){
if($hasz%1 == 0){
echo 'Poniższa linijka zamienia liczbę całkowitą na naturalną.<br>';
echo 'Wybrałeś liczbę <b>'.$hasz.'</b>, a program wczytuje liczbę <b>'.$programowane.'</b>';
for ($i=0;$i<$ile;$i++){
if ($i>0){
$liczba[$i] = $wynik[($i-1)]/2;
}
else {
$liczba[$i] = $programowane;
}
$b[$i] = $liczba[$i]%2;
if($b[$i]==1){
$wynik[$i] = $liczba[$i]-0.5;
}
else {
$wynik[$i] = $liczba[$i];
}
}
echo '<br><br><br>'.$programowane.' >> ';
for ($i=1;$i<$ile;$i++){
echo $b[$bity-$i];
if ($i%8==0){
echo ' ';
}
else {}
}
}
else {
echo 'Podałeś liczbę nie naturalną !';
}
}
else {
echo 'Podałeś za dużą liczbę ! ';
}
}
else {
echo 'Nie podałeś liczby ! ';
}
echo '
</font></center>
</body>
</html>
';
?>
PS div error musi zostać w takiej formie ponieważ Vertrigo ma problemy ze zrozumieniem przypisania zmiennych PHPu do tych przysłanych z formularza (kto działał na tym środowisku ten wie o co chodzi. Chyba, że jakoś to obszedł, jeśli tak to proszę powiedzieć jak).
Z góry dzięki za pomoc.
* Jeśli ktoś twierdzi, że łamię regulamin to proszę przeczytać 1 punkt regulaminu działu ("1. Dział przeznaczony jest do rozmów na tematy niezwiązane z serwisem PUN.pl") Regulamin działu
Wiadomość dodana po 15 min 35 s:
Sory ale właśnie znalazłem błąd:
$maximum = pow(2,$bity)-1;
...
if ($hasz<$maximum){
Więc 65535 nie jest tolerowane dla 16 bitowego zapisu, a powinno być, bo to 11111111 11111111 ...
Żeby to zniwelować wystarczy zrobić jedną z dwóch rzeczy:
1. Usunąć -1
LUB
2. Zmienić wyrażenie warunkowe przepisanego ifa na mniejsze lub równe.
Sorka ale ciągle sam szukam błędów
Offline
Raczej nikt Ci tu nie pomoże, osoby ogarniające PHP odeszły lub mało kiedy wchodzą.
Discord: pro14ab#3318
>> GitHub <<
Polecam
Offline
Ok zmieniło się dość nie wiele ale kod jest bardziej wydajny i przyzwoitszy dlatego postanawiam go tutaj zamieścić celem uaktualnienia tematu:
<?php echo'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="author" content="Baczus" >
<meta name="copyright" content="Copyright CC BY-SA 2015 Baczus">
<!-- Creative Commons Uznanie autorstwa - Na tych samych warunkach (CC BY-SA)
Link do licencji dla nieznających:
http://creativecommons.org/licenses/by-sa/3.0/deed.pl
-->
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<title>10 >> 2</title>
<style type="text/css">
#error {
display: none;
}
</style>
</head>
<body style="background-color: black;">
<center><font color="white">
<font size="24px"><p style="font-family: monospace">Binaryzacja</font></p>
<form action="binaryzacja.php" method="post">
<center>
<font size="5">
Podaj liczbę: </font><input type="text" name="coto" /><br>
Na ilu bitach ją zapisać: <select name="iletego">
';
for ($i=0;$i<20;$i++){
$oktet = ($i+1)*8;
echo '<option>'.$oktet.'
';
}
echo '</select>
<input type="submit" name="submit" value="Prześlij"/>
</center>
</form><br>
<div id="error">';
$hasz = $_POST["coto"];
$hasz = str_replace(",",".",$hasz);
$bity = $_POST["iletego"];
$maximum = pow(2,$bity);
echo '</div>';
$programowane = (int) $hasz;
$ile = $bity+1;
if (0<$hasz){
if ($hasz<$maximum){
if ($programowane == $hasz){
echo 'Wybrałeś liczbę <b>'.$hasz.'</b>';
}
else {
echo 'Wybrałeś liczbę <b>'.$hasz.'</b>, a program wczytuje liczbę <b>'.$programowane.'</b>';
}
for ($i=0;$i<$ile;$i++){
if ($i>0){
$liczba[$i] = $wynik[($i-1)]/2;
}
else {
$liczba[$i] = $programowane;
}
$b[$i] = $liczba[$i]%2;
if($b[$i]==1){
$wynik[$i] = $liczba[$i]-0.5;
}
else {
$wynik[$i] = $liczba[$i];
}
}
echo '<br><br><br>'.$programowane.' >> ';
for ($i=1;$i<$ile;$i++){
echo $b[$bity-$i];
if($i%8==0) echo ' ';
}
}
else {
echo 'Podałeś za dużą liczbę ! ';
}
}
else {
echo 'Nie podałeś liczby ! ';
}
echo '
</font></center>
</body>
</html>
';
?>
+ $hasz = str_replace(",",".",$hasz);
Przecież w PHP liczby wymierne (nie całkowite) deklaruje się przy pomocy znaku kropki, a nie przecinka. Na wszelki wypadek obsługa tych drugich też się przyda skoro nawet mi się zdarza o tym zapomnieć
+ $programowane = (int) $hasz;
Zamiana typu zmiennej, a raczej wymuszenie przejścia na inny typ zmiennej, gdzie ja miałem głowę, że nie zrobiłem tego wcześniej
+ if ($programowane == $hasz)
No ok wszystko fajnie, że teraz $programowanie jest intem ( ) ale jeśli ktoś wpisał złośliwie liczbę z przecinkiem (kropką) to przecież musi zobaczyć, że ten program nie obsługuje liczb wymiernych, tylko naturalne, bo sam sposób zapisu tych zmiennych byłby wątpliwy... Zresztą mniejsza w to, bo mi nie jest nawet potrzebna obsługa liczb ujemnych czy całkowitych
Niestety Powyższa modyfikacja nie jest w pełni odporna na idiotów (jak zwykł mawiać mój nauczyciel w technikum). Mianowicie chodzi o to, że gdy użytkownik wpisze np. "32miliony" to zostanie mu wyświetlony komunikat "Wybrałeś liczbę 32miliony", a nie "Wybrałeś liczbę 32miliony, a program wczytuje liczbę 32", mimo to przetworzona zostanie liczba 32 . Jednak w uszczegółowieniu tego ifa dla obsługi również tego typu zmian przy przejściu na inny typ zmiennej zwracam się o pomoc
- if($hasz%1 == 0)
Stało się to zbędne, gdyż stary fragment zastąpiło nadanie typu int dla zmiennej przetwarzanej w programie ($programowane)
Podsumowując
Dalej proszę o uważną interpretację kodu i może jednak znajdzie się ktoś, kto zna jakąś metodę na usprawnienie tego kodu, naprawę wspomnianego tutaj niedociągnięcia lub powie jak zwiększyć maksymalną liczbę, którą może przetworzyć ten program, bo 2^160-1 na pewno nie uciągnie, mimo iż teoretycznie użytkownik może ją wpisać
Liczę na was
Offline
Strony: 1