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

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

Δημοσ.

καλησπέρα παιδιά,

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

 

#include<stdio.h>

#include<string.h>

#define N 10 main()

{ int A[N],i,j,k=0,t=0;

char B[N][200],C[k][200],D[t][200];

for(i=0;i<N;i++){

printf("dwse to onoma tou %d politi :\n",i+1);

fflush(stdin);

gets(B);

fflush(stdin);

printf("dwse tin timi tou %d politi :\n",i+1);

scanf("%d",&A);}

for(i=0;i<N;i++){

if(A>=6000){

for(j=0;j<strlen(B);j++)

C[k][j]=B[j];

k=k+1;}

else {

for(j=0;j<strlen(B);j++)

D[t][j]=B[j];

t=t+1;}}

printf("oi upalliloi pou tha paroun 500 eurw einai :\n");

for(i=0;i<k;i++)

{ for(j=0;j<strlen(C);j++)

printf("%c",C[j]);

printf("\n");}

printf("oi upalliloi pou tha paroun 200 eurw einai :\n");

for(i=0;i<t;i++)

{ for(j=0;j<strlen(D);j++)

printf("%c",D[j]);

printf("\n");}

 

return 0; }  

Δημοσ.

Φιλε ο κωδικας σου δεν παλευεται με τίποτα να τον βαζεις μεσα σε tags για κωδικες και η στοιχιση ειναι κάκιστη. 

#include<stdio.h>
#include<string.h>
#define N 10
 
main()
{
int A[N] , i , j  ,k = 0 , t=0;
 
char B[N][200],C[k][200],D[t][200];
 
for(i=0;i<N;i++){
 
printf("dwse to onoma tou %d politi :\n",i+1);
fflush(stdin);
gets(B[i]);
fflush(stdin);
printf("dwse tin timi tou %d politi :\n",i+1);
scanf("%d",&A[i]);
 
}
 
for(i=0;i<N;i++){
 
if(A[i]>=6000)
{
 
for(j=0;j<strlen(B[i]);j++)
 
C[k][j]=B[i][j];
 
k=k+1;
}
else {
for(j=0;j<strlen(B[i]);j++)
D[t][j]=B[i][j];
t=t+1;}
}
printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
for(i=0;i<k;i++)
{
for(j=0;j<strlen(C[i]);j++)
 
printf("%c",C[i][j]);
printf("\n");
}
printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
for(i=0;i<t;i++)
 
{
for(j=0;j<strlen(D[i]);j++)
printf("%c",D[i][j]);
printf("\n");
}
 
return 0; 
}  

Καπως ανοιξε τωρα αλλα και παλι δεν καταλαβαινω και πολλα. 

Δημοσ.

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

 

αυτή είναι η άσκηση : Μια εταιρεία πληροφορικής αποφάσισε να δώσει «πριμ παραγωγικότητας» σε όλους τους πωλητές της (πλήθος πωλητών : 10) ενόψει των γιορτών των Χριστουγέννων. Αποφάσισε να δώσει από 500 € σε όσους πωλητές έκαναν τζίρο μεγαλύτερο από 6000 € τη χρονιά που πέρασε και από 200 € σε όλους τους υπόλοιπους. Να αναπτύξετε πρόγραμμα που θα διαβάζει τα ονόματα και τον τζίρο όλων των πωλητών της εταιρείας και θα τα αποθηκεύει σε κατάλληλους πίνακες. Στη συνέχεια θα δημιουργεί δυο νέους πίνακες με τα ονόματα των πωλητών που θα λάβουν από 500 € και εκείνων που θα λάβουν 200 € και θα εμφανίζει τα περιεχόμενα τους. 

 

δεν μου δίνεις να καταλάβω τι δεν κατάλαβες από τον κώδικα μου.. 

Δημοσ.

βασικα το ετρεξα για τρεις αυτο που ειδα ειναι οτι εμφανιζει τα 200 με τα 500 Ε μαζι συνεχομενα.

 

Θα το ξανακοιταξω το πρωι.

Δημοσ.

Το πρώτο πράγμα που πρέπει να κάνεις είναι να πας στο IDE που χρησιμοποιείς και να ενεργοποιήσεις τα Warnings του compiler. Plz μη μας πεις ότι στη σχολή χρησιμοποιείτε Dev-C++.

 

#include<stdio.h>
main()
Η δήλωση της main δεν είναι σωστή. Η main δεν δέχεται κανένα όρισμα (για την ώρα) και επιστρέφει int οπότε άλλαξε την σύμφωνα με αυτό.

 

	int A[N] , i , j  ,k = 0 , t=0;
	char B[N][200],C[k][200],D[t][200];
