Segni strani all’interno del codice lstlising

  • Creatore
    Topic
  • #106450
    Up
    0
    Down
    ::


    Vorrei togliere gli strani segni che compaiono all’interno del seguente codice:

    `
    \documentclass[11pt,a4paper,oneside]{book}

    \usepackage[utf8]{inputenc}
    \usepackage[italian,english]{babel}

    \usepackage{listings}

    \usepackage{algpseudocode}
    \usepackage{algorithm}

    \begin{document}

    \lstset{language=Pascal}

    \lstset{tabsize=3}
    \begin{lstlisting}[mathescape=true]
    procedure ORDINA_PARI_DISPARI(V,n)
    begin
    // prelevo solo gli elementi pari
    // del vettore ed estraggo il massimo
    parafor(i = 1 … n)
    if(V e pari)
    then R = V
    else R = 0

    // Estraggo il massimo pari
    // 0 se non ci sono pari
    max_even = MAX(R,n)

    // Mappo tutti gli elementi nella coppia
    // se l'elemento e pari
    //
    se l'elemento e dispari
    // sono sicuro che tutti i pari precedono tutti i dispari
    parafor(i = 1 … n)
    if (V e pari)
    then
    R = new Element(value = V, index = 1)
    else
    R = new Element(value = V + max_even.value, index = i)

    // Ordino il vettore ottenuto
    TORNEO(R,n)
    // Modificato solo per tenere conto della prima componente

    // Rispacchetto il vettore in due vettori:
    // in uno metto solo i pari
    // nell'altro metto i dispari
    // Conto quanti pari ci sono e riporto i dispari
    // al loro valore di base
    \end{lstlisting}

    \end{document}

    `

Visualizzazione 4 filoni di risposte
  • Autore
    Risposte
    • #106451
      Up
      0
      Down
      ::


      I problemi nascono dal fatto che, benché tu dichiari che il codice è scritto in Pascal, in realtà esso non rispetta la sintassi di tale linguaggio. In particolare, l’apostrofo che precede la parola «elemento» inizia una stringa, che, per fortuna, viene poi terminata da un suo compagno, e questo è ciò che causa i «segni strani».

      Siccome non mi sembra il caso di disattivare l’apostrofo come delimitatore di stringhe, propenderei per una soluzione banale: eliminarlo. Inoltre, i commenti in stile C++ non fanno parte della sintassi Pascal: se li vuoi usare, ti conviene dichiarare la sintassi relativa. In definitiva, io riscriverei il tuo codice così:
      `
      \documentclass[11pt,a4paper,oneside]{book}
      \usepackage[T1]{fontenc} % Io preferisco.
      \usepackage[ascii]{inputenc} % Controlla che il sorgente sia puro ASCII a
      % 7 bit: preferisco fare cosi`, quando spedisco
      % codice a “bulletin boards”.
      \usepackage[italian,english]{babel}
      \usepackage{listings}

      \begin{document}

      \lstset{language=Pascal}

      \lstset{tabsize=3}
      % Noto che specifichi “mathescape”, pero` poi, in realta`, non lo usi, almeno in
      % quel che segue.
      \begin{lstlisting}[mathescape=true,morecomment={[l]{//}}]
      procedure ORDINA_PARI_DISPARI(V,n)
      begin
      // prelevo solo gli elementi pari
      // del vettore ed estraggo il massimo
      parafor(i = 1 … n)
      if(V e pari)
      then R = V
      else R = 0

      // Estraggo il massimo pari
      // 0 se non ci sono pari
      max_even = MAX(R,n)

      // Mappo tutti gli elementi nella coppia
      // se lo elemento e pari
      //
      se lo elemento e dispari
      // sono sicuro che tutti i pari precedono tutti i dispari
      parafor(i = 1 … n)
      if (V e pari)
      then
      R = new Element(value = V, index = 1)
      else
      R = new Element(value = V + max_even.value, index = i)

      // Ordino il vettore ottenuto
      TORNEO(R,n)
      // Modificato solo per tenere conto della prima componente

      // Rispacchetto il vettore in due vettori:
      // in uno metto solo i pari
      // nello altro metto i dispari
      // Conto quanti pari ci sono e riporto i dispari
      // al loro valore di base
      \end{lstlisting}

      \end{document}
      `
      Rimangono un sacco di [tt]Overfull \hbox[/tt]es, però.

      Ciao.


      Gustavo

    • #106452
      Up
      0
      Down
      ::


      Essendo un pseudo codice è simile al Pascal e al C.
      I commenti il prof li vuole così, tanto sono commenti (e la sintassi // riguarda più Java se non erro)

      Proverò con la tua soluzione, anche se ne ho provate varie … allo stato attuale, mi dispiace dirlo (e spero sia dovuto alla mia “ignoranza” in ambito LaTeX – algoritmi), ma con LaTeX ci sono delle piccole lacune nella scrittura di codici non ufficiali…

    • #106453
      Up
      0
      Down
      ::


      Perdonami ma secondo te latex che dovrebbe fare?
      Capire da solo che, sebbene tu gli abbia detto che il codice è Pascal, in realtà è un ibrido tra due linguaggi? 😆

      Il pacchetto listings oltre a prevedere una serie di linguaggi ufficiali prevede la possibilità di definire nuovi linguaggi (5.16 della documentazione), che vuoi di più?

    • #106454
      Up
      0
      Down
      ::

      golden_boy” post=106550Essendo un pseudo codice è simile al Pascal e al C.
      I commenti il prof li vuole così, tanto sono commenti (e la sintassi // riguarda più Java se non erro)

      Proverò con la tua soluzione, anche se ne ho provate varie … allo stato attuale, mi dispiace dirlo (e spero sia dovuto alla mia “ignoranza” in ambito LaTeX – algoritmi), ma con LaTeX ci sono delle piccole lacune nella scrittura di codici non ufficiali…

      Be’: non sei obbligato a usare TeX. Essendo tu un informatico, conoscerai sicuramente altri software o pacchetti che ti permetteranno di fare ciò che ti serve.

      Ciao
      Tommaso

    • #106455
      Up
      0
      Down
      ::

      golden_boy” post=106550[…] la sintassi // riguarda più Java se non erro […]

      Il linguaggio Java, così come molti altri, l’ha ripresa, ma credo proprio che il primo linguaggio ad adottarla sia stato il C++; se non erro io…

      golden_boy” post=106550[…] allo stato attuale, mi dispiace dirlo (e spero sia dovuto alla mia “ignoranza” in ambito LaTeX – algoritmi), ma con LaTeX ci sono delle piccole lacune nella scrittura di codici non ufficiali…

      Effettivamente, mi viene da dire che un tale giudizio può nascere solo da un’informazione lacunosa. Tanto per cominciare, c’è sempre la possibilità di includere codice «verbatim»; in tal caso, è meglio caricare quantomeno il pacchetto [tt]verbatim[/tt], perché l’ambiente [tt]verbatim[/tt] messo a disposizione dal nucleo del LaTeX2e non è molto sofisticato; possibilità ancora più interessanti, poi, sono offerte dal pacchetto [tt]fancyvrb[/tt]. Ma nel tuo caso, direi che un’ottima soluzione potrebbe essere quella di rivolgersi al pacchetto [tt]algorithms[/tt], che pure avevi preso in considerazione: prova a leggerne il (breve) manuale. In particolare, alla fine di pagina 13 trovi spiegato come rendere i commenti nello stile che vuoi tu.

      Ciao.


      Gustavo

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

Go to top