۲۱. این اولین تمرین از چهارگانهء «رشتههای مربع» است.
s = “abcd\nefgh\nijkl\nmnop”
- آینه عمودی: vert_mirror (یا vertMirror یا vert-mirror)
vert_mirror(s) => "dcba\nhgfe\nlkji\nponm"
- آینه افقی: hor_mirror (یا horizontal mirror یا hor-mirror)
hor_mirror(s) => "mnop\nijkl\nefgh\nabcd"
یا چاپ شده:
vertical mirror |horizontal mirror
abcd --> dcba |abcd --> mnop
efgh hgfe |efgh ijkl
ijkl lkji |ijkl efgh
mnop ponm |mnop abcd
وظیفه:
- دو تابع vert_mirror و hor_mirror را بنویسید.
- تابع دست بالای oper(fct, s) را بنویسید. در این تابع پارامتر fct مشخص می کند که کدامیک از دو تابع vert_mirror و hor_mirror باید روی رشته اعمال شود.
مثال:
s = "abcd\nefgh\nijkl\nmnop"
oper(vert_mirror, s) => "dcba\nhgfe\nlkji\nponm"
oper(hor_mirror, s) => "mnop\nijkl\nefgh\nabcd"
پاسخ:
<?php
function vertMirror($s)
{
// How to explode a multi-line string?
// https://stackoverflow.com/questions/6162912/how-to-explode-a-multi-line-string
return implode("\n", array_reverse(explode("\n", strrev($s))));
}
function horMirror($s)
{
return implode("\n", array_reverse(explode("\n", $s)));
}
function oper($fct, $s)
{
if ($fct == 'horMirror')
return horMirror($s);
else
return vertMirror($s);
}
echo "<pre>";
print_r(oper('horMirror', "abcd\nefgh\nijkl\nmnop\n"));
echo "</pre>";

mnop ijkl efgh abcd
توابع ()implode و ()explode و ()array_reverse در تمرینات قبلی معرفی شدند.
۲۲. این دومین تمرین از چهارگانهء «رشتههای مربع» است.
s = “abcd\nefgh\nijkl\nmnop”
- چرخش ساعتگرد ۱۸۰ درجه: rot
rot(s) => "ponm\nlkji\nhgfe\ndcba"
- چرخش ساعتگرد ۱۸۰ درجه و نقاط پراکنده: selfie_and_rot
selfie_and_rot(s) =>
"abcd....\nefgh....\nijkl....\nmnop....\n....ponm\n....lkji\n....hgfe\n....dcba"
یا چاپ شده:
|rotation |selfie_and_rot
|abcd --> ponm |abcd --> abcd....
|efgh lkji |efgh efgh....
|ijkl hgfe |ijkl ijkl....
|mnop dcba |mnop mnop....
....ponm
....lkji
....hgfe
....dcba
توجه داشته باشید که تعداد نقاط برابر با طول مشترک “abcd”، “efgh”، “ijkl”، “mnop” است.
وظیفه:
- دو تابع rot و selfie_and_rot را بنویسید.
- تابع دست بالای oper(fct, s) را بنویسید. در این تابع پارامتر fct مشخص می کند که کدامیک از دو تابع rot و selfie_and_rot باید روی رشته اعمال شود.
مثال:
s = "abcd\nefgh\nijkl\nmnop"
oper(rot, s) => "ponm\nlkji\nhgfe\ndcba"
oper(selfie_and_rot, s) => "abcd....\nefgh....\nijkl....\nmnop....\n....ponm\n....lkji\n....hgfe\n....dcba"
پاسخ:
<?php
function rot($s)
{
return strrev($s);
}
function selfieAndRot($s)
{
$z = explode("\n", ($s));
$dots = str_repeat(".", count($z));
foreach ($z as $valuel) {
$zz1[] = ($valuel . $dots);
}
$aa = explode("\n", strrev($s));
foreach ($aa as $valuel) {
$zz2[] = ($dots . $valuel);
}
return implode("\n", $zz1) . "\n" . implode("\n", $zz2);
}
function oper($fct, $s)
{
if ($fct == 'rot')
return rot($s);
else
return selfieAndRot($s);
}
echo "<pre>";
print_r(oper('selfieAndRot', "hSgdHQ\nHnDMao\nClNNxX\niRvxxH\nbqTVvA\nwvSyRu"));
echo "</pre>";

