Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 02 Φεβ 2012, 23:57

Εννοειται! στο 2ο ποστ σου οτι για ανομοια μηκη.

Θα κοιταξω και αυτο που παρεθεσες χθες να παρω ιδεες.

Ακομη δεν μπορω να καταλαβω τι εννοεις με το οτι το εχω σπασει λαθεμενα.

Η απάντηση βρισκεται και αυτη μεσα στον κωδικα που παρεθεσες? :)
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 03 Φεβ 2012, 00:49

Δεν εννοώ κάτι διαφορετικό από αυτό που έγραψα ρε συ... το ότι δηλαδή οι συναρτήσεις fill() & print() θα πρέπει να δουλεύουν με ένα κι όχι με 2 πίνακες.

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

Παρόλα αυτά εσύ κάθεσαι 2η μέρα τώρα και κάνεις τα ακριβώς αντίθετα. Οκ no prob, αλλά ποστάρεις κι απορίες κιόλας :lol:

Αυτό που προσπαθείς να κάνεις με τον τρόπο που προσπαθείς να το κάνεις, για να στο πω απλά, δεν γίνεται! Και ο λόγος είναι πολύ απλός: οκ αντιμεταθέτεις τα στοιχεία του κοινού μήκους των 2 πινάκων, μετά όμως πως θα μικρύνεις τον μεγάλο και πως θα μεγαλώσεις τον μικρό, για να πάρει όσα στοιχεία περισσεύουν από τον πρώην μεγάλο;

Αυτά πολύ απλά δεν γίνονται σε στατικά ορισμένους πίνακες!

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

Η αντιμετάθεση 2 πινάκων με ίδιο μήκος έχει ΜΗΔΕΝΙΚΟ ενδιαφέρον σε ότι αφορά την εκμάθηση των δεικτών! Ένα malloc() κι ένα free() είναι όλο κι όλο, για τον προσωρινό πίνακα...

Κώδικας: Επιλογή όλων

Bool arrswap( int arr1[], int arr2[], const int len )
{
int *tmparr = NULL;
size_t size = len * sizeof(int);

if ( !arr1 || !arr2 || len < 1 || (tmparr=malloc(size)) == NULL )
return FALSE;

memcpy( tmparr, arr1, size );
memcpy( arr1, arr2, size );
memcpy( arr2, tmparr, size);

free( tmparr );
return TRUE;
}


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

Εν πάσει περιπτώση, δημοκρατία έχουμε :)
Φυσικά δεν θα σου πω εγώ τι θα κάνεις, αλλά...
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 03 Φεβ 2012, 01:41

Γινεται ετσι οπως το λες αλλα γινεται απο επαγγελματια προγραμματιστη!!!

Ειναι βεβαιο πως αλλο κωδικα θα γραφω τωρα και αλλον μετα απο 2-3 χρονια και θα κοιταω τον τωρινο

και θα γελαω. Αυτο που εκανα δεν το εκανα τσαμπα... το εκανα για να παρω μια βαση ωστε να καταλαβω μετα και τα δικα σου.

Τους κωδικες σου θα τους κοιταξω παση θυσια και περιμενε και εκει αποριες!!!!!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 03 Φεβ 2012, 01:48

Star_Light έγραψε:Γινεται ετσι οπως το λες αλλα γινεται απο επαγγελματια προγραμματιστη!!!

Δεν είναι έτσι. Αυτός είναι ο μοναδικός τρόπος που υπάρχει για να κάνεις αντιμετάθεση πινάκων διαφορετικών μηκών στη C! Επίσης δεν αποτελεί προνόμιο των επαγγελματιών, αποτελεί απλούστατο, εισαγωγικό παράδειγμα δεικτών και δυναμικής διαχείρισης μνήμης... μακράν πιο απλό από π.χ. τις λίστες!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 03 Φεβ 2012, 01:53

