Προς το περιεχόμενο

εργασια σε c++


niaou.com

Προτεινόμενες αναρτήσεις

Δημοσ.
Υπόψιν, ότι η strrev δεν υπόκεινται στην ANSI-C οπότε η ύπαρξη της εξαρτάται καθαρά από τις βοηθητικές βιβλιοθήκες που παρέχει ο compiler που χρησιμοποιείς (αν είναι Borland/CodeGear ή Microsoft μπορεί να την παρέχει διαφορετικά συνήθως όχι).

 

Υπάρχουν άνθρωποι με επιλεκτική μνήμη, από την άλλη υπάρχουν και εκείνοι που έχουν επιλεκτική ανάγνωση των post. Νομίζω ότι ανήκεις στην δεύτερη κατηγορία, για την πρώτη δεν έχω στοιχεία. Ο φίλος DirectX νομίζω σου έδωσε ένα λόγο να καταλάβεις ότι παρά την φιλοσοφία σου είσαι σε λάθος δρόμο. Η strrev που προβάλλεις ως βέλτιστη λύση δεν είναι ANSI-C. Αν γνωρίζεις τι είναι αυτό τότε ατόπημα σου, αν όχι τότε ψάξε στο google και θα καταλάβεις. Οπότε άκυρο αυτό που έγραψες για την strrev αν και ομολογώ ότι σε ορισμένους compilers είναι πολύ καλή λύση. Δεύτερον, ο τρόπος μου είναι C++, με την χρήση της reverse που αν δεν κάνω λάθος κανείς από το forum δεν την έθεσε ως τρόπο μέχρι τώρα. Είναι πολύ κομψός και πολύ γρηγορότερος από τις λύσεις σε C, άξιος να υπάρχει σε αυτό το θέμα. Όντως τα άλλα παιδιά έχουν καλύψει σωστά το θέμα. Άκυρο λοιπόν και αυτό που είπες ότι δεν έδειξα κάτι διαφορετικό από τους υπόλοιπους. Οπότε η φιλοσοφία σου φίλτατε δεν είναι και τόσο σοφή. Δεν διάβασες το προηγούμενο post του DirectX και αν ναι εσκεμμένα δεν απάντησες γιατί απλά δεν είχες κάτι να απαντήσεις. Επίσης λανθασμένα έκρινες και τον τρόπο μου ως κάτι ανάλογο με τους υπόλοιπους. By the way δεν έχω κάτι μαζί σου, απλά θεωρώ πως με τον τρόπο σου δεν βοηθάς στο να δώσεις αφορμή για σκέψη και προβληματισμό αλλά οδηγείς τον απλό πληροφορικάριο α΄εξαμήνου σε σκέψεις και χειρότερα προβλήματα από το μικρό και απλό πρόβλημα του. Ο άνθρωπος ζήτησε κάτι το συγκεκριμένο. Δικαίωμα σου να γράφεις ότι θέλεις αλλά να ξέρεις πως είναι και δικαίωμα μου να κρίνω αυτά που γράφεις όπως και το ίδιο ισχύει για εσένα. Είναι θεμιτό να οδηγήσεις κάποιον σε λύση αλλά δεν είναι θεμιτό να τον οδηγήσεις σε περισσότερα προβλήματα και σκέψεις, το έχεις χάσει το παιχνίδι.

 

KEEP IT SIMPLE - KISS.

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

@bokaihno

 

1) Kαταρχήν, ούτε η δική σου λύση ούτε η δική μου με την strrev είναι η απάντηση στην άσκηση.

Ο εξεταστής προφανώς δεν περιμένει κάτι αυτόματο αλλά μια υλοποίηση από τον φοιτητή.

Εγώ το γράφω στον κώδικα για την strrev "μάλλον αυτό δεν θα αρέσει στον εξεταστή της άσκησης."

Εσύ δείχνεις έναν αυτόματο τρόπο που δεν κάνει καν χρήση δεικτών όπως ζητάει σαφώς η εκφώνηση.

Άρα, από την άποψη του φοιτητή που πρέπει να δώσει απάντηση σε εργασία, δεν βοηθάς και πολύ.

 

2) Δεν γράφω πουθενά ότι η λύση μου είναι βέλτιστη όπως λανθασμένα ισχυρίζεσαι. Γράφω ότι είναι η συντομότερη.

Και σε πραγματική εφαρμογή είναι η πρώτη που θα δοκίμαζε κάποιος αν την είχε υπόψιν του ακριβώς γι' αυτό.

Από τη στιγμή που κάποιος έχει κάτι που δουλεύει, μπορεί να δοκιμάσει και εναλλακτικές πιθανόν καλύτερες.

Εξάλλου το ομολογείς κι' εσύ : "ομολογώ ότι σε ορισμένους compilers είναι πολύ καλή λύση".

 

3) Η strrev δεν είναι ansi και δεν το είχα προσέξει. Φυσικά και διάβασα το post του DirectX και καλά έκανε και το επισήμανε.

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

Μια απάντησή μου θα ήταν άχρηστη - όντως δεν υπήρχε κάτι (ή δεν είχα αν θέλεις κάτι) να απαντήσω.

 

4) Το φαινόμενο να γράφονται κάποιοι σε forums και να ζητάνε έτοιμες λύσεις έχει αρχίσει να διογκώνεται τελευταία.

Ήδη στο insomnia έχουν γίνει πολλά παράπονα και μπορείς να το δεις σε πολλά posts και threads

(π.χ. Forttran 90 άσκηση, υπολογισμός αποδοτικού χρόνου, αλγόριθμος kruskal και prim κ.α.)

Μάλιστα έγινε και ειδική αναφορά στους moderators γι αυτό το ζήτημα.

Λοιπόν, για να μην συμβάλω σ' αυτό δεν ήθελα να απαντήσω με συγκεκριμένο τρόπο δίνοντας έτοιμη λύση.

Εξάλλου, αν έδινα λύση όπως την αναμένει ο εξεταστής, θα ήταν παρεμφερής με των υπολοίπων και δεν υπήρχε λόγος αφού το κάλυψαν καλά.

 

5) Ο τρόπος σου είναι τετριμένος από την άποψη ότι δεν εισάγει πρωτογενώς κάποια διαφορετική ιδέα.

Βάζεις κάτι σε ένα μαύρο κουτί και αυτό είναι όλο. Ακόμη και αν κάποιος δεν ήξερε ότι υπάρχει η reverse,

προφανώς θα υποψιαζόταν την ύπαρξή της δεδομένου ότι η STL βρίθει από τέτοια πράγματα και με ελάχιστο ψάξιμο θα

την έβρισκε μόνος του. Την strrev έτσι την βρήκα - μπορούσα να είχα βρει την reverse αν κοιτούσα πρώτα στην STL.

 

Αντίθετα, εγώ δεν έγραψα μόνον για τον φίλο που ζήτησε βοήθεια αλλά και για όλους τους άλλους δίνοντας

μια διαφορετική οπτική σε ένα φαινομενικά συνηθισμένο πρόβλημα.

Όποιοι ερασιτέχνες σαν εμένα ενδιαφέρονται πραγματικά μπορούν να μελετήσουν την εξαιρετικά ενδιαφέρουσα τεχνική

των αναδρομικών συναρτήσεων στη λύση προβλημάτων ή τουλάχιστον να ξέρουν ότι υπάρχει.

Εξάλλου το να γίνει πραγματικός κώδικας ο ψευδοκώδικας που έδωσα είναι μόνον λίγες γραμμές.

 

6) Μπορείς να έχεις την τελευταία λέξη αν αυτό τονώνει τον εγωισμό σου.

Εγώ δεν θα ξανααπαντήσω διότι δεν έχει νόημα μια αντιπαράθεση.

Δημοσ.

Όποιοι ερασιτέχνες σαν εμένα ενδιαφέρονται πραγματικά μπορούν να μελετήσουν την εξαιρετικά ενδιαφέρουσα τεχνική

των αναδρομικών συναρτήσεων στη λύση προβλημάτων ή τουλάχιστον να ξέρουν ότι υπάρχει.

 