Πριν δει το πρόγραμμά σου ο compiler, το περιλαβαίνει ο preprocessor και αντικαθιστά ό,τι πρέπει όπως πχ τα #include και τα #define. Όπου δηλαδή έχεις βάλει N, ο compiler θα δει τον αριθμό 10 έτσι το int A[N] είναι σωστό γιατί ο compiler θα δει δήλωση A[10]. Η δήλωση όμως των C, D έχει τις μεταβλητές k, t αντί για σταθερές το οποίο είναι λάθος. Για να είμαι πιο σωστός, ανάλογα με ποιον compiler χρησιμοποιείς ίσως να υποστηρίζει μια μαγκιά που λέγεται Variable Length Arrays δηλαδή πίνακες που χρησιμοποιούν μεταβλητές στην διάσταση. Ακόμη και έτσι όμως, έδωσες την τιμή 0 στο k και στο t οπότε τι μέγεθος θα έχουν οι πίνακες ?

 

Με λίγα λόγια λοιπόν, ή μπορείς να χρησιμοποιήσεις μεταβλητές αλλά πριν τη δήλωση του πίνακα πρέπει να έχουν την τιμή που πρέπει ή μπορείς να δηλώσεις τους C, D με διάσταση N όπως κάνεις στον B.

 

	for(i=0;i<N;i++){
		printf("dwse to onoma tou %d politi :\n",i+1);
		fflush(stdin);
		gets(B[i]);
		fflush(stdin);
		printf("dwse tin timi tou %d politi :\n",i+1);
		scanf("%d",&A[i]);
	}
Το fflush(stdin) είναι λάθος με την έννοια ότι παίζει μόνο σε Windows. Αν δεν σε πειράζει αυτό μπορείς να το κρατήσεις, αλλά εκεί που τα έχεις βάλει δεν κάνουν τίποτα. Ίσως μια φορά με το scanf να βοηθούσε. Επίσης η gets δεν πρέπει να χρησιμοποιείται αλλά για το πλαίσιο αυτής της άσκησης δεν πειράζει.

 

	 
		if(A[i]>=6000)
		{
			 
			for(j=0;j<strlen(B[i]);j++)
				 
				C[k][j]=B[i][j];
			 
			k=k+1;
		}
		else {
			for(j=0;j<strlen(B[i]);j++)
				D[t][j]=B[i][j];
			t=t+1;}
Εδώ αντιγράφεις το όνομα των υπαλλήλων στον εκάστοτε πίνακα ? Όπως υπάρχει η strlen και η gets στις οποίες βάζεις κατευθείαν το B δηλαδή το "string" σου, έτσι υπάρχουν και συναρτήσεις που αντιγράφουν κατευθείαν ένα "string" όπως πχ είναι η strcpy (η οποία και αυτή δεν είναι καλό να χρησιμοποιείται αλλά για την ώρα δεν πειράζει). Αν το αφήσεις όπως είναι, έχε υπόψην ότι η strlen επιστρέφει τον αριθμό χαρακτήρων οπότε ο κώδικας σου δεν αντιγράφει το χαρακτήρα τερματισμού '\0'. Μπορεί όταν πας να τυπώσεις το όνομα αντί για George να τυπωθεί Georgefhsjkhfdjkdgghvkwlf.

 

		for(j=0;j<strlen(C[i]);j++)
			 
			printf("%c",C[i][j]);
		printf("\n");
Ομοίως με πριν, αντί να εμφανίσεις ένα-ένα χαρακτήρα με for και "%c", η printf παρέχει το format "%s" το οποίο με την μία εμφανίζει όλο το "string".
Δημοσ.

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

...

δεν μου δίνεις να καταλάβω τι δεν κατάλαβες από τον κώδικα μου..

 

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

 

Για το α) υπάρχουν διάφορα στάνταρ και διάφορα utilities που αυτοματοποιούν τη διαδικασία (source code beautifiers, π.χ. astyle, uncrustify, indent, κλπ) καθώς και πολλά IDE με code beautifying υποστήριξη (είτε εγγενώς, είτε χρησιμοποιώντας κάποιο από τα έτοιμα utilities). Υπάρχουν επίσης και online τέτοιες υπηρεσίες, αλλά το καλύτερο IMHO είναι να γράφεις τον κώδικά σου από την αρχή σωστά στοιχισμένο με όποιο στάνταρ έχεις επιλέξει ή σου έχει υποδειχθεί.

 

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

 

