Pagina 2 di 4

Re: [C++] esercizio strutture

MessaggioInviato: 19/09/2018, 16:23
da cooper
il getchar() da una veloce letta su internet (potrei quindi tranquillamente sbagliarmi) dovrebbe prendere il codice ASCII del carattere.
Codice:
int guarda(char a){
                 int l;
                 if((a >'0') and (a <= '9')) l=a;
                 return l;
}

how about this? volevo fare un return l anche prima ma non so perchè ho scritto a.

Re: [C++] esercizio strutture

MessaggioInviato: 19/09/2018, 19:32
da Obidream
Purtroppo non ho modo di testarla ma immagino che debba essere qualcosa del genere:

Codice:
int guarda(int c)
{
    if(c >= '0' && c <= '9')
        return c - '0';
    else
        return -1;
}

Re: [C++] esercizio strutture

MessaggioInviato: 19/09/2018, 19:45
da vict85
Da un punto di vista teorico, non c'è alcuna ragione per ritenere che si stia usando l'ASCII. Siccome però la condizione importante è che c - '0' sia uguale alla cifra rappresentata da c, per essere sicuro di non avere un errore nel codice, sarebbe sufficiente aggiungere uno static_assert:
Codice:
int
guarda(char c)
{
  // questo e' un assert a tempo di compilazione
  static_assert('1' - '0' == 1 && '2' - '0' == 2 && '3' - '0' == 3
                    && '4' - '0' == 4 && '5' - '0' == 5 && '6' - '0' == 6
                    && '7' - '0' == 7 && '8' - '0' == 8 && '9' - '0' == 9,
                "L'encoding attuale e' incompatibile con la funzione corrente");

  if (c >= '0' && c <= '9')
    {
      return static_cast<int>(c) - static_cast<int>('0');
    }

  return -1;
}


Ovviamente, la libreria ctype.h contiene la funzione isdigit che permette di vedere se il valore è una cifra. D'altra parte, è possibile che alcuni encoding segnino come digit qualcosa che non è nell'insieme '0123456789'.

Re: [C++] esercizio strutture

MessaggioInviato: 19/09/2018, 20:40
da Obidream
Da quel che so, sia lo standard del C che del C++ dicono questo:

In both the source and execution basic character sets, the
value of each character after 0 in the above list of decimal digits shall be one greater than
the value of the previous.


Per cui quella conversione dovrebbe essere ok a prescindere dalla codifica usata

Re: [C++] esercizio strutture

MessaggioInviato: 19/09/2018, 21:55
da cooper
vi ringrazio per gli interventi che domani mi leggerò con calma. :D
detto questo, mi sembra strano ci richiedesse una risoluzione di quel tipo per due ragioni: la prima, come detto, è che non abbiamo trattato codice ASCII e quindi per me quei pezzi di codice sono nuovi; la seconda è che è una prova scritta (con carta e penna) e sarebbe impensabile sapere a memoria tutti i codici. :|

Re: [C++] esercizio strutture

MessaggioInviato: 20/09/2018, 08:29
da vict85
Obidream ha scritto:Da quel che so, sia lo standard del C che del C++ dicono questo:

In both the source and execution basic character sets, the
value of each character after 0 in the above list of decimal digits shall be one greater than
the value of the previous.


Per cui quella conversione dovrebbe essere ok a prescindere dalla codifica usata


Non sapevo che questo aspetto fosse nello standard (è interessante che usino praticamente le stesse parole tutte e due). In effetti, non avrebbe molto senso avere una codifica che non rispettasse quella proprietà.

Re: [C++] esercizio strutture

MessaggioInviato: 20/09/2018, 08:36
da vict85
cooper ha scritto:vi ringrazio per gli interventi che domani mi leggerò con calma. :D
detto questo, mi sembra strano ci richiedesse una risoluzione di quel tipo per due ragioni: la prima, come detto, è che non abbiamo trattato codice ASCII e quindi per me quei pezzi di codice sono nuovi; la seconda è che è una prova scritta (con carta e penna) e sarebbe impensabile sapere a memoria tutti i codici. :|


Il punto del mio messaggio è appunto che non dovresti usare proprietà specifiche dell'ASCII. Come ha detto Obidream la proprietà che usa lui è prevista dallo standard e quindi da tutti i sistemi (o per lo meno da tutti i compilatori).

Per altre cose risulta utile usare la libreria standard cctype .

Re: [C++] esercizio strutture

MessaggioInviato: 20/09/2018, 10:39
da cooper
vict85 ha scritto:Il punto del mio messaggio è appunto che non dovresti usare proprietà specifiche dell'ASCII. Come ha detto Obidream la proprietà che usa lui è prevista dallo standard e quindi da tutti i sistemi (o per lo meno da tutti i compilatori).

non avevo recepito questa cosa.
l'ultimo dubbio e poi credo di essere apposto:
anzichè passare come argomento un int c è lo stesso se passo un char c, giusto? anche perchè i char in qualche modo comprendono gli int. è giusto perchè nel testo è specificato esattamente che prende in ingresso un char e non un int. l'algoritmo ora mi è chiaro.

Re: [C++] esercizio strutture

MessaggioInviato: 20/09/2018, 10:56
da Super Squirrel
Se la traccia dice di passargli un char, allora passagli un char.

Poi hai aggiustato il for nel main?

Re: [C++] esercizio strutture

MessaggioInviato: 20/09/2018, 11:04
da Obidream
cooper ha scritto:
vict85 ha scritto:Il punto del mio messaggio è appunto che non dovresti usare proprietà specifiche dell'ASCII. Come ha detto Obidream la proprietà che usa lui è prevista dallo standard e quindi da tutti i sistemi (o per lo meno da tutti i compilatori).

non avevo recepito questa cosa.
l'ultimo dubbio e poi credo di essere apposto:
anzichè passare come argomento un int c è lo stesso se passo un char c, giusto? anche perchè i char in qualche modo comprendono gli int. è giusto perchè nel testo è specificato esattamente che prende in ingresso un char e non un int. l'algoritmo ora mi è chiaro.

Sono gli int a comprendere i char, comunque è un refuso da parte mia, è che nella libreria standard del C le funzioni che hanno a che fare coi caratteri hanno sempre(? o quasi) come parametro un int per cui tendo a fare così anche io, per cui sì, va bene anche un char