Γιατί τέτοια εμμονή με την αναδρομή?

Δημοσ.
Γιατί τέτοια εμμονή με την αναδρομή?

 

Δεν έχω καμιά εμμονή με την αναδρομή.

Απλώς είναι ωραίο θέμα και μπορούσε να λύσει την άσκηση.

Εξάλλου, οι περισσότεροι ερασιτέχνες σαν εμένα δεν ξέρουν την σημασία και την αποτελεσματικότητά της και ήταν μια ευκαιρία να την αναφέρω...

Δημοσ.

By the way, είναι Bokarinho, αλλά δεν πειράζει.

 

Δεν έχω κάτι άλλο να πω, δεν έχω κάτι μαζί σου και μάλιστα συμφωνώ στο 4 με βρίσκεις συμπολεμιστή στις ιδέες σου. Σίγουρα το να δίνεις την λύση σε κάποιον με την μία δεν είναι το θεμιτό ούτε το καλυτέρο για εκείνον αλλά το να τον χειραγωγείς με την φιλοσοφία που διακρίνει τον καθένα πάντα, μην το πάρεις προσωπικά, σε άσχετες θεωρίες είναι πιστεύω άδικοχαμένος κόπος.

 

"Όποιοι ερασιτέχνες σαν εμένα ενδιαφέρονται πραγματικά μπορούν να μελετήσουν την εξαιρετικά ενδιαφέρουσα τεχνική

των αναδρομικών συναρτήσεων στη λύση προβλημάτων ή τουλάχιστον να ξέρουν ότι υπάρχει. "

 

Προσωπικά είμαι επαγγελματίας προγραμματιστής, και θα μπορούσα να σου εξηγήσω ότι η χρήση αναδρομικών συναρτήσεων αν και ενδιαφέρουσα τεχνική είναι καλό να την αποφεύγεις με μη αναδρομικό κώδικα. Το stack unwinding είναι αρκετά δύσκολη διαδικασία καθώς η αναδρομή μπορεί πανεύκολα να ξεφύγει. Θα σου πρότεινα να την αποφεύγεις σε μεγάλα project, τώρα αν θέλεις να κάνεις κάτι μικρό εντάξει στα όρια του ανεκτού. Εν κατακλείδι, δεν έχω κάτι μαζί σου, απλά έτυχε να διαβάσω 2-3,5 post και παρατηρώ ότι έχεις μία εμμονή να αναλύεις τα πράγματα με επιστημονικό τρόπο όταν μερικές φορές είναι μετρημένα κουκιά.

Δηλαδή στο ερώτημα:

Η κότα έκανε το αυγό η το αυγό την κότα; τι απάντηση θα έδινες;

Δικαίωμα σου και πάλι να απαντάς ότι θέλεις και με όποιο τρόπο θέλεις αλλά και δικό μου δικαίωμα να κρίνω τις απαντήσεις σου. Επίσης όσον αφορά αυτό που είπες για την STL και την reverse, ναι είναι απλό ως γελοίο, αρκεί βέβαια να το σκεφτεί κάποιος, εσύ μίλησες με το αν....εγώ το έγραψα όμως. Οπότε αυτό με κάνει να διαφέρω από την θεωρία σου. Επίσης δεν έχω κάτι μαζί σου και επίσης δεν θα ανέβει ο εγωισμός μου με αυτό το post ούτε με κανένα άλλο, κουβέντα κάνω μαζί σου και με όποιον ανήκει σε αυτό το φόρουμ, λέω την γνώμη μου, δεν προσβάλλω κανέναν και δέχομαι οποιαδήποτε απάντηση.

Καλή συνέχεια.

Δημοσ.

Πολυ μπλα μπλα για το τιποτα. Η ασκηση εχει στοχο τους pointer, πιστευω οτι ο καθηγητης θελει να δει loops και data copy και οχι το καλεσμα μιας συναρτησης :-).

 

BTW Εαν καλεσεις την strrev το προγραμμα θα crasharei επειδη το string ειναι const :lol:

Δημοσ.

