Cifra de control a unui numar natural in PHP
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
tycyssg
- Mesaje:58
Cifra de control a unui numar natural in PHP
Salut Marplo
Incerc sa fac exercitiul acesta:
Sa se scrie un program care să determine cifra de control a unui numar natural n dat.
Cifra de control a unui numar se obtine prin insumarea succesiva a cifrelor sale, pana cand se obtine o singura cifra.
Dar m-am cam impotmolit.
Cod: Selectaţi tot
<?php
$nr = 451235;
$sp = str_split($nr);
$sum = array_sum($sp); { //aici obtin suma numerelor
if($sum > 9) // aici verific daca suma are mai mult de 2 cifre,dupa care am incercat cu
$x = str_split($sum); // sa il pun intr-un array din nou dupa care sa le adun iar cu functia de array_sum , dar se pare ca nu merge,probabil ca ma gandesc la o solutie gresita a problemei.
$y = array_sum($x); // si secventa asta ar trebui sa se repete pana la else
}
else
{
}
?>
Daca se poate un indiciu ca apoi sa ma chinui eu sa-l fac,asta daca e varianta buna,am gasit ceva pe net dar era in c++ si era un algoritm ce impartea la 9 etc. nu prea l-am inteles
MarPlo
Mesaje:4343
Salut
Ok, daca vrei un indicu, iata-l:
Cand ai aceleasi operatii repetitive pe o variabila, incearca sa construiesti codul pe baza unei functii recursive (care se auto apeleaza).
Vezi pe site, la cursul php despre functii recursive, lectia:
Utilizarea functiilor.
tycyssg
Mesaje:58
Mersi ! De cateva ore imi bat capul dar nu prea stiu cum sa creez functia.
M-am uitat peste exemplul de pe site de la functii recursive, dar nu prea imi dau seama cum sa adaptez.
daca am
Cod: Selectaţi tot
function test ($x)
{
return str_split($x) // imi mai trebuie si un if pe aici ca sa se repete,care ar trebui sa comparevaloarea sirului ce trebuie convertit array
}
Si mai jos am
Cod: Selectaţi tot
$sum = array_sum($mat) // $mat fiind matricea convertita din numar
pun un if sa verifice daca este mai mare ca 10
Cod: Selectaţi tot
if($sum>10){
$reap = test($x[$mat]); //am incercat sa apelez $x cu valoarea lui $mat..dar nu a mers.
}
nu inteleg eu foarte bine functiile , dar din ce vad ele trebuie sa aibe o valoare ca sa le poti apela,iar eu nu am gasit cum sa-i dau valoare functie pt a returna formula din ea, printr-o variabila ce isi are valoarea dintr-o alta operatie.
MarPlo
Mesaje:4343
Treptat, din incercari, tutoriale si cod pe care-l scrii, vei intelege.
Uite solutia la acest exercitiu (posibil sa fie si alte variante, mai bune, dar asta-i nivelu la cat stiu):
Cod: Selectaţi tot
function getDigitControl($nr) {
// converts the $nr to string, get array with each digit, get the digits sum
// if $nr not lower than 10, auto-call this function with the last $nr
$nr = array_sum(str_split(strval($nr)));
return ($nr < 10) ? $nr : getDigitControl($nr);
}
$nr = 4512357;
echo getDigitControl($nr); // 9
tycyssg
Mesaje:58
Da, in ce hal se pot combina toate functiile astea de matrici , deci:
Care este rolul lui strval() aici, daca array-ul returneaza oricum o valoare numerica, sau array_sum() , returneaza o alta valoare decat numerica? Pentru ca in incercarile mele esuate primeam niste erori cum ca nu poate converti in array pt ca nu e string?
Ps: Poti explica te rog linia asta de cod:
Cod: Selectaţi tot
return ($nr < 10) ? $nr : getDigitControl($nr);
Ms.
MarPlo
Mesaje:4343
Rolul lui strval() e sa trasforme in sir (123 in "123") fiindca str_split() se aplica pe valloare tip sir.
Prescurtarea
este echivalenta cu:
Subiecte similare
- Afisare numar cel mai mare dintr o coloana
PHP - MySQL - XML
Primul mesaj
Bună Marplo
Vreau să extrag din coloan pret cel mai mare numar ca de exemplu 4444.
Mie imi afisează 54 în loc de 4444, dacă în loc de 4444 modific...
Ultimul mesaj
Am schimbat `pret` varchar(20) DEFAULT NULL in `pret` int(11) NOT NULL ca la tine si merge.
Multumesc