Λύσεις της Α Φασης!

Γενικά θέματα για το διαγωνισμό. Ερωτήσεις, προτάσεις και ό,τι άλλο ταιριάζει.
dimitris
Δημοσιεύσεις: 55
Εγγραφή: Πέμ Δεκ 18, 2008 12:49 am

Re: Λύσεις της Α Φασης!

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

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

Και κάτι ακόμα την storage class που χρησιμοποίησες "register" είναι εντελώς άχρηστη. Κάποτε το χρησιμοποούσαν σε στους παλιούς compilers για να αποδεσμεύουν την μεταβλητή από την μνήμη τώρα οι καινούριοι compilers δεν έχουν τέτοιο πρόβλημα. Άποψη μου :)
thelastnicholas
Δημοσιεύσεις: 74
Εγγραφή: Παρ Φεβ 13, 2009 8:07 pm

Re: Λύσεις της Α Φασης!

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

Το keyword register δίνει εντολή να τοποθετηθεί η μεταβλητή όχι στην μνήμη Ram αλλά σε έναν καταχωρητή του επεξεργαστή επειδή χρησιμοποιείται πολύ συχνα. Ο μεταγλωττιστής όμως αγνοεί το χαρακτηρισμό αυτό α) αν παρακάτω χρησιμοποιείται η διεύθυνση της μεταβλητής (οι καταχωρητές δεν ανήκουν στην κύρια μνήμη και δεν έχουν διευθυνσεις) β) αν ο προγραμματιστης θέλει 20 (!!!) καταχωρητές για το πρόγραμμα του (και φυσικά δεν υπάρχει τόσο χώρος).

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

Εξάλλου τα προγράμματα που τρέχουν στο Talos μεταγλωττίζονται με βελτιστοποιήσεις όποτε αν ο μεταγλωττιστής δει κάποια μεταβλητή η οποία θα επιταχύνει το πρόγραμμα αν τοποθετηθεί σε καταχωρητή το κάνει.
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

20; Το σαραβαλάκι μου έχει 128kilo.
Ευχαριστώ για τη συμβουλή μη συνύπαρξης * και register.
Είχα ήδη δει ότι χρησιμοποιούν -Ο2 στον Τάλω, αλλά το κράτησα για πειράματα στην πρακτική χρήση :)
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
Artakserksis
Δημοσιεύσεις: 106
Εγγραφή: Δευ Δεκ 15, 2008 3:02 pm

Re: Λύσεις της Α Φασης!

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

in.txt και out.txt; Λυπάμαι c13, αλλά μάλλον έκανες βλακειούλα :?
Εικόνα
thelastnicholas
Δημοσιεύσεις: 74
Εγγραφή: Παρ Φεβ 13, 2009 8:07 pm

Re: Λύσεις της Α Φασης!

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

Δε αναφέρομαι στην cache αλλά στους καταχωρητές!
Νομίζω ότι οι x86 έχουν 16 registers και οι x86-64 32
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

Ωχ... :oops: :lol:
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
stathis
Site Admin
Δημοσιεύσεις: 381
Εγγραφή: Κυρ Δεκ 14, 2008 6:01 pm
Τοποθεσία: Αθήνα
Επικοινωνία:

Re: Λύσεις της Α Φασης!

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

Artakserksis, φαντάζομαι πως μόνο εδώ ποόσταρε την έκδοση με τα txt, αλλιώς δε θα δεχόταν τη λύση του το Qenseo. :P
c13
Δημοσιεύσεις: 5
Εγγραφή: Δευ Δεκ 22, 2008 12:33 am

Re: Λύσεις της Α Φασης!

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

όχι παιδιά αυτή είναι η δοκιμαστική έκδοση για τα windows που είχα φτιάξει... απλά την άλλη την τελική έκδοση είχα στο Linux και για να μην κανω restart για να ποσταρω την σωστή (ήμουν συνδεδεμένος από windows εκείνη την στιγμή) δημοσίευσα την δοκιμαστική. εξάλου αν δημοσίευα αυτήν με τα txt δεν θα την έβγαζε σωστή το σύστημα όταν την υπέβαλα... έτσι δεν είναι?
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

Ε τώρα...να'χουμε να λέμε. :P
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
Άβαταρ μέλους
marios_kant
Δημοσιεύσεις: 18
Εγγραφή: Παρ Φεβ 13, 2009 12:28 am

Re: Λύσεις της Α Φασης!

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

Δεν θα χρειαζόταν να κάνεις restart! Απλα το .txt θα έσβηνες!
c13
Δημοσιεύσεις: 5
Εγγραφή: Δευ Δεκ 22, 2008 12:33 am

Re: Λύσεις της Α Φασης!

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

δεν το πρόσεξα ρε παιδιά εντάξει... δεν έγινε και τίποτα
Άβαταρ μέλους
marios_kant
Δημοσιεύσεις: 18
Εγγραφή: Παρ Φεβ 13, 2009 12:28 am

Re: Λύσεις της Α Φασης!

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

Πώς δεν το πρόσεξες;;!! Αφού λες:
c13 έγραψε:απλά την άλλη την τελική έκδοση είχα στο Linux και για να μην κανω restart για να ποσταρω την σωστή (ήμουν συνδεδεμένος από windows εκείνη την στιγμή) δημοσίευσα την δοκιμαστική.
που δείχνει πως το πρόσεξες!!!
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

Μη το σκοτώνετε το θέμα τόσο νωρις... μπορούμε να το ανυψώσουμε στο ουσιωδέστερο φιλοσοφικό και ψυχολογικό θέμα του αιώνα, και να κερδίσουμε το Νόμπελ ομαδικής παράκρουσης :P :lol:
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
c13
Δημοσιεύσεις: 5
Εγγραφή: Δευ Δεκ 22, 2008 12:33 am

Re: Λύσεις της Α Φασης!

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

κάτι είναι και αυτό :lol:
thetrojan01
Δημοσιεύσεις: 712
Εγγραφή: Κυρ Δεκ 21, 2008 2:45 pm

Re: Λύσεις της Α Φασης!

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

και η δική μου (Γλώσσα: C)

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

/* LANG: C++
 * TASK: Alexander
 */

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int L=0, C=0, i, j; /* L=lines C=chars per line*/
	char prevc='\0', plinec;
	FILE *fp;


	fp=fopen("Alexander.in", "r");
	fscanf(fp, "%d %d %c", &L, &C, &prevc);
	fclose(fp);

	
	if(prevc=='P') prevc = 'V';
	else prevc = 'P';
	plinec = prevc;
	

	fp=fopen("Alexander.out", "w");
	for(j=0; j<L; j++)/*for every line*/
	{
		prevc = plinec; /*the previous character is count as the beginning of the previous line.*/
		if(prevc == 'P')
		{	
			plinec = 'V';
			for(i=0; i<C; i=i+2) fprintf(fp, "VP");
		}
		else
		{
			plinec = 'P';
			for(i=0; i<C; i=i+2) fprintf(fp, "PV");
		}
		if(C-i > 0)
		{
			if(prevc=='P') fprintf(fp, "V");
			else fprintf(fp, "P");
		}

		fprintf(fp, "\n");		
	}
	fclose(fp);
	
	return(0);
}
Η χρήση του register, όπως έκανε και ο kernelpanic δίνει ταχύτητα στην προσπέλαση των μεταβλητών;
svyr cercrv an inevrfnv cbyl tvn an gb iyrcrvf nhgb... cvtrar xnzvn ibygn yrj tj.
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

Απ'ότι είπαν και τα παιδιά, μάλλον όχι :oops:
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
thetrojan01
Δημοσιεύσεις: 712
Εγγραφή: Κυρ Δεκ 21, 2008 2:45 pm

Re: Λύσεις της Α Φασης!

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

kk. Καλή συνέχεια στην επόμενη φάση (ps. το forum εχει ανάψει σήμερα!)
svyr cercrv an inevrfnv cbyl tvn an gb iyrcrvf nhgb... cvtrar xnzvn ibygn yrj tj.
petermer
Δημοσιεύσεις: 2
Εγγραφή: Κυρ Φεβ 15, 2009 1:09 am

Re: Λύσεις της Α Φασης!

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

Ορίστε και η δικιά μου...

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

