چالش برنامه نویسی NerdStudent

پرسیده شده
فعالیت 1221 روز پیش
دیده شده 1124 بار
3

سوال )‌  مانند نمونه سه آرایه PHP Multidimensional Arrays  داده شده است . با توجه به آرایه مذکور یک تابع جمع برای بدست آوردن جمع نمرات دانشجویان Nerd در ستون دوم (marks) از هر سطر با ID مشخص شده ( 920 , 921 , 922 ) بنویسید و نیز تابع ای دیگر برای جایگزینی مقادیر جمع بدست آمده به داخل فیلد marks بنویسید به گونه ای که حاصل بدست آمده در فیلد marks جایگزین مقادیر قبلی شود همچنین در یکی از توابع بررسی نمائید که اگر کاربر در آرایه ورودی بیشتر از ۷ عدد وارد کرد رشته ی  "that's bullshit "  چاپ شود و  نیز خروجی را مانند نمونه چاپ نمائید :‌

 

آرایه های موجود طبق صورت سوال :‌

 

$studentAndMarks = array (
    920 => array(
        "name" => "SMITH",
        "marks" => [2,6,7,8,9,9,12] // 53
    ),
    921 => array (
        "name" => "JOHNSON",
        "marks" => [2,6,7,8,9,10,12] // 54
    ),
    922 => array (
        "name" => "WILLIAMS",
        "marks" => [2,6,7,8,9,8,12] // 52
    )
);

 

خروجی های اول و دوم  به ترتیب ( چاپ کردن خروجی ها )‌ :‌

خروجی اول

array(3) { [920]=> array(2) { ["name"]=> string(5) "SMITH" ["marks"]=> int(53) } [921]=> array(2) { ["name"]=> string(7) "JOHNSON" ["marks"]=> int(54) } [922]=> array(2) { ["name"]=> string(8) "WILLIAMS" ["marks"]=> int(52) } } 

یا خروجی در حالت console ویرایشگر vscode حالت بالا به شکل زیر خواهد بود :‌

array(3) {
  [920]=>
  array(2) {
    ["name"]=>
    string(9) "sohrabian"
    ["marks"]=>
    int(53)
  }
  [921]=>
  array(2) {
    ["name"]=>
    string(6) "khoram"
    ["marks"]=>
    int(54)
  }
  [922]=>
  array(2) {
    ["name"]=>
    string(4) "ziai"
    ["marks"]=>
    int(52)
  }
}

 

خروجی دوم ( باید به شکل زیر چاپ شود )‌ :‌