Σε ότι αφορά τα σχόλια, τα πράγματα δεν είναι τόσο στανταρισμένα, αλλά σε γενικές γραμμές είναι καλό να αποφεύγονται όταν ο κώδικας είναι αυτονόητος ή περιγραφικός από μόνος του, και επιβάλλεται να μπαίνουν όταν ο κώδικας είναι πολύπλοκος ή χρησιμοποιεί τίποτα περίεργα κόλπα ή/και hacks.

 

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

 

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

 

/*
 * Βάλε εδώ σχόλια με μια γενική περιγραφή του τι κάνει το πρόγραμμά σου
 */

#include <stdio.h>
#include <string.h>				// γράψε για ποιες συναρτήσεις συμπεριλαμβάνεις αυτό το αρχείο

#define N 10					// γράψε εν συντομία τι απεικονίζει το Ν

main()
{
	int A[N];				// γράψε εν συντομία τι απεικονίζει ο πίνακας Α[Ν]
	int i,j, k=0,t=0;			// γράψε εν συντομία τι απεικονίζουν οι i,j, k,t
	char B[N][200], C[k][200], D[t][200];	// γράψε εν συντομία τι απεικονίζουν οι πίνακες αυτοί

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	for (i=0; i < N; i++ ) {
		printf("dwse to onoma tou %d politi :\n", i+1);
		fflush(stdin);
		gets(B[i]);
		fflush(stdin);

		printf("dwse tin timi tou %d politi :\n", i+1);
		scanf("%d", &A[i]);
	}

	// γράψε εν συντομία τι κάνει η λούπα που ακολουθεί
	for (i=0; i < N; i++) {
		if ( A[i] >= 6000 ) {
			for (j=0; j < strlen(B[i]); j++)
				C[k][j] = B[i][j];
			k = k+1;
		}
		else {
			for (j=0; j < strlen(B[i]); j++)
				D[t][j] = B[i][j];
			t = t+1;
		}
	}

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
	for (i=0; i < k; i++) {
		for (j=0; j < strlen(C[i]); j++)
			printf("%c", C[i][j]);
		printf("\n");
	}

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
	for (i=0; i < t; i++) {
		for (j=0; j < strlen(D[i]); j++)
			printf("%c",D[i][j]);
		printf("\n");
	}

	return 0;
} 
Κάτι τέτοιο κατά την άποψή μου έχει δραματικά περισσότερες πιθανότητες να προσελκύσει κάποιον να ασχοληθεί με τον κώδικα και να σε βοηθήσει.
  • Like 2
Δημοσ.

Το πρώτο πράγμα που πρέπει να κάνεις είναι να πας στο IDE που χρησιμοποιείς και να ενεργοποιήσεις τα Warnings του compiler. Plz μη μας πεις ότι στη σχολή χρησιμοποιείτε Dev-C++.

 

#include<stdio.h>
main()
Η δήλωση της main δεν είναι σωστή. Η main δεν δέχεται κανένα όρισμα (για την ώρα) και επιστρέφει int οπότε άλλαξε την σύμφωνα με αυτό.

 

	int A[N] , i , j  ,k = 0 , t=0;
	char B[N][200],C[k][200],D[t][200];
Πριν δει το πρόγραμμά σου ο compiler, το περιλαβαίνει ο preprocessor και αντικαθιστά ό,τι πρέπει όπως πχ τα #include και τα #define. Όπου δηλαδή έχεις βάλει N, ο compiler θα δει τον αριθμό 10 έτσι το int A[N] είναι σωστό γιατί ο compiler θα δει δήλωση A[10]. Η δήλωση όμως των C, D έχει τις μεταβλητές k, t αντί για σταθερές το οποίο είναι λάθος. Για να είμαι πιο σωστός, ανάλογα με ποιον compiler χρησιμοποιείς ίσως να υποστηρίζει μια μαγκιά που λέγεται Variable Length Arrays δηλαδή πίνακες που χρησιμοποιούν μεταβλητές στην διάσταση. Ακόμη και έτσι όμως, έδωσες την τιμή 0 στο k και στο t οπότε τι μέγεθος θα έχουν οι πίνακες ?

 

Με λίγα λόγια λοιπόν, ή μπορείς να χρησιμοποιήσεις μεταβλητές αλλά πριν τη δήλωση του πίνακα πρέπει να έχουν την τιμή που πρέπει ή μπορείς να δηλώσεις τους C, D με διάσταση N όπως κάνεις στον B.

 

	for(i=0;i<N;i++){
		printf("dwse to onoma tou %d politi :\n",i+1);
		fflush(stdin);
		gets(B[i]);
		fflush(stdin);
		printf("dwse tin timi tou %d politi :\n",i+1);
		scanf("%d",&A[i]);
	}
Το fflush(stdin) είναι λάθος με την έννοια ότι παίζει μόνο σε Windows. Αν δεν σε πειράζει αυτό μπορείς να το κρατήσεις, αλλά εκεί που τα έχεις βάλει δεν κάνουν τίποτα. Ίσως μια φορά με το scanf να βοηθούσε. Επίσης η gets δεν πρέπει να χρησιμοποιείται αλλά για το πλαίσιο αυτής της άσκησης δεν πειράζει.

 

	 
		if(A[i]>=6000)
		{
			 
			for(j=0;j<strlen(B[i]);j++)
				 
				C[k][j]=B[i][j];
			 
			k=k+1;
		}
		else {
			for(j=0;j<strlen(B[i]);j++)
				D[t][j]=B[i][j];
			t=t+1;}
Εδώ αντιγράφεις το όνομα των υπαλλήλων στον εκάστοτε πίνακα ? Όπως υπάρχει η strlen και η gets στις οποίες βάζεις κατευθείαν το B δηλαδή το "string" σου, έτσι υπάρχουν και συναρτήσεις που αντιγράφουν κατευθείαν ένα "string" όπως πχ είναι η strcpy (η οποία και αυτή δεν είναι καλό να χρησιμοποιείται αλλά για την ώρα δεν πειράζει). Αν το αφήσεις όπως είναι, έχε υπόψην ότι η strlen επιστρέφει τον αριθμό χαρακτήρων οπότε ο κώδικας σου δεν αντιγράφει το χαρακτήρα τερματισμού '\0'. Μπορεί όταν πας να τυπώσεις το όνομα αντί για George να τυπωθεί Georgefhsjkhfdjkdgghvkwlf.

 

		for(j=0;j<strlen(C[i]);j++)
			 
			printf("%c",C[i][j]);
		printf("\n");
Ομοίως με πριν, αντί να εμφανίσεις ένα-ένα χαρακτήρα με for και "%c", η printf παρέχει το format "%s" το οποίο με την μία εμφανίζει όλο το "string".

 

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

Σε ευχαριστώ πολύ για την βοήθεια σου!!:)      

 

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

 

Για το α) υπάρχουν διάφορα στάνταρ και διάφορα utilities που αυτοματοποιούν τη διαδικασία (source code beautifiers, π.χ. astyle, uncrustify, indent, κλπ) καθώς και πολλά IDE με code beautifying υποστήριξη (είτε εγγενώς, είτε χρησιμοποιώντας κάποιο από τα έτοιμα utilities). Υπάρχουν επίσης και online τέτοιες υπηρεσίες, αλλά το καλύτερο IMHO είναι να γράφεις τον κώδικά σου από την αρχή σωστά στοιχισμένο με όποιο στάνταρ έχεις επιλέξει ή σου έχει υποδειχθεί.

 

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

 

Σε ότι αφορά τα σχόλια, τα πράγματα δεν είναι τόσο στανταρισμένα, αλλά σε γενικές γραμμές είναι καλό να αποφεύγονται όταν ο κώδικας είναι αυτονόητος ή περιγραφικός από μόνος του, και επιβάλλεται να μπαίνουν όταν ο κώδικας είναι πολύπλοκος ή χρησιμοποιεί τίποτα περίεργα κόλπα ή/και hacks.

 

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

 

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

 

/*
 * Βάλε εδώ σχόλια με μια γενική περιγραφή του τι κάνει το πρόγραμμά σου
 */

#include <stdio.h>
#include <string.h>				// γράψε για ποιες συναρτήσεις συμπεριλαμβάνεις αυτό το αρχείο

#define N 10					// γράψε εν συντομία τι απεικονίζει το Ν

main()
{
	int A[N];				// γράψε εν συντομία τι απεικονίζει ο πίνακας Α[Ν]
	int i,j, k=0,t=0;			// γράψε εν συντομία τι απεικονίζουν οι i,j, k,t
	char B[N][200], C[k][200], D[t][200];	// γράψε εν συντομία τι απεικονίζουν οι πίνακες αυτοί

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	for (i=0; i < N; i++ ) {
		printf("dwse to onoma tou %d politi :\n", i+1);
		fflush(stdin);
		gets(B[i]);
		fflush(stdin);

		printf("dwse tin timi tou %d politi :\n", i+1);
		scanf("%d", &A[i]);
	}

	// γράψε εν συντομία τι κάνει η λούπα που ακολουθεί
	for (i=0; i < N; i++) {
		if ( A[i] >= 6000 ) {
			for (j=0; j < strlen(B[i]); j++)
				C[k][j] = B[i][j];
			k = k+1;
		}
		else {
			for (j=0; j < strlen(B[i]); j++)
				D[t][j] = B[i][j];
			t = t+1;
		}
	}

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
	for (i=0; i < k; i++) {
		for (j=0; j < strlen(C[i]); j++)
			printf("%c", C[i][j]);
		printf("\n");
	}

	// επειδή αυτή η λούπα είναι προφανές τι κάνει, μπορείς να μη βάλεις σχόλιο εδώ
	// αν δεν είσαι σίγουρος ότι είναι προφανές, τότε βάλε σύντομο σχόλιο
	printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
	for (i=0; i < t; i++) {
		for (j=0; j < strlen(D[i]); j++)
			printf("%c",D[i][j]);
		printf("\n");
	}

	return 0;
} 
Κάτι τέτοιο κατά την άποψή μου έχει δραματικά περισσότερες πιθανότητες να προσελκύσει κάποιον να ασχοληθεί με τον κώδικα και να σε βοηθήσει.

 

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

σε ευχαριστώ πολύ για την βοήθεια και τις συμβουλές σου!!:)

Δημοσ.

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

σε ευχαριστώ πολύ για την βοήθεια και τις συμβουλές σου!! :)

Το Code::Blocks είναι από τις καλύτερες επιλογές που θα μπορούσε να κάνει η σχολή σου, και της αξίζουν συγχαρητήρια για αυτό! Παρόλο που σπάνια το χρησιμοποιώ, το έχω εγκατεστημένο (έκδοση 10.05) κι από ότι βλέπω υπάρχει ένα plugin-beautifier που χρησιμοποιεί το AStyle, ονόματι Source code formatter (AStyle). Μπορείς να το ρυθμίσεις από το μενού: Settings -> Editor [source formatter]. Δεν θυμάμαι αν έρχεται από μαμά με την εγκατάσταση του Code::Blocks ή αν το έχω βάλει εγώ εκ των υστέρων, αλλά ίσως αξίζει να το κοιτάξεις.

 

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

 

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

 

Ένας τρόπος που έχω βρει να δουλεύει σχεδόν πάντα στο παρόν φόρουμ, είναι:

 

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

2. γράφω χειροκίνητα ή κάνω επικόλληση τον κώδικά από το IDE μου

