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

Ασκηση C


programmer

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

Ναι αλλα δεν πρέπει να δεις με κάποιο τρόπο οτι ο κώδικας δουλεύει σωστά και έχει πάρει τις τιμές που του έχεις βάλει? επειδη δεν ήταν αρχική απαίτηση δεν έγραψα ξεχωριστή συνάρτηση. Ο δικος μου ήταν λανθασμένος επειδη είχα να χρησιμοποιήσω τον δεικτη έτσι κανα 3μηνο και δεν το κοιταξα κάν πριν το κάνω στην θεωρια μετα που το είδα και το θυμήθηκα ειπα να μην το χρησιμοποιήσει έτσι γιατι ουτως ή αλλως δεν βγαινει. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συχνή συμμετοχή στο θέμα

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

...

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γενικά συμφωνώ επειδη μπορεις να το επαναχρησιμοποιήσεις και αλλού αυτο που λές. Για το συγκεκριμένο ομως που θελω να κάνω απλα έναν έλεγχο επαλήθευσης διαφωνώ. Και αυτο επειδη βαριέμαι και χάνω χρόνο τωρα να κάνω paste τον ορισμό της να γράφω την κλήση της στην main την δηλωσή της ή ακομα χειροτερα να κάνω compile και linking ολα τα αρχεια μαζί αμα ειναι μέσα σε header η δηλωση της. Και μετά #include στο πηγαίο.

 

Βάζεις μια printf μέσα στο loop και τελειωσε , και μετα την σβήνεις αμα θές.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γενικά συμφωνώ επειδη μπορεις να το επαναχρησιμοποιήσεις και αλλού αυτο που λές. Για το συγκεκριμένο ομως που θελω να κάνω απλα έναν έλεγχο επαλήθευσης διαφωνώ. Και αυτο επειδη βαριέμαι και χάνω χρόνο τωρα να κάνω paste τον ορισμό της να γράφω την κλήση της στην main την δηλωσή της ή ακομα χειροτερα να κάνω compile και linking ολα τα αρχεια μαζί αμα ειναι μέσα σε header η δηλωση της. Και μετά #include στο πηγαίο.

 

Βάζεις μια printf μέσα στο loop και τελειωσε , και μετα την σβήνεις αμα θές.

 

Yπάρχει και ο gdb!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Yπάρχει και ο gdb!

 

Δεν τον χρησιμοποιώ. Με printf σε κάθε σημειο που νομιζω οτι έχει θέμα προσπαθώ να δω τι πάει στραβά. 

 

Ειναι πολυ ανώτερος ο gdb απο αυτη την τεχνική? βεβαια μιλάμε για κώδικες μέχρι 200 γραμμές άντε 300 οχι παραπάνω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γενικά συμφωνώ επειδη μπορεις να το επαναχρησιμοποιήσεις και αλλού αυτο που λές. Για το συγκεκριμένο ομως που θελω να κάνω απλα έναν έλεγχο επαλήθευσης διαφωνώ. Και αυτο επειδη βαριέμαι και χάνω χρόνο τωρα να κάνω paste τον ορισμό της να γράφω την κλήση της στην main την δηλωσή της ή ακομα χειροτερα να κάνω compile και linking ολα τα αρχεια μαζί αμα ειναι μέσα σε header η δηλωση της. Και μετά #include στο πηγαίο.

 

Βάζεις μια printf μέσα στο loop και τελειωσε , και μετα την σβήνεις αμα θές.

Μόνο που και τον κώδικα περιέπλεξες και λάθος το έκανες στο τέλος :P

 

Η συνάρτηση εκτύπωσης πίνακα για την συγκεκριμένη άσκηση είναι δεν είναι 6 γραμμές. Αν αφαιρέσεις και το sanity check είναι 3 :P

 

Ούτε include χρειάζεται, ούτε copy & paste, ούτε έξτρα εντολές στον linker, ούτε έξτρα πηγαία αρχεία, ούτε τίποτε από αυτά που γράφεις...

#include <stdio.h>

#define N 5

