1.uzdevums


Необходимо написать функцию, которая переделает входной массив номеров в номерные диапазоны.

Входные параметры(массив номеров):
[
1191, 1195, 1196, 1199, 1201, 1202, 1203, 1205, 1206, 1207, 1208, 1209, 1210,
1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1224, 1225, 1228, 1229, 1231,
1234, 1239, 1240, 1248, 1251, 1252, 1253, 1254, 1256, 1260, 1262, 1267, 1269,
1270, 1276, 1281, 1301, 1302, 1303, 1304, 1305, 1307, 1308, 1309, 1310, 1312,
1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1325, 1330, 1331,
1334, 1336, 1337, 1339, 1347
]

Результат(строка):
1191; 1195-1196; 1199; 1201-1203; 1205-1210; 1212-1219; 1224-1225; 1228-1229; 1231;
1234; 1239-1240; 1248; 1251-1254; 1256; 1260; 1262; 1267; 1269-1270; 1276; 1281;
1301-1305; 1307-1310; 1312-1321; 1323; 1325; 1330-1331; 1334; 1336-1337; 1339; 1347

Kā rezultātā tapa šāda blokshēma:

Blokshēma - numbersarr2range

Blokshēma – numbersarr2range

Kā rezultātā tapa programmas kods:

/**
f-ja numbersarr2range()
@param $p_array - ienākošais numuru masīvs (pieņem, ka ienāk sakārtots masīvs, lai gan to kātošanu jau funkcijā var izpildīt)

@return $v_rezultats - Atgriež simbolu virkni ar numura masīva intervāliem, kas atdalīti ar semikolu
*/
function numbersarr2range($p_array) {
$v_rezultats = "";
//sort($p_array);
//Piešķir sākotnējās indeksu vērtības
$v_start_ind	= 0;
$v_end_ind 		= 1;
// $v_current_ind	= 0; // ja nepieciešams iepriekš definēt mainīgo

// Iegūst masīva elementu skaitu
$v_max_el_sk	= count($p_array) - 1;

// Ejam cauri katram masīva elementam, kamēr iziet visus (Ja intervāls, tad ņem nākošo intevālu)
while  ($v_start_ind <= $v_max_el_sk) {
	// Ja 4+1 = 5, tad veidojas intervāls
		if (($p_array[$v_start_ind] + 1)  == $p_array[$v_end_ind]){
			$v_current_ind = $v_start_ind;
			// meklējam intervāla gala punktu, kamēr nesakrīt tekošais un beigu elements 
			while (($p_array[$v_current_ind] + 1) == $p_array[$v_end_ind]) {
				$v_end_ind++;
				$v_current_ind++;
			} 
			// kad atrodam, pieraksta intervālu rezultāta simbolu virknē, uzstādam jaunas sākuma un beiga indeksu vērtības
			$v_rezultats .= "; ".$p_array[$v_start_ind]. " - ".$p_array[$v_current_ind];
			$v_start_ind = $v_end_ind;
			$v_end_ind++;
		} else {
		// Ja 4+1 != 5, tad pieraksta tikai 4, $v_end_ind un $v_start_ind palielina par vienu, kas nozīmē skatīt nākošo masīva elementu
			$v_rezultats .= "; ".$p_array[$v_start_ind];
			$v_end_ind++;
			$v_start_ind++;
		}
}
$v_rezultats = trim($v_rezultats, ";");
return $v_rezultats;
}
Advertisements

Komentēt

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Mainīt )

Twitter picture

You are commenting using your Twitter account. Log Out / Mainīt )

Facebook photo

You are commenting using your Facebook account. Log Out / Mainīt )

Google+ photo

You are commenting using your Google+ account. Log Out / Mainīt )

Connecting to %s