PROBLEMA Algoritmo

Regins68

Nuovo Utente
105
7
Salve a tutti, premetto che magari il quesito che vi porrò, per alcuni sarà semplicissimo, ma è la prima volta che faccio cose del genere in informatica. Allora, frequento il terzo anno di ragioneria informatica, e mi è stato assegnato il seguente problema:

''Dato un numero in entrata n, dire se appartiene all'intervallo [4,10] o all'intervallo [5,20]''

Ora, il diagramma di flusso che ho creato io, mi riporta al risultato, e funziona con qualsiasi valore assegno ad n, tuttavia il professore vuole che venga specificato a quale intervallo appartiene n, come faccio?
 

Allegati

  • diagramma.jpg
    diagramma.jpg
    154.5 KB · Visualizzazioni: 740

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Salve a tutti, premetto che magari il quesito che vi porrò, per alcuni sarà semplicissimo, ma è la prima volta che faccio cose del genere in informatica. Allora, frequento il terzo anno di ragioneria informatica, e mi è stato assegnato il seguente problema:

''Dato un numero in entrata n, dire se appartiene all'intervallo [4,10] o all'intervallo [5,20]''

Ora, il diagramma di flusso che ho creato io, mi riporta al risultato, e funziona con qualsiasi valore assegno ad n, tuttavia il professore vuole che venga specificato a quale intervallo appartiene n, come faccio?
Il primo è un sottoinsieme del secondo, escluso il 4

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Salve a tutti, premetto che magari il quesito che vi porrò, per alcuni sarà semplicissimo, ma è la prima volta che faccio cose del genere in informatica. Allora, frequento il terzo anno di ragioneria informatica, e mi è stato assegnato il seguente problema:

''Dato un numero in entrata n, dire se appartiene all'intervallo [4,10] o all'intervallo [5,20]''

Ora, il diagramma di flusso che ho creato io, mi riporta al risultato, e funziona con qualsiasi valore assegno ad n, tuttavia il professore vuole che venga specificato a quale intervallo appartiene n, come faccio?
O meglio: escludi prima chi non appartiene ai due insiemi uniti e poi determina se appartiene al primo (se no appartiene al secondo): due condizioni

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Nei diagrammi di flusso puoi usare gli AND per verificare più di una condizione;
poiché gli intervalli numerici si intersecano hai solo pochi casi da verificare
  • se 5 <= n <= 10, scrivi "n appartiene sia a [4,10] che a [5,20]" (e TERMINA)
  • altrimenti se 4 <= n < 5, scrivi "n appartiene a [4,10]" (e TERMINA)
  • altrimenti se 10 < n <= 20, scrivi "n appartiene a [5,20]" (e TERMINA)
  • altrimenti scrivi "n non appartiene né a [4,10] né a [5,20]" (e TERMINA)
E' un modo di farlo anche se non l'unico naturalmente
 
Ultima modifica:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Appunto:

