PDA

View Full Version : نحوه فرمول نویسی با پی اچ پی (حل شد)



saeed-71
جمعه 30 خرداد 1393, 18:42 عصر
سلام.
همیچین فرمولی رو چجوری میشه با پی اچ پی محاسبه کرد؟

* نحوه محاسبه نمره تراز:نمره خام : x، میانگین: x،انحراف استاندارد: S،تعداد شرکت کنندگان: N، نمره تراز:T


120354

* نحوه محاسبه تراز کل:

120355

cpuram
جمعه 30 خرداد 1393, 19:23 عصر
فقط x̄ میانگین رو تونستم.چقدر سخته :لبخند:

<?php
$a = array(2, 4, 6, 8);
echo "average(a) = " . array_sum($a)/count($a) . PHP_EOL;

?>



z چی هست؟

omidabedi
جمعه 30 خرداد 1393, 20:07 عصر
این کلیه ی توابع ریاضی هست که توی php تعریف شده

http://www.php.net//manual/en/ref.math.php

بعلاوه بگردید شاید libraryای کلاسی چیزی باشه

saeed-71
شنبه 31 خرداد 1393, 10:51 صبح
این کاملتره
120368

120369

120370

گیز کردم تو محاسباتش عجیب !

MMSHFE
شنبه 31 خرداد 1393, 13:01 عصر
جواب مثالی که دادین اشتباهه. کد رو ببینید:

function T($grade, $grades) {
$xBar = array_sum($grades) / count($grades);
$sigma = 0;
foreach($grades as $g) {
$sigma += ($g - $xBar) * ($g - $xBar);
}
$s = sqrt($sigma / count($grades));
$z = ($grade - $xBar) / $s;
$t = 1000 * $z + 5000;
return $t;
}

echo round(T(100, array(100, 200, 300)), 2);
// Output: 3775.26
حالا اگه ضرایب رو هم میخواین اثر بدین، از این کد استفاده کنید:

function T($grade, $grades) {
$sum = 0;
$zSum = 0;
foreach($grades as $g) {
$sum += $grade[0] * $grade[1];
$zSum += $grade[1];
}
$xBar = $sum / $zSum;
$sigma = 0;
foreach($grades as $g) {
$sigma += ($g[0] * $g[1] - $xBar) * ($g[0] * $g[1] - $xBar);
}
$s = sqrt($sigma / $zSum);
$z = ($grade[0] * $grade[1] - $xBar) / $s;
$t = 1000 * $z + 5000;
return $t;
}

$grades = array(
'adabiat' => array(100, 4),
'arabi' => array(-33, 2),
'dini' => array( 33, 3),
'zaban' => array(100, 2),
'riazi' => array( 0, 12),
'fizik' => array( 33, 9),
'shimi' => array(-16, 6),
);

echo round(T($grades['adabiat'], $grades), 2);
// Output: 8425.32

saeed-71
شنبه 31 خرداد 1393, 13:22 عصر
واقعا ممنونم.فقط یکم گیج کنندست.
ببینید من تو دیتابیسم هزار نفر وجود دارند.
یعنی 100 تا نمره خام یا درصد تو هر فیلد.
این تابع دومی تراز هر درس رو جدگونه میده؟یا تراز کل رو میده؟
من هزار تا رکورد دارم چجوری اونا رو واکشی کنم و از این تابع استفاده کنم؟

MMSHFE
شنبه 31 خرداد 1393, 13:24 عصر
این الان تراز هر درس رو در بین تمام دروس میده. میدونم کاربردی نیست و فرمولی که شما میخواین نیست. فقط خواستم نحوه محاسبه رو بدونید. میتونید همین رو تغییر بدین تا فرمول محاسبه تراز کل رو بدست بیارین. اگه نتونستین هم فرمول کامل که تراز یک شرکت کننده رو در بین تمام شرکت کننده ها با احتساب ضرایب دروس محاسبه میکنه، اینجا بگذارین تا معادل PHP اون رو بگم. البته خیلی ساده است و بعید میدونم خودتون نتونین حساب کنین.

saeed-71
شنبه 31 خرداد 1393, 13:32 عصر
مشکل من اینجاست که چجوری اینا رو از دیتابیس بیرون بکشم و بریزم تو این ارایه
مثلا این 3 روکورد رو محاسبه کنم.
120371

MMSHFE
شنبه 31 خرداد 1393, 13:37 عصر
این که دیگه خیلی سادست:

$result = mysql_query('SELECT * FROM `grades`');
$grades = array();
if($result) {
while($row = mysql_fetch_assoc($result)) {
$grades[] = array(
'adabiat' => array($row['adabiat'], $row['zadabiat']),
'arabi' => array($row['arabi'] , $row['zarabi'] ),
'dini' => array($row['dini'] , $row['zdini'] ),
'zaban' => array($row['zaban'] , $row['zzaban'] ),
'riazi' => array($row['riazi'] , $row['zriazi'] ),
'fizik' => array($row['fizik'] , $row['zfizik'] ),
'shimi' => array($row['shimi'] , $row['zshimi'] ),
);
}
mysql_free_result($result);
}
print_r($grades);

saeed-71
شنبه 31 خرداد 1393, 13:52 عصر
اینجوری میشه دیگه



$sql = $connect->query('SELECT * FROM `karnameriazi`');
$grades = array();
if($sql) {
foreach($sql as $row) {
$grades[] = array(
'adabiat' => array($row['adabiat'], $row['zadabiat']),
'arabi' => array($row['arabi'] , $row['zarabi'] ),
'dini' => array($row['dini'] , $row['zdini'] ),
'zaban' => array($row['zaban'] , $row['zzaban'] ),
'riazi' => array($row['riazi'] , $row['zriazi'] ),
'fizik' => array($row['fizik'] , $row['zfizik'] ),
'shimi' => array($row['shimi'] , $row['zshimi'] ),
);
}
}


function T($grade, $grades) {
$sum = 0;
$zSum = 0;
foreach($grades as $g) {
$sum += $grade[0] * $grade[1];
$zSum += $grade[1];
}
$xBar = $sum / $zSum;
$sigma = 0;
foreach($grades as $g) {
$sigma += ($g[0] * $g[1] - $xBar) * ($g[0] * $g[1] - $xBar);
}
$s = sqrt($sigma / $zSum);
$z = ($grade[0] * $grade[1] - $xBar) / $s;
$t = 1000 * $z + 5000;
return $t;
}

echo round(T($grades['adabiat'], $grades), 2).'<br>';


print_r($grades);



اما ارور Notice: Undefined offset: 0 میده

MMSHFE
شنبه 31 خرداد 1393, 14:01 عصر
نه چون الان آرایه grades شما دوبعدیه. باید قسمت فراخوانی تابع T (قسمت آخر) رو اینطوری بنویسید:

foreach($grades as $grade) {
echo '<p>' . round(T)$grade['adabiat'], $grade), 2) . '/p>' . PHP_EOL;
}

saeed-71
شنبه 31 خرداد 1393, 14:25 عصر
لطف بزرگی در حقم کردید.ممنونم.
اگر من بخوام هر شخص تراز درس خودش رو ببینه چی؟
stuid هر شخص منحصر به فرده.
بخوام ترازش محاسبه بشه ولی فقط تراز خودش رو ببینه.

saeed-71
شنبه 31 خرداد 1393, 16:41 عصر
این کد کجاش اشتباهه؟
میخوام stuid و azmoon هم داخلش باشه و چاپ کنم.



<?php
require_once '../config.php';
$sql = $connect->query('SELECT * FROM `karnameriazi`');
$grades = array();
if($sql) {
foreach($sql as $row) {
$grades[] = array(
'adabiat' => array($row['adabiat'], $row['zadabiat'] ,$row['stuid'] , $row['azmoon'] ),
'arabi' => array($row['arabi'] , $row['zarabi'] ,$row['stuid'] , $row['azmoon'] ),
'dini' => array($row['dini'] , $row['zdini'] ,$row['stuid'] , $row['azmoon'] ),
'zaban' => array($row['zaban'] , $row['zzaban'] ,$row['stuid'] , $row['azmoon'] ),
'riazi' => array($row['riazi'] , $row['zriazi'] ,$row['stuid'] , $row['azmoon'] ),
'fizik' => array($row['fizik'] , $row['zfizik'] ,$row['stuid'] , $row['azmoon'] ),
'shimi' => array($row['shimi'] , $row['zshimi'] ,$row['stuid'] , $row['azmoon'] ),
);
}
}