void arr_print( int *arr )
{
	if ( !arr )  // sanity check
		return;

	for (int i=0; i < N; i++ )
		printf( "%d ", arr[i] );
	putchar( '\n' );
}

int main( void )
{
	int A[N] = {2,8,4,1,3};
	int B[N] = {0};
	int *p = &A[N], *q = B;

	arr_print( A );
	while ( p > A ) {
		*q++ = *--p;
	}
	arr_print( B );

	return 0;
}
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@migf1 ο ιδιος ειπα εξαρχής οτι τον έκανα λάθος τον κώδικα και αυτο το κατάλαβαν ολοι οκ :P

 

Αυτο που σου λέω εγω ειναι 1 γραμμή. Εκτος αυτου η συνάρτηση που χρησιμοποιείς ειναι άχρηστη εκτος του συγκεκριμένου προτζεκτ γιατι δέχεται και εκτυπώνει μονο τιμές τύπου int. Εγω το περιπλέκω? αμα θες να την κάνεις γενικά χρησιμη θα μπορούσες να βάλεις generic δεικτες  . 

 

Τι με νοιάζει να κάτσω να κάνω sanity check αμα αυτο που πέρασε στην συνάρτηση ειναι ή δεν ειναι NULL? εγω θελω να δω απλα αμα αντιγράφηκαν σωστά. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν τον χρησιμοποιώ. Με printf σε κάθε σημειο που νομιζω οτι έχει θέμα προσπαθώ να δω τι πάει στραβά. 

 

Ειναι πολυ ανώτερος ο gdb απο αυτη την τεχνική? βεβαια μιλάμε για κώδικες μέχρι 200 γραμμές άντε 300 οχι παραπάνω.

 

Όχι δεν είναι. Σκέψου όμως ότι στην printf διάλεξες λάθος pointer. Αν τα πράγματα αρχίζουν και ξεφεύγουν, ο gdb θα είναι εκεί. Ποτέ δε λέει ψέμματα. Επίσης για σιγουριά έπρεπε να βάζεις κι ένα fflush(stdout), για προφανείς λόγους. Μπορεί κάτι να σου "σκάσει" πριν εκτυπωθούν τα δεδομένα. Τότε θα πιστεύεις πως ο κώδικας δεν έφτασε ποτέ στο σημείο της εκτύπωσης.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@migf1 ο ιδιος ειπα εξαρχής οτι τον έκανα λάθος τον κώδικα και αυτο το κατάλαβαν ολοι οκ :P

 

Αυτο που σου λέω εγω ειναι 1 γραμμή. Εκτος αυτου η συνάρτηση που χρησιμοποιείς ειναι άχρηστη εκτος του συγκεκριμένου προτζεκτ γιατι δέχεται και εκτυπώνει μονο τιμές τύπου int. Εγω το περιπλέκω? αμα θες να την κάνεις γενικά χρησιμη θα μπορούσες να βάλεις generic δεικτες  . 

 

Τι με νοιάζει να κάτσω να κάνω sanity check αμα αυτο που πέρασε στην συνάρτηση ειναι ή δεν ειναι NULL? εγω θελω να δω απλα αμα αντιγράφηκαν σωστά.

Περισσότερο χρόνο έφαγες να βρεις που έκανες το λάθος με την "μια" printf που έβαλες, από το να έγραφες μια συνάρτηση-τυφλοσούρτη 3 γραμμών. Δεν χρειάζεται να θυμάσαι καν δείκτες για μια τέτοια συνάρτηση. Αυτό σου λέω τόσην ώρα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@defacer: Εντάξει, αφού με τη C δεν μαθαίνει κανείς ούτε καλό (μη επαγγελματικό) προγραμματισμό, ούτε αλγοριθμική σκέψη

 

Δεν είπα όχι απλά κάτι τέτοιο, αλλά ούτε καν κάτι που να μοιάζει μ' αυτό. Δεν έχω ιδέα τι διάβασες.

Ειναι πολυ ανώτερος ο gdb απο αυτη την τεχνική? βεβαια μιλάμε για κώδικες μέχρι 200 γραμμές άντε 300 οχι παραπάνω.

 

Για μένα είναι τόσο ανώτερος (γενικά, ο debugger) όσο το να χρησιμοποιείς version control αντί για copy το source απο δω κι απο κει. Δεν υπάρχει επιστροφή.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ειναι πολυ ανώτερος ο gdb απο αυτη την τεχνική? βεβαια μιλάμε για κώδικες μέχρι 200 γραμμές άντε 300 οχι παραπάνω.

Ε ναι... Βασικα οχι. Το printf ειναι ενα output και τιποτα αλλο, το gdb ειναι εργαλειο debugger.

 

 

@ts Ασε τους δεικτες, και μαθε να δουλευεις με debugger.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν είπα όχι απλά κάτι τέτοιο, αλλά ούτε καν κάτι που να μοιάζει μ' αυτό. Δεν έχω ιδέα τι διάβασες.

...

 

Αυτό εδώ διάβασα...

 

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

 

και πιο συγκεκριμένα σε αυτό σου εδώ το post: http://www.insomnia.gr/topic/527020-ασκηση-c/#entry53157349

 

Επειδή λοιπόν αυτή η γενικότητα που έγραψες δεν μας κάνει την τιμή να μας εξηγήσει το αν "η αλγοριθμική σκέψη" περιλαμβάνει π.χ. και το "algorithmic efficiency", εγώ θεωρώ πως ως γενικότητα που είναι, το περιλαμβάνει (είθισται οι γενικότητες να περιλαμβάνουν αυτονόητα τις πιο εξειδικευμένες έννοιες).

 

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

 

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

 

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

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

 

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

 

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

 

Τελευταία ρητορική ερώτηση, κάποιος που μαθαίνει προγραμματισμό είναι ΟΚ αν μείνει στην "αλγοριθμική σκέψη" με την ρηχή εκδοχή της έννοιας όπως μας της κατάθεσες ή θα επωφεληθεί αν μάθει και 5 έστω πράγματα (από τα πολλά περισσότερα διαθέσιμα) περί internal representation;

 

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

 

ΥΓ2. Οι ρητορικές ερωτήσεις ΕΞ ΟΡΙΣΜΟΥ, ΔΕΝ περιμένουν και ΔΕΝ χρειάζονται απάντηση!

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τι είπα εγώ (Γιάννη τι κάνεις?)
 

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

 
Και τι απάντησες εσύ (κουκιά σπέρνω)
 

@defacer: Εντάξει, αφού με τη C δεν μαθαίνει κανείς [ούτε καλό (μη επαγγελματικό) προγραμματισμό] ούτε αλγοριθμική σκέψη, εγώ πάω να βάλω σε βαζάκι τα λουλουδάκια που μάζεψα σήμερα το πρωί... κρίμα είναι να μαραθούν τα καημένα από τώρα.

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

Επειδή λοιπόν αυτή η γενικότητα που έγραψες δεν μας κάνει την τιμή να μας εξηγήσει το αν "η αλγοριθμική σκέψη" περιλαμβάνει π.χ. και το "algorithmic efficiency", εγώ θεωρώ πως ως γενικότητα που είναι, το περιλαμβάνει (είθισται οι γενικότητες να περιλαμβάνουν αυτονόητα τις πιο εξειδικευμένες έννοιες).

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

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

 

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

 

Πρώτα απ' όλα στο "παράδειγμα" που φέρνεις συγκρίνεις μήλα με πορτοκάλια, και στη συνέχεια γενικά ταυτίζεις τη συγκεκριμένη έννοια τον pointer όπως τον αντιλαμβάνεται η C με την αφηρημένη έννοια του handle, η οποία είναι σαφώς χρήσιμη (επειδή είναι η πιο αφηρημένη εκδοχή, και στο χώρο της CS για το αφηρημένο ζούμε).

 

Αν θέλεις να χρησιμοποιήσεις μια linked list τότε αυτή υπάρχει και σε γλώσσες που δεν έχουν pointers. Δεν έχω την παραμικρή ιδέα για ποιό λόγο φαίνεται πως νομίζεις ότι π.χ. όσοι ξέρουν μόνο Java και C# ντε και καλά απαγορεύεται να χρησιμοποιήσουν τις linked lists που προσφέρονται εκεί ή είναι πολύ χαζοί για να το κάνουν.

 

Στο σενάριο που εξετάζεις εγώ προσωπικά θα έκανα την υλοποίηση σε μια high-level γλώσσα σε dt και θα έπινα καφέ όσο ο φιλαράκος με τους pointers θα έγραφε "τα διαδικαστικά", πράγμα που θα τον έκανε να φαίνεται πολύ άσχημος. Αν θέλεις να έρθεις στη θέση του, ας πάρουμε ένα πρόβλημα από π.χ. εδώ να το κάνεις εσύ σε C και γω σε C# και να συγκρίνουμε ευκολία υλοποίησης (και algorithmic complexity αν θέλεις παρόλο που δε νομίζω ότι θα σου αρέσει).

 

Τέλος, αν θέλεις να υλοποιήσεις μια linked list για να καταλάβεις πώς δουλεύει, μπορείς να το κάνεις μια χαρά χωρίς pointers (με "handles").

 

Αν θέλεις απλά να μαλώσεις, μίλα στην παλάμη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Για αυτό άλλωστε ΟΛΑ μα όλα τα βιβλία περί αλγόριθμων δεν ασχολούνται ούτε με αποδοτικότητα (efficiency) ή πολυπλοκότητα (complexity) ούτε με υλοποίηση (implementation).

 

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

 

Πρώτα απ' όλα στο "παράδειγμα" που φέρνεις συγκρίνεις μήλα με πορτοκάλια, και στη συνέχεια γενικά ταυτίζεις τη συγκεκριμένη έννοια τον pointer όπως τον αντιλαμβάνεται η C με την αφηρημένη έννοια του handle, η οποία είναι σαφώς χρήσιμη (επειδή είναι η πιο αφηρημένη εκδοχή, και στο χώρο της CS για το αφηρημένο ζούμε).

Τα μήλα είναι η "αλγοριθμική σκέψη" και τα πορτοκάλια η "αλγοριθμική αποδοτικότητα" να υποθέσουμε, ε; Η "αλγοριθμική υλοποίηση" (που βρίσκεται σε άμεση αλληλλοεξάρτηση με την "αλγοριθμική αποδοτικότητα") είναι να υποθέσουμε κάτι σαν να λέμε σαγκουίνια, δηλαδή μια ποικιλία πορτοκαλιών, αλλά πάντα άσχετη με τα μήλα "αλγοριθμική σκέψη", ε;

 

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

 

Ωραία πράματα μαθαίνουμε σε αυτό το φόρουμ.

 

Αν θέλεις να χρησιμοποιήσεις μια linked list τότε αυτή υπάρχει και σε γλώσσες που δεν έχουν pointers. Δεν έχω την παραμικρή ιδέα για ποιό λόγο φαίνεται πως νομίζεις ότι π.χ. όσοι ξέρουν μόνο Java και C# ντε και καλά απαγορεύεται να χρησιμοποιήσουν τις linked lists που προσφέρονται εκεί ή είναι πολύ χαζοί για να το κάνουν.

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

 

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

 

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

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

 

Τέλος, αν θέλεις να υλοποιήσεις μια linked list για να καταλάβεις πώς δουλεύει, μπορείς να το κάνεις μια χαρά χωρίς pointers (με "handles").

 

Αν θέλεις απλά να μαλώσεις, μίλα στην παλάμη.

Γιατί να καταλάβω πως δουλεύει; Εγώ νόμιζα πως είναι υπεραρκετή η "αλγοριθμική σκέψη" μου ότι πρέπει να προσθέτω τα νέα στοιχεία στην αρχή της (ποσώς με ενδιαφέρει πως θα υλοποιείται) λίστας. Π.χ. γιατί θέλω να έχω real-time ταξινομημένα αρχεία κατά ημερομηνία τελευταίας πρόσβασης. Διαλέγω στην τύχη μια υλοποίηση λίστας (εννοείται από τις έτοιμες, αυτό μας έλειπε να φτιάξω δικιά μου) και πάω για... καφέ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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