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

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

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

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

Δημοσίευσηαπό Qdata » 18 Ιούλ 2011, 18:42

stamatiou έγραψε:Ευχαριστώ πολύ αλλά μήπως ξέρεις αν μπορώ να "πειράξω" το ubuntu με C επειδή παντού λένε με τη C κάνεις τα πάντα και τέτοια...


Ο Kernel σχεδόν ολόκληρος είναι γραμμένος σε C.Δεν σημαίνει πως επειδή ξέρεις C θα μπορείς να πειράξεις τα πάντα που είναι γραμμένα σε αυτή.Τώρα εσύ αν ξέρεις την λειτουργία του kernel και την διαχείριση του και θέλεις να του ορίσεις να κάνεις άλλα πράγματα κάνε το.Είναι πολύ δύσκολο κομμάτι μιας και ο kernel παίρνει σχεδόν από μόνος του πρωτοβουλίες. :P
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 18 Ιούλ 2011, 18:47

migf1 έγραψε:Σαν τι να πειράξεις; Πρέπει να έχεις τον πηγαίο του κώδικα για να πειράξεις κάτι (και προφανώς να ξέρεις τι κάνεις).

Αλλά αυτά δεν γίνονται έτσι εύκολα! Γιατί δεν βάζεις για αρχή μικρούς, ολοκληρωμένους κι εφικτούς στόχους ώστε να προχωράς σιγά-σιγά;

Όντως, μάλλον κοιτώ λίγο μακριά για τώρα...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό konnn » 18 Ιούλ 2011, 20:53

έγραψε:Η ΦΙΛΙΑ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ
Οι φίλοι αριθμοί
Το πρόβλημα των τέλειων αριθμών : Ένας αριθμός ονομάζεται τέλειος αν
είναι ίσος με το άθροισμα των γνησίων διαιρετών του. Για παράδειγμα το 6 και το 28:
6=1 +2+3, 28=1+2+4+7+14. Όλοι οι τέλειοι αριθμοί που είναι γνωστοί σήμερα είναι
άρτιοι. Είναι ανοικτό πρόβλημα αν υπάρχουν περιττοί (μονοί) τέλειοι αριθμοί.
Ακόμη, είναι ανοικτό το αν υπάρχουν άπειροι τέλειοι αριθμοί. Με δεδομένο ότι τα
προβλήματα των τέλειων αριθμών αποδίδονται στους Πυθαγορείους, είναι τα
παλαιότερα ανοικτά ακόμα προβλήματα στα μαθηματικά.
Πάλι στους Πυθαγόρειους οφείλονται και οι φίλοι αριθμοί. ∆υο αριθμοί
λέγονται φίλοι αν ο καθένας ισούται με το άθροισμα των γνήσιων διαιρετών του
άλλου. Για παράδειγμα το 220 και το 284.
284=1+2+4+5+10+11+20+22+44+55+110 (όλοι οι διαιρέτες του 220).
220=1+2+4+71+142 (όλοι οι διαιρέτες του 284).
∆εν γνωρίζουμε σήμερα αν τα ζευγάρια των φίλων αριθμών είναι άπειρα ή
πεπερασμένα.
* Ο Pierre Fermat το 1636 βρήκε το ζεύγος 17 296, 18416
* Ο Renè Descartes βρήκε ένα τρίτο ζεύγος, 9 363 584, 9 437 056
* Ο Nicolò Paganini, το 1866 βρήκε το 1 184, 1 210
Υπάρχουν περίπου 12000 ζευγάρια από φίλους αριθμούς.


Πάνω σε αυτό έπεσα σε ένα βιβλίο που διαβάζω τελυταία και λέγεται "Το θεώρημα του παπαγάλου". Δε γνώριζα την παραπάνω ιδιότητα και θέλησα να τη μετατρέψω σε ένα ατοματισμό σε C.
Ο παρακάτω κώδικας σου ζητά να δώσεις ένα αριθμό ώστε να δει εάν έχει φίλο. Δεν είναι κάτι δύσκολο, τον παραθέτω και θα ήταν ωραίο να τον τροποποιήσουμε ώστε να βρούμε όλα τα ζευγάρια-αν δεν απαιτεί μεγάλη υπολογιστική ισχή και μνήμη .
Αν ναι, μπορούμε να σπάσουμε τα πεδία αναζήτησης.
Ίσως να υπάρχει κάπου στο διαδίκτυο και άλλος κώδικας που να βρίσκει και τα ζευγάρια-
Κώδικας: Επιλογή όλων
/* Αυτό προγραμματάκι βρίσκει εάν ένας αριθμός έχει φίλο */

#include <stdio.h>

int div_sum(int a){
int k=0;
int z=0;
int b=0;
for(k=1;k<=a/2;k++){
if((a%k)==0){

b=b+k;}

}
printf("Το άθροισμά των διαιρέτων του %d είναι %d \n" ,a,b );


return b;
}

main(){
int i=0;
int j=0;
printf ("Δώσε ένα αριθμό,για να βρούμε αν έχει φίλο, και πατήστε enter :\n");
scanf ("%d",&i);
j=div_sum(i);
if(div_sum(j)==i) printf ("Άρα αριθμοί %d και %d είναι φίλοι.\n ", i,j );
else
printf("Ο αριθμός %d δεν έχει φίλο.\n" , i);

/* GNU v2 */
}
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 19 Ιούλ 2011, 14:55

Μήπως ξέρει κανείς τι ακριβώς είναι οι static variables και functions;
Edit: Επίσης, για να περάσουμε μια μεταβλητή σε μια συνάρτηση by reference πρέπει να περάσουμε ένα δείκτη της, για να περάσουμε ένα δείκτη by reference πρέπει να περάσουμε ένα δείκτη στον δείκτη;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 20 Ιούλ 2011, 23:43

stamatiou έγραψε:1.Μήπως ξέρει κανείς τι ακριβώς είναι οι static variables και functions;
Edit: 2.Επίσης, για να περάσουμε μια μεταβλητή σε μια συνάρτηση by reference πρέπει να περάσουμε ένα δείκτη της, για να περάσουμε ένα δείκτη by reference πρέπει να περάσουμε ένα δείκτη στον δείκτη;


1.
functions ειναι οι συναρτησεις. Τα static δεν τα θυμαμαι απεξω.... αλλα θα σου δωσω ενα παραδειγμα σε C εστω ο πιο κατω κωδικας

Κώδικας: Επιλογή όλων
#include<stdio.h>

int add_two(int x , int y)
{
static int counter=1;

printf("H klhsh tis sunarthshs: %d \n", counter++);
return (x+y);
}
main()
{
int i,j;
int x[2];
for(i=0,j=5; i<5; i++, j--)
printf("i prosthesi tou %d kai tou %d einai %d. \n\n",i,j,add_two(i,j));

printf("%d",x[2]);

return 0;
}


Aν την μεταβλητη counter δεν την δηλωνα σαν static θα εμενε συνεχως 1.
Ειναι ενας τροπος να μην διαγραφει η συναρτηση τα δεδομενα της μολις σταματαει η κληση της.

2. Περνας εναν δεικτη μεσα σε μια συναρτηση σαν ορισμα για να της δωσεις να καταλαβει
πως η δουλεια της θα ειναι πανω στην αυθεντικη θεση μνημης και οχι σε ενα αντιγραφο αυτης.
Για να πετυχει η σκεψη σου θες ομως 3 πραγματα ταυτοχρονα.

-> 1. Να περασεις σαν παραμετρο της συναρτησης τον δεικτη

ΚΑΙ

-> 2. Να καλεσεις την συναρτηση μεσα στην main() με παραμετρο την διευθυνση του δεικτη

ΚΑΙ

-> 3. Μεσα στην συναρτηση (τοπικα) θα παιζεις με τον αστερισκο.

Ενα παραδειγμα ειναι το εξης

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


#include <stdio.h>
#include <stdlib.h>

void function( int *x)
{
(*x)++;
return;
}
int main()
{
int x=1;


printf("O x apo tin main(): %d \n",x);

function(&x);
printf("O x apo tin function me call by reference: %d \n",x);

return 0;
}



Τωρα αν θες να μπλεχτεις παραπανω με τους δεικτες που αν παιξεις με δομες και λιστες και ολα αυτα τα ωραια
(να ναι καλα ο migf1) θα έχεις ηδη εναν δεικτη μεσα στην main() εκει πλεον αν θες να τον περασεις by reference σε μια συναρτηση
επειδη ειναι ΗΔΗ δεικτης... θα περασεις διπλο δεικτη... οπως τα παραπανω δηλαδη απλα με ** αστερακια...

η διαφορα του παραδειγματος που εδωσα με αυτο που ειπα ακριβως εδω απο πανω ειναι οτι στο μεν ενα δεν εχεις δεικτη μεσα στην main εχεις απλη μεταβλητη. Για αυτο ενα μονο αστερακι στην συναρτηση.
Γνώσεις ⇛ 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 » 20 Ιούλ 2011, 23:45

Οσο για τον kernel για να φτασεις στο σημειο να τον πειραξεις θα πρεπει να χεις ξεκαθαρισει αρκετα αλλα επιμερους θεματα που θελουν αρκετο χρονο και δουλεια να τα ξεκαθαρισεις. Μερικα απο αυτα μονο επιγραμματικα ειναι

1. Διεργασιες

2. Νηματα

3. Διακοπες

4. Μνημη - εικονικη - φυσικη / memory layout - στοιβες - καταχωρητες κτλπ κτλπ.
Γνώσεις ⇛ 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++

Δημοσίευσηαπό Qdata » 20 Ιούλ 2011, 23:55

