Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas Γλώσσα Προγραμματισμού C Εισήγηση # Δισδιάστατοι Πίνακες Ηλίας Κ. Σάββας Εισήγηση # Πολυδιάστατοι Πίνακες Ένας πίνακας μπορεί να είναι διαστάσεων αλλά και παραπάνω! Ένας πίνακας δύο διαστάσεων είναι η επανάληψη ενός πίνακα μίας διάστασης, κ.ο.κ.. 9 4 3 3 4 4 30 9 39 A 4x3 : 4 γραμμές 3 στήλες Ηλίας Κ. Σάββας Εισήγηση # 3
-d Πίνακες 3 9 4 3 3 4 A 3x0 = 4 0 33 4 4 9 3 3 Δείκτες του A 0,0 0, 0, 0,9 A,0,,,9,0,,,9 A[0][0] = ; A[0][] = 3; A[0][9] = ;.. A[][0] = ;. A[][9] = 3; Ηλίας Κ. Σάββας Εισήγηση # 4 Χρησιμοποιώντας -d Πίνακες Δήλωση ενός -d πίνακα: Τύπος_δεδομένων όνομα_μεταβλητής[πλήθος γραμμών][πλήθος στηλών]; int A[0][]; float x[00][]; char Epitheta[0][0], Onomata[0][0]; Αρχικοποίηση -d πινάκων: Τύπος_δεδομένων όνομα_μεταβλητής[πλήθος γραμμών][πλήθος στηλών]={τιμές χωρισμένες με κόμματα; int A[3][]={,,34,9,,3; A 3x 34 9 3 Ηλίας Κ. Σάββας Εισήγηση # Αρχικοποίηση -d πινάκων int A[3][]={,,34,9,,3; αλλά καλύτερα: int A[3][]={{,, {34,9, {,3; A 3x 34 9 3 Ηλίας Κ. Σάββας Εισήγηση #
Πίνακες και ο Βρόγχος του for /* Εισαγωγή Πίνακα */ for (i=0; i<n; I++) for (j=0; j<m; j++) { a[n][m] printf( \nεισαγωγή του %d,%d στοιχείου:, i+, j+); /* Εκτύπωση Πίνακα */ scanf( %d, &a[i][j]); for (i=0; i<n; I++) { printf( \n ); for (j=0; j<m; j++) printf( %d:, a[i][j]); Ηλίας Κ. Σάββας Εισήγηση # Άσκηση Να γραφεί ένα πρόγραμμα το οποίο αφού εισάγει έναν 4 Χ 4 πίνακα, στην συνέχεια να ψάχνει τον πίνακα για να βρει εάν περιέχει αρνητικές τιμές, και εάν περιέχει, να τις εκτυπώνει μαζί με τους δείκτες των αντιστοίχων θέσεων Ηλίας Κ. Σάββας Εισήγηση # Άσκηση #include <stdio.h> #define N 4 /* πλήθος γραμμών */ #define M 4 /* πλήθος στηλών */ int main() { int A[N][M], i, j; for (j=0; j<m; j++) { printf("\nεισαγωγή του %d, %d στοιχείου : ", i+, j+); scanf("%d", &A[i][j]); for (j=0; j<m; j++) if (A[i][j] < 0) printf("\n%d,%d : %d", i+, j+, A[i][j]); printf("\n\n"); return 0; Ηλίας Κ. Σάββας Εισήγηση # 9 3
Στατιστικά Δεδομένα Πλοήγησης μιας Ιστοσελίδας Να υπολογισθεί η μέση τιμή του πλήθους προσπέλασης μιας ιστοσελίδας σε ένα διάστημα εβδομάδων. Επίσης, να υπολογισθεί και η μέση τιμή προσπέλασης της σελίδας και σε εβδομαδιαία βάση. Ανάλυση: Το πλήθος των προσπελάσεων της ιστοσελίδας για ένα διάστημα εβδομάδων, μπορεί να αποθηκευτεί σε ένα πίνακα Χ. Επτά στήλες για τις ημέρες της κάθε βδομάδας. Πέντε γραμμές για τις βδομάδες. (a) Όλες οι περιεχόμενες τιμές πρέπει να αθροιστούν για τον υπολογισμό της μέσης τιμής τους., (b) Για τον υπολογισμό των εβδομαδιαίων αθροισμάτων, πρέπει να αθροιστεί κάθε στήλη ξεχωριστά. (c) Από τα ξεχωριστά αυτά εβδομαδιαία αθροίσματα θα προκύψουν οι πέντε μέσες τιμές ανά εβδομάδα, (d) Αυτές οι πέντε μέσες τιμές μπορούν να αποθηκευτούν σε ένα μονοδιάστατο πίνακα πέντε στοιχείων (e) Οι εκτυπώσεις πρέπει να είναι όπως στην διαφάνεια που ακολουθεί: Ηλίας Κ. Σάββας Εισήγηση # 0 Εκτυπώσεις Εβδομάδα Μέση τιμή προσπελάσεων -----------------------------------------------------????.??????.?? 3????.?? 4????.??????.?? Η συνολική μέση τιμή είναι????.?? Ηλίας Κ. Σάββας Εισήγηση # Πρόγραμμα... #include <stdio.h> #define N /* εβδομάδες */ #define M /* ημέρες ανά εβδομάδα */ int main() { int hits[n][m], i, j, float averagetotal, averageweek[n]; for (j=0; j<m; j++) { printf("\nπλήθος προσπελάσεων της εβδομάδας %d και ημέρας %d : ", i+, j+); scanf("%d", & hits[i][j]); Ηλίας Κ. Σάββας Εισήγηση # 4
Πρόγραμμα for (j=0; j<m; j++) total += hits[i][j]; averagetotal = (float) total / (N*M); { for (j=0; j<m; j++) total += hits[i][j]; averageweek[i] = (float) total / M; /* Headings */ printf("\n\nεβδομάδα\t\tμέση Τιμή Προσπελάσεων"); printf("\n-------------------------------\n\n"); Μέση τιμή προσπελάσεων της ιστοσελίδας μας για μία περίοδο εβδομάδων. Μέση τιμή προσπελάσεων της ιστοσελίδας μας σε εβδομαδιαία βάση. printf("\n%d\t\t%.f", i+, averageweek[i]); printf("\n\nη συνολική μέση τιμή είναι %.f\n\n", averagetotal); return 0; Ηλίας Κ. Σάββας Εισήγηση # 3 Άσκηση Να γράψετε ένα πρόγραμμα το οποίο να γεμίζει έναν NxN (N=) πίνακα ακεραίων με εκτός των στοιχείων που βρίσκονται στις διαγώνιους του που πρέπει να είναι 0. Ηλίας Κ. Σάββας Εισήγηση # 4 Στοιχεία Διαγωνίων #include <stdio.h> #define N int main() { int a[n][n], i, j; for (j=0; j<n; j++) if (i == j) a[i][j] = ; else if (N-i- == j) a[i][j] = ; else a[i][j] = 0; printf("\n\n"); { printf("\n"); for (j=0; j<n; j++) printf("%d\t", a[i][j]); printf("\n\n"); return 0; Ηλίας Κ. Σάββας Εισήγηση #
Μαγικό Τετράγωνο Σε ένα μαγικό τετράγωνο το άθροισμα των γραμμών, στηλών και διαγωνίων είναι το ίδιο. Γράψτε ένα πρόγραμμα που να ελέγχει εάν ένα δεδομένο τετράγωνο είναι 3 4 0 4 3 3 9 μαγικό. Ηλίας Κ. Σάββας Εισήγηση # 4 9 3 9 4 0 Μαγικό Τετράγωνο: Ανάλυση Έστω ο τετραγωνικός πίνακας a NxN : N γραμμές N αθροίσματα, N στήλες N αθροίσματα, διαγώνιοι αθροίσματα, Χρειαζόμαστε έναν μονοδιάστατο πίνακα N+ στοιχείων (Reults N+ ) για να αποθηκεύσουμε τα αθροίσματα, και τότε Θα τα συγκρίνουμε να δούμε εάν είναι ίσα! Ηλίας Κ. Σάββας Εισήγηση # Μαγικό Τετράγωνο... #include <stdio.h> #define N int main() { int a[n][n], i, j, int Results[*N+], flag = 0;; for (j=0; j<n; j++) { printf("\nεισαγωγή του %d, %d στοιχείου του πίνακα : ", i+, j+); scanf("%d", &a[i][j]); Ηλίας Κ. Σάββας Εισήγηση #
Μαγικά Τετράγωνα (άθροισμα στηλών) /* στήλες */ { for (j=0; j<n; j++) total += a[j][i]; Results[i] = total; 3 4 0 4 Στήλες: a[0][0]+a[][0]+a[][0]+...+a[n-][0]; a[0][]+a[][]+a[][]+...+a[n-][];... a[0][n-]+a[][n-]+a[][n-]+...+a[n-][n-]; 3 9 4 0 3 9 Ηλίας Κ. Σάββας Εισήγηση # 9 Μαγικά Τετράγωνα (άθροισμα γραμμών) /* γραμμές*/ { for (j=0; j<n; j++) total += a[i][j]; Results[N+i] = total; 3 4 0 4 Γραμμές: a[0][0]+a[0][]+a[0][]+...+a[0][n-]; A[][0]+a[][]+a[][]+...+a[][N-];... a[n-][0]+a[n-][]+a[n-][]+...+a[n-][n-]; 3 9 4 0 3 9 Ηλίας Κ. Σάββας Εισήγηση # 0 Μαγικά Τετράγωνα (άθροισμα διαγωνίων) /* διαγώνιοι */ total += a[i][i]; Results[*N] = total; total += a[n-i-][i]; Results[*N+] = total; 3 4 0 4 Διαγώνιοι: : a[0][0]+a[][]+a[][]+...+a[n-][n-]; : a[n-][0]+a[n-][]+a[n-3][]+...+a[0][n-]; 3 9 4 0 3 9 Ηλίας Κ. Σάββας Εισήγηση #
Μαγικά Τετράγωνα (σύγκριση αθροισμάτων) printf("\n\n"); for (i=0; i<*n+-; i++) { if (Results[i]!= Results[i+]) flag = ; printf("%d", Results[i]); printf("%d", Results[i]); if (flag == 0) printf("\n\nμαγικο ΤΕΤΡΑΓΩΝΟ!!!\n\n"); else printf("\n\nδεν είναι μαγικό τετράγωνο.\n\n"); return 0; Ηλίας Κ. Σάββας Εισήγηση # Γρήγορος Πίνακας Αναφοράς Σύνταξης Δήλωση πινάκων Δείκτες πινάκων Σύνταξη Τύπος_δεδομένων όνομα_πίνακα[d][d]..; d πλήθος γραμμών, d πλήθος στηλών,... Όνομα_πίνακα[i][j]... Υπενθύμιση: οι δείκτες των πινάκων ΠΡΕΠΕΙ να είναι ακέραιες μεταβλητές! Παραδείγματα int Ages[00]; float x[n]; float temperatures[][]; char Name[40]; Ages[] = ; x[] = x[]*; temperatures[][] = -3; Name[0] = I Ηλίας Κ. Σάββας Εισήγηση # 3 Τέλος της # Εισήγησης Ερωτήσεις??? Χρησιμοποιήστε το email εάν θέλετε να με ρωτήσετε οτιδήποτε: savvas@teilar.gr Σημειώσεις Μαθήματος (και όχι μόνο): http://e-class.teilar.gr/ Ηλίας Κ. Σάββας Εισήγηση # 4