Page 4 of 4

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sun Jan 15, 2017 8:01 pm
by alex1997
Γεια σας παιδιά,
Θα ήθελα να κάνω μερικές ερωτήσεις για την εργαστηριακή εξέταση στο εργαστήριο. Η εργασία έχει βαθμολογηθεί ήδη και εξεταζόμαστε εμείς ή βαθμολογείτε εκείνη την ώρα; Επίσης γίνεται και έλεγχος για memory leaks;
Ευχαριστώ

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sun Jan 15, 2017 8:19 pm
by Georgilakis Antonios
alex1997 wrote:Γεια σας παιδιά,
Θα ήθελα να κάνω μερικές ερωτήσεις για την εργαστηριακή εξέταση στο εργαστήριο. Η εργασία έχει βαθμολογηθεί ήδη και εξεταζόμαστε εμείς ή βαθμολογείτε εκείνη την ώρα; Επίσης γίνεται και έλεγχος για memory leaks;
Ευχαριστώ
Συνήθως η εργασία βαθμολογείται από πριν, η βαθμολογία όμως μπορεί να αλλάξει κατά την διάρκεια της εξέτασης.
Επίσης, το πρέπον είναι να μην υπάρχουν memory leaks. Αν κάτι τέτοιο εντοπιστεί από τον εξεταστή, υπάρχει μια περίπτωση να αφαιρεθούν μονάδες. Αυτό βέβαια εξαρτάται από πολλά.

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Fri Jan 20, 2017 5:10 pm
by mashua
Χαὶρετε, ξέρει κανείς να μας πεί αν στο τελικό διαγώνισμα μπορούμε να έχουμε μαζί μας σημειώσεις;

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Fri Jan 20, 2017 7:52 pm
by Georgilakis Antonios
mashua wrote:Χαὶρετε, ξέρει κανείς να μας πεί αν στο τελικό διαγώνισμα μπορούμε να έχουμε μαζί μας σημειώσεις;
Συνήθως ο κ. Παπαϊωάννου δεν επιτρέπει ποτέ σημειώσεις στην εξέταση αυτού του μαθήματος. Αμφιβάλω αν το έχει κάνει ποτέ στο παρελθόν.

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Wed Jan 25, 2017 5:24 pm
by yagosdrakos
Καλησπέρα παιδιά. Το μάθημα περνιέται χωρις να χω δώσει εργασίες? Αξίζει το κόπο ή να το παρατήσω καλύτερα ?

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Wed Jan 25, 2017 10:38 pm
by garry
yagosdrakos wrote:Καλησπέρα παιδιά. Το μάθημα περνιέται χωρις να χω δώσει εργασίες? Αξίζει το κόπο ή να το παρατήσω καλύτερα ?
Ένας YagosDrakos ποτέ δεν τα παρατά. Να λέμε τα πράματα με τ' όνομά τους! :smt005 :smt005

Λοιπόν, δες τις διαφάνειες και παλαιά θέματα για να καταλάβεις πως είναι περίπου η εξέταση. Το μάθημα, σαφώς, δεν είναι εύκολο αλλά ούτε και ο κος Παπαϊωάννου είναι εύκολος!
Ξέρω παιδιά που το πέρασαν δίχως εργασίες αλλά ήταν πάρα πολύ καλοί προγραμματιστές. Δεν γνωρίσω το επίπεδο σου στον προγραμματισμό αλλά δεν έχεις να χάσεις και κάτι. Διάβασε και πήγαινε, κατά την γνώμη μου πάντα!
==============================================================
Κάτι που ξέχασα, το γραπτό με άριστα το 70. Πρέπει να γράψεις 45 και πάνω για να το περάσεις! (Είναι από τους λίγους που χαρίζει κάτι ψιλά. Οφείλω να του το αναγνωρίσω! :smt021 )

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Wed Jan 25, 2017 10:40 pm
by yagosdrakos
Garry ασχολούμαι γενικά με προγραμματισμό, αλλά δεν δούλεψα πολύ την cpp αυτό το εξάμηνο. Απ ότι έχω δεί απ τα θέματα παίζει γενικά με κατανοηση των θεμελίων της γλώσσας, υλοποιήσεις βασικών δομών σε cpp , κλάσεις, exceptions. Ομως παλέυεται ουσιαστικά ένα 7/10 σ αυτό το γραπτό?? Βάζει ύπουλα ερωτήματα κλπ? Γενικά με τον αριθμό ατόμων που το χρωστάει δεν το βλέπω κι εύκολο. Θα το προσπαθήσω πάντως ,ευχαριστώ για την ενθάρρυνση ! Για την Βιρνα ρε γαμώτο!

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Wed Jan 25, 2017 10:50 pm
by garry
yagosdrakos wrote:Garry ασχολούμαι γενικά με προγραμματισμό, αλλά δεν δούλεψα πολύ την cpp αυτό το εξάμηνο. Απ ότι έχω δεί απ τα θέματα παίζει γενικά με κατανοηση των θεμελίων της γλώσσας, υλοποιήσεις βασικών δομών σε cpp , κλάσεις, exceptions. Ομως παλέυεται ουσιαστικά ένα 7/10 σ αυτό το γραπτό?? Βάζει ύπουλα ερωτήματα κλπ? Γενικά με τον αριθμό ατόμων που το χρωστάει δεν το βλέπω κι εύκολο. Θα το προσπαθήσω πάντως ,ευχαριστώ για την ενθάρρυνση ! Για την Βιρνα ρε γαμώτο!
Δυστυχώς ήταν το τελευταίο μου μάθημα και πάλεψα πολύ μ'αυτό. Κι όποιον ακούω να μιλάει για C++, ένας σφάχτης μου ρχεται.
Τις δυο πρώτες φορές που το έδωσα είχα διαβάσει πάααααααρα πολύ γιατί ήθελα πάρα πολύ να τελειώσω. Όμως, δεν ξέρω τι συνέβαινε και πάντα έπαιρνα 2.
Την τρίτη φορά, τελείως απογοητευμένος, πήγα με το σκεπτικό του ότι θέλει ας γίνει. Και για κάποιο λόγο το πέρασα.
Το ξέρω ακούγεται πολύ γραφική ιστορία αλλά έτσι έγινε.

