Variabile boolean o stringa ?

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Variabile boolean o stringa ?

Messaggio da GreenCode »

Ciao raga , sono alle prese con un esercizio che ti chiede di scrivere un programma dove viene calcolato , in base al tipo di autovettura(Auto/Camion) e in base alla cilindrata il prezzo da pagare per l ingresso in un traghetto.
Qeullo che volevo sapere era : che variabile devo usare per l identificazione del mezzo , Boolean o Stringa ?
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5387
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Variabile boolean o stringa ?

Messaggio da GjMan78 »

Senza vedere il codice come potremmo mai dirtelo?
Dipende da come hai impostato la logica del listato.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Variabile boolean o stringa ?

Messaggio da Lucio C »

In che linguaggio ?
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

GjMan78 ha scritto:
venerdì 9 settembre 2022, 22:26
Senza vedere il codice come potremmo mai dirtelo?
Dipende da come hai impostato la logica del listato.
Devo ancora scriverlo il codice , in fase di progettazione mi chiedevo quale variabile era meglio usare , perche quello che pensavo era , come faccio a far capire al programma quale blocco di istruzioni deve eseguire in base a quale veicolo viene inserito?!
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Lucio C ha scritto:
venerdì 9 settembre 2022, 23:51
In che linguaggio ?
Pascal
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5387
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Variabile boolean o stringa ?

Messaggio da GjMan78 »

Io userei la stringa.

In Pascal c'è un'istruzione che potremmo definire "cugina" di IF..THEN che si chiama CASE..OF.

Fai una ricerca e vedrai che si adatta benissimo al tuo esercizio.
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Variabile boolean o stringa ?

Messaggio da Lucio C »

