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

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

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

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

Δημοσίευσηαπό Star_Light » 13 Σεπ 2011, 20:28

stamatiou έγραψε:Συγνώμη που έλειψα για αυτές τις μέρες αλλά ξέρετε, τα σχολεία άρχισαν :(
Λοιπόν, έφτιαξα έναν κώδικα:
Spoiler: show
Κώδικας: Επιλογή όλων
Bool table_fill_unique_randomly( Table *table, int maxval ) {
int array[maxval],i,i2,random,i3 = maxval;
if(!table || !table->buffer || table->buflen == table->bufmaxlen) return FALSE;
for(i = 0;i < maxval;i++) {
array[i] = FALSE;
}
for(i = 0;i < maxval;i++) {
if(maxval == 0) {
table->buflen = table->bufmaxlen;
return TRUE;
}
do{
random = rand() % maxval + 1;
}while(array[random] != TRUE);

table->buffer[i] = random;
array[random] = TRUE;
}
}


ε ναι αστα να πανε... σχολεια ... πτυχιακες... αγγλικα... ολα μαζι πεσανε.
Δεν αφηνουν ανθρωπο να προγραμματο-αγιασει!!!!
Γνώσεις ⇛ 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++

Δημοσίευσηαπό Star_Light » 13 Σεπ 2011, 20:30

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


Πολυ σωστος.

Ε ναι αρχισα τα δικα μου παλι τα παλαβά. Μην με λαμβανετε σοβαρα υποψιν. :lol: :lol:
Γνώσεις ⇛ 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++

Δημοσίευσηαπό Star_Light » 14 Σεπ 2011, 17:52

Migf1 προτεινεις να διαβασουμε τον κωδικα που εδωσες χθες και εχει μεσα λειτουργιες διαχειρισης πινακων ή να κάνουμε κάποιο παράδειγμα με Bubble short?

http://en.wikipedia.org/wiki/Bubble_sort
Γνώσεις ⇛ 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++

Δημοσίευσηαπό Star_Light » 16 Σεπ 2011, 01:22

Μια πολυ προχειρη υλοποιηση του αλγοριθμου ταξινομησης bubble sort χωρις να κοιταξω πουθενα αλλου στο ιντερνετ.
Δεν εχω τσεκαρει τα λογικα του λαθη ακομη βεβαια... οποιος βρει κάποιο ας ενημερωσει να το συζητησουμε

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

#include<stdio.h>
#define n 10
void bubble_sort(int x[n]);

int main()

{
int x[n]={2,3,4,5,6,1,7,9,11,2};
int i;

printf("==============");
printf("Prin tin taksinomisi :");
printf("==============");

for(i=0; i<n; i++)
printf("\n %d " , x[i]);

puts("\n");
printf("===============");
printf("Meta tin taksinomisi: ");
printf("===============");

bubble_sort(x);

for(i=0; i<n; i++)
printf("\n %d",x[i]);

return 0;
}
void bubble_sort(int x[n])
{
int i,j;
int tmp1;

for(i=0; i<n; i++)
{
for(j=0; j<n-1; j++)
{

if(x[j]>x[j+1])
{
tmp1=x[j+1];
x[j+1]=x[j];
x[j]=tmp1;
}

}
}

return;
}


Γνώσεις ⇛ 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 » 16 Σεπ 2011, 05:06

Star_Light έγραψε:Migf1 προτεινεις να διαβασουμε τον κωδικα που εδωσες χθες και εχει μεσα λειτουργιες διαχειρισης πινακων ή να κάνουμε κάποιο παράδειγμα με Bubble short?

http://en.wikipedia.org/wiki/Bubble_sort

Hello,

θα σε γελάσω, γιατί έχω χάσει λίγο τη μπάλα με το τι μπορείτε και τι δεν μπορείτε να κάνετε :lol: Υποψιάζομαι πως ούτε εκεί θα μπορέσετε να βγάλετε άκρη.

Ο bubble sort είναι μια καλή αρχή για αλγόριθμους ταξινόμησης πάντως (αν και είναι μόνο για εκπαιδευτικούς λόγους, γιατί είναι ο πιο αργός από όλους).

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

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

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

app num : εισαγωγή του ακεραίου num στo τέλος του set
pre num : εισαγωγή του ακεραίου num στην αρχή του set
ins n num : εισαγωγή του ακεραίου num στη n-οστή θέση του set
upd n num : αντικατάσταση του ακεραίου που βρίσκεται στη n-οστή θέση του set με τον num
del num : διαγραφή του ακεραίου num από το set
dln n : διαγραφή του ακεραίου που βρίσκεται στη n-οστή θέση του set
fnd num : αναζήτηση του ακεραίου num και τύπωμα της θέσης του στο set
saz : ταξινόμηση τoυ set σε αύξουσα σειρά
sza : ταξινόμηση του set σε φθίνουσα σειρά
frq num : πόσες φορές εμφανίζεται ο ακέραιος num μέσα στο set
frqall : πόσες φορές εμφανίζεται ο κάθε ακέραιος μέσα στο set
swp n1 n2 : εναλλαγή των ακεραίων που βρίσκονται στις θέσεις n1 και n2 (swap)
len : εκτύπωση του πλήθους στοιχείων του set
rdup : διαγραφή όλων των έξτρα εμφανίσεων οποιουδήποτε ακέραιου υπάρχει πάνω από μια φορά στο set

Μετά από κάθε εντολή το πρόγραμμα θα πρέπει να τυπώνει όλα τα στοιχεία του set. Επίσης, μην επιτρέπεται στον χρήστη να εισαγάγει νούμερα μικρότερα του 0 ή μεγαλύτερα του 100.

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

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

Δημοσίευσηαπό logari81 » 16 Σεπ 2011, 11:33

να κάνω μία ακόμα παρέμβαση αν και επίσης σε C++ μπορεί να σας ενδιαφέρει. Επειδή βλέπω ότι σας αρέσουν αλγοριθμικές ασκήσεις, αν περάσετε σε object oriented ασκήσεις μπορείτε να ρίξετε μια ματιά σε έναν κώδικα που έγραψα πρόσφατα:

http://free-cad.svn.sourceforge.net/vie ... p/freegcs/

Υπάρχουν αρκετά κομμάτια του κώδικα που ενδείκνυνται ως ασκήσεις κατανόησης για stl containers κι όχι μόνο. Επίσης αν κάποιος έχει όρεξη για κάτι προχωρημένο, κάτι που λείπει από τον κώδικα είναι η κατάτμηση του προβλήματος που λύνει σε μικρότερα απομονωμένα προβλήματα. Για μία τέτοια υλοποίηση απαιτείται εφαρμογή γνώσεων θεωρίας γράφων (graph theory) και οι βασικές υποδομές για την υλοποίηση υπάρχουν (π.χ. ορισμός υποσυστημάτων).

Το τί κάνει ο κώδικας αφήνεται ως άσκηση :).
http://opensourceecology.org/


Λειτουργικό: Ubuntu 10.04 lucid 64-bitΠροδιαγραφές: 4x Intel Core i5 CPU M 450 2.40GHz ‖ RAM 3696 MiB ‖ Lenovo KL3 - LENOVO IdeaPad Y560
Κάρτα γραφικών: ATI Device [1002:68c0]Ασύρματο: wlan0: Atheros Inc. AR928X Wireless Network Adapter (PCI-Express) [168c:002a] (rev 01)
logari81
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 6074
Εγγραφή: 14 Μάιος 2008, 10:40
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 16 Σεπ 2011, 11:39

logari81 εγω δεν ξερω σοβαρο προγραμματισμο και δεν ειναι σιγουρο και οτι θα μαθω και ποτε παρολαυτα την προσπαθεια και το χομπι μου κανω και αν γινει εγινε αν δεν γινει υγεια. ;)
Απλα προβληματιστικα λιγο χθες γιατι μπηκα σε ενα ξενο φορουμ να δω και εκει τι παιζει και αρχισαν να μου λενε

πως δεν υπαρχουν πραγματικες αναφορες στην C (τους μιλησα για κληση με αναφορα) πως η δεκαεξαδικη διευθυνση δεν ειναι ενα ενδιαμεσο βημα
, το οτι μια MAC απεικονιζεται σε μια δεκαεξαδικη ειναι θεμα "παραδοσης" κτλπ κτλπ....