hSgdHQ...... HnDMao...... ClNNxX...... iRvxxH...... bqTVvA...... wvSyRu...... ......uRySvw ......AvVTqb ......HxxvRi ......XxNNlC ......oaMDnH ......QHdgSh
توابع ()implode و ()explode و ()strrev و ()str_repeat و ()count در تمرینات قبلی معرفی شدند.
۲۳. این سومین تمرین از چهارگانهء «رشتههای مربع» است.
s = “abcd\nefgh\nijkl\nmnop”
- تقارن با توجه به قطر اصلی: diag_1_sym (یا diag1Sym یا diag-1-sym)
diag_1_sym(s) => "aeim\nbfjn\ncgko\ndhlp"
- چر خش در جهت عقربه های ساعت 90 درجه: rot_90_clock (یا rot90Clock یا rot-90-clock)
rot_90_clock(s) => "miea\nnjfb\nokgc\nplhd"
-
selfie_and_diag1(s) (یا selfieAndDiag1 یا selfie-and-diag1): این یک رشته اولیه + رشته است که با تقارن نسبت به قطر اصلی به دست می آید.
s = "abcd\nefgh\nijkl\nmnop" -->
"abcd|aeim\nefgh|bfjn\nijkl|cgko\nmnop|dhlp"
یا چاپ شده:
selfie_and_diag1
abcd|aeim
efgh|bfjn
ijkl|cgko
mnop|dhlp
وظیفه:
- این توابع را بنویسید: diag_1_sym و rot_90_clock و selfie_and_diag1
-
تابع مرتبه بالای oper(fct, s) را بنویسید.
-
fct تابع یک متغیر f برای اعمال به رشته s است (fct یکی از diag_1_sym، rot_90_clock، selfie_and_diag1 خواهد بود)
مثال:
s = "abcd\nefgh\nijkl\nmnop"
oper(diag_1_sym, s) => "aeim\nbfjn\ncgko\ndhlp"
oper(rot_90_clock, s) => "miea\nnjfb\nokgc\nplhd"
oper(selfie_and_diag1, s) => "abcd|aeim\nefgh|bfjn\nijkl|cgko\nmnop|dhlp"
پاسخ:
<?php
function diag1Sym($s)
{
$a = explode("\n", $s);
foreach ($a as $key => $value) {
foreach ($a as $keya => $valuea) {
$zz1[$key][$keya] = $a[$keya][$key];
}
}
foreach ($zz1 as $value) {
$output[] = implode('', $value);
}
return implode("\n", $output);
}
function rot90Clock($s)
{
$s = diag1Sym($s);
return implode("\n", array_reverse(explode("\n", strrev($s))));
}
function selfieAndDiag1($s)
{
$a = explode("\n", $s);
$imp = explode("\n", diag1Sym($s));
foreach ($a as $key => $value) {
$output2[$key] = $a[$key] . "|" . $imp[$key];
}
return implode("\n", $output2);
}
function oper($fct, $s)
{
return $fct($s);
}
echo "<pre>";
print_r(oper('selfieAndDiag1', "abcd\nefgh\nijkl\nmnop"));
echo "</pre>";

abcd|aeim efgh|bfjn ijkl|cgko mnop|dhlp
توابع ()implode و ()explode و ()strrev و ()array_reverse و ()count در تمرینات قبلی معرفی شدند.
۲۴. این چهارمین تمرین از چهارگانهء «رشتههای مربع» است.
s = “abcd\nefgh\nijkl\nmnop”
- تقارن با توجه به مورب متقاطع اصلی: diag_2_sym (یا diag2Sym یا diag-2-sym)
diag_2_sym(s) => "plhd\nokgc\nnjfb\nmiea"
-
چرخش خلاف جهت عقربه های ساعت 90 درجه: rot_90_counter (یا rot90Counter یا rot-90-counter)
rot_90_counter(s)=> "dhlp\ncgko\nbfjn\naeim"
- selfie_diag2_counterclock (یا selfieDiag2Counterclock یا selfie-diag2-counterclock) رشته اولیه + رشته است که با تقارن نسبت به مورب اصلی متقاطع + چرخش خلاف جهت عقربه های ساعت 90 درجه به دست می آید.
s = "abcd\nefgh\nijkl\nmnop" -->
"abcd|plhd|dhlp\nefgh|okgc|cgko\nijkl|njfb|bfjn\nmnop|miea|aeim"
یا چاپ شده:
selfie_diag2_counterclock
abcd|plhd|dhlp
efgh|okgc|cgko
ijkl|njfb|bfjn
mnop|miea|aeim
وظیفه:
- این توابع را بنویسید: diag_2_sym و rot_90_counter و selfie_diag2_counterclock
-
تابع مرتبه بالا oper(fct,s) را بنویسید که در آن fct تابع یک متغیر f است که روی رشته s اعمال می شود (fct یکی از diag_2_sym، rot_90_counter، selfie_diag2_counterclock خواهد بود)
مثال:
s = "abcd\nefgh\nijkl\nmnop"
oper(diag_2_sym, s) => "plhd\nokgc\nnjfb\nmiea"
oper(rot_90_counter, s) => "dhlp\ncgko\nbfjn\naeim"
oper(selfie_diag2_counterclock, s) => "abcd|plhd|dhlp\nefgh|okgc|cgko\nijkl|njfb|bfjn\nmnop|miea|aeim"
پاسخ:
<?php
function transpose($array)
{
array_unshift($array, null);
return call_user_func_array('array_map', $array);
}
function rot90Counter($s)
{
$m = transpose(array_map("str_split", array_map("strrev", explode("\n", $s))));
return implode("\n", array_map(function ($x) {
return implode("", $x);
}, $m));
}
function diag2Sym($s)
{
return implode("\n", array_map("strrev", explode("\n", rot90Counter($s))));
}
function selfieDiag2Counterclock($s)
{
$ts = explode("\n", $s);
$tDiag = explode("\n", diag2Sym($s));
$stcounter = explode("\n", rot90Counter($s));
$result = [];
for ($i = 0; $i < count($ts); $i++) {
$result[$i] = $ts[$i] . "|" . $tDiag[$i] . "|" . $stcounter[$i];
}
return implode("\n", $result);
}
function oper($fct, $s)
{
return $fct($s);
}
echo "<pre>";
print_r(oper('selfieDiag2Counterclock', "abcd\nefgh\nijkl\nmnop"));
echo "</pre>";

abcd|plhd|dhlp efgh|okgc|cgko ijkl|njfb|bfjn mnop|miea|aeim
توابع ()implode و ()explode و ()strrev و ()array_reverse در تمرینات قبلی معرفی شدند.
۲۵. تابعی بنویسید که یک لیست را از لیست دیگر کم می کند و نتیجه را برمی گرداند.
arrayDiff([1,2],[1]) == [2]
arrayDiff([1,2,2,2,3],[2]) == [1,3]
پاسخ:
<?php
function arrayDiff($a, $b)
{
return array_values(array_diff($a, $b));
}
echo "<pre>";
print_r(arrayDiff([1, 2, 2, 2, 3, 3], [2]));
echo "</pre>";

Array ( [0] => 1 [1] => 3 [2] => 3 )
معرفی تابع ()array_values :
مثال:
<?php
$a=array("Name"=>"Peter","Age"=>"41","Country"=>"USA");
print_r(array_values($a));

Array ( [0] => Peter [1] => 41 [2] => USA )
سینتکس:
array_values(array)
مقادیر پارامتر :
پارامتر | توضیحات |
array |
ضروری. تعیین یک آرایه
|
معرفی تابع ()array_diff :
مثال:
<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
$result=array_diff($a1,$a2);
echo "<pre>";
print_r($result);
echo "</pre>";

Array
(
[d] => yellow
)
سینتکس:
array_diff(array1, array2, array3, ...)
مقادیر پارامتر :
پارامتر | توضیحات |
array1 |
ضروری. آرایه ای برای مقایسه
|
array2 |
ضروری. آرایه ای برای مقایسه
|
array3,… |
اختیاری. آرایه های بیشتر برای مقایسه با
|
۲۶. تابعی بنویسید که رشته ای از یک یا چند کلمه را دریافت کند و همان رشته را برگرداند، اما تمام کلمات پنج یا چند حرفی معکوس شوند. رشته های ارسال شده فقط از حروف و فاصله تشکیل شده است. فضاها فقط زمانی درج خواهند شد که بیش از یک کلمه وجود داشته باشد.
مثال:
spinWords( "Hey fellow warriors" ) => returns "Hey wollef sroirraw"
spinWords( "This is a test" ) => returns "This is a test"
spinWords( "This is another test" )=> returns "This is rehtona test"
پاسخ:
<?php
function spinWords(string $str)
{
return preg_replace_callback('/\w{5,}/', function ($matches) {
return strrev($matches[0]);
}, $str);
}
echo spinWords(" is currently unable to handle this request.");

is yltnerruc elbanu to eldnah this tseuqer.
تابعهای ()preg_replace_callback و ()strrev در تمرینهای قبلی معرفی شدند.
/\w{5,}/ یک عبارت RegEx است که برای پیدا کردن کلمات ۵ حرفی یا بیشتر استفاده شده است.
۲۷. تابعی بنویسید که اگر n یک عدد صحیح بود، رشته ای را با علامت های dash’-‘ قبل و بعد از هر عدد صحیح فرد برگرداند، اما رشته را با علامت خط تیره شروع یا پایان ندهد. اگر n منفی باشد، علامت منفی باید حذف شود. اگر n یک عدد صحیح نبود، یک مقدار خالی برگرداند.
مثال:
dashatize(274) -> '2-7-4'
dashatize(6815) -> '68-1-5'
پاسخ:
<?php
function dashatize(int $num): string
{
return trim(str_replace('--', '-', preg_replace('/([13579])/', '-$1-', $num)), '-');
}
echo dashatize(124434568789);

1-244-3-4-5-68-7-8-9
معرفی تابع ()str_replace :
-
اگر رشته مورد جستجو یک آرایه باشد، یک آرایه را برمی گرداند.
-
اگر رشته ای که باید جستجو شود یک آرایه است، پیدا کردن و جایگزینی با هر عنصر آرایه انجام می شود.
-
اگر هم find و هم replace آرایه باشند، و replace عناصر کمتری نسبت به find داشته باشد، یک رشته خالی به عنوان replace استفاده می شود.
-
اگر find یک آرایه و replace یک رشته باشد، رشته جایگزین برای هر مقدار find استفاده می شود.
str_replace(find,replace,string,count)
مثال:
<?php
echo str_replace("world","Peter","Hello world!");