/*
920 name : SMITH ---marks : 53
921 name : JOHNSON ---marks : 54
922 name : WILLIAMS ---marks : 52 
/*

 

 

سورس الگوریتم مثال بالا :‌

<?php

function sumMarks (Array $marks) {
            $digit_marks = 0 ;
            if (count($marks)<=7) {
                for ($i=0; $i < count($marks) ; $i++) {
                    $digit_marks = $marks[$i] + $digit_marks;
                }
                return $digit_marks;
            }else{
                return "that's bullshit";
            }
        }
    
function getArray (Array $array) { 
    $studentAndMarks = $array ;
    $keysID = array_keys($studentAndMarks);
    for( $i=0;$i<count($keysID);$i++) {
        $keys = array_keys($studentAndMarks[$keysID[$i]]);
        if (is_array($studentAndMarks[$keysID[$i]]["marks"])) {
            // var_dump($studentAndMarks[$keysID[$i]]["marks"]);
            echo "<br>";
            $studentAndMarks[$keysID[$i]]["marks"]=sumMarks($studentAndMarks[$keysID[$i]]["marks"]);
        }
    }
    return $studentAndMarks;
    // multiSort($studentAndMarks);
}    



$studentAndMarks = array (
    920 => array(
        "name" => "SMITH",
        "marks" => [2,6,7,8,9,9,12] // 53
    ),
    921 => array (
        "name" => "JOHNSON",
        "marks" => [2,6,7,8,9,10,12] // 54
    ),
    922 => array (
        "name" => "WILLIAMS",
        "marks" => [2,6,7,8,9,8,12] // 52
    )
);


// var_dump($studentAndMarks);
// echo "<br><br><br>";
var_dump(getArray($studentAndMarks));
echo "<br><br><br>";

foreach (getArray($studentAndMarks) as $key => $value) {
    echo "$key " ;
    foreach ($value as $key => $val) {
        if($key == "name") {
            echo "$key :  $val ---";
        }else{
            echo "$key : $val ";
        }
    } echo "<br>";
}

 

 

در انتها متذکر می شوم جواب دادن به آزمون های سون لرن به تنهایی باعث موفقیت شما نخواهند شد بلکه دست و پنجه نرم کردن با الگوریتم دید شما و تفکر الگوریتمیک را به شما خواهند داد .

فایل پیوست

حسن سهرابیان
حسن سهرابیان

14 بهمن 98

1
حذف شده

سلام و عرض ادب

دمت گرم آقایی سهرابیان واقعا چالش خوب بود.مریضم هستم ولی دوتا پتو کشیدم دورم شروع کردم کد زدن.چالش جذابی بود.سعی کردم  با کد شما متفاوت باشه حالا اگه درست صورت مسئله رو متوجه شدم باشم.

# function for sum Marks's fields 

function sumMarks($arr)
{
    foreach ($arr as $id => $value) {
        $sum = array_sum($value['marks']);
        $arr[$id]['marks'] = $sum;
    }
    return $arr;
}

# function for 7 length and print new mark's value

function forSumMarksFields(array $arr)
{
    foreach($arr as $id => $value){
        $length = count($value['marks']);
        if($length <= 7){
            continue;
        }else{
            echo "that's bullshit";
         die();
        }
    }
    return sumMarks($arr);   
}
print_r(forSumMarksFields($studentAndMarks));
# outline Array ( [920] => Array ( [name] => SMITH [marks] => 53 ) [921] => Array ( [name] => JOHNSON [marks] => 54 ) [922] => Array ( [name] => WILLIAMS [marks] => 52 ) )

#function for print like your example
 function printArr($arr) {
     foreach ($arr as $id => $value) {
        echo $id ." name : ". $value['name'] . " ---marks : " . $value['marks']. "<br>";
       
     }
    
 }
 echo "<br>";
 echo "<br>";
printArr(forSumMarksFields($studentAndMarks));
// outline:
# 920 name : SMITH ---marks : 53
# 921 name : JOHNSON ---marks : 54
# 922 name : WILLIAMS ---marks : 52

 

فایل پیوست

جبار محمدی

توسط

جبار محمدی

14 بهمن 98

حذف شده
خیلی عالی که مشارکت دارید و الگوریتم خودتون رو به اشتراک میزارید . واقعا به نحو احسنت از cash مرورگر و cpu سرور و کلاینت استفاده می کنید این رو به خاطر استفاده از تابع sum_array و حلقه ی foreach عرض می کنم ( این نکته برای کسانی که در آینده به الگوریتم شما توجه دارند و الگوریتم شما رو با بنده مقایسه کنند ) . موفق باشید .
حسن سهرابیان

15 بهمن 98

حذف شده
ممنون از شما که وقتتون در اختیار ما میزارین.واقعا مهم ترین چیز تو برنامه نویس خوب بودن تفکر حل مسئلس که شما با چالشاتون تو این راه کمک میکنید.البته در نهایت ما به سمت استفاده از پکیچ های میریم :)))
جبار محمدی

15 بهمن 98

حذف شده
سلام. جناب سهرابیان، این دو موردی که گفتید دوستمون استفاده کردن هیچ ارتباطی با کش مروگر و همچنین کلاینت کاربر نداره و چون کدهای بک اند روی کامپیوتر سرور تفسیر میشن و خروجی اون بصورت هدر و plain text به مرورگر کاربر بعنوان پاسخ از طریق http response ارسال میشه.
محسن موحد

15 بهمن 98

حذف شده
بله دقیقا همینطوری که آقای موحد عرض کردن هست . من از این بابت معذرت می خوام . البته cpu سرور درگیر میشه به طور کل حالا این سرور میتونه خانگی باشه یا از طرف isp باشه .
حسن سهرابیان

20 بهمن 98

0
حذف شده

ایا استفاده از فانکشن های تو در تو درست هست؟


SumMarks($studentAndMarks);

function SumMarks($arrays){

    foreach($arrays as $key=>$array){
        $arrays[$key]['marks']=array_sum($array["marks"]);
    }

    printArray($arrays);

}

function CheckMarks($arrays)
{
    foreach ($arrays as $key=>$array) {
        if (sizeof($array["marks"]) >7) {
            echo  "Arrya Index " . $key ." that's bullshit";
        }
    }
}


function printArray($arrays)
{
   /*
        920 name : SMITH ---marks : 53
        921 name : JOHNSON ---marks : 54
        922 name : WILLIAMS ---marks : 52 
    */
    foreach($arrays as $key=>$array){
        echo $key ." name : " . $array["name"] . "---marks : " . $array["marks"] . "<br>";
    }
}

 

فایل پیوست

Daniyal Amiri

توسط

Daniyal Amiri

17 اسفند 98

حذف شده
سلام شما در فانکشن جمع باید تابع ای که میاد بررسی میکنه اعضا ۷ تا هست رو قرار بدید
0
حذف شده
function sumArrMarks($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        $studentAndMarks[$key]['marks'] = array_sum($value["marks"]);
    }
    return $studentAndMarks;
}
function more7($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        if (sizeof($value['marks']) > 7){
            echo "that's bullshit";
            die();
        }
    }
    print_r(sumArrMarks($studentAndMarks));
}
function printRr($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        echo "<br>".$key . " name: " .$value['name'] ." --- marks: ".$value['marks'] ;
    }
}
more7($studentAndMarks);
printRr($studentAndMarks);
فایل پیوست

علیرضا جهانی

توسط

علیرضا جهانی

7 دی 99