Star_Light έγραψε:Οσο για τον kernel για να φτασεις στο σημειο να τον πειραξεις θα πρεπει να χεις ξεκαθαρισει αρκετα αλλα επιμερους θεματα που θελουν αρκετο χρονο και δουλεια να τα ξεκαθαρισεις. Μερικα απο αυτα μονο επιγραμματικα ειναι

1. Διεργασιες

2. Νηματα

3. Διακοπες

4. Μνημη - εικονικη - φυσικη / memory layout - στοιβες - καταχωρητες κτλπ κτλπ.


@stamatiou Όπως σου είπε και ο Star_Light δεν παίζει ρόλο μόνο η C αλλά και ο τρόπος λειτουργίας αυτών που θέλεις να πειράξεις.Θα πρότεινα να αρχίσεις με εφαρμογές που είναι μικρότερα projects από τον kernel ολόκληρο.
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 21 Ιούλ 2011, 00:01

Star_Light έγραψε:Οσο για τον kernel για να φτασεις στο σημειο να τον πειραξεις θα πρεπει να χεις ξεκαθαρισει αρκετα αλλα επιμερους θεματα που θελουν αρκετο χρονο και δουλεια να τα ξεκαθαρισεις. Μερικα απο αυτα μονο επιγραμματικα ειναι

1. Διεργασιες

2. Νηματα

3. Διακοπες

4. Μνημη - εικονικη - φυσικη / memory layout - στοιβες - καταχωρητες κτλπ κτλπ.

Μόνο τις στοίβες ξέρω, τα υπόλοιπα πώς τα μαθαίνω;
Επίσης όταν έλεγα να πειράξω εννούσα πολύ πιο απλά πράγματα, πχ όταν ανοίγει το laptop από suspend να εμφανίζει ένα μήνυμα. Τέτοια πράγματα...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 21 Ιούλ 2011, 00:09

stamatiou έγραψε:
Star_Light έγραψε:Οσο για τον kernel για να φτασεις στο σημειο να τον πειραξεις θα πρεπει να χεις ξεκαθαρισει αρκετα αλλα επιμερους θεματα που θελουν αρκετο χρονο και δουλεια να τα ξεκαθαρισεις. Μερικα απο αυτα μονο επιγραμματικα ειναι

1. Διεργασιες

2. Νηματα

3. Διακοπες

4. Μνημη - εικονικη - φυσικη / memory layout - στοιβες - καταχωρητες κτλπ κτλπ.

Μόνο τις στοίβες ξέρω, τα υπόλοιπα πώς τα μαθαίνω;
Επίσης όταν έλεγα να πειράξω εννούσα πολύ πιο απλά πράγματα, πχ όταν ανοίγει το laptop από suspend να εμφανίζει ένα μήνυμα. Τέτοια πράγματα...


http://www.klidarithmos.gr/main/images/ ... e_2138.gif

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

Μαλλον θα εννοεις να κανεις παραμετροποιηση στα αρχεια εσυ. Ε δεν εχει σχεση αυτο με τον πυρηνα. Ο πυρηνας παιζει με το υλικο
και τις κλησεις συστηματος δεν εχει σχεση με τις εφαρμογες χρηστη. (Οι μονολιθικοι τουλαχιστον) ;)
Γνώσεις ⇛ 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++

Δημοσίευσηαπό stamatiou » 21 Ιούλ 2011, 00:25

Star_Light έγραψε:
stamatiou έγραψε:
Star_Light έγραψε:Οσο για τον kernel για να φτασεις στο σημειο να τον πειραξεις θα πρεπει να χεις ξεκαθαρισει αρκετα αλλα επιμερους θεματα που θελουν αρκετο χρονο και δουλεια να τα ξεκαθαρισεις. Μερικα απο αυτα μονο επιγραμματικα ειναι

1. Διεργασιες

2. Νηματα

3. Διακοπες

4. Μνημη - εικονικη - φυσικη / memory layout - στοιβες - καταχωρητες κτλπ κτλπ.

Μόνο τις στοίβες ξέρω, τα υπόλοιπα πώς τα μαθαίνω;
Επίσης όταν έλεγα να πειράξω εννούσα πολύ πιο απλά πράγματα, πχ όταν ανοίγει το laptop από suspend να εμφανίζει ένα μήνυμα. Τέτοια πράγματα...


http://www.klidarithmos.gr/main/images/ ... e_2138.gif

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

Μαλλον θα εννοεις να κανεις παραμετροποιηση στα αρχεια εσυ. Ε δεν εχει σχεση αυτο με τον πυρηνα. Ο πυρηνας παιζει με το υλικο
και τις κλησεις συστηματος δεν εχει σχεση με τις εφαρμογες χρηστη. (Οι μονολιθικοι τουλαχιστον) ;)

Αυτό το βιβλίο είναι για Kernel ή για όλα αυτα που είπε ο φίλος migf1 εκτός από τις στοίβες;
Πώς γίνεται να μάθω να κάνω αυτό με τα αρχεία(το οποίο πάλι δεν πολυκατάλαβα :cry: )
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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