Non conosco il pascal, non sapevo che fosse ancora kicking and alive. In genere non vedo grosse differenze di efficienza nell'uso di un singolo flag booleano o stringa, potrebbe esserci una questione di efficienza di storage se esistessero tante istanze della variabile (un booleano potenzialmente richiede solo un bit, in pratica di solito si usa un byte; una stringa tanti byte quanti caratteri) ma al giorno d'oggi non so quanto pesi (io vengo dall'era in cui si faceva analisi immagini su macchine con 512K !!!).
Poi c'e' una questione di eleganza ... in molti linguaggi consente una forma piu' leggibile o compatta (confrontare i due esempi)

Codice: Seleziona tutto

if(camion) then ...           ! boolean
if(tipo='Camion') then ...    ! stringa
Se poi il linguaggio ammette un tipo "enumeration" potrebbe essere vantaggioso, P.es. in mysql e affini si potrebbe definire Tipo come un enum('Camion','Auto','Moto'), nel caso servano piu' di due valori ... nell'if appare come una stringa, ma nello storage interno del database in realta e' salvato come valori 1,2,4 ... di fatto bit in un byte o piu'. (Inoltre cosi' sono esclusi valori illegali).

Oppure in altri linguaggi si possono definire delle named constants (byte o interi) e p.es. testare
if(tipo)==CAMION dove CAMION vale 1, AUTO vale 0 e magari MOTO vale 2. Un esempio da un mio caso java (convenzione di usare il maiuscolo per le named constants)

Codice: Seleziona tutto

static final protected int LUTA=10,LUTGRAY=0,LUTRED=1,LUTGREEN=2,LUTBLUE=3; // definizioni

lut=LUTA; myMethod(lut);                                                   // nel chiamante

                                                                           // e nel myMethod
    switch (lut) {
      default:
      case LUTA:  ...
            break;
      case LUTGRAY:  ...
            break;
      }
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

GjMan78 ha scritto:
sabato 10 settembre 2022, 10:14
Io userei la stringa.

In Pascal c'è un'istruzione che potremmo definire "cugina" di IF..THEN che si chiama CASE..OF.

Fai una ricerca e vedrai che si adatta benissimo al tuo esercizio.
Si infatti l avevo vista come costrutto condizionale , e da quello che ho intuito sembrerebbe una semplificazione dell if , nel senso che ti permette di far fare piu controlli in un solo blocco di istruzioni , forse mi sto sbagliando perche gli ho dato appena una letta per ora , cmq ok ora vedro di cercare qualcosa in merito.
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Lucio C ha scritto:
sabato 10 settembre 2022, 10:17
Non conosco il pascal, non sapevo che fosse ancora kicking and alive. In genere non vedo grosse differenze di efficienza nell'uso di un singolo flag booleano o stringa, potrebbe esserci una questione di efficienza di storage
Cos'è uno storage ?
se esistessero tante istanze della variabile
Istanze intese come valori che puo assumenre?
(un booleano potenzialmente richiede solo un bit, in pratica di solito si usa un byte; una stringa tanti byte quanti caratteri) ma al giorno d'oggi non so quanto pesi (io vengo dall'era in cui si faceva analisi immagini su macchine con 512K !!!).
Poi c'e' una questione di eleganza ... in molti linguaggi consente una forma piu' leggibile o compatta (confrontare i due esempi)

Codice: Seleziona tutto

if(camion) then ...           ! boolean
if(tipo='Camion') then ...    ! stringa
Questo cmq ha chiarito i miei dubbi i merito , perche volevo proprio capire sintatticamente come scrivere l istruzione che verificava se auto o camion.
Se poi il linguaggio ammette un tipo "enumeration" potrebbe essere vantaggioso, P.es. in mysql e affini si potrebbe definire Tipo come un enum('Camion','Auto','Moto'), nel caso servano piu' di due valori ... nell'if appare come una stringa, ma nello storage interno del database in realta e' salvato come valori 1,2,4 ... di fatto bit in un byte o piu'. (Inoltre cosi' sono esclusi valori illegali).

Oppure in altri linguaggi si possono definire delle named constants (byte o interi) e p.es. testare
if(tipo)==CAMION dove CAMION vale 1, AUTO vale 0 e magari MOTO vale 2. Un esempio da un mio caso java (convenzione di usare il maiuscolo per le named constants)

Codice: Seleziona tutto

static final protected int LUTA=10,LUTGRAY=0,LUTRED=1,LUTGREEN=2,LUTBLUE=3; // definizioni

lut=LUTA; myMethod(lut);                                                   // nel chiamante

                                                                           // e nel myMethod
    switch (lut) {
      default:
      case LUTA:  ...
            break;
      case LUTGRAY:  ...
            break;
      }
Ora è tantissima roba per me , che non mi soffermero a leggere perche la sento ancora molto distante sul mio percorso d apprendimento , step by step :) cmq ora scrivo il codice e poi lo posto , vediamo se tutto è ok.
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Codice: Seleziona tutto

Program autocamion;
uses crt;
var
     tipoveicolo:string;
     cc:integer;
     auto:string;
     camion:string;
     
     
 begin
 clrscr
 write('Auto o camion');
 readln(tipoveicolo);
 if (tipoveicolo='auto') then
 begin
 write('Cc');
 readln(cc);
 if cc<=1000 then
 begin
 write('Paga 20 Euro');
 end
 else
 if cc<=2000 then
 begin
 write('Paga 30 euro');
 end
 else
 write('Paga 40 euro');
 end;
 
 if (tipoveicolo='camion') then
 begin
 write('Cc');
 readln(cc);
 if cc<=2000 then
 begin
 write('Paga 40 euro');
 end
 else
 if cc<=3000 then
 begin
 write('Paga 50 euro');
 end
 else
 write('Paga 100 euro');
 end;
 readln;
 end.
A me gira , cosa ve ne pare ?
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Poi una domanda , nel caso l utente inserisse automobile , invece che auto, il programma non si avvierebbe nemmeno , non riconoscendo il valore ?!
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5387
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Variabile boolean o stringa ?

Messaggio da GjMan78 »

GreenCode ha scritto:
sabato 10 settembre 2022, 11:21
Poi una domanda , nel caso l utente inserisse automobile , invece che auto, il programma non si avvierebbe nemmeno , non riconoscendo il valore ?!
Prova e vedi cosa succede ;)
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

GjMan78 ha scritto:
sabato 10 settembre 2022, 11:55
GreenCode ha scritto:
sabato 10 settembre 2022, 11:21
Poi una domanda , nel caso l utente inserisse automobile , invece che auto, il programma non si avvierebbe nemmeno , non riconoscendo il valore ?!
Prova e vedi cosa succede ;)
Infatti non si avvia..quindi come posso risolvere questa cosa , di certo non posso variabilizzare ogni tipo di modo in cui si puo dire auto :D
Avatar utente
GjMan78
Rampante Reduce
Rampante Reduce
Messaggi: 5387
Iscrizione: mercoledì 22 novembre 2006, 19:15
Desktop: KdePlasma
Distribuzione: EndeavourOS
Sesso: Maschile
Località: ~/Italia/Lazio/Viterbo/

Re: Variabile boolean o stringa ?

Messaggio da GjMan78 »

aggiungi un ulteriore controllo, no?
Se non è stato inserito auto o camion allora scrivi "valore non valido, inserisci auto o camion"
MacBook Pro - Intel i5-3210 - 16 Gbyte Ram DDR3 - SSD 500 Gbyte x 2
»»» 𝗙𝗮𝗶 𝗶𝗹 𝗕𝗮𝗰𝗸𝘂𝗽! ¯\_(ツ)_/¯
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Variabile boolean o stringa ?