Σίγουρα έχετε τρομάξει τον χρήστη "niaou.com" :P. Αναρωτιέμαι εάν έχει καν ξαναμπεί μετά από τις πρώτες απαντήσεις που δώθηκαν, μιας και ήταν υπερπλήρεις(γι'αυτό που ζητούσε).

Πολυ μπλα μπλα για το τιποτα

ακριβώς

Δημοσ.
Πολυ μπλα μπλα για το τιποτα. Η ασκηση εχει στοχο τους pointer, πιστευω οτι ο καθηγητης θελει να δει loops και data copy και οχι το καλεσμα μιας συναρτησης :-).

 

BTW Εαν καλεσεις την strrev το προγραμμα θα crasharei επειδη το string ειναι const :lol:

 

Για το πρώτο που λες, τα είπα ήδη δυο φορές.

 

Για το δεύτερο κάνεις λάθος, δεν κρεμάει.

Π.χ. στo visual studio τρέχει κανονικά.

Το string το έθεσες const εσύ στον δικό σου κώδικα.

Εξάλλου αν είναι const δεν μπορεί να αντιστραφεί ενδογενώς.

Η συντομότερη και ταχύτερη λύση για πραγματική αντιστροφή είναι η strrev εφόσον υποστηρίζεται.

 

Πάντως θα ήθελα να ξέρω ποιός compiler δεν την υποστηρίζει.

Γενικά υπάρχει κάπου κατάλογος συμβατότητας των εντολών κατά compiler ;

Έχω έναν αλλά είναι του '91. (και, ναι, λέει ότι δεν είναι ansi c παρόλο που είναι τόσο παλιός)

Δημοσ.

 

Το παρακατω δε στο βγαζει const?

>int _tmain(int argc, _TCHAR* argv[])
{
char*s ="hello";
return 0;
}

 

 

Eπαναλαμβάνω αυτό που έδωσα εγώ :

 

>#include<string.h>

main()
{
char buf[80];
printf("Enter a string : ");
gets(buf);
strrev(buf);
printf("Reversed string is : \n%s\n", buf);
return 0;
}

 

 

το οποίο τρέχει κανονικά. Αν δεν πιστεύεις δοκίμασέ το.

 

Σου διαφεύγει μια λεπτομέρεια.

Εσύ ορίζεις έναν δείκτη που δείχνει την σταθερή διεύθυνση της μνήμης όπου είναι αποθηκευμενο

το "hello" και η οποία διεύθυνση δεν μπορεί να αλλάξει. Γι αυτό θεωρεί το s const.

 

Εγώ απλώς ορίζω έναν πίνακα όπου μπορώ να αλλάξω τα περιεχόμενά του. Αυτή είναι η διαφορά μας.

Δημοσ.

 

 

Το θεμα δεν ειναι να απαντισεις σε μενα, αλλα στον topic starter.

πρεπει να δημιουργησουμε ενα προγγραμμα σε c++ στο οποιο θα οριζεται μια συμβολοσειρα και θα εκχωρειται μια προταση της αρεσκειας μας

Οχι απο το χρηστη!!! Αλλα απο το προγραμμα.

Εαν καταλαβα λαθος... παω πασο.

ΥΓ: Το thread εχει πεθανει.

 

 

Δημοσ.

Τελευταία φορά που απαντάω.

 

1) Είπες ότι αυτό που έδωσα είναι λάθος και κρεμάει.

Ενώ λειτουργεί.

 

2) Συνολικά με την δική σου δόθηκαν 4 απαντήσεις.

Οι 3 που έδωσαν τα άλλα παιδιά δεν θεωρούν ότι το string ορίζεται const και συνεπώς κατά το σκεπτικό σου είναι άκυρες ή λαθεμένες και κρεμάνε !!!

 

3) Είναι άσκοπα περιοριστικό να θεωρηθεί η εκφώνηση κατά λέξη όταν το συνολικό ύφος της δεν υπαγορεύει τόση αυστηρότητα.

Δημοσ.
Eπαναλαμβάνω αυτό που έδωσα εγώ :

 

