/* Ε.Α.Π. Πληροφορική Αθανασίου Κωνσταντίνος Α.Μ. 170612 ΗΛΕ-42 2η Γραπτή Εργασία - ΠΛΗ10 Υποεργασία 3.B.: Δισδιάστατος πίνακας διαχείρησης απόστασης μεταξύ ελληνικών πόλεων */ #include /* ΣΤΑΘΕΡΕΣ*/ #define N 5 /* Πλήθος πόλεων */ int main() { /* ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ */ double cities[N][N]; /* Δισδιάστατος πίνακας αποστάσεων */ int i, j; /* Μεταβλητές για FAR/NEAR */ int city1_far = 0, city2_far = 1; int city1_near = 0, city2_near = 1; double max_distance = -1.0; /* Αρχικοποίηση με αρνητική τιμή*/ double min_distance = 1e9; /* Αρχικοποίηση με πολύ μεγάλη τιμή*/ /* Μεταβλητές για TRIP */ int city_start_input; int city_start; double total_trip_distance = 0.0; double distance_input; printf("Εισαγωγή στοιχείων πίνακα: \n"); /* 1. ΕΙΣΑΓΩΓΗ (INPUT) - Διατρέχουμε μόνο το άνω δεξιά τμήμα */ for (i = 0; i < N; i++) { for (j = i + 1; j < N; j++) { /* Έλεγχος έγκυρης εισόδου*/ do { printf("Δώσε την απόσταση μεταξύ %dης και %dης πόλης: ", i + 1, j + 1); scanf("%lf", &distance_input); if (distance_input <= 0) { printf("Ο αριθμός πρέπει να είναι θετικός.\n"); } } while (distance_input <= 0); cities[i][j] = distance_input; } } /* 2. ΣΥΜΠΛΗΡΩΣΗ (FILL) - Συμμετρία και διαγώνιος */ for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i == j) { cities[i][j] = 0.0; // Διαγώνιος } else if (i > j) { cities[i][j] = cities[j][i];/*Κάτω τμήμα = Άνω τμήμα*/ } } } /* 3. ΕΜΦΑΝΙΣΗ (OUTPUT) */ printf("\nΕμφάνιση πίνακα αποστάσεων:\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%8.2f ", cities[i][j]); } printf("\n"); } /* 4 & 5. ΕΥΡΕΣΗ MAX & MIN (FAR/NEAR) */ for (i = 0; i < N; i++) { for (j = i + 1; j < N; j++) /* Έλεγχος μόνο άνω τριγώνου για αποφυγή διπλότυπων*/ { /* Μέγιστο*/ if (cities[i][j] > max_distance) { max_distance = cities[i][j]; city1_far = i + 1; city2_far = j + 1; } /* Ελάχιστο*/ if (cities[i][j] < min_distance) { min_distance = cities[i][j]; city1_near = i + 1; city2_near = j + 1; } } } printf("\nΗ μεγαλύτερη απόσταση είναι: %.2f km (Πόλεις %d και %d)\n", max_distance, city1_far, city2_far); printf("Η μικρότερη απόσταση είναι: %.2f km (Πόλεις %d και %d)\n", min_distance, city1_near, city2_near); /* 6. ΥΠΟΛΟΓΙΣΜΟΣ ΤΑΞΙΔΙΟΥ (TRIP) */ printf("\nΥπολογισμός ταξιδιού προς όλες τις πόλεις\n"); do { printf("Δώσε την πόλη - αφετηρία (1 έως %d): ", N); scanf("%d", &city_start_input); if (city_start_input < 1 || city_start_input > N) { printf("Η τιμή πρέπει να είναι μεταξύ 1 και %d\n", N); } } while (city_start_input < 1 || city_start_input > N); city_start = city_start_input - 1;/*Προσαρμογή σε 0-based index*/ /* Υπολογισμός: 2 * απόσταση (πήγαινε-έλα)*/ for (j = 0; j < N; j++) { total_trip_distance += (2.0 * cities[city_start][j]); } printf("Το συνολικό ταξίδι από την πόλη %d είναι %.2f Km\n", city_start_input, total_trip_distance); return 0; }