Se 3<n>20 non appartiene
Quindi se n<11 primo insieme altrimenti secondo

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
e perché mai?
6<11 ma appartiene sia a [4,10] che a [5,20]
se il professore si accontenta che si stampi un risultato e basta puoi sorvolare ma ad essere precisi non si dovrebbe.
Poi non è specificato se il numero in ingresso sia sicuramente un intero (in tal caso si semplifica un po') e non si capisce se si possono usare gli operatori booleani anche combinandoli (nel qual caso il diagramma diventa una banalità).

Soprattutto trovo incredibile che nel 2017 per iniziare a programmare ci si ostini ad insegnare i diagrammi di flusso :muro:
 
Ultima modifica:

Regins68

Nuovo Utente
105
7
e perché mai?
6<11 ma appartiene sia a [4,10] che a [5,20]
se il professore si accontenta che i stampi un risultato e basta puoi sorvolare ma ad essere precisi non si dovrebbe.
Poi non è specificato se il numero in ingresso sia sicuramente un intero (in tal caso si semplifica un po') e non si capisce se si possono usare gli operatori booleani anche combinandoli (nel qual caso il diagramma diventa una banalità).

Soprattutto trovo incredibile che nel 2017 per iniziare a programmare ci si ostini ad insegnare i diagrammi di flusso :muro:

Non so cosa siano gli operatori booleani, questa materia, in questo modo, praticamente l'abbiamo appena iniziata.
Non sono proprio ad una scuola superiore di informatica, bensì nel corso SIA di ragioneria, sistemi informatici aziendali, non so se questo possa influire sul programma e sulla preparazione rispetto ad una persona che esce dall'informatico.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Gli operatori booleani (se non li hai fatti li farai) permettono di verificare più di una condizione contemporaneamente;
per esempio puoi verificare se un numero è compreso tra 4 e 10 con il test
n>=4 AND n<=10 cioè n maggiore o uguale a 4 e (contemporanemanete) n minore o uguale a 10
c'è anche un operatore OR che significa "oppure", e NOT (negazione).
Non ti voglio confondere le idee, prendila come informativa, tra un po' li farai a scuola.
 

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
e perché mai?
6<11 ma appartiene sia a [4,10] che a [5,20]
se il professore si accontenta che si stampi un risultato e basta puoi sorvolare ma ad essere precisi non si dovrebbe.
Poi non è specificato se il numero in ingresso sia sicuramente un intero (in tal caso si semplifica un po') e non si capisce se si possono usare gli operatori booleani anche combinandoli (nel qual caso il diagramma diventa una banalità).

Soprattutto trovo incredibile che nel 2017 per iniziare a programmare ci si ostini ad insegnare i diagrammi di flusso :muro:
Scusa ma la questione riguarda la logica prima della programmazione. Solo il 4 appartiene ad un solo insieme (il primo). Il resto dei numeri tra 5 e 10 a tutti due, tra 11 e 20 al secondo.
Che si parlasse del campo degli interi (anzi dei naturali) mi pareva chiaro. Se fossero reali comunque è la stessa cosa..

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Appunto, se ti vai a riguardare la mia prima risposta (quella con la lista delle possibilità) c'è contemplata per prima proprio la possibilità dell'appartenenza ad entrambi gli insiemi, poi le altre.
Se tu invece procedi con
Se 3<n>20 non appartiene
Quindi se n<11 primo insieme altrimenti secondo
all'input 6 dai come output [4,10] quando invece è ANCHE [5,20]
la questione è banalissima: l'inseme "papabile" da considerare è fatto da 3 sottoinsiemi disgiunti più i casi di n<4 ed n>20
sono 4 casi perciò servono 3 test.
Inoltre non è specificato che n sia intero: non sta scritto da nessuna parte per cui in teoria n potrebbe essere n=5,5
inoltre se consideri gli interi allora devi considderare n<=3 (non n<3).
Scusa se sono tanto pignolo ma è su questo che si basa tutta la baracca della programmazione
 
Ultima modifica:

Regins68

Nuovo Utente
105
7
Scusa ma non ho seguito il primo commento perchè non ho ben capito, in ogni caso allora se ho capito bene gli operatori booleani sarebbe come inserire nella funziona SE ''n=>4;10<=n'' a differenza di come avevo fatto io, cioè inserire due funzioni SE per verificare

per ora ho fatto cosi, spero si capisca, in ogni caso ho cercato di specificare al meglio l'intervallo a cui appartiene n, nella traccia non mi viene detto nulla se n appartiene ad entrambi.

Mi spiego meglio, ho fatto in modo che qualsiasi n che cada nell'intervallo 4,10, appartenga solo a tale intervallo, pur ricadendo anche nel 5,20
Di conseguenza un numero per cadere nell'intervallo 5,20, dovrebbe essere n=5 o n=>11;n<=20
Non so se è corretto, in questo modo non tengo conto se n appartiene ad entrambi, difatti la traccia mi dice di specificare se n appartiene a [4,10] o [5,20], non dice nulla sull'appartenenza ad entrambi gli intervalli, sbaglio qualche cosa?
 

Allegati

  • algoritmo 2.jpg
    algoritmo 2.jpg
    3.5 MB · Visualizzazioni: 653
Ultima modifica:

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Appunto, se ti vai a riguardare la mia prima risposta (quella con la lista delle possibilità) c'è contemplata per prima proprio la possibilità dell'appartenenza ad entrambi gli insiemi, poi le altre.
Se tu invece procedi con

all'input 6 dai come output [4,10] quando invece è ANCHE [5,20]
la questione è banalissima: l'inseme "papabile" da considerare è fatto da 3 sottoinsiemi disgiunti più i casi di n<4 ed n>20
sono 4 casi perciò servono 3 test.
Inoltre non è specificato che n sia intero: non sta scritto da nessuna parte per cui in teoria n potrebbe essere n=5,5
inoltre se consideri gli interi allora devi considderare n<=3 (non n<3).
Scusa se sono tanto pignolo ma è su questo che si basa tutta la baracca della programmazione
Ok. Allora diciamo al prof che il problema è mal posto:

Non ha specificato:

1. Il campo dei numeri (anche se essendo n, per convenzione potrebbero essere i naturali: interi positivi escluso lo zero)

2. Se bisogna specificare che il numero appartenga, oltre che all'uno o l'altro sottoinsieme, anche quando appartiene ad entrambi (allorché serve una ulteriore condizione per determinarlo).

È abbastanza pignolo?

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
@Regins68
In pratica in un blocco di test puoi dire che n è un numero compreso tra 4 e 10 (inclusi) dicendo che
n è maggiore o uguale a 4 e contemporaneamente (=AND) n è minore o uguale a 10.
Guarda la figura e vedrai che capisci al volo

@rctimelines
esattamente.
Tuttavia concordo con te che il prof. sottintendesse gli interi, però il fatto di contemplare tutti i casi possibili non è chiaro dal testo per cui... da buoni informatici ci dobbiamo mettere nel caso peggiore e considerarli tutti.
 

Allegati

  • and.png
    and.png
    4.7 KB · Visualizzazioni: 127

Regins68

Nuovo Utente
105
7
Ah ok, quindi al posto del ; devo inserire AND?
Per quanto riguarda l'ultimo diagramma che ho mandato, cosa ne dici?
 

rctimelines

Utente Èlite
5,144
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Scusa ma non ho seguito il primo commento perchè non ho ben capito, in ogni caso allora se ho capito bene gli operatori booleani sarebbe come inserire nella funziona SE ''n=>4;10<=n'' a differenza di come avevo fatto io, cioè inserire due funzioni SE per verificare

per ora ho fatto cosi, spero si capisca, in ogni caso ho cercato di specificare al meglio l'intervallo a cui appartiene n, nella traccia non mi viene detto nulla se n appartiene ad entrambi.

Mi spiego meglio, ho fatto in modo che qualsiasi n che cada nell'intervallo 4,10, appartenga solo a tale intervallo, pur ricadendo anche nel 5,20
Di conseguenza un numero per cadere nell'intervallo 5,20, dovrebbe essere n=5 o n=>11;n<=20
Non so se è corretto, in questo modo non tengo conto se n appartiene ad entrambi, difatti la traccia mi dice di specificare se n appartiene a [4,10] o [5,20], non dice nulla sull'appartenenza ad entrambi gli intervalli, sbaglio qualche cosa?
È quello che ho fatto anch'io (escludendo prima gli esterni e poi individuando quelli del primo, ma è la stessa cosa). Aggiungi una condizione e puoi individuare anche il sottoinsieme comune.

Inviato dal mio Nexus 5 utilizzando Tapatalk
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!