Messaggio da Lucio C »

GreenCode ha scritto:
sabato 10 settembre 2022, 10:32
Cos'è uno storage ?
Non uno storage ma lo storage. Quando io ho imparato a programmare si usava praticamente solo l'inglese (e non era male). Non saprei come dirlo in italiano in modo generale. Puo' essere la quantita' di dati da tenere "in memoria" nel programma (la dimensione di un array), oppure la dimensione di un file su disco ("memoria di massa" si diceva una volta). Se devo tenere un elenco di veicoli in un database o in un file puo' far differenza se uso un flag di un byte o una stringa di dieci caratteri ... soprattutto se fosse un elenco di qualche migliaio di singoli veicoli "iscritti" per dire a qualcosa tipo telepass.

Se e' un puro programmino che dato il tipo di un singolo caso ritorna un prezzo (come nell'esempio postato) non pesa nulla.

In quanto all'esempio, e' sempre buona cosa considerare per ogni input richiesto TUTTI i possibili casi, e validare che sia uno dei casi "legali". Non basta (anche se e' buono e giusto) dire all'utente i possibili casi. Occorre verificare che sia uno di quelli. Se si vuole accettare "auto" e "automobile" si potrebbe testare i primi quattro caratteri della stringa (ma accetterebbe anche "autoscontro" o "automatismo"). Oppure piu' semplicemente usare un construtto case, o anche una serie di banali if then else if then ... else endif, che dopo avere verificato tutti i casi legali, se ne trova un altro emette un messaggio di errore, o chiede un nuovo input.

Meglio pensarci da subito.
Un tipico programma "professionale" in genere e' composto da un 30% di codice che fa il lavoro, un 30% di gestione degli errori, e un 30% di commenti (utilissimi quando ci si ritorna poi dopo).
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

GjMan78 ha scritto:
sabato 10 settembre 2022, 13:41
aggiungi un ulteriore controllo, no?
Se non è stato inserito auto o camion allora scrivi "valore non valido, inserisci auto o camion"
Giustamente , devo ancora abituarmi al fatto di poter fare completamente come mi pare , cmq si , giusto , limito il controllo a auto e camion.
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Lucio C ha scritto:
sabato 10 settembre 2022, 13:50
GreenCode ha scritto:
sabato 10 settembre 2022, 10:32
Cos'è uno storage ?
Non uno storage ma lo storage. Quando io ho imparato a programmare si usava praticamente solo l'inglese (e non era male). Non saprei come dirlo in italiano in modo generale. Puo' essere la quantita' di dati da tenere "in memoria" nel programma (la dimensione di un array), oppure la dimensione di un file su disco ("memoria di massa" si diceva una volta). Se devo tenere un elenco di veicoli in un database o in un file puo' far differenza se uso un flag di un byte o una stringa di dieci caratteri ... soprattutto se fosse un elenco di qualche migliaio di singoli veicoli "iscritti" per dire a qualcosa tipo telepass.
Quindi non è altro che la dimensione del programma o la quantita totali che servono per la costruzione del programma, o nel caso di un database è la dimensione del data base stesso ??
Se e' un puro programmino che dato il tipo di un singolo caso ritorna un prezzo (come nell'esempio postato) non pesa nulla.

In quanto all'esempio, e' sempre buona cosa considerare per ogni input richiesto TUTTI i possibili casi, e validare che sia uno dei casi "legali". Non basta (anche se e' buono e giusto) dire all'utente i possibili casi. Occorre verificare che sia uno di quelli. Se si vuole accettare "auto" e "automobile" si potrebbe testare i primi quattro caratteri della stringa (ma accetterebbe anche "autoscontro" o "automatismo"). Oppure piu' semplicemente usare un construtto case, o anche una serie di banali if then else if then ... else endif, che dopo avere verificato tutti i casi legali, se ne trova un altro emette un messaggio di errore, o chiede un nuovo input.

Meglio pensarci da subito.
Un tipico programma "professionale" in genere e' composto da un 30% di codice che fa il lavoro, un 30% di gestione degli errori, e un 30% di commenti (utilissimi quando ci si ritorna poi dopo).
Si si questa è una delle prime cose che ho affissato a mente , lavoro molto su carta , con grafici e via dicendo quindi ecco io posso solo che apprendere di piu .
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

GreenCode ha scritto:
sabato 10 settembre 2022, 14:33
Lucio C ha scritto:
sabato 10 settembre 2022, 13:50
GreenCode ha scritto:
sabato 10 settembre 2022, 10:32
Cos'è uno storage ?
Non uno storage ma lo storage. Quando io ho imparato a programmare si usava praticamente solo l'inglese (e non era male). Non saprei come dirlo in italiano in modo generale. Puo' essere la quantita' di dati da tenere "in memoria" nel programma (la dimensione di un array), oppure la dimensione di un file su disco ("memoria di massa" si diceva una volta). Se devo tenere un elenco di veicoli in un database o in un file puo' far differenza se uso un flag di un byte o una stringa di dieci caratteri ... soprattutto se fosse un elenco di qualche migliaio di singoli veicoli "iscritti" per dire a qualcosa tipo telepass.
Quindi non è altro che la dimensione del programma o la quantita totali che servono per la costruzione del programma, o nel caso di un database è la dimensione del data base stesso ??
Se e' un puro programmino che dato il tipo di un singolo caso ritorna un prezzo (come nell'esempio postato) non pesa nulla.

In quanto all'esempio, e' sempre buona cosa considerare per ogni input richiesto TUTTI i possibili casi, e validare che sia uno dei casi "legali". Non basta (anche se e' buono e giusto) dire all'utente i possibili casi. Occorre verificare che sia uno di quelli. Se si vuole accettare "auto" e "automobile" si potrebbe testare i primi quattro caratteri della stringa (ma accetterebbe anche "autoscontro" o "automatismo"). Oppure piu' semplicemente usare un construtto case, o anche una serie di banali if then else if then ... else endif, che dopo avere verificato tutti i casi legali, se ne trova un altro emette un messaggio di errore, o chiede un nuovo input.

Meglio pensarci da subito.
Un tipico programma "professionale" in genere e' composto da un 30% di codice che fa il lavoro, un 30% di gestione degli errori, e un 30% di commenti (utilissimi quando ci si ritorna poi dopo).
Si si questa è una delle prime cose che ho affissato a mente , lavoro molto su carta , con grafici e via dicendo quindi ecco io posso solo che apprendere di piu .
Senno posso limitare i caratteri di una variabile stringa , cioe definire che quella variabile avrà un tot di 4 caratteri e l altra di 6 ?
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Variabile boolean o stringa ?

Messaggio da Lucio C »

1) p.f. e' inutile includere tutto il messaggio a cui si risponde (solo le parti specifiche)
2) non so in pascal, ma in genere si puo' certamente stabilire una lunghezza per una stringa. Il modo poi come viene ... ehm ... storata dipende dal linguaggio (ed eventualmente dal tipo). P.es. in Fortran la lunghezza e' predefinita-fissa e viene riempita con eventuali blank. In C le stringhe sono terminate da un null (0 binario). In SQL esiste sia char(n) che varchar(n) ... nel primo caso so o comunque allocati n caratteri, nel secondo un max di n caratteri ma anche meno. In ogni caso non serve preoccuparsi dello spazio per poche piccole variabili "scalari", solo per grandi vettori o file.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
GreenCode
Prode Principiante
Messaggi: 46
Iscrizione: sabato 27 agosto 2022, 7:16

Re: Variabile boolean o stringa ?

Messaggio da GreenCode »

Lucio C ha scritto:
sabato 10 settembre 2022, 15:21
1) p.f. e' inutile includere tutto il messaggio a cui si risponde (solo le parti specifiche)
2) non so in pascal, ma in genere si puo' certamente stabilire una lunghezza per una stringa. Il modo poi come viene ... ehm ... storata dipende dal linguaggio (ed eventualmente dal tipo). P.es. in Fortran la lunghezza e' predefinita-fissa e viene riempita con eventuali blank. In C le stringhe sono terminate da un null (0 binario). In SQL esiste sia char(n) che varchar(n) ... nel primo caso so o comunque allocati n caratteri, nel secondo un max di n caratteri ma anche meno. In ogni caso non serve preoccuparsi dello spazio per poche piccole variabili "scalari", solo per grandi vettori o file.
Ok che per le poche variabili non serve preoccuparsi , io la proponevo come soluzione al fatto sintattico , sfruttando la lunghezza della stringa posso controllare se l input sia uno o l altro in modo piu selettivo , perche se chiedo di inserire auto o camion , l istinto è quello di riscrivere senza stare troppo a pensare a come scrivere , quindi va da se che scriverai o auto o camion , non di certo cane o canotto :D :birra: .. quindi userei la lunghezza della stringa piu come un controllo e niente piu... Cosa significa p.f. ....inizio del punto 1 ?
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 8 ospiti