Visualizzazione risultati 1 fino 7 di 7

Discussione: traduzione da PASCAL a php -primo divisore esatto di un numero

  1. #1
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito traduzione da PASCAL a php -primo divisore esatto di un numero

    Devo tradurre da pascal a php questa iterazione

    begin
    readln (N);
    C:=1;
    repeat c:=c+1
    until N mod c:=0;


    ho provato con

    Codice PHP:
    $numero=100;
    $ricercaprimodivisore=1;




    do{
    if(
    $numero%$ricercaprimodivisore==0)
    echo
    "$ricercaprimodivisore - ";
    $ricercaprimodivisore++; } while ($ricercaprimodivisore<$numero);
    1) dovrei considerare il primo numero maggiore di 1 divisore di $numero, per una successiva operazione



    2)perché con questa istruzione
    echo "<br>" . $ricercaprimodivisore; mi esce 100 e non 50? come faccio in questo caso a considerare 50 ?
    Ultima modifica di Aforismadelgiorno : 30-11-2018 alle ore 15.08.06

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Non ti so fare il port dal pascal a php.
    Il do verrà almeno eseguito una volta indipendentemente che il while (condizione) sia vera.
    Questo produce: 1- 2- 4- 5- 10- 20- 25- 50-
    Codice PHP:
    <?php
    $numero
    = 100;
    $ricercaprimodivisore=1;
    do{
    if(
    $numero%$ricercaprimodivisore==0)
    echo
    "$ricercaprimodivisore- ";
    $ricercaprimodivisore++;
    } while (
    $ricercaprimodivisore<$numero);

  3. #3
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito

    in questo caso perché mi da con questa dichiarazione 100 e non 50?
    echo "<br>" . $ricercaprimodivisore;
    Come si potrebbe fare per assegnare ad una nuova variabile il valore della "penultima iterazione ossia 50" e non dell' ultima 100?
    Ultima modifica di Aforismadelgiorno : 30-11-2018 alle ore 17.20.58

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    In realtà fai 99 (da 1 a 99) iterazioni nel do se l'if è vera stampi a video (echo) e in qualsiasi caso prima restituisce $ricercaprimodivisore e successivamente l'incrementa esegue la verifica nel while(100<$numero) che ovviamente è falso.

    Se non vuoi fare tante stampe a video (echo) ma vuoi catturare l'ultima if vera devi semplicemente creare una seconda variabile il cui valore è $ricercaprimodivisore es. http://forum.it.altervista.org/php-m...ml#post1405586 al posto di echo usa $result = $ricercaprimodivisore; poi fuori dal ciclo do-while usi echo $result; (mi ripeto basandoti sul mio di script dove è simile al tuo)..
    Ovviamente devi valorizzare $result = 0; prima di inserirla nel ciclo do-while.
    $result vale 50 :)
    Ultima modifica di darbula : 30-11-2018 alle ore 22.13.42

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non ti so fare il port dal pascal a php.
    Credo che nessuno al mondo sappia farlo

    Scherzi a parte, il modo "standard" di convertire un repeat S until B è do S while not(B), quindi il codice diventa semplicemente:
    Codice PHP:
    $n = 100;
    $primo_divisore = 1;

    do {
    $primo_divisore++;
    } while (
    $n % $primo_divisore != 0);

    echo
    $primo_divisore;
    2)perché con questa istruzione
    echo "<br>" . $ricercaprimodivisore; mi esce 100 e non 50? come faccio in questo caso a considerare 50 ?
    La vera domanda è: perché ti aspetti 50 e non 2? Il primo divisore è 2, non 50. Forse hai bisogno del penultimo divisore, anziché del primo?

    I suggerimenti che do più spesso:


  6. #6
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito

    Grazie cercavo il primo divisore nella prima domanda (1) !



    Nella domanda (2) il penultimo divisore solo che il nome della variabile è rimasto $primodivisore.....

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Chiaro! Per cercare il penultimo divisore, ovvero il massimo divisore diverso dal numero stesso, ti conviene procedere al contrario, magari considerando anche che tale divisore è sempre minore od uguale della metà del numero:
    Codice PHP:
    $n = 100;
    $massimo_divisore = floor($n / 2);

    while (
    $n % $massimo_divisore != 0) {
    $massimo_divisore--;
    }

    echo
    $massimo_divisore;
    o, in forma più compatta:
    Codice PHP:
    $n = 100;
    for (
    $massimo_divisore = floor($n / 2); $n % $massimo_divisore != 0; $massimo_divisore--) {}
    Occhio che primo e massimo divisore non sono sempre definiti: ad esempio quando il numero è 1 non li hai.

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •