290 lines
12 KiB
C#
290 lines
12 KiB
C#
using System.Net;
|
|
|
|
namespace matrix_4;
|
|
|
|
class Program {
|
|
static void Main(string[] args) {
|
|
Console.Clear();
|
|
int scelta, lineaAutobus, lineaAutobus2, fermataAutobus, fermataAutobus2, conto, j = 0;
|
|
(string[], string[], bool[,]) configurazione = Configurazione();
|
|
string[] fermateAutobus = configurazione.Item1, lineeAutobus = configurazione.Item2;
|
|
int[] lineePartenza = new int[fermateAutobus.Length], lineeDestinazione = new int[fermateAutobus.Length];
|
|
bool[,] corrispondenzaLineaFermata = configurazione.Item3;
|
|
bool nullo = true;
|
|
|
|
do {
|
|
Console.WriteLine("Inserire un'opzione:");
|
|
Console.WriteLine("1. La linea passa per la fermata?");
|
|
Console.WriteLine("2. Quali linee passano per la fermata?");
|
|
Console.WriteLine("3. Quali e quante sono le fermate per la linea?");
|
|
Console.WriteLine("4. Due linee hanno fermate in comune?");
|
|
Console.WriteLine("5. Percorsi tra due fermate");
|
|
Console.WriteLine("0. Esci");
|
|
Console.Write("Scelta: ");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
|
|
switch (scelta) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
Console.Clear();
|
|
lineaAutobus = SelezionaElementoArray(lineeAutobus);
|
|
fermataAutobus = SelezionaElementoArray(fermateAutobus);
|
|
Console.Clear();
|
|
|
|
if (corrispondenzaLineaFermata[lineaAutobus, fermataAutobus]) {
|
|
Console.WriteLine($"La linea {lineeAutobus[lineaAutobus]} passa per la fermata {fermateAutobus[fermataAutobus]}");
|
|
}
|
|
else {
|
|
Console.WriteLine($"La linea {lineeAutobus[lineaAutobus]} non passa per la fermata {fermateAutobus[fermataAutobus]}");
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 2:
|
|
Console.Clear();
|
|
|
|
conto = 0;
|
|
fermataAutobus = SelezionaElementoArray(fermateAutobus);
|
|
Console.Clear();
|
|
|
|
Console.WriteLine($"Per la fermata {fermateAutobus[fermataAutobus]} passano le linee:");
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(1); i++) {
|
|
if (corrispondenzaLineaFermata[fermataAutobus, i]) {
|
|
Console.WriteLine(lineeAutobus[i]);
|
|
conto++;
|
|
}
|
|
}
|
|
Console.WriteLine($"Per la fermata {fermateAutobus[fermataAutobus]} passano {conto} linee");
|
|
Pausa();
|
|
break;
|
|
case 3:
|
|
Console.Clear();
|
|
conto = 0;
|
|
lineaAutobus = SelezionaElementoArray(lineeAutobus);
|
|
Console.Clear();
|
|
|
|
Console.WriteLine($"La linea {lineeAutobus[lineaAutobus]} ha le fermate:");
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(0); i++) {
|
|
if (corrispondenzaLineaFermata[i, lineaAutobus]) {
|
|
Console.WriteLine(fermateAutobus[i]);
|
|
conto++;
|
|
}
|
|
}
|
|
Console.WriteLine($"Le fermate per la linea {lineeAutobus[lineaAutobus]} sono {conto}");
|
|
Pausa();
|
|
break;
|
|
case 4:
|
|
Console.Clear();
|
|
lineaAutobus = SelezionaElementoArray(lineeAutobus);
|
|
Console.Clear();
|
|
lineaAutobus2 = SelezionaElementoArray(lineeAutobus);
|
|
Console.Clear();
|
|
if (lineaAutobus != lineaAutobus2) {
|
|
Console.WriteLine($"Tra le linee {lineeAutobus[lineaAutobus]} e {lineeAutobus[lineaAutobus2]} fermate in comune sono:");
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(0); i++) {
|
|
if (corrispondenzaLineaFermata[i, lineaAutobus] == corrispondenzaLineaFermata[i, lineaAutobus2]) {
|
|
Console.WriteLine(fermateAutobus[i]);
|
|
nullo = false;
|
|
}
|
|
}
|
|
|
|
if (nullo) {//serve per scrivere se non c'è nessuna fermata in comune
|
|
Console.WriteLine("Nessuna");
|
|
}
|
|
|
|
}
|
|
else {
|
|
Console.WriteLine("Selezionare due linee differenti.");
|
|
}
|
|
|
|
Pausa();
|
|
break;
|
|
case 5:
|
|
Console.Clear();
|
|
fermataAutobus = SelezionaElementoArray(fermateAutobus);
|
|
Console.Clear();
|
|
fermataAutobus2 = SelezionaElementoArray(fermateAutobus);
|
|
Console.Clear();
|
|
if (fermataAutobus != fermataAutobus2) {
|
|
Console.Write($"Tra le fermate {fermateAutobus[fermataAutobus]} e {fermateAutobus[fermataAutobus2]} passano le linee: ");
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(1); i++) {
|
|
if (corrispondenzaLineaFermata[fermataAutobus, i] && corrispondenzaLineaFermata[fermataAutobus2, i]) {
|
|
Console.Write($"{lineeAutobus[i]} ");
|
|
nullo = false;
|
|
}
|
|
}
|
|
|
|
if (nullo) {//serve per scrivere se non c'è nessuna fermata in comune
|
|
Console.WriteLine("Nessuna");
|
|
Console.WriteLine("Quindi si può:");
|
|
|
|
|
|
Array.Fill(lineePartenza, int.MaxValue);
|
|
Array.Fill(lineeDestinazione, int.MaxValue);
|
|
|
|
//trovo tutte le linee che passano per la fermata di partenza
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(0) && j < lineePartenza.Length; i++) {
|
|
if (corrispondenzaLineaFermata[i, fermataAutobus]) {
|
|
lineePartenza[j] = i;
|
|
j++;
|
|
}
|
|
}
|
|
//trovo tutte le linee che passano per la fermata di destinazione
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(0) && j < corrispondenzaLineaFermata.GetLength(1); i++) {
|
|
if (corrispondenzaLineaFermata[fermataAutobus2, i]) {
|
|
lineeDestinazione[j] = i;
|
|
j++;
|
|
}
|
|
}
|
|
|
|
//riordino il tutto per semplificare i cicli
|
|
lineePartenza = InsertionSort(lineePartenza);
|
|
lineeDestinazione = InsertionSort(lineeDestinazione);
|
|
|
|
|
|
j = 0;
|
|
for (int k = 0; k < corrispondenzaLineaFermata.GetLength(1); k++) {
|
|
for (int i = 0; i < corrispondenzaLineaFermata.GetLength(0); i++) {
|
|
if (!(lineePartenza[i] == int.MaxValue || lineeDestinazione[k] == int.MaxValue)) {
|
|
while (j < corrispondenzaLineaFermata.GetLength(0)) {
|
|
//Verifico che la fermata j sia in comune tra la linea di partenza e di destinazione
|
|
if (corrispondenzaLineaFermata[j, lineePartenza[i]] == corrispondenzaLineaFermata[j, lineeDestinazione[k]] && corrispondenzaLineaFermata[j, lineeDestinazione[k]]) {
|
|
if (lineePartenza[i] != lineeDestinazione[k]) {
|
|
Console.WriteLine($"Prendere la linea {lineeAutobus[lineePartenza[i]]}, cambiare alla fermata {fermateAutobus[j]} e proseguire sulla linea {lineeAutobus[lineeDestinazione[k]]}");
|
|
}
|
|
}
|
|
j++;
|
|
}
|
|
j = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
Console.WriteLine("Selezionare due fermate differenti.");
|
|
}
|
|
Pausa();
|
|
break;
|
|
}
|
|
}
|
|
while (scelta != 0);
|
|
|
|
|
|
}
|
|
|
|
static void Pausa() {
|
|
Console.WriteLine("Premere un tasto per continuare. . .");
|
|
Console.ReadKey();
|
|
Console.Clear();
|
|
}
|
|
|
|
static (string[], string[], bool[,]) Configurazione() {
|
|
int dimensione1, dimensione2, r = 0, c = 0, scelta;
|
|
(string[], string[], bool[,]) ritorno;
|
|
|
|
Console.Clear();
|
|
do {
|
|
Console.Write("Quante sono le fermate dell'autobus? ");
|
|
dimensione1 = Convert.ToInt32(Console.ReadLine());
|
|
if (dimensione1 <= 0) {
|
|
Console.WriteLine("Errore: non è possibile inserire un numero minore o uguale a zero.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (dimensione1 <= 0);
|
|
ritorno.Item1 = new string[dimensione1];
|
|
for (int i = 0; i < dimensione1; i++) {
|
|
Console.Write($"Inserire la fermata n. {i + 1}: ");
|
|
ritorno.Item1[i] = Console.ReadLine();
|
|
}
|
|
|
|
Console.Clear();
|
|
|
|
do {
|
|
Console.Write("Quante sono le linee dell'autobus? ");
|
|
dimensione2 = Convert.ToInt32(Console.ReadLine());
|
|
if (dimensione2 <= 0) {
|
|
Console.WriteLine("Errore: non è possibile inserire un numero minore o uguale a zero.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (dimensione2 <= 0);
|
|
ritorno.Item2 = new string[dimensione2];
|
|
for (int i = 0; i < dimensione2; i++) {
|
|
Console.Write($"Inserire la linea n. {i + 1}: ");
|
|
ritorno.Item2[i] = Console.ReadLine();
|
|
}
|
|
|
|
ritorno.Item3 = new bool[dimensione1, dimensione2];
|
|
|
|
Console.Clear();
|
|
|
|
while (r < dimensione1) {
|
|
while (c < dimensione2) {
|
|
Console.WriteLine($"La linea {ritorno.Item2[c]} si ferma alla fermata {ritorno.Item1[r]}?");
|
|
Console.WriteLine("[0] Sì\t[1] No");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
switch (scelta) {
|
|
case 0:
|
|
ritorno.Item3[r, c] = true;
|
|
c++;
|
|
Console.Clear();
|
|
break;
|
|
case 1:
|
|
ritorno.Item3[r, c] = false;
|
|
c++;
|
|
Console.Clear();
|
|
break;
|
|
default:
|
|
Console.WriteLine("Opzione non valida.");
|
|
Pausa();
|
|
break;
|
|
}
|
|
}
|
|
r++;
|
|
c = 0;
|
|
}
|
|
return ritorno;
|
|
}
|
|
|
|
static void StampaArray(string[] p_array) {
|
|
for (int j = 0; j < p_array.Length; j++) {
|
|
Console.WriteLine("Elemento " + j + ": " + p_array[j]);
|
|
}
|
|
}
|
|
|
|
static int SelezionaElementoArray(string[] p_array) {
|
|
int ritorno;
|
|
do {
|
|
Console.WriteLine("Quale elemento selezionare?");
|
|
StampaArray(p_array);
|
|
ritorno = Convert.ToInt32(Console.ReadLine());
|
|
if (ritorno < 0 || ritorno > p_array.Length) {
|
|
Console.WriteLine("La scelta inserita non è valida.");
|
|
Pausa();
|
|
}
|
|
} while (ritorno < 0 || ritorno > p_array.Length);
|
|
|
|
return ritorno;
|
|
|
|
}
|
|
|
|
static int[] InsertionSort(int[] p_array) { //implementazione ufficiale copiata da Classroom
|
|
int i, j;
|
|
int temp;
|
|
|
|
for (i = 1; i < p_array.Length; i++) {
|
|
temp = p_array[i];
|
|
j = i - 1;
|
|
while (j >= 0 && p_array[j] > temp) {
|
|
p_array[j + 1] = p_array[j];
|
|
j--;
|
|
}
|
|
p_array[j + 1] = temp;
|
|
}
|
|
|
|
return p_array;
|
|
}
|
|
}
|