Σελίδα 1 από 1

Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 4:10 pm
από kostassite
Λοιπον δε ξέρω αν είναι λογικό αλλα νομίζω οτι θα βοηθήσει αρκετα.
Αρχικα να αναφέρω οτι μόλις ψιλοξεκίνησα με το προγραμματισμό σε C οπότε έχω πολλά να μάθω.
Αυτό που παρατήρησα είναι οτι ενω τα προγράμματα που φτιάχνω δουλεύουν, τα φτίαχνω πολυ πολύπλοκα σε απλα πράγματα όπως είναι το δίαβασμα των δεδομενων.
Παράδειγμα αυτό που υπέβαλα στο πδπ για τη α'φάση
Ο τρόπος που διάβαζα τα δεδομένα ήταν ανώμαλος :D και το κατάλαβα όταν ειδα τις υποβολές των υπολοίπων
Αυτο που θελω να προτείνω είναι να στείλετε εδώ κάποια προγράμματα που έχετε φτιάξει οπότε να δίνετε η δυνατότητα σε νέους να μαθαίνουν(καλύτερα τα προγράμματα να μην είναι απο hellenico κλπ για ευνόητους λόγους). Επίσης υπάρχει καπου(website) που να δίνει έτοιμα προγράμματα ώστε να μάθω?

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

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

#include <stdio.h>
#include <stdlib.h>
int compare (const int * a,const int * b) 
{
	if (*a==*b)
		return 0;
	else
		if (*a > *b)
			return -1;
		else
			return 1;
}
main()
{
	FILE *in,*out;
	in = fopen("hydrogen.in","r");
	out = fopen("hydrogen.out","w");	
	char c,oneword[100000];
	int i=0,j,k,temp,temp2,arvlavon=0,flag=5,allparts,partn[1000001][2];
	
	do {
		c = fscanf(in,"%s",oneword);
		if (c != EOF){
			
			if (flag == 5) {
				allparts=atoi(&oneword[0]);
				flag=0;
			}				 
			else if (flag == 0) {
				partn[i][1]=atoi(&oneword[0]);
				flag++;
			}else if (flag == 1) {
				partn[i][0]=atoi(&oneword[0]);
				flag--;
				i++;
			}
			
		}
	} while (c != EOF);
	fclose(in);
	for (i=0; i<=allparts; i++) {
		if (partn[i][0]!=0) {
			arvlavon++;
		}
	}
	
	fprintf(out,"%i\n",arvlavon); //Eixan vlavi 

	

		qsort (partn, allparts, 2*sizeof(int), compare);
	
	for (i=0; i<=arvlavon; i++) {
		i--;
		temp=partn[i][0];
		flag=0;
			do {
				flag++;
				i++;
			} while (partn[i][0]==temp);
		for (j=i-flag;j<=i; j++) {
			for (k=i-flag;k<=i; k++) {
				if ((partn[k+1][1] < partn[k][1])&&(partn[k+1][0]==temp)) {
					temp2 = partn[k][1];
					partn[k][1] = partn[k+1][1];
					partn[k+1][1]=temp2;
				}
		}
	}
	}
	
	for (j=0; j<arvlavon; j++) {
		fprintf(out,"%i\n",partn[j][1]);
	 }
	fclose(out);
}
απλά δείτε το τρόπο που διαβάζω τα δεδομένα

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 9:18 pm
από chris
Ο :twisted: thetrojan 01 :twisted: θα έλεγε:
"Γράφε όμορφο κώδικα :evil: !"

Ο τρόπος που διαβάζεις τα δεδομένα είναι πράγματι αρκετά πολύπλοκος... Όταν σου δίνουν τον αριθμό των στοιχείων που έχει το αρχείο, απλά ένα fscanf μέσα σε ένα for αρκεί.

Επίσης, η qsort της stl που χρησιμοποιείς μπορεί να σορτάρει και δισδιάστατο πίνακα χρησιμοποιώντας structs (δες μερικές λύσεις στο ανάλογο θέμα, αρκετές έχουν structs) και με λίγες αλλαγές στην compare. Έτσι θα κέρδιζες πολύ χρόνο!

Ίσως το σαββατοκύριακο να ανεβάσω κανένα πρόγραμμα...

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 9:34 pm
από compileGuy
Αυτή η πρόταση που θέτεις (έχεις δίκιο για την έκθεση :lol: ) είναι πολύ καλή αλλα δεν νομίζω πως θα μπορούσε ο καθένας να πετάει ένα πρόγραμμα εδώ και να λέει: "Να η λύση του τάδε προβλήματος ... " . Ίσως θα μπορούσε ο καθένας που έχει πρόβλημα με κάποιο πρόγραμμα που γράφει να το ποστάρει ( σε αυτό ή άλλο thread ) και να γίνεται μια εποικοδομητική συζήτηση για το πρόβλημα είτε με προτάσεις είτε με κώδικα και παραδείγματα.

:arrow: Just an idea ;)

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 10:09 pm
από kostassite
compileGuy έγραψε:Αυτή η πρόταση που θέτεις (έχεις δίκιο για την έκθεση :lol: ) είναι πολύ καλή αλλα δεν νομίζω πως θα μπορούσε ο καθένας να πετάει ένα πρόγραμμα εδώ και να λέει: "Να η λύση του τάδε προβλήματος ... " . Ίσως θα μπορούσε ο καθένας που έχει πρόβλημα με κάποιο πρόγραμμα που γράφει να το ποστάρει ( σε αυτό ή άλλο thread ) και να γίνεται μια εποικοδομητική συζήτηση για το πρόβλημα είτε με προτάσεις είτε με κώδικα και παραδείγματα.

:arrow: Just an idea ;)
Κοιτα να δείς, ο τρόπος που έχω μάθει προγραμματισμό είναι ανεφ διδασκάλου. οποτε γράφω οτι μου έρχετε και απλα το κάνω να δουλεύει. Μαθαίνω μαζι με το φίλο μου τον google δηλαδή διαβάζω άλλα προγράμματα και προσπαθώ να μπω στο κλίμα στο πως γίνονται κάποια πράγματα
και τέτοια οπότε νομίζω το ποστάρισμα καλών κωδικων θα ήταν χρήσιμο!

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 10:13 pm
από compileGuy
Σίγουρα θα ήταν χρήσιμο αλλα πάνω σε τί?? Πχ: Τώρα ας πούμε θες να μάθεις ποιος ήταν ο ποιο εύκολος τρόπος για να διαβάσουμε τα δεδομένο απο το αρχείο στο hydrogen. Το ζητάς και πιστεύω πως θα υπάρχει απάντηση ;)

ΥΓ: Νομίζω πως οι περισσότεροι εδώ μόνοι τους έχουν μάθει προγραμματισμό :mrgreen:

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 10:18 pm
από stathis
compileGuy έγραψε:ΥΓ: Νομίζω πως οι περισσότεροι εδώ μόνοι τους έχουν μάθει προγραμματισμό :mrgreen:
Κι εγώ αυτό νομίζω ;)

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τρί Φεβ 09, 2010 10:40 pm
από kostassite
γενικα προγράμματα που έχουν ωραιο κωδικα. κάτι ωραίο κατι που όταν το κάνατε είπατε κοιτα τι εγραψα ο .... ή μπορούμε να φτιάξουμε κάτι σας tutorials για διαβασμα δεδομένων για ταξινομηση για .... για κλπκλπκλπ
Ουτε εγω ξέρω ακριβως πως μπορεί να γινεί αλλα νομίζ οτι όλοι μαζι κάτι μπορούμε να κανουμε.
ΥΓ Stathi μου αρεσει η υπογραφή σου. Αυτες οι πανελληνιες μας εχουν διαλύσει τη ζωη. θελω να διαβασω κατι βιβλια για προγραμματισμο και τελικα διαβάζω αοδε.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 3:21 pm
από Virus•Hacker•Kontos
πραγματι καλη ιδεα, δεν νομιζω οτι "μπορω" να δωσω αρκετα "καλο" κωδικα ουτε σε ορισμενα απλα πραγματα...
π.χ. για προβληματα hellenico συνηθως χρησιμοποιω 2 τροπους για διαβασμα απο αρχειο συνδιασμενους.

Ειναι Ανορθοδωξος κωδικας αλλα δεν χανει στην ταχυτητα:

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

fscanf(file,"%d",&FirstNumber); // Poso einai to mege8os toy 1ou dedomenou...
char/long/short FirstData [FirstNumber]; //Oti tipos einai to dedomeno...
fseek(file,1,SEEK_CUR); // To ili8io to fscanf afinei keno...
fread(file,1,FirstNumber,&FirstData); // Oute bronxoi oute tpt...
Και ολο αυτο σε μια συναρτηση/1 για καθε ειδος.:

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

int mh_fread_short(file,FirstData);
{
fscanf(file,"%d",&FirstNumber); // Poso einai to mege8os toy 1ou dedomenou...
short FirstData [FirstNumber]; //Oti tipos einai to dedomeno...
fseek(file,1,SEEK_CUR); // To ili8io to fscanf afinei keno...
if(fread(file,1,FirstNumber,&FirstData)) // Oute bronxoi oute tpt...
 return 1;
else
 return 0;
}
Λειπουν τα Pointers απο τον παραπανω κωδικα γιατι συνηθως τα ψαχνω τη στιγμη του Compiling... Ποτε Δεν Καταφερα να ξερω ακριβως που παει το καθενα...

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 4:25 pm
από thetrojan01
Θα έπρεπε:
1ον) να σκέφτεσαι πιο απλά. Αφού σου δίνει το πρόβλημά σου ένα N (μέγεθος εισόδου) χρησιμοποίησε αυτό αντί να χάνεις χρόνο για έλεγχο του EOF.
2ον) Γι αυτό υπάρχει η όλη φιλοσοφία OpenSource. Μπορείς να googlάρεις προγράμματα ή να πας σε κανένα sourceforge κτλ και να δεις κώδικα.
3ον) ΓΙΑΤΙ ΔΕ ΓΡΑΦΕΤΕ ΟΜΟΡΦΟ ΚΩΔΙΚΑ ΠΟΥ ΝΑ ΠΑΡΕΙ??? :lol: Χμμ Καλά... Θα Κάνω Copy-Paste ένα άρθρο από το Youniverse εδώ.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 5:12 pm
από chris
chris έγραψε:Ο :twisted: thetrojan 01 :twisted: θα έλεγε:
"Γράφε όμορφο κώδικα :evil: !"
thetrojan01 έγραψε:3ον) ΓΙΑΤΙ ΔΕ ΓΡΑΦΕΤΕ ΟΜΟΡΦΟ ΚΩΔΙΚΑ ΠΟΥ ΝΑ ΠΑΡΕΙ???
chris έγραψε:Ο τρόπος που διαβάζεις τα δεδομένα είναι πράγματι αρκετά πολύπλοκος... Όταν σου δίνουν τον αριθμό των στοιχείων που έχει το αρχείο, απλά ένα fscanf μέσα σε ένα for αρκεί.
thetrojan01 έγραψε:1ον) να σκέφτεσαι πιο απλά. Αφού σου δίνει το πρόβλημά σου ένα N (μέγεθος εισόδου) χρησιμοποίησε αυτό αντί να χάνεις χρόνο για έλεγχο του EOF.
:roll:

kostassite: http://lmgtfy.com/?q=C%2B%2B+examples
Δες πόσα πράγματα υπάρχουν! ;)

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 6:32 pm
από thetrojan01
chris έγραψε:
chris έγραψε:Ο :twisted: thetrojan 01 :twisted: θα έλεγε:
"Γράφε όμορφο κώδικα :evil: !"
thetrojan01 έγραψε:3ον) ΓΙΑΤΙ ΔΕ ΓΡΑΦΕΤΕ ΟΜΟΡΦΟ ΚΩΔΙΚΑ ΠΟΥ ΝΑ ΠΑΡΕΙ???
chris έγραψε:Ο τρόπος που διαβάζεις τα δεδομένα είναι πράγματι αρκετά πολύπλοκος... Όταν σου δίνουν τον αριθμό των στοιχείων που έχει το αρχείο, απλά ένα fscanf μέσα σε ένα for αρκεί.
thetrojan01 έγραψε:1ον) να σκέφτεσαι πιο απλά. Αφού σου δίνει το πρόβλημά σου ένα N (μέγεθος εισόδου) χρησιμοποίησε αυτό αντί να χάνεις χρόνο για έλεγχο του EOF.
:roll:

kostassite: http://lmgtfy.com/?q=C%2B%2B+examples
Δες πόσα πράγματα υπάρχουν! ;)
O Chris με κάλυψε! :lol:

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 7:01 pm
από kostassite
chris thanks. και εγω με google παω απλά ανοιξα αυτο το topic για κάτι πιο σημαζεμένο

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 11:22 pm
από chris
Σημαζεμένο; Τότε είναι που πρέπει να δείς αυτό: http://www.java2s.com/Code/Cpp/CatalogCpp.htm ! Κάτι που σίγουρα δεν μπορείς να κάνεις σε αυτό το topic είναι κάτι πιο συμαζεμένο. Anyway, καταλαβαίνω γιατί άνοιξες αυτό το topic, αν και δεν προβλέπω μεγάλη ανταπόκριση.

Πάντως θα ήταν καλή ιδέα να δημιουργηθεί μια τέτοια ελληνική κοινότητα με wiki, εύκολο ανεύασμα κώδικα, φόρουμς, κανένα γαμάτο εργαλείο που θα επιτρέπει 2+ άτομα να εργάζονται στο ίδιο project -ξεφεύγω!-, online compilers -υπερξεφεύγω!-, editors (λογοδιάρρεια, οκ, οκ το κλείνω!) κτλ.
(Ίσως μόλις να εμφανίστηκε μια λάμψη στο μάτι του Στάθη ;))

Τέλος πάντων, είμαστε offtopic.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Φεβ 10, 2010 11:53 pm
από thetrojan01
chris έγραψε: Τέλος πάντων, είμαστε offtopic.
Το θέμα συζήτησης του τόπικ είναι το λάθος! έπρεπε να λέει μόνο 'Βοήθεια σε νέους!'

Είπαμε, για κώδικες, google, sourceforge, GNU library etc etc etc.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Σάβ Φεβ 12, 2011 3:19 pm
από Κηπουρίδης
Dijkstra ὑλοποιημένος μὲ set, πολυπλοκότητα Ο ( ElogV ), πολὺ εὔκολος στὴν ὑλοποίηση.
http://pastebin.com/83Fs9Y1q
Εὐχαριστῶ τὸν feedWard γιὰ τὴν πρόταση :D .
Κώδικας κλεμμένος ἀπὸ ἐδώ : http://www.topcoder.com/tc?module=Stati ... teLibrary2

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Κυρ Ιουν 26, 2011 6:30 pm
από Κηπουρίδης
Πάνω ποὺ ἔκανα μιὰ γερὴ ἐπανάληψη, συνειδητοποίησα ὅτι μπορῶ νὰ τὴν ἀνεβάσω ἐδώ.
Ὅλοι οἱ ἀλγόριθμοι τοῦ Introduction to Algorithms ( τουλάχιστον αὐτοὶ ποὺ μὰς εἶναι χρήσιμοι γιὰ τὸ διαγωνισμό ) καὶ μιὰ δυὸ μαλακίτσες ἀκόμα.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Δευ Ιουν 27, 2011 10:18 pm
από pman
Κηπουρίδης έγραψε:Πάνω ποὺ ἔκανα μιὰ γερὴ ἐπανάληψη, συνειδητοποίησα ὅτι μπορῶ νὰ τὴν ἀνεβάσω ἐδώ.
Ὅλοι οἱ ἀλγόριθμοι τοῦ Introduction to Algorithms ( τουλάχιστον αὐτοὶ ποὺ μὰς εἶναι χρήσιμοι γιὰ τὸ διαγωνισμό ) καὶ μιὰ δυὸ μαλακίτσες ἀκόμα.
Μπράβο! πολύ καλή ιδέα το πακέτο υλοποιήσεων που έκανες :D .

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Τετ Ιουν 29, 2011 3:13 pm
από Κηπουρίδης
Ἀνανέωσα λίγο τὸ .zip, ὀριστικὰ πλέον νομίζω.
Κράτησα ὅ,τι παλιὸ καὶ πρόσθεσα καὶ λίγα πράγματα ἀκόμα.
Πλέον περιέχει :

Ὅλους τοὺς ἀλγόριθμους τοῦ CLRS-Introduction to Algorithms second edition,
Binary Indexed Tree,
2D Binary Indexed Tree,
Primes/SieveofEratosthenes/ΜΚΔ(GCD)/Efficient_Exponentation/IntegerFactorization,
Longest_Increasing_Subsequence ( O(NlogN ) ),
Rectangle_Sum,
Range_Minimum_Query_Static_Dynamic_Programming(Sparse Tables),
Range_Minimum_Query_Dynamic_Segment_Trees,
Lowest_Common_Ancestor_Dynamic_programming.

Ἐλπίζω νὰ βοηθάει.

Re: Δημοσίευση ετοιμων προγραμμάτων.Βοήθεια σε νέους...

Δημοσιεύτηκε: Δευ Ιούλ 04, 2011 10:36 am
από kernelpanic
Πρέπει να στήσουμε μια online βιβλιοθήκη με κλασικούς αλγορίθμους, αν και μάλλον η επιστημονική επιτροπή δε θα χαρεί ιδιαίτερα :twisted:
Spoiler: show
tip:
Μπορείς να γράψεις Dijkstra με priority_queue, αρκεί να αντιστρέψεις τα πρόσημα.
α>β
-α<-β
;)