>#include<string.h>

main()
{
char buf[80];
printf("Enter a string : ");
gets(buf);
strrev(buf);
printf("Reversed string is : \n%s\n", buf);
return 0;
}

 

 

το οποίο τρέχει κανονικά. Αν δεν πιστεύεις δοκίμασέ το.

 

Σου διαφεύγει μια λεπτομέρεια.

Εσύ ορίζεις έναν δείκτη που δείχνει την σταθερή διεύθυνση της μνήμης όπου είναι αποθηκευμενο

το "hello" και η οποία διεύθυνση δεν μπορεί να αλλάξει. Γι αυτό θεωρεί το s const.

 

Εγώ απλώς ορίζω έναν πίνακα όπου μπορώ να αλλάξω τα περιεχόμενά του. Αυτή είναι η διαφορά μας.

 

Κοιτάζοντας τον κώδικα σου.. Τέλος πάντων πέρα από οτιδήποτε άλλο, φιλικά σου δίνω μία συμβουλή γιατί μάλλον από προγραμματισμό σε C δεν έχεις μεγάλη εμπειρία όπως φαίνεται, απέφυγε εντελώς την χρήση της gets, στην θέση της πάντα είτε scanf ή ακόμα καλύτερη της ασφαλέστερης fgets, οι λόγοι είναι πολλοί μπορείς να τους βρεις. Αλήθεια. θα γίνω κακώς αλλά σε περίπτωση που βάλω στο πρόγραμμα σου περισσότερους από 79 χαρακτήρες τι γίνεται;

Δημοσ.

Πάντως θα ήθελα να ξέρω ποιός compiler δεν την υποστηρίζει.

Γενικά υπάρχει κάπου κατάλογος συμβατότητας των εντολών κατά compiler ;

Έχω έναν αλλά είναι του '91. (και, ναι, λέει ότι δεν είναι ansi c παρόλο που είναι τόσο παλιός)

 

Το θέμα είναι να υπάρχει στην libc, όχι στον compiler. Φυσικά και υπάρχει κατάλογος. Κάθε libc παρέχει documentation για τέτοια πράγματα, τουλάχιστον τα μείζων implementations. Όσον αφορά την gnu libc: http://www.gnu.org/software/libc/manual/html_node/Library-Summary.html#Library-Summary. Θα δείς ότι δεν υπάρχει αυτή η συνάρτηση, ωστόσο υπάρχει η strdup για παράδειγμα, η οποία δεν ανήκει στην standard libc.

Δημοσ.
Το θέμα είναι να υπάρχει στην libc, όχι στον compiler. Φυσικά και υπάρχει κατάλογος. Κάθε libc παρέχει documentation για τέτοια πράγματα, τουλάχιστον τα μείζων implementations.

Όσον αφορά την gnu libc: http://www.gnu.org/software/libc/manual/html_node/Library-Summary.html#Library-Summary.

Θα δείς ότι δεν υπάρχει αυτή η συνάρτηση, ωστόσο υπάρχει η strdup για παράδειγμα, η οποία δεν ανήκει στην standard libc.

 

Σε ευχαριστώ πολύ για το link.

Εγώ δουλεύω στο visual studio που σε αρκετά πράγματα ξεφεύγει από το στάνταρ και δεν το ψάχνω πάντα.

 

To βιβλίο που έχω καταγράφει λεπτομερώς όλες τις συναρτήσεις βιβλιοθήκης της παλιάς ('91) turbo c++ με τις περιπτώσεις χρήσεις τους,

επισημάνσεις συμβατότητας μεταξύ των περισσότερων τότε διαθέσιμων compiler, τα απαιτούμενα include αρχεία,

εναλλακτικές/παρεμφερείς συναρτήσεις και πολλά άλλα χρήσιμα πράγματα.

Και όπως προανάφερα, γράφει ότι η strrev δεν είναι ansi c.

Είναι πεπαλαιωμένο πλέον αλλά εξακολουθεί να μου είναι αναντικατάστατο σε πολλά και δεν έχω βρει κάτι παρόμοιο δυστυχώς...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...