3. περικλείω τον κώδικα σε code-tags, δηλαδή [ code]κώδικας[ /code] (χωρίς κενά μέσα στις αγκύλες, εδώ τα έβαλα για να μη τα πιάσει ως code-tags

 

Αυτά περί στοίχισης και διατήρησής της στο παρόν φόρουμ.

 

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

 

Γκούγκλαρέ το και θα βρεις πολλά και διάφορα, πως π.χ.

 

1. Linux Kernel Coding Style

2. GNU Coding Standards

3. Proposed ANSI C Conding Standards

4. GTK+ Coding Style

 

Ειδικά για κώδικες σχολής, προσωπικά θα επέλεγα το 3ο από τα παραπάνω.

 

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

 

Κώδικας:

 

 

/*
 Εκφώνηση Άσκησης:

 Μια εταιρεία πληροφορικής αποφάσισε να δώσει «πριμ παραγωγικότητας» σε όλους
 τους πωλητές της (πλήθος πωλητών: 10) ενόψει των γιορτών των Χριστουγέννων.
 Αποφάσισε να δώσει από 500€ σε όσους πωλητές έκαναν τζίρο μεγαλύτερο από 6000€
 τη χρονιά που πέρασε και από 200 € σε όλους τους υπόλοιπους.

 Να αναπτύξετε πρόγραμμα που θα διαβάζει τα ονόματα και τον τζίρο όλων των
 πωλητών της εταιρείας και θα τα αποθηκεύει σε κατάλληλους πίνακες.

 Στη συνέχεια θα δημιουργεί δυο νέους πίνακες με τα ονόματα των πωλητών που θα
 λάβουν από 500€ και εκείνων που θα λάβουν 200€ και θα εμφανίζει τα περιεχόμενα
 τους.
 */

#include <stdio.h>
#include <string.h>				// για strlen()

#define MAX_PWLHTES	10			// περιγραφικό όνομα σταθεράς (δεν χρειάζεται σχόλιο)
#define MAX_NAMELEN	(199+1)			// μέγιστο μήκος ονόματος οποιουδήποτε πωλητή

main()
{
	char onomata[MAX_PWLHTES][MAX_NAMELEN];		// τα ονόματα όλων των πωλητών
	int  tziroi[MAX_PWLHTES];			// οι τζίροι όλων των πωλητών
	int  i, j;					// στάνταρ ονόματα μετρητών λούπας (δεν χρειάζεται σχόλιο)
	int  maxPrims500 = 0				// μέγιστο πλήθος πωλητών που θα πάρουν πριμ 500€
	char prims500[maxPrims500][MAX_NAMELEN];	// τα ονόματα όσων πωλητών θα πάρουν πριμ 500€
	int  maxPrims200 = 0;				// μέγιστο πλήθος πωλητών που θα πάρουν πριμ 200€
	char prims200[maxPrims200][MAX_NAMELEN];	// τα ονοματα όσων πωλητών θα πάρουν πριμ 200€

	// ανάγνωση & αποθήκευση ονομάτων και τζίρων όλων των πωλητών
	for (i=0; i < MAX_PWLHTES; i++ ) {
		printf( "dwse to onoma tou %doy pwlhth:\n", i+1 );
		fflush( stdin );
		gets( onomata[i] );
		fflush( stdin );

		printf( "dwse tοn tziro tou %doy politi:\n", i+1 );
		scanf( "%d", &tziroi[i] );
	}

	// γέμισμα των πινάκων πριμοδότησης με ονόματα πωλητών, ανάλογα τον τζίρο τους
	for (i=0; i < MAX_PWLHTES; i++) {
		if ( tziroi[i] >= 6000 ) {
			for (j=0; j < strlen( onomata[i] ); j++)
				prims500[maxPrims500][j] = onomata[i][j];
			maxPrims500 = maxPrims500 + 1;
		}
		else {
			for (j=0; j < strlen( onomata[i] ); j++)
				prims200[maxPrims200][j] = onomata[i][j];
			maxPrims200 = maxPrims200 + 1;
		}
	}

	// εκτύπωση των πινάκων πριμοδότησης

	printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
	for (i=0; i < maxPrims500; i++) {
		for (j=0; j < strlen( prims500[i] ); j++)
			printf( "%c", prims500[i][j] );
		printf("\n");
	}

	printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
	for (i=0; i < maxPrims200; i++) {
		for (j=0; j < strlen( prims200[i] ); j++)
			printf( "%c", prims200[i][j] );
		printf("\n");
	}

	return 0;
} 

 

Δημοσ.

Το Code::Blocks είναι από τις καλύτερες επιλογές που θα μπορούσε να κάνει η σχολή σου, και της αξίζουν συγχαρητήρια για αυτό! Παρόλο που σπάνια το χρησιμοποιώ, το έχω εγκατεστημένο (έκδοση 10.05) κι από ότι βλέπω υπάρχει ένα plugin-beautifier που χρησιμοποιεί το AStyle, ονόματι Source code formatter (AStyle). Μπορείς να το ρυθμίσεις από το μενού: Settings -> Editor [source formatter]. Δεν θυμάμαι αν έρχεται από μαμά με την εγκατάσταση του Code::Blocks ή αν το έχω βάλει εγώ εκ των υστέρων, αλλά ίσως αξίζει να το κοιτάξεις.

 

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

 

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

 

Ένας τρόπος που έχω βρει να δουλεύει σχεδόν πάντα στο παρόν φόρουμ, είναι:

 

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

2. γράφω χειροκίνητα ή κάνω επικόλληση τον κώδικά από το IDE μου

3. περικλείω τον κώδικα σε code-tags, δηλαδή [ code]κώδικας[ /code] (χωρίς κενά μέσα στις αγκύλες, εδώ τα έβαλα για να μη τα πιάσει ως code-tags

 

Αυτά περί στοίχισης και διατήρησής της στο παρόν φόρουμ.

 

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

 

Γκούγκλαρέ το και θα βρεις πολλά και διάφορα, πως π.χ.

 

1. Linux Kernel Coding Style

2. GNU Coding Standards

3. Proposed ANSI C Conding Standards

4. GTK+ Coding Style

 

Ειδικά για κώδικες σχολής, προσωπικά θα επέλεγα το 3ο από τα παραπάνω.

 

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

 

Κώδικας:

 

 

/*
 Εκφώνηση Άσκησης:

 Μια εταιρεία πληροφορικής αποφάσισε να δώσει «πριμ παραγωγικότητας» σε όλους
 τους πωλητές της (πλήθος πωλητών: 10) ενόψει των γιορτών των Χριστουγέννων.
 Αποφάσισε να δώσει από 500€ σε όσους πωλητές έκαναν τζίρο μεγαλύτερο από 6000€
 τη χρονιά που πέρασε και από 200 € σε όλους τους υπόλοιπους.

 Να αναπτύξετε πρόγραμμα που θα διαβάζει τα ονόματα και τον τζίρο όλων των
 πωλητών της εταιρείας και θα τα αποθηκεύει σε κατάλληλους πίνακες.

 Στη συνέχεια θα δημιουργεί δυο νέους πίνακες με τα ονόματα των πωλητών που θα
 λάβουν από 500€ και εκείνων που θα λάβουν 200€ και θα εμφανίζει τα περιεχόμενα
 τους.
 */

#include <stdio.h>
#include <string.h>				// για strlen()

#define MAX_PWLHTES	10			// περιγραφικό όνομα σταθεράς (δεν χρειάζεται σχόλιο)
#define MAX_NAMELEN	(199+1)			// μέγιστο μήκος ονόματος οποιουδήποτε πωλητή

main()
{
	char onomata[MAX_PWLHTES][MAX_NAMELEN];		// τα ονόματα όλων των πωλητών
	int  tziroi[MAX_PWLHTES];			// οι τζίροι όλων των πωλητών
	int  i, j;					// στάνταρ ονόματα μετρητών λούπας (δεν χρειάζεται σχόλιο)
	int  maxPrims500 = 0				// μέγιστο πλήθος πωλητών που θα πάρουν πριμ 500€
	char prims500[maxPrims500][MAX_NAMELEN];	// τα ονόματα όσων πωλητών θα πάρουν πριμ 500€
	int  maxPrims200 = 0;				// μέγιστο πλήθος πωλητών που θα πάρουν πριμ 200€
	char prims200[maxPrims200][MAX_NAMELEN];	// τα ονοματα όσων πωλητών θα πάρουν πριμ 200€

	// ανάγνωση & αποθήκευση ονομάτων και τζίρων όλων των πωλητών
	for (i=0; i < MAX_PWLHTES; i++ ) {
		printf( "dwse to onoma tou %doy pwlhth:\n", i+1 );
		fflush( stdin );
		gets( onomata[i] );
		fflush( stdin );

		printf( "dwse tοn tziro tou %doy politi:\n", i+1 );
		scanf( "%d", &tziroi[i] );
	}

	// γέμισμα των πινάκων πριμοδότησης με ονόματα πωλητών, ανάλογα τον τζίρο τους
	for (i=0; i < MAX_PWLHTES; i++) {
		if ( tziroi[i] >= 6000 ) {
			for (j=0; j < strlen( onomata[i] ); j++)
				prims500[maxPrims500][j] = onomata[i][j];
			maxPrims500 = maxPrims500 + 1;
		}
		else {
			for (j=0; j < strlen( onomata[i] ); j++)
				prims200[maxPrims200][j] = onomata[i][j];
			maxPrims200 = maxPrims200 + 1;
		}
	}

	// εκτύπωση των πινάκων πριμοδότησης

	printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
	for (i=0; i < maxPrims500; i++) {
		for (j=0; j < strlen( prims500[i] ); j++)
			printf( "%c", prims500[i][j] );
		printf("\n");
	}

	printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
	for (i=0; i < maxPrims200; i++) {
		for (j=0; j < strlen( prims200[i] ); j++)
			printf( "%c", prims200[i][j] );
		printf("\n");
	}

	return 0;
} 

 

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

(είμαι πρώτο εξάμηνο δεν γνωρίζω και πολλά για τα εκπαιδευτικά προγράμματα..αλλά θα κοιτάξω το AStyle,το οποίο μου ανέφερες :) )

 

#include<stdio.h>
#include<string.h>
#define N 10
int main()
{
    int A[N],i,j,k=0,t=0;
    char B[N][200],C[N][200],D[N][200];
    for(i=0;i<N;i++){
        printf("dwse to onoma tou %d politi :\n",i+1);
        fflush(stdin);
        gets(B[i]);
        fflush(stdin);
        printf("dwse tin timi tou %d politi :\n",i+1);
        scanf("%d",&A[i]);}
    for(i=0;i<N;i++){
        if(A[i]>6000){
               strcpy(C[k],B[i]);
               k=k+1;//k einai i metavliti pou mas dixnei posoi ipalliloi tha exoun panw apo 6000 tziro//
               }
        else{
            strcpy(D[t],B[i]);
            t=t+1;}}//t einai i metavliti pou mas dixnei posoi ipalliloi tha exoun katw apo 6000 tziro//
    printf("oi upalliloi pou tha paroun 500 eurw einai :\n");
    for(j=0;j<k;j++){
            printf("%s",C[j]);
            printf("\n");}
    printf("oi upalliloi pou tha paroun 200 eurw einai :\n");
    for(i=0;i<t;i++){
            printf("%s",D[i]);
            printf("\n");}



    return 0;
} 
Δημοσ.

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

(είμαι πρώτο εξάμηνο δεν γνωρίζω και πολλά για τα εκπαιδευτικά προγράμματα..αλλά θα κοιτάξω το AStyle,το οποίο μου ανέφερες :) )

 

 