3 τινα παιζουν... ειτε 1ον τα αγγλικα μου δεν ειναι καλα... ειτε 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++

Δημοσίευσηαπό Star_Light » 16 Σεπ 2011, 11:53

migf1 έγραψε:
Star_Light έγραψε:Migf1 προτεινεις να διαβασουμε τον κωδικα που εδωσες χθες και εχει μεσα λειτουργιες διαχειρισης πινακων ή να κάνουμε κάποιο παράδειγμα με Bubble short?

http://en.wikipedia.org/wiki/Bubble_sort

Hello,

θα σε γελάσω, γιατί έχω χάσει λίγο τη μπάλα με το τι μπορείτε και τι δεν μπορείτε να κάνετε :lol: Υποψιάζομαι πως ούτε εκεί θα μπορέσετε να βγάλετε άκρη.

Ο bubble sort είναι μια καλή αρχή για αλγόριθμους ταξινόμησης πάντως (αν και είναι μόνο για εκπαιδευτικούς λόγους, γιατί είναι ο πιο αργός από όλους).

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

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

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

app num : εισαγωγή του ακεραίου num στo τέλος του set
pre num : εισαγωγή του ακεραίου num στην αρχή του set
ins n num : εισαγωγή του ακεραίου num στη n-οστή θέση του set
upd n num : αντικατάσταση του ακεραίου που βρίσκεται στη n-οστή θέση του set με τον num
del num : διαγραφή του ακεραίου num από το set
dln n : διαγραφή του ακεραίου που βρίσκεται στη n-οστή θέση του set
fnd num : αναζήτηση του ακεραίου num και τύπωμα της θέσης του στο set
saz : ταξινόμηση τoυ set σε αύξουσα σειρά
sza : ταξινόμηση του set σε φθίνουσα σειρά
frq num : πόσες φορές εμφανίζεται ο ακέραιος num μέσα στο set
frqall : πόσες φορές εμφανίζεται ο κάθε ακέραιος μέσα στο set
swp n1 n2 : εναλλαγή των ακεραίων που βρίσκονται στις θέσεις n1 και n2 (swap)
len : εκτύπωση του πλήθους στοιχείων του set
rdup : διαγραφή όλων των έξτρα εμφανίσεων οποιουδήποτε ακέραιου υπάρχει πάνω από μια φορά στο set

Μετά από κάθε εντολή το πρόγραμμα θα πρέπει να τυπώνει όλα τα στοιχεία του set. Επίσης, μην επιτρέπεται στον χρήστη να εισαγάγει νούμερα μικρότερα του 0 ή μεγαλύτερα του 100.

Προφανώς δεν θα τις φτιάξετε όλες αυτές τις λειτουργίες με τη μια, φτιάχνετε τες σιγά-σιγά.


Οκ migf1 ! thanx :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 » 16 Σεπ 2011, 12:39

Star_Light έγραψε:
...
Απλα προβληματιστικα λιγο χθες γιατι μπηκα σε ενα ξενο φορουμ να δω και εκει τι παιζει και αρχισαν να μου λενε

πως δεν υπαρχουν πραγματικες αναφορες στην C (τους μιλησα για κληση με αναφορα)

Σωστά είπαν, η C δεν υποστηρίζει εγγενώς pass by reference, μόνο pass by value. Μπορείς να το "προσομοιώσεις" όμως χρησιμοποιώντας δείκτες. Κι οι δείκτες by value περνιούνται, αλλά είναι σαν να περνάς by reference τα περιεχόμενά τους.

έγραψε:πως η δεκαεξαδικη διευθυνση δεν ειναι ενα ενδιαμεσο βημα

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

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

Δημοσίευσηαπό migf1 » 16 Σεπ 2011, 12:41

logari81 έγραψε:
...
Το τί κάνει ο κώδικας αφήνεται ως άσκηση :).

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

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

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