Enuntul urmator reprezinta o problema de practica
individuala asociata modulului de PHP procedural (PHP I) predat in cadrul
InfoAcademy.
Cum am specificat si cu ocazia altor postari, publicarea solutiei
nu intentioneaza, nici pe departe, compromiterea procesului didactic la
academia respectiva.
Rezolvarea propusa aici nu este unica (e greu de vorbit de
rezolvari "unice" in informatica) si, cu siguranta, nici cea mai
optima sau mai "curata" la nivel de cod. Ea este utila in primul rand
autorului, ca reminder in perspectiva in care va avea nevoie :-)
Enuntul:
"Fie un magazin cu diverse modele de telefoane
mobile, manufacturate de feluriti producatori. Incepeti prin a defini manual un
tablou cu producatori si modelele atasate:
$modele = array(
"producator1"
=> array ("model1", "model2", ...),
"producator2"
=> "array("model3", "model4", ...),
..............................................));
Se cere:
1.Pornind de la tabloul de mai sus, generati (algoritmic)
un alt tablou, numit $magazin, de forma:
$magazin =
array("model1"=>array(
"producator"=>
"producator1",
"caracteristici"=>array("lungime"=>...
"latime"=>...,
"greutate"=>...)),
"model2"=>array(
"producator"=>...etc
in care dimensiunile si greutatea sunt generate aleator
(in limite rezonabile, desigur).
2. Scrieti un algoritm care determina si afiseaza toate
caracteristicile celui mai usor telefon (producatorul, modelul, lungime,
latime, greutate);
3. Scrieti un algoritm care determina si afiseaza latimea
medie a telefoanelor pentru fiecare producator in parte."
Presupunem pentru simplitate ca in magazin sunt
reprezentati doar trei producatori iar modelele de telefoane sunt Model1,
Model2,..., etc.
$modele = array("Samsung" =>
array("Model1", "Model2", "Model3"),
"Huawei" => array("Model4",
"Model5", "Model6"),
"Apple" => array("Model7",
"Model8", "Model9"));
O iterare dubla cu foreach ne ofera accesul la valorile
din array-urile indexate cu numele producatorilor.
Putem defini variabila
globala $magazin, pe care o modificam in interiorul celei de-a doua bucle. De
remarcat ca, potrivit enuntului, valorile din array-urile indexate de cheile
Samsung, Huawei si Apple devin chei (indecsi) in variabila $magazin.
$magazin = array();
foreach($modele as $k=>$v)
{
foreach($v as
$k1=>v1)
{
$magazin[$v1]
= array("producator"=>$k,
"caracteristici" =>
array("lungime"=>rand(l1, l2),
"latime"=>rand(l3, l4),
"greutate"=>rand(l5, l6)));
}
}
unde l1, ..., l6 sunt constante numerice alese convenabil.
Pentru cerinta a doua se poate imagina urmatorul
mecanism:
a) se defineste variabilela $smallest initializata
convenabil cu (de exemplu) greutatea primului model de telefon din $magazin:
$smallest =
$magazin["Model1"]["caracteristici"]["greutate'];
b) se determina intr-o bucla foreach cea mai mica
greutate, care este asociata unui index $k (care reprezinta chiar modelul de
telefon).
Atunci
$magazin[$k]["caracteristici"]["latime"],
$magazin[$k]["caracteristici"]["lungime"] si
$magazin[$k]["producator"]
reprezinta latimea, lungimea si numele
producatorului celui mai mic in greutate dintre telefoanele din magazin.
Pentru cerinta a treia, se definesc global variabile in
care se va stoca suma dimensiunilor (latimilor) telefoanelor unui anumit
producator.
Codul si printscreen-ul:
<!DOCTYPE HTML>
<head>
<title>CellPhones</title>
<style>
table,
td, tr {
border:
2px solid red;
text-align:center;
}
table{
width:50%;
}
</style>
</head>
<body style =
"background-color:Azure;color:DarkOrchid">
<table>
<?php
$modele =
array("Samsung"=>array("Model1", "Model2",
"Model3"),
"Huawei"=>array("Model4",
"Model5", "Model6"),
"Apple"=>array("Model7",
"Model8", "Model9"));
$magazin = array();
foreach($modele as $k=>$v)
{
foreach($v
as $v1)
{
$magazin[$v1]
= array("producator"=>$k,
"caracteristici"=>array("lungime"=>rand(100,
200),
"latime"=>rand(50,
100),
"greutate"=>rand(40,
250)));
}
}
echo "<br />";
echo "<tr>
<td>Model</td>
<td>Producator</td>
<td>Lungime</td>
<td>Latime</td>
<td>Greutate</td>
</tr>";
foreach($magazin as $k2=>$v2)
{
echo
"<tr>
<td>$k2</td>
<td>".$v2["producator"]."</td>
<td>".$v2["caracteristici"]["lungime"]."</td>
<td>".$v2["caracteristici"]["latime"]."</td>
<td>".$v2["caracteristici"]["greutate"]."</td>
</tr>";
}
echo "</table>";
$smallest = $magazin["Model1"]["caracteristici"]["greutate"];
$model =
$magazin["Model1"]["producator"];
$wd =
$magazin["Model1"]["caracteristici"]["latime"];
$lg =
$magazin["Model1"]["caracteristici"]["lungime"];
foreach($magazin as $k=>$v)
{
if($magazin[$k]["caracteristici"]["greutate"]
<= $smallest)
{
$smallest
= $magazin[$k]["caracteristici"]["greutate"];
$model
= $magazin[$k]["producator"];
$wd
= $magazin[$k]["caracteristici"]["latime"];
$lg
= $magazin[$k]["caracteristici"]["lungime"];
}
}
echo "<br/>Telefonul cu cea mai mica greutate
are $smallest grame, $lg milimetri lungime, $wd milimetri latime. Marca este
$model.";
$wdm_Samsung = 0;
$nr_Samsung = 0;
$wdm_Huawei = 0;
$nr_Huawei = 0;
$wdm_Apple = 0;
$nr_Apple = 0;
foreach($magazin as $k=>$v)
{
switch($magazin[$k]["producator"]) {
case
"Samsung" : $wdm_Samsung +=
$magazin[$k]["caracteristici"]["latime"]; $nr_Samsung++;
break;
case
"Huawei" : $wdm_Huawei +=
$magazin[$k]["caracteristici"]["latime"]; $nr_Huawei++;
break;
case
"Apple" : $wdm_Apple +=
$magazin[$k]["caracteristici"]["latime"]; $nr_Apple++;
break;
}
}
echo "<br/>Latimea medie a telefoanelor
Samsung este ".number_format($wdm_Samsung/$nr_Samsung, 2).".";
echo "<br/>Latimea medie a telefoanelor Huawei
este ".number_format($wdm_Huawei/$nr_Huawei, 2).".";
echo "<br/>Latimea medie a telefoanelor Apple
este ".number_format($wdm_Apple/$nr_Apple, 2).".";
?>
</body>
</html>
No comments:
Post a Comment