Re: [C++] esercizio strutture

Messaggioda cooper » 19/09/2018, 16:23

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.
cooper
Cannot live without
Cannot live without
 
Messaggio: 2125 di 4642
Iscritto il: 25/07/2014, 09:19

Re: [C++] esercizio strutture

Messaggioda Obidream » 19/09/2018, 19:32

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;
}
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 925 di 2194
Iscritto il: 07/02/2012, 20:57

Re: [C++] esercizio strutture

Messaggioda vict85 » 19/09/2018, 19:45

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'.
vict85
Moderatore
Moderatore
 
Messaggio: 9388 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] esercizio strutture

Messaggioda Obidream » 19/09/2018, 20:40

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
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 926 di 2194
Iscritto il: 07/02/2012, 20:57

Re: [C++] esercizio strutture

Messaggioda cooper » 19/09/2018, 21:55

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. :|
cooper
Cannot live without
Cannot live without
 
Messaggio: 2126 di 4642
Iscritto il: 25/07/2014, 09:19

Re: [C++] esercizio strutture

Messaggioda vict85 » 20/09/2018, 08:29

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à.
vict85
Moderatore
Moderatore
 
Messaggio: 9390 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] esercizio strutture

Messaggioda vict85 » 20/09/2018, 08:36

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 .
vict85
Moderatore
Moderatore
 
Messaggio: 9391 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C++] esercizio strutture

Messaggioda cooper » 20/09/2018, 10:39

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.
cooper
Cannot live without
Cannot live without
 
Messaggio: 2128 di 4642
Iscritto il: 25/07/2014, 09:19

Re: [C++] esercizio strutture

Messaggioda Super Squirrel » 20/09/2018, 10:56

Se la traccia dice di passargli un char, allora passagli un char.

Poi hai aggiustato il for nel main?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 298 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C++] esercizio strutture

Messaggioda Obidream » 20/09/2018, 11:04

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
((v & 0xff) && (v & 0xff00) && (v & 0xff0000) && (v & 0xff000000))
Avatar utente
Obidream
Advanced Member
Advanced Member
 
Messaggio: 928 di 2194
Iscritto il: 07/02/2012, 20:57

PrecedenteProssimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite