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

Συζητήσεις για προετοιμασία για τον διαγωνισμό, online διαγωνισμούς, βιβλία προγραμματισμού και αλγορίθμων, και όλων των σχετικών.
Απάντηση
kostassite
Δημοσιεύσεις: 65
Εγγραφή: Δευ Δεκ 21, 2009 10:21 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);
}
απλά δείτε το τρόπο που διαβάζω τα δεδομένα
chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

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

Δημοσίευση από chris »

Ο :twisted: thetrojan 01 :twisted: θα έλεγε:
"Γράφε όμορφο κώδικα :evil: !"

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

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

Ίσως το σαββατοκύριακο να ανεβάσω κανένα πρόγραμμα...
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.
Άβαταρ μέλους
compileGuy
Δημοσιεύσεις: 218
Εγγραφή: Δευ Ιαν 19, 2009 5:39 pm

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

Δημοσίευση από compileGuy »

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

:arrow: Just an idea ;)
kostassite
Δημοσιεύσεις: 65
Εγγραφή: Δευ Δεκ 21, 2009 10:21 pm
Επικοινωνία:

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

Δημοσίευση από kostassite »

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

:arrow: Just an idea ;)
Κοιτα να δείς, ο τρόπος που έχω μάθει προγραμματισμό είναι ανεφ διδασκάλου. οποτε γράφω οτι μου έρχετε και απλα το κάνω να δουλεύει. Μαθαίνω μαζι με το φίλο μου τον google δηλαδή διαβάζω άλλα προγράμματα και προσπαθώ να μπω στο κλίμα στο πως γίνονται κάποια πράγματα
και τέτοια οπότε νομίζω το ποστάρισμα καλών κωδικων θα ήταν χρήσιμο!
Άβαταρ μέλους
compileGuy
Δημοσιεύσεις: 218
Εγγραφή: Δευ Ιαν 19, 2009 5:39 pm

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

Δημοσίευση από compileGuy »

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

ΥΓ: Νομίζω πως οι περισσότεροι εδώ μόνοι τους έχουν μάθει προγραμματισμό :mrgreen:
stathis
Site Admin
Δημοσιεύσεις: 381
Εγγραφή: Κυρ Δεκ 14, 2008 6:01 pm
Τοποθεσία: Αθήνα
Επικοινωνία:

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

Δημοσίευση από stathis »

compileGuy έγραψε:ΥΓ: Νομίζω πως οι περισσότεροι εδώ μόνοι τους έχουν μάθει προγραμματισμό :mrgreen:
Κι εγώ αυτό νομίζω ;)
kostassite
Δημοσιεύσεις: 65
Εγγραφή: Δευ Δεκ 21, 2009 10:21 pm
Επικοινωνία:

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

Δημοσίευση από kostassite »

γενικα προγράμματα που έχουν ωραιο κωδικα. κάτι ωραίο κατι που όταν το κάνατε είπατε κοιτα τι εγραψα ο .... ή μπορούμε να φτιάξουμε κάτι σας tutorials για διαβασμα δεδομένων για ταξινομηση για .... για κλπκλπκλπ
Ουτε εγω ξέρω ακριβως πως μπορεί να γινεί αλλα νομίζ οτι όλοι μαζι κάτι μπορούμε να κανουμε.
ΥΓ Stathi μου αρεσει η υπογραφή σου. Αυτες οι πανελληνιες μας εχουν διαλύσει τη ζωη. θελω να διαβασω κατι βιβλια για προγραμματισμο και τελικα διαβάζω αοδε.
Virus•Hacker•Kontos
Δημοσιεύσεις: 170
Εγγραφή: Πέμ Νοέμ 26, 2009 9:59 pm

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

Δημοσίευση από 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... Ποτε Δεν Καταφερα να ξερω ακριβως που παει το καθενα...
DFS Hole:
Spoiler: show
http://virushackerwhizkid.blogspot.com/ ... ze-it.html
DFS = Deep Freeze System
Είμαι σίγουρος ότι το πιστέψατε.
thetrojan01
Δημοσιεύσεις: 712
Εγγραφή: Κυρ Δεκ 21, 2008 2:45 pm

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

Δημοσίευση από thetrojan01 »

Θα έπρεπε:
1ον) να σκέφτεσαι πιο απλά. Αφού σου δίνει το πρόβλημά σου ένα N (μέγεθος εισόδου) χρησιμοποίησε αυτό αντί να χάνεις χρόνο για έλεγχο του EOF.
2ον) Γι αυτό υπάρχει η όλη φιλοσοφία OpenSource. Μπορείς να googlάρεις προγράμματα ή να πας σε κανένα sourceforge κτλ και να δεις κώδικα.
3ον) ΓΙΑΤΙ ΔΕ ΓΡΑΦΕΤΕ ΟΜΟΡΦΟ ΚΩΔΙΚΑ ΠΟΥ ΝΑ ΠΑΡΕΙ??? :lol: Χμμ Καλά... Θα Κάνω Copy-Paste ένα άρθρο από το Youniverse εδώ.
svyr cercrv an inevrfnv cbyl tvn an gb iyrcrvf nhgb... cvtrar xnzvn ibygn yrj tj.
chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

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

Δημοσίευση από 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
Δες πόσα πράγματα υπάρχουν! ;)
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.
thetrojan01
Δημοσιεύσεις: 712
Εγγραφή: Κυρ Δεκ 21, 2008 2:45 pm

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

Δημοσίευση από 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:
svyr cercrv an inevrfnv cbyl tvn an gb iyrcrvf nhgb... cvtrar xnzvn ibygn yrj tj.
kostassite
Δημοσιεύσεις: 65
Εγγραφή: Δευ Δεκ 21, 2009 10:21 pm
Επικοινωνία:

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

Δημοσίευση από kostassite »

chris thanks. και εγω με google παω απλά ανοιξα αυτο το topic για κάτι πιο σημαζεμένο
chris
Δημοσιεύσεις: 528
Εγγραφή: Κυρ Δεκ 28, 2008 9:27 am

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

Δημοσίευση από chris »

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

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

Τέλος πάντων, είμαστε offtopic.
Μετα από 397 δημοσιεύσεις, έβαλα και υπογραφή.
thetrojan01
Δημοσιεύσεις: 712
Εγγραφή: Κυρ Δεκ 21, 2008 2:45 pm

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

Δημοσίευση από thetrojan01 »

chris έγραψε: Τέλος πάντων, είμαστε offtopic.
Το θέμα συζήτησης του τόπικ είναι το λάθος! έπρεπε να λέει μόνο 'Βοήθεια σε νέους!'

Είπαμε, για κώδικες, google, sourceforge, GNU library etc etc etc.
svyr cercrv an inevrfnv cbyl tvn an gb iyrcrvf nhgb... cvtrar xnzvn ibygn yrj tj.
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

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

Δημοσίευση από Κηπουρίδης »

Dijkstra ὑλοποιημένος μὲ set, πολυπλοκότητα Ο ( ElogV ), πολὺ εὔκολος στὴν ὑλοποίηση.
http://pastebin.com/83Fs9Y1q
Εὐχαριστῶ τὸν feedWard γιὰ τὴν πρόταση :D .
Κώδικας κλεμμένος ἀπὸ ἐδώ : http://www.topcoder.com/tc?module=Stati ... teLibrary2
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

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

Δημοσίευση από Κηπουρίδης »

Πάνω ποὺ ἔκανα μιὰ γερὴ ἐπανάληψη, συνειδητοποίησα ὅτι μπορῶ νὰ τὴν ἀνεβάσω ἐδώ.
Ὅλοι οἱ ἀλγόριθμοι τοῦ Introduction to Algorithms ( τουλάχιστον αὐτοὶ ποὺ μὰς εἶναι χρήσιμοι γιὰ τὸ διαγωνισμό ) καὶ μιὰ δυὸ μαλακίτσες ἀκόμα.
Συνημμένα
Algorithms.zip
CLRS
(23.12 KiB) Μεταφορτώθηκε 501 φορές
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
pman
Δημοσιεύσεις: 419
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

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

Δημοσίευση από pman »

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

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

Δημοσίευση από Κηπουρίδης »

Ἀνανέωσα λίγο τὸ .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.

Ἐλπίζω νὰ βοηθάει.
Συνημμένα
Algorithms.zip
(26.08 KiB) Μεταφορτώθηκε 479 φορές
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

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

Δημοσίευση από kernelpanic »

Πρέπει να στήσουμε μια online βιβλιοθήκη με κλασικούς αλγορίθμους, αν και μάλλον η επιστημονική επιτροπή δε θα χαρεί ιδιαίτερα :twisted:
Spoiler: show
tip:
Μπορείς να γράψεις Dijkstra με priority_queue, αρκεί να αντιστρέψεις τα πρόσημα.
α>β
-α<-β
;)
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
Απάντηση