Τα θέματα ναι είναι παγίδες τα περισσότερα ή όπως και να το κάνουμε στον προγραμματισμό υπάρχουν πολλοί τρόποι για να απαντήσεις.
Το μόνο κακό είναι ότι τις περισσότερες φορές θέλει μόνον τον δικό του!

Κάνε ότι καλύτερο μπορείς και πήγαινε. (Κι εγώ μία εργασία είχα καταφέρει να κάνω από τις 3.)

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Fri Jan 27, 2017 10:59 pm
by Lavlarous
Μαγκες εδω τι γινεται; Σωζομεθα με τιποτα; Συλλογες βαζει συνηθως η οχι; Καποια θεματα να αποκλεισουμε εστω και να δωσουμε βαση στα πιο σημαντικα; Καποιος ειδημων επι του θεματος παρακαλω

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sat Jan 28, 2017 5:10 pm
by AkisMadrugada
Για αυτό υπάρχει κάποια απάντηση, τι θα γραφεί στο αρχείο?

Code: Select all

unsigned char * number_array = {1,1,1};
ofstream fs = ofstream("a.out", ios_base::out );
if (!fs.bad())
{
 unsigned short * s_p = (unsigned short*) number_array;
 *(++s_p)=2;
 fs.write(s_p, sizeof(number_array));
}
fs.close();

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sat Jan 28, 2017 5:50 pm
by Georgilakis Antonios
Αν υποθέσουμε ότι η γραμμή:

Code: Select all

unsigned char * number_array = {1, 1, 1};	// unsigned char number_array[ ] = {1, 1, 1};
παράγει error στο C++ Shell για C++14, αυτό το πρόγραμμα δεν κάνει compile. Αλλά ας το παραβλέψουμε αυτό.

Έστω λοιπόν ότι κάνει compile, και ότι δεν δημιουργούνται access violations από ανάγνωση μνήμης εκτός ορίων. Έχεις ένα array μεγέθους 3 bytes (unsigned char [ ]), με 3 αριθμούς. Παίρνεις pointer της μορφής unsigned short *, που δείχνει σε αριθμούς 2 bytes ο καθένας.

Στην γραμμή:

Code: Select all

*(++s_p) = 2;
O pointer αυξάνεται κατά μια θέση ως unsigned short *, 2 θέσεις όμως ως unsigned char * (2 bytes κόντρα σε 1 byte), επομένως θα βρεθεί στην 3η θέση του αρχικού array. Ολόκληρη όμως? Όχι βέβαια ( :-D ). Το κάτω 1 byte της θέσης είναι εντός του number_array, το άνω 1 byte όμως είναι εκτός του array, άρα εκτός accessible μνήμης. Δηλαδή:

Code: Select all

{       1,            1,             1      }
{unsigned char, unsigned char, unsigned char}[out of bounds]
{      unsigned short,                unsigned short       }
					                (You are here) ^