/*
LANG: C
TASK: Alexander
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    FILE *in, *out;
    int i=0, lines, cols, sw, loopy;
    char *pv, *vp, first;
    
    in = fopen("Alexander.in","r");
    fscanf(in,"%d %d\n%c",&lines,&cols,&first);
    if((lines%2) != 0)
    {
          loopy = (lines/2) + 1;
    }else{
          loopy = (lines/2);
    }
    fclose(in);
    pv = (char *) malloc ((cols+1)*sizeof(char));
    vp = (char *) malloc ((cols+1)*sizeof(char));
    sw = 0;
    for(i=0;i<cols;i++)
    {
                           if((sw%2) == 0)
                           {
                           strcat(pv,"P");
                           strcat(vp,"V");
                           sw++;
                           }
                           else
                           {
                               strcat(pv,"V");
                               strcat(vp,"P");
                               sw++;
                               }
    }
    if(first == 'P')//Switch initialisation
    {
                sw = 0;
    }else{
                sw = 1;
    }
    out = fopen("Alexander.out","w");//GRafw twra
    for(i=0;i<loopy;i++)
    {
                if(sw == 0)
                {
                      fputs(pv,out);
                      fprintf(out,"\n");
                      if(i != (loopy-1))
                      {
                           fputs(vp,out);
                           fprintf(out,"\n");
                      }else if(i == (loopy-1) && (lines%2) == 0)
                      {
                            fputs(vp,out);
                            fprintf(out,"\n");
                      }
                }else{
                      fputs(vp,out);
                      fprintf(out,"\n");
                      if(i != (loopy-1))
                      {
                           fputs(pv,out);
                           fprintf(out,"\n");
                      }else if(i == (loopy-1) && (lines%2) == 0)
                      {
                            fputs(pv,out);
                            fprintf(out,"\n");
                      }
                      
                }
    }
    fclose(out);
    return(0);
                                
                
}
Ελεύθεροσκοπευτής
Δημοσιεύσεις: 33
Εγγραφή: Πέμ Ιαν 29, 2009 1:57 am

Re: Λύσεις της Α Φασης!

Δημοσίευση από Ελεύθεροσκοπευτής »

θα δωσετε τα φώτα σας φιλτάτοι συνδιαγωνιζόμενοι με μερικά χρόνια εμπειρίας σε έναν σχετικά νηουμπη τόσο στον προγραμματισμό, όσο στην σιπλασπλασ, όσο και στο πιντιπι;;; :roll:

δης ιζ μαη κόουντ:

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

/*
LANG: C++
TASK: Alexander
*/
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdlib.h>
#include <string>

using namespace std;


int main() {

  int x,y,k;
  char firstc;
  ifstream file_in;
  ofstream file_out;
  file_in.open ("Alexander.in");
  file_in >> x;
  file_in >> y;
  file_in >> firstc;
  
  if(firstc=='P') {
    k=0;
  }
  if(firstc=='V') {
    k=1;
  }
  
  file_in.close();
  file_out.open ("Alexander.out");
  
  for(int a=0;a<x;a++) {
    for(int b=0;b<y;b++) {
      if(k%2==0) {
        file_out <<"P"; 
      }
      if(k%2==1) {
        file_out <<"V";
      }
      k++;
    }
    file_out << "\n";
    if(y%2==0) {
      k++;
    }
    if(y%2==1) {
      k=k;
    } 
    
  }
  file_out.close();
  return(0);
}
γίνεται να μου πείτε τι θα μπορούσα να έχω κάνει ωστε να βγει ολίγον τι γρηγορότερο το πρόγραμμα;;;
(πέρασα, αλλά 100στος+) :oops: :oops:
Άβαταρ μέλους
kernelpanic
Δημοσιεύσεις: 404
Εγγραφή: Κυρ Δεκ 21, 2008 8:16 pm
Τοποθεσία: Αθήνα

Re: Λύσεις της Α Φασης!

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

Αντί να τα βάλεις ένα ένα στο αρχείο(L*C ξεχωριστές μηχανικές εγγραφές, τρώνε κάμποσα ms) γράψε πίνακες που τους έχεις φτιάξει 1 φορά τον καθένα.(L εγγραφές)
Το k=k είναι άχρηστο.
Άλλαξε τα (k%2==1) με (k%2)που θα δώσει 1, και ένα else για τους ζυγούς.
Άλλαξε το if(y%2==0) με μια bool μεταβλητή που θα'ναι true αν έιναι ζυγός.

Και γώ νουμπάκι είμαι, αλλά τα'χα συναντήσει αυτά πριν την τελική έκδοση.

Βρες ένα καλό βιβλίο για την c++ και θα βρεις πολλά γρήγορα κόλπα ;)
99 little bugs in the code,
99 bugs in the code,
Fix one bug,
Compile again,
104 little bugs in the code.
Απάντηση