Hello Peter!
مقادیر پارامتر :
پارامتر | توضیحات |
find |
ضروری. مقدار مورد نظر را مشخص می کند.
|
replace |
ضروری. مقدار را برای جایگزینی مقدار در find مشخص می کند.
|
string |
ضروری. رشته مورد جستجو را مشخص می کند.
|
count |
اختیاری. متغیری که تعداد تعویض ها را می شمارد.
|
۲۸. data و data1 دو رشته با رکورد بارندگی چند شهر برای ماهها از ژانویه تا دسامبر است. سوابق شهرها با n\ جدا می شوند. پس از نام هر شهر دو نقطه : قرار دارد.
وظیفه:
-
تابع: mean(town, strng) باید میانگین بارندگی شهر و داده strng یا data1 را برگرداند (در R و Julia این تابع avg را فراخوانی می کند).
-
تابع: (town، strng)variance باید واریانس بارندگی برای شهر town و داده strng یا data1 را برگرداند.
مثال:
mean("London", data), 51.19(9999999999996)
variance("London", data), 57.42(833333333374)
ملاحظات:
-
اگر میانگین یا واریانس توابع به عنوان شهر پارامتر شهری باشد که هیچ رکوردی ندارد -1 یا -1.0 (بسته به زبان) برمیگرداند.
-
کوتاه یا گرد نکنید: بسته به زبان، اگر abs(نتیجه_شما – نتیجه_تست) <= 1e-2 یا abs((نتیجه_آزمایش_تست) / نتیجه_تست) <= 1e-6 باشد، آزمون ها با موفقیت انجام می شود.
-
مرجع: http://www.mathsisfun.com/data/standard-deviation.html
پاسخ:
ابتدا فایل datafile.php را که حاوی اطلاعات بارندگی شهرها است ایجاد می کنیم.
<?php
$data1 =
"Rome:Jan 81.2,Feb 63.2,Mar 70.3,Apr 55.7,May 53.0,Jun 36.4,Jul 17.5,Aug 27.5,Sep 60.9,Oct 117.7,Nov 111.0,Dec 97.9\n"
. "London:Jan 48.0,Feb 38.9,Mar 39.9,Apr 42.2,May 47.3,Jun 52.1,Jul 59.5,Aug 57.2,Sep 55.4,Oct 62.0,Nov 59.0,Dec 52.9\n"
. "Paris:Jan 182.3,Feb 120.6,Mar 158.1,Apr 204.9,May 323.1,Jun 300.5,Jul 236.8,Aug 192.9,Sep 66.3,Oct 63.3,Nov 83.2,Dec 154.7\n"
. "NY:Jan 108.7,Feb 101.8,Mar 131.9,Apr 93.5,May 98.8,Jun 93.6,Jul 102.2,Aug 131.8,Sep 92.0,Oct 82.3,Nov 107.8,Dec 94.2\n"
. "Vancouver:Jan 145.7,Feb 121.4,Mar 102.3,Apr 69.2,May 55.8,Jun 47.1,Jul 31.3,Aug 37.0,Sep 59.6,Oct 116.3,Nov 154.6,Dec 171.5\n"
. "Sydney:Jan 103.4,Feb 111.0,Mar 131.3,Apr 129.7,May 123.0,Jun 129.2,Jul 102.8,Aug 80.3,Sep 69.3,Oct 82.6,Nov 81.4,Dec 78.2\n"
. "Bangkok:Jan 10.6,Feb 28.2,Mar 30.7,Apr 71.8,May 189.4,Jun 151.7,Jul 158.2,Aug 187.0,Sep 319.9,Oct 230.8,Nov 57.3,Dec 9.4\n"
. "Tokyo:Jan 49.9,Feb 71.5,Mar 106.4,Apr 129.2,May 144.0,Jun 176.0,Jul 135.6,Aug 148.5,Sep 216.4,Oct 194.1,Nov 95.6,Dec 54.4\n"
. "Beijing:Jan 3.9,Feb 4.7,Mar 8.2,Apr 18.4,May 33.0,Jun 78.1,Jul 224.3,Aug 170.0,Sep 58.4,Oct 18.0,Nov 9.3,Dec 2.7\n"
. "Lima:Jan 1.2,Feb 0.9,Mar 0.7,Apr 0.4,May 0.6,Jun 1.8,Jul 4.4,Aug 3.1,Sep 3.3,Oct 1.7,Nov 0.5,Dec 0.7";
$data2 =
"Rome:Jan 90.2,Feb 73.2,Mar 80.3,Apr 55.7,May 53.0,Jun 36.4,Jul 17.5,Aug 27.5,Sep 60.9,Oct 147.7,Nov 121.0,Dec 97.9\n"
."London:Jan 58.0,Feb 38.9,Mar 49.9,Apr 42.2,May 67.3,Jun 52.1,Jul 59.5,Aug 77.2,Sep 55.4,Oct 62.0,Nov 69.0,Dec 52.9\n"
."Paris:Jan 182.3,Feb 120.6,Mar 188.1,Apr 204.9,May 323.1,Jun 350.5,Jul 336.8,Aug 192.9,Sep 66.3,Oct 63.3,Nov 83.2,Dec 154.7\n"
."NY:Jan 128.7,Feb 121.8,Mar 151.9,Apr 93.5,May 98.8,Jun 93.6,Jul 142.2,Aug 131.8,Sep 92.0,Oct 82.3,Nov 107.8,Dec 94.2\n"
."Vancouver:Jan 155.7,Feb 121.4,Mar 132.3,Apr 69.2,May 85.8,Jun 47.1,Jul 31.3,Aug 37.0,Sep 69.6,Oct 116.3,Nov 154.6,Dec 171.5\n"
."Sydney:Jan 123.4,Feb 111.0,Mar 151.3,Apr 129.7,May 123.0,Jun 159.2,Jul 102.8,Aug 90.3,Sep 69.3,Oct 82.6,Nov 81.4,Dec 78.2\n"
."Bangkok:Jan 20.6,Feb 28.2,Mar 40.7,Apr 81.8,May 189.4,Jun 151.7,Jul 198.2,Aug 197.0,Sep 319.9,Oct 230.8,Nov 57.3,Dec 9.4\n"
."Tokyo:Jan 59.9,Feb 81.5,Mar 106.4,Apr 139.2,May 144.0,Jun 186.0,Jul 155.6,Aug 148.5,Sep 216.4,Oct 194.1,Nov 95.6,Dec 54.4\n"
."Beijing:Jan 13.9,Feb 14.7,Mar 18.2,Apr 18.4,May 43.0,Jun 88.1,Jul 224.3,Aug 170.0,Sep 58.4,Oct 38.0,Nov 19.3,Dec 2.7\n"
."Lima:Jan 11.2,Feb 10.9,Mar 10.7,Apr 10.4,May 10.6,Jun 11.8,Jul 14.4,Aug 13.1,Sep 23.3,Oct 1.7,Nov 0.5,Dec 10.7";
سپس آن را در فایل اصلی include می کنیم:
<?php
function extract_town($town1, $strng1)
{
// https://regex-generator.olafneumann.org/
$nnn = preg_replace_callback('/[a-zA-Z]+:/', function ($matches) {
return " " . $matches[0];
}, $strng1);
$mmm = explode(" ", $nnn);
$zzz = array_filter($mmm, function ($var) use ($town1) {
return preg_match("/\b$town1\b/i", $var);
});
$sss = implode("", $zzz);
// Replace multiple characters in one replace call:
// https://stackoverflow.com/questions/16576983/replace-multiple-characters-in-one-replace-call
$ggg = preg_replace('/[a-zA-Z]|:|,/', "", $sss);
$yyy = ltrim($ggg);
$bbb = explode(" ", $yyy);
return $bbb;
}
function mean($town, $strng)
{
if (preg_match("/$town/", $strng) === 0) {
return -1;
}
$aaa = extract_town($town, $strng);
// https://www.ajdesigner.com/php_code_statistics/variance_sample.php
// calculate the mean
$the_mean = array_sum($aaa) / count($aaa);
return $the_mean;
}
function variance($town, $strng)
{
if (preg_match("/$town/", $strng) === 0) {
return -1;
}
$aaa = extract_town($town, $strng);
// https://www.ajdesigner.com/php_code_statistics/variance_sample.php
// calculate the variance
$the_variance = 0.0;
$the_mean = array_sum($aaa) / count($aaa);
for ($i = 0; $i < count($aaa); $i++) {
//sum the array
$the_variance = $the_variance + ($aaa[$i] - $the_mean) * ($aaa[$i] - $the_mean);
}
$the_variance = $the_variance / (count($aaa) /*- 1.0*/);
//return the variance
return $the_variance;
}
include 'datafile.php';
// PHPStorm: undefined variables caused by include/require
// https://stackoverflow.com/questions/22476778/phpstorm-undefined-variables-caused-by-include-require
/**
* @var string $data1
* @var string $data2
*/
echo "<pre>";
print_r(variance("London", $data1));
echo "</pre>";

57.428333333333
تابع های ()preg_replace_callback و ()explode و ()array_sum و ()count در تمرینات قبلی معرفی شدند.
معرفی تابع ()preg_match :
preg_match(pattern, input, matches, flags, offset)
مثال:
<?php
$str = "Visit W3Schools";
$pattern = "/w3schools/i";
echo preg_match($pattern, $str);

1
مقادیر پارامتر :
پارامتر | توضیحات |
pattern |
ضروری. شامل یک عبارت منظم است که نشان می دهد چه چیزی باید جستجو شود.
|
input |
ضروری. رشته ای که جستجو در آن انجام خواهد شد.
|
matches |
اختیاری. متغیر مورد استفاده در این پارامتر با آرایهای پر میشود که شامل همه موارد منطبق است
|
flags |
اختیاری. مجموعه ای از گزینه ها که نحوه ساختار آرایه مطابقت را تغییر می دهد:
|
offset |
اختیاری. پیشفرض به 0 میرسد. نشان میدهد که تا چه اندازه در رشته برای شروع جستجو است. تابع ()preg_match منطبقاتی را که قبل از موقعیت داده شده در این پارامتر رخ می دهد، پیدا نمی کند.
|
۲۹. تابعی بنویسید که دو ماتریس مربع (N x N آرایه دو بعدی) را بپذیرد و مجموع آن دو را برگرداند. هر دو ماتریس ارسال شده به تابع دارای اندازه N x N (مربع) خواهند بود که فقط شامل اعداد صحیح هستند.
|1 2 3| |2 2 1| |1+2 2+2 3+1| |3 4 4|
|3 2 1| + |3 2 3| = |3+3 2+2 1+3| = |6 4 4|
|1 1 1| |1 1 3| |1+1 1+1 1+3| |2 2 4|
پاسخ:
<?php
function matrix_addition($ar1, $ar2): array
{
for ($row = 0; $row < count($ar1); $row++) {
for ($col = 0; $col < count($ar1[0]); $col++) {
$result[$row][$col] = ($ar1[$row][$col]) + ($ar2[$row][$col]);
}
}
return $result;
}
$a = array(
[10, 3, 5],
[2, 4, 6],
[2, 4, 9],
);
$b = array(
[1, 2, 5],
[3, 4, 3],
[3, 4, 6],
);
echo "<pre>";
print_r(matrix_addition($a, $b));
echo "</pre>";

Array ( [0] => Array ( [0] => 11 [1] => 5 [2] => 10 ) [1] => Array ( [0] => 5 [1] => 8 [2] => 9 ) [2] => Array ( [0] => 5 [1] => 8 [2] => 15 ) )
۳۰. شما باید تابعی بسازید که اگر پارامترهای داده شده مختصات جغرافیایی معتبری باشند اعتبار سنجی کند.
- -23, 25
- 24.53525235, 23.45235
- 04, -23.234235
- 43.91343345, 143
- 4, -3
- 23.234, – 23.4234
- 2342.43536, 34.324236
- N23.43345, E32.6457
- 99.234, 12.324
- 6.325624, 43.34345.345
- 0, 1,2
- 0.342q0832, 1.2324
پاسخ:
<?php
function isValidCoordinates($coordinates)
{
$mmm = explode(" ", $coordinates);
$mmm[0] = rtrim($mmm[0], ",");
if (
is_numeric($mmm[0])
&& is_numeric($mmm[1])
&& ($mmm[0] >= -90 && $mmm[0] <= 90)
&& ($mmm[1] >= -180 && $mmm[1] <= 180)
&& !preg_match("/e/i", $coordinates)
)
return "true";
else
return "false";
}
//$a = "0, 1,2";
$a = "-23, 25";
echo(isValidCoordinates($a));

true
معرفی تابع ()is_numeric :
سینتکس:
is_numeric(variable);
مثال:
<?php
$a = 32;
echo "a is " . is_numeric($a) . "<br>";
$b = 0;
echo "b is " . is_numeric($b) . "<br>";
$c = 32.5;
echo "c is " . is_numeric($c) . "<br>";
$d = "32";
echo "d is " . is_numeric($d) . "<br>";
$e = true;
echo "e is " . is_numeric($e) . "<br>";
$f = null;
echo "f is " . is_numeric($f) . "<br>";
?>

a is 1
b is 1
c is 1
d is 1
e is
f is
مقادیر پارامتر :
پارامتر | توضیحات |
variable |
ضروری. متغیری را برای بررسی مشخص می کند.
|
۳۱. با توجه به آرایه ای از اعداد صحیح، اعدادی را که به تعداد فرد ظاهر می شود، پیدا کنید.
پاسخ:
روش اول:
<?php
function findIt(array $seq)
{
$y = array_count_values($seq);
foreach ($y as $value) {
if ($value % 2 !== 0)
return array_search($value, $y);
}
}
echo "<pre>";
print_r(findIt([20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5]));
echo "</pre>";

5
روش دوم:
<?php
function findIt(array $seq)
{
$nums = array_count_values($seq);
foreach ($nums as $key => $val) {
if ($val % 2) {
return $key;
}
}
}
echo "<pre>";
print_r(findIt([20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5]));
echo "</pre>";

5
تابع ()array_search در تمرین های قبلی معرفی شد.
۳۲. آرایه ای از اعداد به شما داده می شود. شما باید اعداد فرد را به ترتیب صعودی مرتب کنید در حالی که اعداد زوج را در موقعیت اصلی خود نگه دارید.
مثال:
[7, 1] => [1, 7]
[5, 8, 6, 3, 4] => [3, 8, 6, 5, 4]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] => [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]
پاسخ:
<?php
function sortArray(array $arr)
{
$even = $odd = array();
// Reset keys:
foreach ($arr as $a) {
if ($a % 2 == 0)
$even[] = $a;
else
$odd[] = $a;
}
sort($odd);
$newArr = [];
for ($i = 0; $i < count($arr); $i++) {
if ($arr[$i] % 2 == 0) {
$newArr[] = array_shift($even);
} else {
$newArr[] = array_shift($odd);
}
}
return $newArr;
}
echo "<pre>";
print_r(sortArray([5, 3, 2, 8, 1, 4]));
echo "</pre>";

Array
(
[0] => 1
[1] => 3
[2] => 2
[3] => 8
[4] => 5
[5] => 4
)
معرفی تابع ()array_shift :
array_shift(array)
مثال:
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_shift($a);
echo "<pre>";
print_r ($a);
echo "</pre>";

red
Array ( [b] => green => blue )
مقادیر پارامتر :
پارامتر | توضیحات |
array |
ضروری. یک آرایه را مشخص می کند.
|