codeguru
Μηνύματα: 1
Θετικοί ψήφοι: 0
Αποσυνδεδεμένος
|
29 Απριλίου 2012, 22:12
|
0
|
Μέρος Α
Module Module1
Sub Main()
'Ορισμός του δισδιάστατου πίκανα βαθμολογίας 4 στήλες x 5 γραμμές (η αρίθμιση ξεκινάει από το 0) Dim grades(3, 4) As Single
'Αρχικοποίηση πίνακα με τις ζητούμενες τιμές της εκφώνησης grades = {{6.5, 7.5, 8.5, 7.5}, {6.0, 5.0, 5.5, 9.0}, {7.0, 5.0, 5.5, 6.0}, {8.5, 5.0, 7.5, 5.0}, {8.5, 5.0, 7.0, 5.5}}
'Ορισμός λοιπών απαραίτητων μεταβλητών Dim i As Integer, y As Integer, N As Integer, L As Integer
'Εύρεση της θέσης της πρώτης γραμμής του πίνακα L = LBound(grades, 1)
'Εύρεση της θέσης της τελευταίας γραμμής του πίνακα N = UBound(grades, 1)
'Ορισμός μονοδιάστατου πίνακα για την αποθήκευση των τελικών βαθμολογιών Dim final_grades(N - L) As Single
'Για κάθε γραμμή του αρχικού πίνακα For i = L To N
Dim project_grades(2) As Single
'Δημιουργούμε πίνακα με τις τιμές από τις 3 πρώτες στήλες του πίνακα όπου έχουμε τις βαθμολογίες των ασκήσεων 'διότι η συνάρτηση average λειτουργεί με μονοδιάστατο πίνακα For y = 0 To 2 project_grades(y) = grades(i, y) Next y
'Υπολογίζουμε τον τελικό βαθμό σύμφωνα με τον τύπο της εκφώνησης και την αποθηκεύουμε στ μονοδιάστατο πίνακα final_grades(i) = 0.3 * average(project_grades) + 0.7 * grades(i, 3)
Next i
'Εμφανίζουμε τον τελικό βαθμό κάθε σπουδαστή For i = L To N Console.WriteLine("Τελικός Βαθμός " & (i + 1) & "ου Σπουδαστή: " & final_grades(i)) Next i
Console.WriteLine()
'Εμφανίζουμε τον ελάχιστο τελικό βαθμό Console.WriteLine("Ελάχιστος Τελικός Βαθμός: " & min(final_grades)) Console.WriteLine()
'Εμφανίζουμε τον μέγιστο τελικό βαθμό Console.WriteLine("Μέγιστος Τελικός Βαθμός: " & max(final_grades)) Console.WriteLine()
'Εμφανίζουμε τον μέσο όρο των τελικών βαθμών Console.WriteLine("Μέσος Όρος Τελικών Βαθμών: " & average(final_grades)) Console.WriteLine()
Console.WriteLine("---------------------------") Console.WriteLine(" Πατήστε ENTER για έξοδο ") Console.WriteLine("---------------------------")
'Για να μην τερματιστεί το πρόγραμμα μόλις ολοκληρωθεί η εμφάνιση χρησιμοποιούμε τη ReadLine() Console.ReadLine()
End Sub
'Συνάρτηση υπολογισμού του μέσου όρου όλων των στοιχείων ενός δεδομένου μονοδιάστατου πίνακα δεκαδικών αριθμών Function average(ByVal numbers() As Single) As Single
Dim averageV As Single, sumV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers)
'Προσθέτουμε διαδοχικά τις τιμές όλων των στοιχείων του πίνακα For i = L To N sumV = sumV + numbers(i) Next 'Ο μέσος όρος προκύπτει από το άθροισμα των στοιχείων δια του πλήθους τους averageV = sumV / (N - L + 1)
'Επιστρέφουμε τον μέσο όρο που μόλις υπολογίσαμε Return averageV
End Function
'Συνάρτηση υπολογισμού του μικρότερου αριθμού από έναν δεδομένο μονοδιάστατο πίνακα δεκαδικών αριθμών Function min(ByVal numbers() As Single) As Single
Dim minV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers)
'Θέτουμε αρχικά ως ελάχιστο την τιμή του πρώτου στοιχείου του πίνακα minV = numbers(L)
'Συγκρίνουμε διαδοχικά τον ελάχιστο που μόλις ορίσαμε με τις τιμές των υπολοίπων στοιχείων του πίνακα For i = L To N 'Αν κάποιος από του συγκρινόμενους αριθμούς είναι μικρότερος τότε ορίζουμε αυτόν ως το νέο ελάχιστο If numbers(i) < minV Then minV = numbers(i) End If Next
'Επιστέφουμε τον ελάχιστο αριθμό που βρήκαμε Return minV
End Function
'Συνάρτηση υπολογισμού του μεγαλύτερου αριθμού από έναν δεδομένο μονοδιάστατο πίνακα δεκαδικών αριθμών Function max(ByVal numbers() As Single) As Single
Dim maxV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers)
'Θέτουμε αρχικά ως μέγιστο την τιμή του πρώτου στοιχείου του πίνακα maxV = numbers(L)
'Συγκρίνουμε διαδοχικά τον μέγιστο που μόλις ορίσαμε με τις τιμές των υπολοίπων στοιχείων του πίνακα For i = L + 1 To N 'Αν κάποιος από του συγκρινόμενους αριθμούς είναι μικρότερος τότε ορίζουμε αυτόν ως το νέο μέγιστο If numbers(i) > maxV Then maxV = numbers(i) End If Next
'Επιστέφουμε τον μέγιστο αριθμό που βρήκαμε Return maxV
End Function
End Module
Μέρος Β
Module Module1
Sub Main() Dim user_input As String Dim students As Integer Dim isValid As Boolean
isValid = False
'Έλεγχος ότι η είσοδος του χρήστη είναι ακέραιος μεταξύ του 1 και του 20 Do Console.Write("Παρακαλώ εισάγετε το πλήθος των σπουδαστών: ") user_input = Console.ReadLine() If IsNumeric(user_input) Then 'Εφόσον είναι αριθμός κάνουμε ανάθεση σε μεταβλητή τύπου Single students = user_input 'Έλεγχος για μεγαλύτερο του 0 και μικρότερο ή ίσο του 20 και να είναι ακέραιος If Math.Round(students) > 0 And Math.Round(students) <= 20 And (students - Math.Round(students) = 0) Then isValid = True Else Console.WriteLine("Tο πλήθος των σπουδαστών πρέπει να είναι ακέραιος μεταξύ του 1 και του 20") End If Else Console.WriteLine("Tο πλήθος των σπουδαστών πρέπει να είναι αριθμός") End If
Loop Until (isValid)
Console.WriteLine()
'Ορισμός του δισδιάστατου πίκανα βαθμολογίας με 4 στήλες και τόσες γραμμές όσες η είσοδος του χρήστη (η αρίθμιση ξεκινάει από το 0) Dim grades(students - 1, 3) As Single
'Ορισμός λοιπών απαραίτητων μεταβλητών Dim i As Integer, y As Integer, N As Integer, L As Integer Dim user_grade
'Μονοδιάστατος πίνακας, ίδιου μήκους με την 1η διάσταση του πίνακα grades που θα κρατάει την πληροφορία αν ο σπουδαστής ΑΠΟΡΡΙΠΕΤΑΙ Dim rejected(students - 1) As Boolean
'Μονοδιάστατος πίνακας, ίδιου μήκους με την 1η διάσταση του πίνακα grades που θα κρατάει την πληροφορία αν ο σπουδαστής ΕΠΑΝΕΞΕΤΑΖΕΤΑΙ Dim reexamed(students - 1) As Boolean
'Εύρεση της θέσης της πρώτης γραμμής του πίνακα L = LBound(grades, 1)
'Εύρεση της θέσης της τελευταίας γραμμής του πίνακα N = UBound(grades, 1)
'Αρχικοποίηση πίνακα με τιμές που θα εισάγει ο χρήστης
'Για κάθε σπουδαστή For i = L To N rejected(i) = False reexamed(i) = False 'για κάθε άσκηση For y = 0 To 2 If rejected(i) = False Then Do Console.Write("Παρακαλώ εισάγετε το βαθμό της " & (y + 1) & "ης Άσκησης του " & (i + 1) & "ου σπουδαστή: ") user_grade = readGrade() Loop Until (user_grade <> -1) grades(i, y) = user_grade 'Αν ο βαθμός της άσκησης είναι < 5 τότε απορρίπτεται If user_grade < 5 Then rejected(i) = True End If Next y 'για την τελική εξέταση εφόσον δεν απορρίπτεται If rejected(i) = False Then Do Console.Write("Παρακαλώ εισάγετε το βαθμό της Τελικής Εξέτασης του " & (i + 1) & "ου σπουδαστή: ") user_grade = readGrade() Loop Until (user_grade <> -1) If user_grade >= 5 Then grades(i, 3) = user_grade Else 'Αν ο βαθμός της τελικής εξέτασης είναι < 5 τότε επανεξετάζεται reexamed(i) = True End If End If Console.WriteLine() Next i
'Ορισμός μονοδιάστατου πίνακα για την αποθήκευση των τελικών βαθμολογιών Dim final_grades(N - L) As Single
'Για κάθε γραμμή του αρχικού πίνακα For i = L To N
If rejected(i) = False Then
Dim project_grades(2) As Single
'Δημιουργούμε πίνακα με τις τιμές από τις 3 πρώτες στήλες του πίνακα όπου έχουμε τις βαθμολογίες των ασκήσεων 'διότι η συνάρτηση average λειτουργεί με μονοδιάστατο πίνακα For y = 0 To 2 project_grades(y) = grades(i, y) Next y
'Υπολογίζουμε τον τελικό βαθμό σύμφωνα με τον τύπο της εκφώνησης και την αποθηκεύουμε στo μονοδιάστατο πίνακα If reexamed(i) = False Then final_grades(i) = 0.3 * average(project_grades) + 0.7 * grades(i, 3) Else 'Χρησιμοποιούμε την τιμή 0 για να μη λαβουμε υπόψη την επεξεργασία μέγιστου, ελάχιστου και μέσου όρου το στοιχείο αυτό final_grades(i) = 0 End If Else 'Ομοίως χρησιμοποιούμε την τιμή 0 final_grades(i) = 0 End If
Next i
Console.WriteLine()
'Εμφανίζουμε τον τελικό βαθμό κάθε σπουδαστή For i = L To N If rejected(i) = False Then If reexamed(i) = False Then Console.WriteLine("Ο τελικός Βαθμός του " & (i + 1) & "ου Σπουδαστή είναι: " & final_grades(i)) Else Console.WriteLine("O " & (i + 1) & "ος Σπουδαστής ΕΠΑΝΕΞΕΤΑΖΕΤΑΙ") End If Else Console.WriteLine("O " & (i + 1) & "ος Σπουδαστής ΑΠΟΡΡΙΠΤΕΤΑΙ") End If
Next i
'Απαλοίφουμε τα στοιχεία με τιμή 0 από τον πίνακα final_grades για να μην ληφθούν υπόψη στην επεξεργασία Dim new_elements As Integer Dim new_element_index As Integer
new_elements = 0 new_element_index = 0 For i = L To N If final_grades(i) <> 0 Then new_elements = new_elements + 1 End If Next i
Dim filtered_final_grades(new_elements - 1) As Single
For i = L To N If final_grades(i) <> 0 Then filtered_final_grades(new_element_index) = final_grades(i) new_element_index = new_element_index + 1 End If Next i
Console.WriteLine()
'Εμφανίζουμε τον ελάχιστο τελικό βαθμό Console.WriteLine("Ελάχιστος Τελικός Βαθμός: " & min(filtered_final_grades)) Console.WriteLine()
'Εμφανίζουμε τον μέγιστο τελικό βαθμό Console.WriteLine("Μέγιστος Τελικός Βαθμός: " & max(filtered_final_grades)) Console.WriteLine()
'Εμφανίζουμε τον μέσο όρο των τελικών βαθμών Console.WriteLine("Μέσος Όρος Τελικών Βαθμών: " & average(filtered_final_grades)) Console.WriteLine()
Console.WriteLine("---------------------------") Console.WriteLine(" Πατήστε ENTER για έξοδο ") Console.WriteLine("---------------------------")
'Για να μην τερματιστεί το πρόγραμμα μόλις ολοκληρωθεί η εμφάνιση χρησιμοποιούμε τη ReadLine() Console.ReadLine()
End Sub
'Συνάρτηση που διαβάζει την είσοδο του χρήστη και εξασφαλίζει ότι θα εισάγει μία έγκυρη βαθμολογία, δηλαδή έναν δεκαδικό απο 0 μέχρι 10 'Επιστρέφει είτε τη έγκυρη τιμή της βαθμολογίας τύπου Single είτε -1 σε περίπτωση μη έγκυρης βαθμολογίας Function readGrade() As Single
Dim user_input As String Dim grade As Single Dim isValid As Boolean
isValid = False
'Έλεγχος αν η είσοδος του χρήστη είναι ακέραιος μεταξύ του 0 και του 10 user_input = Console.ReadLine()
If IsNumeric(user_input) Then 'Εφόσον είναι αριθμός κάνουμε ανάθεση σε μεταβλητή τύπου Single grade = user_input 'Έλεγχος για μεγαλύτερο ή ίσο του 0 και μικρότερο ή ίσο του 10 If grade >= 0 And grade <= 10 Then readGrade = grade Else Console.WriteLine("Η βαθμολογία πρέπει να είναι αριθμός μεταξύ του 0 και του 10 -^") readGrade = -1 End If Else Console.WriteLine("H βαθμολογία πρέπει να είναι αριθμός -------------------------^") readGrade = -1 End If
End Function
'Συνάρτηση υπολογισμού του μέσου όρου όλων των στοιχείων ενός δεδομένου μονοδιάστατου πίνακα δεκαδικών αριθμών 'Επιστρέφει Single εκτός και αν δοθεί κενός πίνακας, επομένως επιστρέφει "-" Function average(ByVal numbers() As Single)
Dim averageV As Single, sumV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers) If N >= 0 And L >= 0 Then 'Προσθέτουμε διαδοχικά τις τιμές όλων των στοιχείων του πίνακα For i = L To N sumV = sumV + numbers(i) Next 'Ο μέσος όρος προκύπτει από το άθροισμα των στοιχείων δια του πλήθους τους averageV = sumV / (N - L + 1)
'Επιστρέφουμε τον μέσο όρο που μόλις υπολογίσαμε Return averageV Else Return ("-") End If
End Function
'Συνάρτηση υπολογισμού του μικρότερου αριθμού από έναν δεδομένο μονοδιάστατο πίνακα δεκαδικών αριθμών 'Επιστρέφει Single εκτός και αν δοθεί κενός πίνακας, επομένως επιστρέφει "-" Function min(ByVal numbers() As Single)
Dim minV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers)
If N >= 0 And L >= 0 Then
'Θέτουμε αρχικά ως ελάχιστο την τιμή του πρώτου στοιχείου του πίνακα minV = numbers(L)
'Συγκρίνουμε διαδοχικά τον ελάχιστο που μόλις ορίσαμε με τις τιμές των υπολοίπων στοιχείων του πίνακα For i = L To N 'Αν κάποιος από του συγκρινόμενους αριθμούς είναι μικρότερος τότε ορίζουμε αυτόν ως το νέο ελάχιστο If numbers(i) < minV Then minV = numbers(i) End If Next
'Επιστέφουμε τον ελάχιστο αριθμό που βρήκαμε Return minV Else Return "-" End If
End Function
'Συνάρτηση υπολογισμού του μεγαλύτερου αριθμού από έναν δεδομένο μονοδιάστατο πίνακα δεκαδικών αριθμών 'Επιστρέφει Single εκτός και αν δοθεί κενός πίνακας, επομένως επιστρέφει "-" Function max(ByVal numbers() As Single)
Dim maxV As Single Dim i As Integer, N As Integer, L As Integer
'Εύρεση της θέσης του πρώτου στοιχείου του πίνακα L = LBound(numbers)
'Εύρεση της θέσης του τελευταίου στοιχείου του πίνακα N = UBound(numbers)
If N >= 0 And L >= 0 Then
'Θέτουμε αρχικά ως μέγιστο την τιμή του πρώτου στοιχείου του πίνακα maxV = numbers(L)
'Συγκρίνουμε διαδοχικά τον μέγιστο που μόλις ορίσαμε με τις τιμές των υπολοίπων στοιχείων του πίνακα For i = L + 1 To N 'Αν κάποιος από τους συγκρινόμενους αριθμούς είναι μικρότερος τότε ορίζουμε αυτόν ως το νέο μέγιστο If numbers(i) > maxV Then maxV = numbers(i) End If Next
'Επιστέφουμε τον μέγιστο αριθμό που βρήκαμε Return maxV Else Return "-" End If End Function
End Module
Παρακαλώ...
|