• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Info Nella metropolitana di Napoli con il C++

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Volevo condividere con voi un piccolo progetto ideato ieri notte e scritto stamani. Premetto di aver preso ispirazione dal recente progetto di @System32 (vedi: Algoritmo per la gestione di un ascensore in C++).

N.B: Non ho usato le classi, dato che non le ho ancora studiate.

Partiamo dal dire che mi sono servito della Metropolitana (Linea 1) di Napoli come "protagonista" del programma. Essa ha ben 17 fermate (che ho raccolto in un array). Prima di entrare in Metropolitana, viene data la possibilità al pedone di comprare il biglietto. Se lo compra, entra in metropolitana. Se non lo compra, entra in metropolitana. Insomma, entra lo stesso... ma avrà la sorpresina alla terza fermata :emoji_relieved:

Il programma terminerà quando:
  • Il pedone scende dalla metropolitana.
  • Quando il pedone si becca la multa.
  • Quando il pedone arriva al capolinea (ultima fermata).
  • Quando l'utente inserisce una risposta non valida.

Detto questo, mi scuso infinitamente col mondo della programmazione per aver commesso un reato: ho usato il GOTO.

CODICE SORGENTE

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

N.B: L'header stdafx.h è da rimuovere nel caso in cui state usando un IDE diverso da Visual C++

Vi chiedo gentilmente di criticarmi e darmi consigli al fine di migliorare le mie conoscenze e correggere errori di stesura del codice


:bye:
 
Ultima modifica:
Salve.

Volevo condividere con voi un piccolo progetto ideato ieri notte e scritto stamani. Premetto di aver preso ispirazione dal recente progetto di @System32 (vedi: Algoritmo per la gestione di un ascensore in C++).

N.B: Non ho usato le classi, dato che non le ho ancora studiate.

Partiamo dal dire che mi sono servito della Metropolitana (Linea 1) di Napoli come "protagonista" del programma. Essa ha ben 17 fermate (che ho raccolto in un array). Prima di entrare in Metropolitana, viene data la possibilità al pedone di comprare il biglietto. Se lo compra, entra in metropolitana. Se non lo compra, entra in metropolitana. Insomma, entra lo stesso... ma avrà la sorpresina alla terza fermata :emoji_relieved:

Il programma terminerà quando:
  • Il pedone scende dalla metropolitana.
  • Quando il pedone si becca la multa.
  • Quanto il pedone arriva al capolinea (ultima fermata).
  • Quando l'utente inserisce una risposta non valida.

Detto questo, mi scuso infinitamente col mondo della programmazione per aver commesso un reato: ho usato il GOTO.

CODICE SORGENTE

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

N.B: L'header stdafx.h è da rimuovere nel caso in cui state usando un IDE diverso da Visual C++

Vi chiedo gentilmente di criticarmi e darmi consigli al fine di migliorare le mie conoscenze e correggere errori di stesura del codice


:bye:

bravo :emoji_slight_smile:
 
L'idea è carina ma non devi assolutamente utilizzare il goto...nel mio programma hai visto quella istruzione per caso ? Utilizza un do-while. Comunque mi spieghi perché blocchi l'input di tastiera e mouse ?
 
L'idea è carina ma non devi assolutamente utilizzare il goto...nel mio programma hai visto quella istruzione per caso ?

Potresti spiegarmi perché no? La mia professoressa di informatica un giorno mi stava mangiando perché l'ho usato. Le ho chiesto il perché ma me ne sono dimenticato...


Utilizza un do-while.

Prima di arrivare al goto (lo evito sempre e lo lascio come ultima cosa nel caso non riuscissi con altro) ho provato con altri cicli. Ora che ci siamo, mettiamo che volessi utilizzare il DO-WHILE.
Sostituisco redo (indice di goto) con do { e sostituisco il goto redo; con } while ();. Che condizione metto dentro il while??? A me serve che un pezzettino del programma si ripeta nel case 1:

Comunque mi spieghi perché blocchi l'input di tastiera e mouse ?

Ora che ci penso è inutile... non ricordo perché l'ho usato. Comunque a me blocca solo l'input di tastiera (solo sulla Console) e non del mouse.
 
Potresti spiegarmi perché no? La mia professoressa di informatica un giorno mi stava mangiando perché l'ho usato. Le ho chiesto il perché ma me ne sono dimenticato...

Il goto si utilizzava solo agli inizi, quando il linguaggio C non implementava ancora statement come il do-while e c'è anche da dire che il goto è un'istruzione nata con l'assembly. Non si deve utilizzare perché impiega troppe risorse per la CPU. Finché ci si limita al tuo programma ci può stare, ma un programma con migliaia di righe di codice non può implementare il goto.

Prima di arrivare al goto (lo evito sempre e lo lascio come ultima cosa nel caso non riuscissi con altro) ho provato con altri cicli. Ora che ci siamo, mettiamo che volessi utilizzare il DO-WHILE.
Sostituisco redo (indice di goto) con do { e sostituisco il goto redo; con } while ();. Che condizione metto dentro il while??? A me serve che un pezzettino del programma si ripeta nel case 1:

La condizione è che scelta_inmetro sia uguale a 1.

Ora che ci penso è inutile... non ricordo perché l'ho usato. Comunque a me blocca solo l'input di tastiera (solo sulla Console) e non del mouse.

La funzione BlockInput() blocca l'input di mouse e tastiera a livello globale.
 
La condizione è che scelta_inmetro sia uguale a 1.

Facendo così come dici... se sto alla fermata di Piscinola e scelgo di scendere mi dice che sono sceso a Chiaiano (che è la fermata successiva a Piscinola). O.o

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

La funzione BlockInput() blocca l'input di mouse e tastiera a livello globale.

A me non risulta così... a me blocca solo la tastiera e solo sulla Console.
 
E perché non lo hai usato ?

Certo che l'ho usato. Come contatore ho usato la lettera i ma questo poco importa. Non l'ho più usato perché mi ero confuso con la sintassi di non so quale altro linguaggio che non racchiude il ciclo for tra le parentesi graffe (mi sa che è il Pascal). E infatti ho la conferma adesso.

Ti dichiaro una cosa: tra tutti i cicli, quello for è quello che odio da morire. Probabilmente perché... boh non so.
 
Il for è il Dio dei cicli, ti evita di tenere in mezzo al codice un incremento ed una inizializzazione, per me è il massimo quando posso usarlo...
 
Certo che l'ho usato. Come contatore ho usato la lettera i ma questo poco importa. Non l'ho più usato perché mi ero confuso con la sintassi di non so quale altro linguaggio che non racchiude il ciclo for tra le parentesi graffe (mi sa che è il Pascal). E infatti ho la conferma adesso.

Ti dichiaro una cosa: tra tutti i cicli, quello for è quello che odio da morire. Probabilmente perché... boh non so.

Ti sei confuso e lo odi da morire perché non lo hai capito. Il for si utilizza quando hai un array, una lista, e in generale qualsiasi "contenitore" - virtuale si intende - che contiene oggetti che vuoi esaminare uno ad uno. E' una cazzata, hai visto come ho snellito, reso più performante e leggibile il tuo codice no ? Approfondisci l'argomento.

Il for è il Dio dei cicli, ti evita di tenere in mezzo al codice un incremento ed una inizializzazione, per me è il massimo quando posso usarlo...

Esattamente.

Si ti do ragione. Ma vedi, a volte ho difficoltà nell'impostarne la logica :emoji_relieved:

Con l'esperienza che acquisirai mano a mano ti verrà automatico scomporre il "problema" e avere chiara la logica del programma.
 
  • Like
Reactions: 1 person