Re: Πρόοδος πρώτου εξαμήνου 61 από rovetwold Μάλλον ,ΔΕΝ χρειάζεται γιατί προσπάθησα να ξαναδηλώσω και έβγαλε Κώδικας: Επιλογή όλωνΟ αριθμός μητρώου που δηλώσατε έχει δηλωθεί ξανά.
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 62 από rovetwold Προαιρετικό διαγώνισμα (17/12) - Τμήματα Τα τμήματα και οι αντίστοιχες ώρες εξέτασης για το προαιρετικό διαγώνισμα της Δευτέρας 17/12, έχουν ως εξής: Τμήμα 1: Π - Ω , Ώρα: 13:00 Τμήμα 2: Μ - Ο, Ώρα: 13:45 Τμήμα 3: Η - Λ, Ώρα: 14:30 Τμήμα 4: Α - Ζ, Ώρα: 15:15 Oι φοιτητές που θα συμμετάσχουν στην ηλεκτρονική εξέταση στο PCLAB της Σχολής Χημικών Μηχανικών πρέπει να τακτοποιήσουν τυχόν εκκρεμότητες με τους κωδικούς πρόσβασης. Την ημέρα της εξέτασης δεν θα είναι δυνατή η παραλαβή κωδικού χρήσης (user name) ή αλλαγή κωδικού ασφαλείας (password). ΠΡΟΣΟΧΗ: Οι κωδικοί στο PCLAB είναι διαφορετικοί από αυτούς στο central.ntua.gr Από :http://ecourses.chemeng.ntua.gr/courses ... ogramming/
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 63 από Μάρινικ καλημέρα! κατά τη διάρκεια της προόδου θα μπορούμε να χρησιμοποιούμε τo developer studio??
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 64 από MakisH Ναι! Για να αρχίσει η εξέταση, ανοίγεις ένα πρόγραμμα το οποίο πιάνει όλη την οθόνη και σου εμφανίζει με τη σειρά τις ερωτήσεις-εκφωνήσεις. Τις προηγούμενες χρονιές τουλάχιστον, αν θυμάμαι καλά, είχε π.χ. κάποιες ερωτήσεις πολλαπλής επιλογής και γενικώς τέτοιου τύπου. Στην εμφανίζει, επιλέγεις αυτό που θες και πατάς "επόμενο". Όταν, αντί για ερώτηση, σου βγει η εκφώνηση μιας άσκησης, τότε σου ανοίγει αυτόματα το Developer Studio σε ένα παραθυράκι και το χρησιμοποιείς ακριβώς όπως το χρησιμοποιείς στα "πρακτικά", με όλες τις δυνατότητές του. Κατά τη διάρκεια της εξέτασης όμως δεν μπορείτε να βγείτε από το πρόγραμμα και έτσι: 1. δεν μπορείτε να βλέπετε τις διαφάνειες στον υπολογιστή (επιτρέπεται όμως να τις έχετε μαζί σας τυπωμένες) 2. δεν μπορείτε να μπείτε στο internet. Αυτά γίνονταν μέχρι πέρσι τουλάχιστον, δεν γνωρίζω αν έχει αλλάξει κάτι φέτος. Αν είναι να τυπώσετε διαφάνειες, προτιμήστε να τυπώσετε μόνο όσες πιστεύετε ότι χρειάζεστε και τυπώστε σε διπλής όψης, με 2 ή 4 ή 6 διαφάνειες ανά όψη, ώστε να μειώσετε το χαρτί και το μελάνι που θα χρειαστείτε. Φυσικά, μπορείτε να έχετε το βιβλίο, τις σημειώσεις που σας δώσαμε ή τις δικές σας σημειώσεις μαζί αντί να τυπώνετε διαφάνειες. ======> Βοηθήστε στο forum! <======
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 65 από MakisH Για του λόγου το αληθές, έφτιαξα κάποια pdf που συμπυκνώνουν όλες τις διαφάνειες κάθε μαθήματος σε 2 έως 5 σελίδες, βάζοντας περισσότερες διαφάνειες σε μια σελίδα (6 ή 9). Προτιμήστε εκτύπωση διπλής όψης (εάν υποστηρίζει ο εκτυπωτής σας). Από τα κανονικά pdf μπορείτε κι εσείς να τυπώσετε πολλές σελίδες ανά όψη, δείτε τις επιλογές του εκτυπωτή σας (δεν μπορώ να δώσω γενικές οδηγίες, αφού κάθε εκτυπωτής διαφέρει). ΜΗΝ ΕΚΤΥΠΩΣΕΤΕ ΟΛΕΣ ΤΙΣ ΚΑΝΟΝΙΚΕΣ ΔΙΑΦΑΝΕΙΕΣ! ΘΑ ΧΡΕΙΑΣΤΕΙΤΕ ΠΑΡΑ ΠΟΛΥ ΧΑΡΤΙ ΚΑΙ ΜΕΛΑΝΙ, ΔΕΝ ΥΠΑΡΧΕΙ ΛΟΓΟΣ! ούτε και να εκτυπώσετε τις διαφάνειες υπάρχει ιδιαίτερος λόγος αν έχετε δει το βιβλίο ή τις τυπωμένες σημειώσεις Επίσης, η συμπυκνωμένη μορφή είναι ευκολότερη για γρήγορη ανασκόπηση. Επίσης, άμα τελειώσουμε όλο το χαρτί του pc lab για διαφάνειες δεν θα μπορούμε να τυπώνουμε εργασίες ή οτιδήποτε άλλο. Και οι καιροί είναι δύσκολοι, δεν ξέρεις τι σου ξημερώνει, ειδικά σε οικονομικά θέματα... ΥΓ: Τα επισυναπτόμενα είναι συμπιεσμένα αρχεία σε μορφή zip. Χρησιμοποιήστε ένα πρόγραμμα όπως το 7-zip για να τα ανοίξετε. Το ένα αρχείο είναι εναλλακτικό του άλλου. ΥΓ2: Μετέτρεψα όλα τα pdf που υπάρχουν στο site του μαθήματος. Για την πρόοδο χρειάζονται μόνο τα 2 έως 5. Τα 6,7 θα χρειαστούν στις τελικές εξετάσεις. Δεν έχετε τα απαραίτητα δικαιώματα για να δείτε τα συνημμένα αρχεία σε αυτή τη δημοσίευση. ======> Βοηθήστε στο forum! <======
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 66 από michalisfloyd Ρε Μάκη, θα σου ήμουν ευγνώμον εάν μπορούσες να αφιερώσεις λίγη ώρα να μου εξηγήσεις την λύση της άσκησης 6 στο πρακτικό. Βασικά στο σημείου που μπένουν να 'n-1' ktl. Τhx
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 67 από MakisH Λοιπόν, αν κατάλαβα καλά αναφέρεσαι στην άσκηση που λέει να βρεις τον ανάστροφο χωρίς να χρησιμοποιήσεις δεύτερη array και η λύση που εννοείς είναι αυτή: Spoiler: showΚώδικας: Επιλογή όλωνprogram transpose IMPLICIT NONE integer, allocatable, dimension(:,:) :: A integer N, i, j, b print *, 'Give the dimension of the square matrix' read *, N allocate(A(N,N)) print *, 'Give the elements of the matrix A line by line' do i = 1, N read *, (A(i,j),j=1,N) enddo do i = 1, N do j = i, N - 1 b = A(i,j+1) A(i,j+1) = A(j+1,i) A(j+1,i) = b enddo enddo do i = 1, N print *, (A(i,j),j=1,N) enddo deallocate(A) end Αρχικά δηλώνεις μεταβλητές, έπειτα ο χρήστης δίνει στο πρόγραμμα τιμή για το Ν (διάσταση του πίνακα) και στη συνέχεια δίνει τα στοιχεία του δεδομένου πίνακα γραμμή προς γραμμή (δηλαδή σε μορφή "1 κενό 2 enter 3 κενό 4" για έναν 2x2). Μέχρι εδώ καλά υποθέτω. Έπειτα, ψάχνεις τα στοιχεία του πίνακα (όλα? όχι) και αντιμεταθέτεις τα στοιχεία \( a_{i,j} \) και \( a_{j,i} \). Δηλαδή το ένα παίρνει την τιμή του άλλου. Η αντιμετάθεση δυο μεταβλητών (το να ανταλλάξουν τιμές) γίνεται γενικώς ως εξής: Φαντάσου ότι έχεις δυο ποτήρια με δυο διαφορετικά υγρά. Πες ότι μπερδεύτηκες και έβαλες στο κορίτσι σου κρασί αλλά σε χαμηλό ποτήρι και σε εσένα ουίσκυ (whatever... ) σε κρασοπότηρο. Πώς θα τα ανταλλάξεις; Θα χρειαστείς ένα βοηθητικό δοχείο - εδώ μια βοηθητική μεταβλητή, την b. Αν γράψεις απλώς "A(i,j) = A(j,i)" τότε απλώς στο A(i,j) θα μπει η τιμή του A(j,i) και η τιμή που είχε το A(i,j) θα χαθεί. Για να μην χαθεί την αποθηκεύεις πρώτα σε μια μεταβλητή b: b = A(i,j) Τώρα μπορείς να βάλεις στην τιμή του A(i,j) την τιμή του A(j,i): A(i,j) = A(j,i) Και πλέον μπορείς να βάλεις στο A(j,i) την αρχική τιμή του A(i,j), η οποία υπάρχει στη μεταβλητή b: A(j,i) = b Τώρα, περί του j=i,N-1 και το A(j+1,i): Η πρώτη απόπειρα κάποιου είναι συνήθως να γράψει j=1,N: Κώδικας: Επιλογή όλωνdo i = 1, N do j = 1,N b = A(i,j) A(i,j) = A(j,i) A(j,i) = b enddo enddo Έτσι όμως προκύπτει πίνακας ίδιος με τον αρχικό. Αυτό οφείλεται στο ότι αναστράφηκε δυο φορές. Γιατί; Όταν ήταν i=1,j=2, το A(1,2) αντάλλαξε θέση με το A(2,1). Όταν, αργότερα, έγινε i=2, j=1, το A(2,1) αντάλλαξε πάλι θέση με το A(1,2). Για να λυθεί αυτό το πρόβλημα, χρησιμοποιείς μόνο τα στοιχεία που βρίσκονται στο άνω ή στο κάτω "τρίγωνο" του πίνακα, δηλαδή j=i,N και άρα: Κώδικας: Επιλογή όλωνdo i = 1, N do j = i,N b = A(i,j) A(i,j) = A(j,i) A(j,i) = b enddo enddo Μπορείς να σταματήσεις εδώ, τη δουλειά του την κάνει. Όμως κάνει Ν άχρηστες αντιμεταθέσεις. Ανταλλάζει θέσεις στα στοιχεία A(i,i) και A(j,j), όταν δηλαδή i==j. Δηλαδή, τα στοιχεία της διαγωνίου τα αντικαθιστά με... τον εαυτό τους! Για το λόγο αυτό μπορείς να γράψεις: Κώδικας: Επιλογή όλωνdo i = 1, N do j = i+1,N b = A(i,j) A(i,j) = A(j,i) A(j,i) = b enddo enddo δηλαδή να ξεκινάει από μια στήλη δεξιότερα από το στοιχείο της διαγωνίου. Την ίδια δουλειά κάνει και αυτό: Κώδικας: Επιλογή όλωνdo i = 1, N do j = i, N - 1 b = A(i,j+1) A(i,j+1) = A(j+1,i) A(j+1,i) = b enddo enddo απλώς θα πρέπει να πηγαίνει μέχρι Ν-1, ώστε να μην χρησιμοποιήσεις κάποια στιγμή πχ σε έναν 3x3 πίνακα το στοιχείο Α(3,4), το οποίο δεν υπάρχει. Σκέψου το σα να κάνεις "αλλαγή μεταβλητής" σε ένα ολοκλήρωμα και όπου "j" να βλέπεις "j+1". Πρέπει να αλλάξουν και τα όρια. ======> Βοηθήστε στο forum! <======
βοήθεια με πρόγραμμα 68 από joh program exercise_3 implicit none integer,allocatable,dimension(:,:)::a;integer N,i,j print*,'dose mou ena n' read*, N allocate(a(N,N)) do i=1,N do j=1,N if (i==j).OR.(i+j==N+1) then a(i,j)=0 else a(i,j)=1;endif;enddo;enddo do i=1,N print*,(a(i,j),j=1,N);enddo end προσπαθώ να φτιάξω δισδιαστατο πίνακα οπου οι διαγώνιοι θα έχουν την τιμή 0 ενω τα άλλα στοιχεία τιμή ένα ,παρόμοια άσκηση έχει γίνει και στο εργαστηριο,απλα δν καταλαβαινω που έχει λάθος η διατυπωση μου(κατι παίζει με το else αλλα δεν ξερω τι) ευχαριστω
Re: Προγραμματισμός & χρήση Η/Υ (2012-13) 70 από MakisH Υποθέτω σου βγάζει συντακτικά λάθη. Το λάθος που βλέπω είναι ότι λείπουν οι παρενθέσεις στο If (συνθήκη) then. Δηλαδή θα έπρεπε να είναι: Κώδικας: Επιλογή όλωνif ((i==j).OR.(i+j==N+1)) then Επίσης, παρότι δεν είναι λάθος, γιατί γράφεις δυο εντολές σε μια γραμμή; Ειδικά τα enddo-endif είναι επιθυμητό να είναι σε δικιά τους γραμμή ώστε να βλέπεις πού τελειώνει το κάθε DO ή IF. Ακόμα καλύτερα θα ήταν να βάζεις ένα tab δεξιότερα ό,τι περιέχεται σε ένα DO ή IF. (πατάς το πλήκτρο Tab στο πληκτρολόγιο και γράφεις παραμέσα) ======> Βοηθήστε στο forum! <======