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

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

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

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

Δημοσίευσηαπό Star_Light » 14 Αύγ 2011, 03:29

stamatiou έγραψε::oops: :oops:
2. Τι ακριβώς κάνει το memmove( &arr[1], &arr[0], (maxelems-1) * sizeof(int) );


Συνηθως οι συναρτήσεις κάνουν αυτο που λεει το ονομα τους. Εγω χωρις να την εχω ξαναδει καν την συναρτηση
φανταστηκα οτι θα μετακινει κατι... σαν την memset βεβαια αυτη απο οσο θυμαμαι απο παλια απλα γεμιζε την μνημη με μια τιμη.

2 πραγματα να θυμασαι αν θες την γνωμη μου.... καταρχην περιγραφικοτητα... αυτο που ειπα και πιο πανω
ειναι ιδιοτητα των προγραμματιστων για να διευκολυνουν την αναγνωση αλλων προγραμματιστων...
και ψαχνε μια συναρτηση στο manual!!! Οχι πως βαριεται καποιος να σου απαντησει ισα ισα ... απλα θα σε βοηθησει παρα πολυ
αν αρχισεις να εξοικειωνεσαι με το manual. Πλεον αρχιζω να πιστευω πως γνωστης ειναι εκεινος που δεν θυμαται τιποτα απεξω αλλα
ειναι high level στο να αναμειγνυεται με τα manual... ποια η γνωμη σας?
Γνώσεις ⇛ 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 » 14 Αύγ 2011, 08:28

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

@stamatiou: η έτοιμη qsort ταξινομεί μόνο σε αύξουσα σειρά αν θυμάμαι καλά. Συν ότι εκτελείται και πιο αργά συγκριτικά με μια custom συνάρτηση η οποία κάνεις απευθείας μέσα της τις συγκρίσεις χωρίς να καλεί συνεχώς ξεχωριστή συνάρτηση σύγκρισης.

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

ΥΓ1. Επίσης θερμή παράκληση, γράφε λίγο πιο ευανάγνωστο κώδικα, με χρήση κενών διαστημάτων, ευανάγνωστα ονόματα μεταβλητών και macros και γραμμές από παύλες σε σχόλια πάνω από κάθε συνάρτηση, γιατί δυσκολεύομαι πολύ να διαβάσω τον κώδικά σου :)

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

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

Δημοσίευσηαπό Star_Light » 14 Αύγ 2011, 13:05

@migf καλα να περάσεις. Κανε και καμια βουτια για μας...

και εγω φευγω 5-6 μερουλες διακοπες στις 17 .. να χαλαρωσουμε λιγο γιατι ηταν η χρονια φορτωμενη.
Γνώσεις ⇛ 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, 01:19

Ευχαριστώ, φεύγω κι εγώ αύριο για καμιά βδομάδα, και δεν θα πάρω μαζί μου το λάπτοπ (αποτοξίνωση :) )

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

http://ideone.com/VccYM

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

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

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

Δημοσίευσηαπό Star_Light » 16 Αύγ 2011, 02:42

migf1 έγραψε:Ευχαριστώ, φεύγω κι εγώ αύριο για καμιά βδομάδα, και δεν θα πάρω μαζί μου το λάπτοπ (αποτοξίνωση :) )

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

http://ideone.com/VccYM

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

Καλές διακοπές εύχομαι σε όσους δεν έχουν πάει ακόμα, και καλό υπόλοιπο καλοκαιριού σε όσους έχουν γυρίσει :)


ΚΑΛΕς διακοπες να έχουμε! :D ΑΝτε καιρος ηταν... να ηρεμησει λιγο και το μυαλουδακι μας... έφτιαξα ένα loop προ λιγου το οποιο εκτυπώνει μια λέξη αναάποδα χρησιμοποιώντας και εναν δείκτη + αλλο ενα loop που την υπολογιζει κανονικα και την τυπωνει οχι δηλαδη αναποδα... πρεπει να τα φτιαξω σε συνάρτηση αυτα.

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

Spoiler: show
[/code]
#include<stdio.h>
void func(char *str_ptr);
int main()
{
char str[6]="IlikeC";
char *str_ptr;
str_ptr=&str[6];
int i;

for(i=6; i>0; i--)
{
str_ptr--;
printf("%c",*str_ptr);
}

printf("\n\n");

str_ptr=&str[0];

for(i=0; i<6; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}

//func(&str_ptr);


return 0;
}
/*void func(char *str_ptr)
{
int i;

for(i=0; i<5; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}
return;
}*/
[/code]
Γνώσεις ⇛ 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, 03:11

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

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

#include<stdio.h>
#include<stdlib.h>
#define N 256
void func(char *str_ptr);
int main()
{
char str[N]="";
char *str_ptr;
int i;

printf("Dwste mia simvoloseira: \n");
fgets(str,N,stdin);
sscanf(str,"%c",&str[N]);

/*for(i=0; i<N; i++)
{
scanf(str,"%c",&str[N]);
}*/

str_ptr=&str[N];

for(i=N; i>0; i--)
{
str_ptr--;
printf("%c",*str_ptr);
}

printf("\n");

str_ptr=&str[0];

for(i=0; i<N; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}

//func(&str_ptr);


return 0;
}
/*void func(char *str_ptr)
{
int i;

for(i=0; i<5; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}
return;
}*/


επειδη ομως δεν την παλευω αλλο παω να την πεσω....

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

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


olleh

ello
h


Το h δεν καταλαβαινω γιατι το βγαζει απο κατω....
Γνώσεις ⇛ 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, 11:41

Καλημέρα (θα φύγω απόγευμα τελικά).

Έχει πάρα πολλά θέματα ο κώδικάς σου. Θα στα πω χωρίς παραθέσεις.

Καταρχήν, το ότι το Ν είναι το μέγιστο μήκος του str δεν σημαίνει πως ο χρήστης θα σου πληκτρολογήσει εγγυημένα τόσους ή περισσότερους χαρακτήρες. Ειδικά στο παράδειγμά σου, το "hello" αποτελείται από μόλις 6 χαρακτήρες, συμπεριλαμβανομένου του '\0' στο τέλος του. Κι επειδή το διαβάζεις με την fgets() περιέχει κι ένα '\n' πριν από το '\0', άρα συνολικά έχει 7 χαρακτήρες.

Οπότε εκείνο το &str[N] που γράφεις (με το N ορισμένο σε 256) ουσιαστικά αναφέρεται στον... γάμο του καραγκιόζη :lol:, και πιο συγκεκριμένα αναφέρεται στο 256ο byte μνήμης, μετρώντας από το byte στο οποίο είναι καταχωρημένος ο 1ος χαρακτήρας του str.

Επίσης, με αυτό που γράφεις:

Κώδικας: Επιλογή όλων
fgets(str, N, stdin);
sscanf(str, "%c", &str[N]);

τι προσπαθείς να κάνεις; Έτσι όπως το έχεις, έχεις διαβάσει το str και μετά πας και βάζεις τον 256ο χαρακτήρα του (που είναι κι εκτός ορίων, αφού το str τελειώνει στον str[255] ) να περιέχει ότι και ο 1ος χαρακτήρας του str.

Αν θες να δεις ποιος είναι ο τελευταίος διαβασμένος χαρακτήρας του str (τρέχον μήκος) ή πρέπει να χρησιμοποιήσεις την έτοιμη strlen() ή να πιάσεις μόνος σου το str από την αρχή και να μετράς χαρακτήρες μέχρι να βρεις τον '\0'.

Το ίδιο πρόβλημα έχουν και τα loop σου, που χρησιμοποιούν το N για άνω όριο. Και περιττό είναι αφού από το str[ strlen(str) ] και μετά δεν χρειάζεται καν να πηγαίνεις, αλλά είναι και λάθος αφού σε ένα string μήκους N ο τελευταίος του χαρακτήρας δεν είναι ο N αλλά ο N-1.

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

Σου παραθέτω κώδικα για αυτό που προσπαθείς να κάνεις...

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