{   00000001,      00000001,      00000001,    [ΧΧΧΧΧΧΧΧ]  }		// bits.
Με την αλλαγή στον αριθμό 2, γράφεις το κάτω byte εντός ορίου μνήμης, και το άνω εκτός. Ωστόσο, έχουμε υποθέσει ότι υπάρχουν no access violations, άρα no problem εδώ, αλλιώς ΜΠΑΜ.

Μετά γράφεις τα περιεχόμενα του array από την "οπτική σκοπιά" του δείκτη s_p, o οποίος όμως πλέον ξεκινά να δείχνει από την θέση του 3ου αριθμού του array (κάτω byte της αντίστοιχης θέσης σε unsigned short, άνω byte εκτός ορίων), και μάλιστα γράφεις τόσα bytes, όσο είναι το πλήθος των αριθμών στο array * sizeof(unsigned char). Όμως οι θέσεις μνήμης μετά την εγγραφή του αριθμού 2 είναι uninitialized (εύκολο να το δεις νομίζω) --> σκουπίδια.

Εν τέλει, στο αρχείο θα γραφούν μια σειρά από bytes, όπου τα πρώτα 2 αναπαριστούν τον αριθμό 2 ως unsigned short, και τo υπόλοιπo 1 byte είναι σκουπίδια.
Spoiler: εμφάνιση/απόκρυψη
Ελπίζω να μην έκανα κανα λάθος με όλα αυτά. Και, by the way, μην πάρεις την χρήση του δεύτερου προσώπου προσωπικά. :-D

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sun Jan 29, 2017 9:57 pm
by AkisMadrugada
@Georgilakis Antonios Σε ευχαριστώ πάρα πολύ για την εξήγηση, νομίζω κατάλαβα.

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Tue Jan 31, 2017 2:50 pm
by AkisMadrugada
Μπορεί επίσης κάποιος να εξηγήσει τη σειρά με την οποία γίνονται οι πράξεις στο παρακάτω:

Code: Select all

Time t1(10,20); 
         Time t2(21,41);
         t2= (t1++)++;//<--------------------εδώ συγκεκριμένα
         

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Tue Jan 31, 2017 5:12 pm
by Georgilakis Antonios
AkisMadrugada wrote:Μπορεί επίσης κάποιος να εξηγήσει τη σειρά με την οποία γίνονται οι πράξεις στο παρακάτω:

Code: Select all

Time t1(10,20); 
         Time t2(21,41);
         t2= (t1++)++;//<--------------------εδώ συγκεκριμένα
         
Αυτό το code snippet παράγει error, διότι το t1++ δεν είναι l-value για τον δεύτερο postfix operator ++.
Σημείωσε ότι αν είχαμε το εξής:

Code: Select all

t2 = (++t1)++;
τότε το ++t1 είναι l-value και το αποτέλεσμα είναι ισοδύναμο με:

Code: Select all

/*
 *	"increment()" είναι η μέθοδος που αντιπροσωπεύει
 *	την λογική της προσαύξησης ενός αντικειμένου Time.
 */

t1.increment();
t2 = t1;			// Προσοχή, εδώ copy διότι t2 όχι reference, επομένως t1, t2 ανεξάρτητα.
t1.increment();
Δες αν θες επιπλέον και αυτό: http://stackoverflow.com/questions/3715 ... t-i-is-not

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Thu Feb 02, 2017 10:20 pm
by efev2014
Μπορεί κάποιος να εξηγήσει γιατί ο κώδικας τυπώνει 0?

Code: Select all

#include<iostream>

using namespace std;
main() {
   short unsigned int i = 0; 
   
   cout<<i--;
}
Ευχαριστώ

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Thu Feb 02, 2017 11:06 pm
by kras
efev2014 wrote:Μπορεί κάποιος να εξηγήσει γιατί ο κώδικας τυπώνει 0?

Code: Select all

#include<iostream>

using namespace std;
main() {
   short unsigned int i = 0; 
   
   cout<<i--;
}
Ευχαριστώ
http://en.cppreference.com/w/cpp/langua ... tor_incdec
Pre-increment and pre-decrement operators increments or decrements the value of the object and returns a reference to the result.

Post-increment and post-decrement creates a copy of the object, increments or decrements the value of the object and returns the copy from before the increment or decrement.

Re: Προγραμματισμός Υπολογιστών με C++

Posted: Sun Jul 09, 2017 12:26 am
by WhitestRabbit
Καλησπέρα, μήπως υπάρχουν εκφωνήσεις για το υλικό των εργαστηριακών μαθημάτων; Στο eclass μπορώ να βρω μόνο κώδικα.