migf1 έγραψε:
Δεν είναι έτσι. Αυτός είναι ο μοναδικός τρόπος που υπάρχει για να κάνεις αντιμετάθεση πινάκων διαφορετικών μηκών στη C! Επίσης δεν αποτελεί προνόμιο των επαγγελματιών, αποτελεί απλούστατο, εισαγωγικό παράδειγμα δεικτών και δυναμικής διαχείρισης μνήμης... μακράν πιο απλό από π.χ. τις λίστες!


Μαλιστα. Ωραια. ΔΗλαδη εσυ πιστευεις τωρα οτι αμα (δεδομενου την υλοποιηση που εχω φτιαξει μονος μου)
κοιταξω πχ τους κωδικες σου... και δω την διαφορα της προηγουμενης (αυτης που εκανα εγω) με της δικιας σου
δεν θα μου μεινει πιο ευκολα? Απο το να επαιρνα πχ μονο τον δικο σου τροπο εξαρχης.

Απλα ειπα εξαρχης να ξεκινησω με το πιο απλο... πχ με ιδια μηκη!

στο μεταξυ αμα εδειχνα τετοιο κωδικα σε εταιρεια θα γελαγανε ε? χαχαχαχχα

"θελει να πιασει και δουλεια αυτος..." χαχαχαχ θα ειχανε στησει παρτυ απο τον χαβαλε? :D
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 03 Φεβ 2012, 11:29

Star_Light έγραψε:
... ΔΗλαδη εσυ πιστευεις τωρα οτι αμα...

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

Ή πάρε ένα βιβλίο και διάβασέ το μέχρι τέλους με όλες του τις ασκήσεις, ή ξεκίνα να φτιάξεις ένα ολοκληρωμένο πρόγραμμα με αρχή, μέση και τέλος (όσο μικρό ή όσο μεγάλο θέλεις) και όπου κολλήσεις ρώτα για βοήθεια ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 03 Φεβ 2012, 16:17

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

Ή πάρε ένα βιβλίο και διάβασέ το μέχρι τέλους με όλες του τις ασκήσεις, ή ξεκίνα να φτιάξεις ένα ολοκληρωμένο πρόγραμμα με αρχή, μέση και τέλος (όσο μικρό ή όσο μεγάλο θέλεις) και όπου κολλήσεις ρώτα για βοήθεια ;)


Kαλησπέρα! Καμακώνω εδω και καιρό την ιδέα της κρυπτογράφησης μιας και μου λες
για ολοκληρωμενο προγραμμα!!! Ηθελα να δω καποιες έννοιες πρωτα να έχω ενα background
και συντομα μπορει να ξεκινησω. ;)

edit: Αυτο που κάναμε παντως με το swap στους πινακες στην C φανταζομαι σε μια γλωσσα οπως η php
το παιρνεις απο εγγενη ετοιμη συνάρτηση?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 03 Φεβ 2012, 17:50

Star_Light έγραψε:
edit: Αυτο που κάναμε παντως με το swap στους πινακες στην C φανταζομαι σε μια γλωσσα οπως η php
το παιρνεις απο εγγενη ετοιμη συνάρτηση?

Προσωπικά δεν γνωρίζω κάποια τέτοια έτοιμη συνάρτηση στην php (πιθανόν να υπάρχει όμως κι απλά να μη τη γνωρίζω).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 03 Φεβ 2012, 18:03

Παρεμπιπτόντως, στην Python νομίζω πάει κάπως έτσι...

Κώδικας: Επιλογή όλων

def ArrSwap(arr1, arr2):
arr1[:], arr2[:] = arr2[:], arr1[:]


Αλλά δεν ξέρω αν και πόσο γρήγορο ή μνημοβόρο είναι.
Τελευταία επεξεργασία από migf1 και 03 Φεβ 2012, 18:04, έχει επεξεργασθεί 2 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Ilias95 » 03 Φεβ 2012, 18:04

Επειδή διαβάζοντας τις τελευταίες σελίδες μου γεννήθηκε και μένα η απορία. Τελικά ποιος είναι ο κώδικας για τον swap των πινάκων;
Σαν πολλές γραμμές να βλέπω. :D Πχ. στην python είναι μια γραμμή και δεν είναι built-in function.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι