using System.Net; namespace matrix_4; class Program { static void Main(string[] args) { Console.Clear(); int scelta, lineaAutobus, lineaAutobus2, fermataAutobus, conto; (string[], string[], bool[,]) configurazione = Configurazione(); string[] fermateAutobus = configurazione.Item1, lineeAutobus= configurazione.Item2; bool[,] corrispondenzaLineaFermata = configurazione.Item3; do { Console.WriteLine("Debug: corrispondenzaLineaFermata"); MostraMatrice(corrispondenzaLineaFermata); 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. oh hell nah"); 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); lineaAutobus2 = SelezionaElementoArray(lineeAutobus); Pausa(); break; case 5: Console.Clear(); Pausa(); break; } } while (scelta != 0); } static void MostraMatrice(bool[,] p_matrice) { for (int r = 0; r < p_matrice.GetLength(0); r++) { for (int c = 0; c < p_matrice.GetLength(1); c++) { Console.Write(p_matrice[r, c] + " "); } Console.WriteLine(); } } 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($"Debug: r: {r}\tc: {c}\t dimensione1: {dimensione1}\t dimensione2: {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 void StampaArraySoloElementi(string[] p_array) { for (int j = 0; j < p_array.Length; j++) { Console.WriteLine(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 void MostraLineeFermata(bool[,] p_matrice, int p_indiceFermata) { bool[] ritorno = new bool[p_matrice.GetLength(1)]; for (int i = 0; i < p_matrice.GetLength(1); i++) { if (p_matrice[p_indiceFermata, i]) { ritorno[i] = true; } } } }