[RISOLTO] Ordine di scrittura caratteri

  • Creatore
    Topic
  • #106079
    Up
    0
    Down
    ::


    Mentre leggevo la guida Appunti di programmazione in LATEX e TEX del prof. Gregorio link alla guida mi sono imbattuto a pagina 62 nella descrizione di una Macro ricorsiva che preso un numero naturale in base 10 lo restituisce in una base compresa tra 2 e 36.
    Dopo aver letto più volte l’algoritmo, ho provato a capire cosa facesse sfruttando l’esempio fornito

    `\base{12}{120}`

    che restituisce A0_{12} come è giusto che sia, quello che non capisco è: quando la macro entra nella fase di conversione, dopo il primo passaggio il valore che stampa, meglio ancora che stamperebbe se non ci fosse l’if, è proprio 0 e solo al secondo passaggio dall’algoritmo troverei A. Quindi, essendo io nella convinzione che latex o tex (ad oggi, ancora non ho ben chiara la differenza) proceda scrivendo da sinistra a destra mi aspetterei che a video mi venisse scritto 0A (che sarebbe sbagliato, questo almeno,lo so) e a seguire poi il pedice. Come mai invece il primo risultato digerito viene poi a destra del secondo?

    Non riporto qui né l’algoritmo del prof né l’esempio minimo compilabile perché credo che il link sia sufficiente. Se qualcuno potesse illuminarmi sarei molto contento.

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #106080
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Leggendo il codice di Enrico si capisce perché bisogna fare diverse passate e ad ogni passata si aggiunge una cifra nella base giusta a sinitra di quelle già trovate.

        Ma quello che mi sembra strano è perché non conosci la differenza fra LaTeX e TeX; LaTeX è un linguaggio di programmazione o di mark-up, né più né meno di C, C++, HTML, Python, e simili; TeX è l’eseguibile che interpreta il linguaggio di programmazione LaTeX (oltre ad altri linguaggi) e, tradotti i comandi LaTeX in comandi “macchina”, li esegue.

        Ma ti capisco quando dici che le cose possono apparire confuse; spesso usiamo la forma retorica per dire “la parte al posto del tutto” diciamo “latex” per dire “TeX che interpreta il linguaggio LaTeX”.

        Avere distinti il nome dell’interprete dal nome del linguaggio, sempre ed in ogni circostanza sarebbe meglio, ma i discorsi diventerebbero prolissi e contorti. Quindi se vogliamo distinguere dovremmo sempre specificare di che cosa stiamo parlando; se parliamo alla svelta diamo per scontato che LaTeX voglia sottintendere “pdftex che interpreta LaTeX”.

      • #106081
        Up
        0
        Down
        ::

        OldClaudio” post=106181Leggendo il codice di Enrico si capisce perché bisogna fare diverse passate e ad ogni passata si aggiunge una cifra nella base giusta a sinitra di quelle già trovate.

        Il perché si facciano più passate mi è chiaro, quello che continuo a non capire è perché la seconda passata finisca a sinistra.

      • #106082
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Prova a fare il calcolo a mano e invece di trasformare 120, prova a trasformare 247; otterrai in base 12 il valore 187; prova a vedere in che ordine sono state determinate queste cifre.

        • #106083
          Up
          0
          Down
          ::


          La macro determina la cifra meno significativa e poi richiama sé stessa con il quoziente come secondo argomento; a sua volta questa potrà chiamare sé stessa altre volte. Solo dopo questo la cifra viene stampata. Quindi la prima cifra stampata è quella determinata per ultima, dunque la più significativa.

          `
          \def\@base#1#2{%
          % apriamo un gruppo per rendere locali le assegnazioni
          {%
          \count@=#2\relax % il numero da trasformare
          % determiniamo il quoziente della divisione per la base
          \@tempcnta=#2\relax\divide\@tempcnta by#1\relax
          \ifnum\@tempcnta>\z@
          % altre cifre da determinare, richiamiamo \@base
          \@base{#1}{\@tempcnta}%
          \fi
          % determiniamo il resto della divisione per la base
          \@tempcntb=\@tempcnta \multiply\@tempcntb by-#1\relax\advance\count@ by\@tempcntb
          % stampa la cifra
          \print@digit
          % chiudiamo il gruppo
          }%
          }
          `

          Ciao
          Enrico

        • #106084
          Up
          0
          Down
          ::


          Grazie per il chiarimento, ora ho compreso.

      Visualizzazione 4 filoni di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top