function T($grade, $grades) {
$sum = 0;
$zSum = 0;
foreach($grades as $g) {
$sum += $grade[0] * $grade[1];
$zSum += $grade[1];
$stuid = $grade[2];
$azmoon = $grade[3];
}
$xBar = $sum / $zSum;
$sigma = 0;
foreach($grades as $g) {
$sigma += ($g[0] * $g[1] - $xBar) * ($g[0] * $g[1] - $xBar);
}
$s = sqrt($sigma / $zSum);
$z = ($grade[0] * $grade[1] - $xBar) / $s;
$t = 1000 * $z + 5000 .'<br>'.$stuid.'<br>'.$azmoon;
return $t;
}

foreach($grades as $grade) {
echo '<p>' . round(T($grade['adabiat'], $grade), 2) . '</p>' . PHP_EOL;
echo '';
}

echo '<pre>';
print_r($grades);
echo '</pre>';


?>

saeed-71
شنبه 31 خرداد 1393, 22:52 عصر
درست شد شکر خدا.
کد نهایی این شد که تو دیتابیسم ذخیره بشه



<?php
require_once '../config.php';
$sql = $connect->query('SELECT * FROM `karnameriazi`');
$grades = array();
if($sql) {
foreach($sql as $row) {
$grades[] = array(
'adabiat' => array($row['adabiat'], $row['zadabiat'] ,$row['stuid'] , $row['azmoon'] ),
'arabi' => array($row['arabi'] , $row['zarabi'] ,$row['stuid'] , $row['azmoon'] ),
'dini' => array($row['dini'] , $row['zdini'] ,$row['stuid'] , $row['azmoon'] ),
'zaban' => array($row['zaban'] , $row['zzaban'] ,$row['stuid'] , $row['azmoon'] ),
'riazi' => array($row['riazi'] , $row['zriazi'] ,$row['stuid'] , $row['azmoon'] ),
'fizik' => array($row['fizik'] , $row['zfizik'] ,$row['stuid'] , $row['azmoon'] ),
'shimi' => array($row['shimi'] , $row['zshimi'] ,$row['stuid'] , $row['azmoon'] ),
);
}
}




function T($grade, $grades) {
$sum = 0;
$zSum = 0;
foreach($grades as $g) {
$sum += $grade[0] * $grade[1];
$zSum += $grade[1];
}
$xBar = $sum / $zSum;
$sigma = 0;
foreach($grades as $g) {
$sigma += ($g[0] * $g[1] - $xBar) * ($g[0] * $g[1] - $xBar);
}
$s = sqrt($sigma / $zSum);
$z = ($grade[0] * $grade[1] - $xBar) / $s;
$t = 1000 * $z + 5000;
return $t;
}

foreach($grades as $grade) {


echo '<hr>';

$TerazAdabiat = round(T($grade['adabiat'], $grade), 2) ;
echo 'adabiat'.$TerazAdabiat;
echo '<br>';
$stuid = $grade['adabiat'][2];

echo '<hr>';

$TerazArabi = round(T($grade['arabi'], $grade), 2) ;
echo 'arabi'.$TerazArabi;

echo '<hr>';

$TerazDini = round(T($grade['dini'], $grade), 2) ;
echo 'dini'.$TerazDini;


echo '<hr>';

$TerazZaban = round(T($grade['zaban'], $grade), 2) ;
echo 'zaban'.$TerazZaban;

echo '<hr>';

$TerazRiazi = round(T($grade['riazi'], $grade), 2) ;
echo 'riazi'.$TerazRiazi;


echo '<hr>';

$TerazFizik = round(T($grade['fizik'], $grade), 2) ;
echo 'fizik'.$TerazFizik;


echo '<hr>';

$TerazShimi = round(T($grade['shimi'], $grade), 2) ;
echo 'shimi'.$TerazShimi;

echo '<hr>';


$sql5 = $connect->prepare("INSERT INTO `teraz` (stuid,tadabiat,tarabi,tdini,tzaban,triazi,tfizik, tshimi) VALUES (:stuid,:tadabiat,:tarabi,:tdini,:tzaban,:triazi,: tfizik,:tshimi)");
if($sql5->execute(array(
":stuid"=>$stuid,
":tadabiat"=>$TerazAdabiat,
":tarabi"=>$TerazArabi,
":tdini"=>$TerazDini,
":tzaban"=>$TerazZaban,
":triazi"=>$TerazRiazi,
":tfizik"=>$TerazFizik,
":tshimi"=>$TerazShimi
))){
echo 'ok';
}


}


echo '<pre>';
print_r($grades);
echo '<hr>';
echo '</pre>';


?>

saeed-71
یک شنبه 01 تیر 1393, 11:08 صبح
تو این فرمول ضرایب هر درس گذاشته نمیشن.

http://barnamenevis.org/attachment.php?attachmentid=120368&d=1403332084

فرمولی که شما لطف کردید و نوشتید اینه اما ضرایب تاثیر ندارن.چیکار باید کرد برا اصلاحش.من اومدم اصلاحش کنم زدم خرابش کردم و چیز عجیبی به دست اومد



function T($grade, $grades) { $sum = 0; $zSum = 0; foreach($grades as $g) { $sum += $grade[0] * $grade[1]; $zSum += $grade[1]; } $xBar = $sum / $zSum; $sigma = 0; foreach($grades as $g) { $sigma += ($g[0] * $g[1] - $xBar) * ($g[0] * $g[1] - $xBar); } $s = sqrt($sigma / $zSum); $z = ($grade[0] * $grade[1] - $xBar) / $s; $t = 1000 * $z + 5000; return $t;} $grades = array( 'adabiat' => array(100, 4), 'arabi' => array(-33, 2), 'dini' => array( 33, 3), 'zaban' => array(100, 2), 'riazi' => array( 0, 12), 'fizik' => array( 33, 9), 'shimi' => array(-16, 6),); echo round(T($grades['adabiat'], $grades), 2);// Output: 8425.32



این فرمول درسته اما مشکل من اینه که قسمت ورودی دوم تابع که 3 عدد 100و200و300 هستن رو چجوری از دیتابیس بخونم و اینجا قرار بدم مجموعشونو



function T($grade, $grades) { $xBar = array_sum($grades) / count($grades); $sigma = 0; foreach($grades as $g) { $sigma += ($g - $xBar) * ($g - $xBar); } $s = sqrt($sigma / count($grades)); $z = ($grade - $xBar) / $s; $t = 1000 * $z + 5000; return $t;} echo round(T(100, array(100, 200, 300)), 2);// Output: 3775.26

saeed-71
سه شنبه 03 تیر 1393, 10:18 صبح
کسی از دوستان نمیدونه؟

MMSHFE
سه شنبه 03 تیر 1393, 10:28 صبح
ببینید، شما فرمول ریاضی رو دارین. معادلهای PHP اونها رو هم دارین. دیگه باید خودتون بتونید پیاده سازی کنید. قراره اینجا سورس آماده تحویل بدیم؟

royash
یک شنبه 16 آذر 1393, 10:14 صبح
سلام لطفا برنامه محاسبه میانگین ماکزیمم مینیمم را در PHPبدید.

MMSHFE
یک شنبه 16 آذر 1393, 10:19 صبح
شما مقادیر رو توی آرایه ذخیره کنید و بعد با توابع min و max و array_sum و count میتونید به ترتیب مینیمم، ماکزیمم، جمع مقادیر و تعداد عناصر رو بدست بیارین و با تقسیم جمع بر تعداد هم به میانگین برسین.

hamseda03
دوشنبه 15 اردیبهشت 1399, 14:42 عصر
با سلام هر چند قدیمی هست اما یک سوال برام پیش امده:
اگر بخواهیم تراز کل رو بین این نتایج به دست بیارم آیا باید مطابق فرمول زیر عمل کنیم که در پست اول گذاشته شده؟
https://barnamenevis.org/attachment.php?attachmentid=120355&d=1403275266
یعنی ترازهای هر درس رو در ضریبش ضرب کنیم و بعد تقسیم کنیم بر جمع ضریب درسها.
آیا همین کافی هست؟