#include<stdio.h>
    int A[N],i,j,k=0,t=0;
    char B[N][200],C[N][200],D[N][200];
    for(i=0;i<N;i++){
        scanf("%d",&A[i]);}

    for(i=0;i<N;i++){
        if(A[i]>6000){
               k=k+1;//k einai i metavliti pou mas dixnei posoi ipalliloi tha exoun panw apo 6000 tziro//
               }
        else{
            strcpy(D[t],B[i]);
            t=t+1;}}//t einai i metavliti pou mas dixnei posoi ipalliloi tha exoun katw apo 6000 tziro//

 

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

 

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

 

Είθισται το #include με το header file να έχουν κενό ανάμεσα. Επίσης κενό μπαίνει μετά από το κόμμα, πριν την αγκύλη, κτλ. Τα c++ σχόλια έχουν ένα αριθμό κενών πριν. Η αγκύλη κλεισίματος στοιχίζεται με τη δήλωση στην οποία αναφέρεται, και πολλά άλλα που μπορείς να δεις στο παραπάνω link.

 

Δηλαδή ο κώδικάς σου θα ήταν πιο όμορφος ως:

#include <stdio.h>

    int A[N], i, j, k = 0, t = 0;
    char B[N][200], C[N][200], D[N][200];

    for(i = 0; i < N; i++) {
        if(A[i] > 6000) {
               k = k+1;    // k einai i metavliti pou mas dixnei posoi ipalliloi tha exoun panw apo 6000 tziro//
        }
    }