#include <stdio.h>

#define MAX_SLEN 255+1

// ------------------------------------------------------------------------------
int main( void )
{
char s[ MAX_SLEN ] = ""; // το string
char *cp; // δείκτης σε χαρακτήρα

printf("Dwste mia simvoloseira: "); // ανάγνωση του string
fgets(s, MAX_SLEN, stdin); // διαβάζει και το '\n' στο τέλος

// αντικατάσταση του '\n' που βάζει η fgets στο τέλος του s με '\0'
for (cp = s; *cp != '\0' && *cp != '\n'; cp++) // έως ότου βρεις '\0' ή '\n'
; // ... επανέλαβε
*cp = '\0'; // βάλε '\0' εκεί που σταμάτησες

// ο cp δείχνει ήδη στο τέλος του s
while ( cp-- != s ) // εκτύπωση του string ανάποδα
putchar( *cp );

putchar('\n'); // αλλαγή γραμμής στην οθόνη

for (cp = s; *cp != '\0'; cp++ ) // εκτύπωση του string κανονικά
putchar( *cp );

putchar('\n'); // αλλαγή γραμμής στην οθόνη

return 0;
}


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

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

#include<stdio.h>
#include<stdlib.h>
#define N 256
void func(char *str_ptr);
int main()
{
char str[N]="";
char *str_ptr;
int i;

printf("Dwste mia simvoloseira: \n");
fgets(str,N,stdin);
sscanf(str,"%c",&str[N]);

/*for(i=0; i<N; i++)
{
scanf(str,"%c",&str[N]);
}*/

str_ptr=&str[N];

for(i=N; i>0; i--)
{
str_ptr--;
printf("%c",*str_ptr);
}

printf("\n");

str_ptr=&str[0];

for(i=0; i<N; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}

//func(&str_ptr);


return 0;
}
/*void func(char *str_ptr)
{
int i;

for(i=0; i<5; i++)
{
str_ptr++;
printf("%c",*str_ptr);
}
return;
}*/


επειδη ομως δεν την παλευω αλλο παω να την πεσω....

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

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


olleh

ello
h


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

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

Δημοσίευσηαπό Star_Light » 16 Αύγ 2011, 11:54

καλα ναι αυτο το &str[N] παρα ειναι αοριστο...

ευχαριστω και θα τον ξανακοιταξω σημερα που ξυπνησα πιο ξεκουραστος :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++

Δημοσίευσηαπό Star_Light » 16 Αύγ 2011, 12:57

migf1

αυτο εδω =>

Κώδικας: Επιλογή όλων
for(*str_ptr; *str_ptr!='\0'; str_ptr++)
{
//str_ptr++;
printf("%c",*str_ptr);
}


το θεωρεις οκ??? γιατι εμενα μου δουλευει :P

και ολη η συναρτηση =>

Κώδικας: Επιλογή όλων
void func(char str[N])
{
char *str_ptr;
str_ptr=str;

for(*str_ptr; *str_ptr!='\0'; str_ptr++)
{
printf("%c",*str_ptr);
}

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++

Δημοσίευσηαπό Star_Light » 16 Αύγ 2011, 13:14

ολα οκ.... ο ολοκληρωμενος κωδικας μου με 2 συναρτησεις

Spoiler: show
Κώδικας: Επιλογή όλων
#include<stdio.h>
#include<stdlib.h>
#define N 256
void func(char str[N]);
void rev_func(char str[N]);
int main()
{
char str[N]="";

printf("Dwste mia simvoloseira: \n");
fgets(str,N,stdin);

func(str);
rev_func(str);


return 0;
}
void func(char str[N])
{
char *str_ptr;
str_ptr=str;

for(str_ptr=str; *str_ptr!='\0'; str_ptr++)
{
printf("%c",*str_ptr);
}


return;
}
void rev_func(char str[N])
{
char *str_ptr;

while(str_ptr!=str)
{
str_ptr--;
printf("%c",*str_ptr);
}
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
Εκτύπωση

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

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

cron