Καλό είναι να υιοθετήσεις ένα καλό στυλ γραψίματος αλλά πιο σημαντικό είναι αυτό που σου είπε ο migf1 για τις μεταβλητές, κτλ. Ένα περιγραφικό όνομα βοηθάει να καταλάβεις τι κάνει ο κώδικας σε αντίθεση με τα k, t, B, C , D. Επίσης είθισται να ομαδοποιούνται δηλώσεις μεταβλητών μόνο όταν σχετίζονται μεταξύ τους ή πραγματοποιούν την ίδια εργασία.

 

Δηλαδή το

int A[N], B[N][200], i, j, foo, bar, κτλ;
είναι πιο βολικό αν γραφτεί

int A[N], B[N][200];  // οι πίνακες των υπαλλήλων
int i, j;             // counters για loops
int foo, bar;         // μεταβλητές για την Χ δουλειά
Δημοσ.

θα το κοιτάξω να διορθώσω τον τρόπο γραφείς όπως μου είπες..γιατί έτσι θα προκαλεί ποιο πολύ ενδιαφέρον για τον αναγνώστη.Όσον αφορά τα σχόλια θα τα γράφω με αυτόν τον τρόπο που έγραψες παραπάνω . :)

  • Like 1
Δημοσ.

θα το κοιτάξω να διορθώσω τον τρόπο γραφείς όπως μου είπες..γιατί έτσι θα προκαλεί ποιο πολύ ενδιαφέρον για τον αναγνώστη.Όσον αφορά τα σχόλια θα τα γράφω με αυτόν τον τρόπο που έγραψες παραπάνω . :)

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

 

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

Δημοσ.

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

 

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

με συγχωρείς για το παραπάνω..πάτησα κάτι λάθος.

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

  • Like 1

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...