Hellenico

Συζητήσεις για προετοιμασία για τον διαγωνισμό, online διαγωνισμούς, βιβλία προγραμματισμού και αλγορίθμων, και όλων των σχετικών.
Απάντηση
Prod55
Δημοσιεύσεις: 5
Εγγραφή: Πέμ Ιαν 20, 2022 10:47 am

Re: Hellenico

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

Κηπουρίδης έγραψε: Παρ Ιαν 21, 2022 4:20 pm Ωχ, δίκιο έχεις, με συγχωρείς για το λάθος!
Δεν βλέπω τότε τι μπορεί να πάει λάθος, και δυστυχώς δεν έγραψα και ποτέ μου Πασκάλ. Αν το βρεις πριν από εμάς, ενημέρωσε σε παρακαλώ να μας φύγει η περιέργεια!!
Έγινε, θα προσπαθήσω να το εντοπίσω.

Υ.γ επειδή από όσα έχω δει γενικά μέχρι τώρα οι περισσότεροι γράφουν σε C,C++ ενώ η Pascal δεν πολυ-χρησιμοποιείται και μιας και δεν έχω δει καθόλου από C/C++, ήθελα να ρωτήσω,υπάρχει κάποια ουσιαστική διαφορά στις δυνατότητες και την απόδοση? Δηλαδή υπάρχει π.χ κάτι που μπορείς να το κάνεις εύκολα σε C/C++ ενώ σε pascal όχι, ή και καθόλου;
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Δεν υπάρχει διαφορά στην απόδοση που να αξίζει τον κόπο να αναφερθεί.
Αλλά η C++ έχει μια πολύ μεγάλη βιβλιοθήκη με χρήσιμους αλγορίθμους και δομές δεδομένων. Για παράδειγμα ταξινόμηση αριθμών. Μετά από λίγο καιρό όλοι ξέρουν να την γράφουν, αλλά δεν υπάρχει λόγος κάθε φορά να ξοδεύεις τον χρόνο σου και να κινδυνεύεις να υπάρχει κάποιο λαθάκι.
Αδιαμφισβήτητα σου προτείνουμε όλοι να το γυρίσεις σε C++ όταν βρεις χρόνο.
Λύσεις θεμάτων ΠΔΠ: 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/
Prod55
Δημοσιεύσεις: 5
Εγγραφή: Πέμ Ιαν 20, 2022 10:47 am

Re: Hellenico

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

Κηπουρίδης έγραψε: Παρ Ιαν 21, 2022 4:32 pm Δεν υπάρχει διαφορά στην απόδοση που να αξίζει τον κόπο να αναφερθεί.
Αλλά η C++ έχει μια πολύ μεγάλη βιβλιοθήκη με χρήσιμους αλγορίθμους και δομές δεδομένων. Για παράδειγμα ταξινόμηση αριθμών. Μετά από λίγο καιρό όλοι ξέρουν να την γράφουν, αλλά δεν υπάρχει λόγος κάθε φορά να ξοδεύεις τον χρόνο σου και να κινδυνεύεις να υπάρχει κάποιο λαθάκι.
Αδιαμφισβήτητα σου προτείνουμε όλοι να το γυρίσεις σε C++ όταν βρεις χρόνο.
Σας ευχαριστώ πολύ για την συμβουλή, εγώ ξεκίνησα με πασκάλ γιατί με βόλεψε πολύ η δομή της, είναι πολύ "φυσική" να το πω έτσι. Αφού όμως σκοπεύω να ασχοληθώ περαιτέρω με το θέμα θα ξεκινήσω να μελετώ C++.
Prod55
Δημοσιεύσεις: 5
Εγγραφή: Πέμ Ιαν 20, 2022 10:47 am

Re: Hellenico

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

Το βρήκα, η μόνη αλλαγή που ήθελε ήταν οι μεταβλητές N,i,A,B,R να οριστούν ως longint :D
Δεν το είχα υποψιαστεί νωρίτερα γιατί τα testcases που έδινα στο πρόγραμμά μου και δούλευε κανονικά ήταν με μικρές τιμές και δεν υπήρχε διαφορά.
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

Μπράβο που το βρήκες. Είχα δει τα longint που είχες στους πίνακες και δεν έδωσα σημασία στους αθροιστές σου που ήταν integer. Βέβαια δεν περίμενα για λόγους συμβατότητας η free pascal να χρησιμοποιεί ακόμα 2byte integers [-32768,+32767].
Είχα την εντύπωση ότι αυτά πέθαναν μαζί με τα Z80,68000,Amiga512,80286 κλπ προϊστορικά μηχανάκια :D

Άρα, όσοι δουλεύετε pascal ( :twisted: ), ξεχάστε τους integer ακόμα και για τα loop!
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

Καλησπέρα! Έχω θέμα με το πρόβλημα στην ενότητα 1.3: Κρυμμένος θησαυρός.
Δεν μπορώ να καταλάβω πώς θα συμπεριλάβω βιβλιοθήκη, η οποία δεν βρίσκεται πουθενά, στον compiler μου για να τρέξω το πρόγραμμα. Συνέχεια παίρνω errors:
[Error] gcc: No such file or directory
[Error] hiddenlib.c: No such file or directory
[Error] hidden.c: No such file or directory
recipe for target 'main.o' failed

Δουλεύω σε Dev C++.
Ευχαριστώ εκ των προτέρων.
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

_Dimitris_ έγραψε: Κυρ Σεπ 24, 2023 2:23 pm Καλησπέρα! Έχω θέμα με το πρόβλημα στην ενότητα 1.3: Κρυμμένος θησαυρός.
Δεν μπορώ να καταλάβω πώς θα συμπεριλάβω βιβλιοθήκη, η οποία δεν βρίσκεται πουθενά, στον compiler μου για να τρέξω το πρόγραμμα. Συνέχεια παίρνω errors:
[Error] gcc: No such file or directory
[Error] hiddenlib.c: No such file or directory
[Error] hidden.c: No such file or directory
recipe for target 'main.o' failed

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

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

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

#include "hiddenlib.h"  
      
int main ( void ) {  
    int N;  
          
     N = getN ();
     if (compare(1,N) == 0) {
         ishidden( (N+1)/2 );
     }
     else {
         ishidden(1);
     }
 }
 
Λύσεις θεμάτων ΠΔΠ: 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/
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

Ευχαριστώ πολύ για την απάντηση!
Όμως, έχω καταλάβει το πώς θα πρέπει να μοιάζει ο κώδικας. Αυτό που δεν έχω καταλάβει, είναι πώς θα μπορούσα να τρέξω τον κώδικα στον υπολογιστή μου. Είδα τις οδηγίες για να βάλω κάποια εντολή στον compiler, όμως δεν υπάρχει κάπου η βιβλιοθήκη, κι έτσι δεν μπορώ να τεστάρω τον κώδικά μου, παρά μόνο κάνοντας απανωτές υποβολές.
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

_Dimitris_ έγραψε: Τετ Σεπ 27, 2023 10:26 am Ευχαριστώ πολύ για την απάντηση!
Όμως, έχω καταλάβει το πώς θα πρέπει να μοιάζει ο κώδικας. Αυτό που δεν έχω καταλάβει, είναι πώς θα μπορούσα να τρέξω τον κώδικα στον υπολογιστή μου. Είδα τις οδηγίες για να βάλω κάποια εντολή στον compiler, όμως δεν υπάρχει κάπου η βιβλιοθήκη, κι έτσι δεν μπορώ να τεστάρω τον κώδικά μου, παρά μόνο κάνοντας απανωτές υποβολές.
Οκ, τώρα κατάλαβα. Προσωπικά είχα κάνει απανωτές υποβολές στο hellenico.

Τώρα δοκίμασα το εξής και μου δούλεψε:
1) Έφτιαξα το δικό μου αρχείο που υλοποιεί τις τρεις αυτές συναρτήσεις, και το ονόμασα hiddenlib.h
2) Έτρεξα την εντολή μεταγλώττισης, με μια μικρή τροποποίηση (υποθέτω ήταν λάθος του hellenico αυτό που προτείνουν)
g++ -std=c++98 -O2 -static hiddenlib.h hidden.cpp -o hidden

Η διαφορά είναι ότι γράφω hiddenlib.h αντί για hiddenlib.cpp

Το αρχείο μου μοιάζει κάπως έτσι:

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

#include <math.h>
#include <stdio.h>

int ans=3, N=5;

int getN() {
}

int ishidden(int x) {
}

int compare(int x, int y) {
}
Αλλάζοντας τις τιμές της ans και της N στην ουσία δημιουργείς νέο αρχείο ελέγχου.

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

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

#include <math.h>
#include <stdio.h>

int ans=3, N=5;

int getN() {
  return N;
}

int ishidden(int x) {
  if(x==ans) {
    printf("To brikes\n");
    return 1;
  }
  printf("Apotixia\n");
  return 0;
}

int compare(int x, int y) {
  if(abs(x-ans) < abs(y-ans)) return 1;
  else if (abs(x-ans) > abs(y-ans)) return -1;
  return 0;
}
Λύσεις θεμάτων ΠΔΠ: 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/
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

Κηπουρίδης έγραψε: Τετ Σεπ 27, 2023 11:16 am
_Dimitris_ έγραψε: Τετ Σεπ 27, 2023 10:26 am Ευχαριστώ πολύ για την απάντηση!
Όμως, έχω καταλάβει το πώς θα πρέπει να μοιάζει ο κώδικας. Αυτό που δεν έχω καταλάβει, είναι πώς θα μπορούσα να τρέξω τον κώδικα στον υπολογιστή μου. Είδα τις οδηγίες για να βάλω κάποια εντολή στον compiler, όμως δεν υπάρχει κάπου η βιβλιοθήκη, κι έτσι δεν μπορώ να τεστάρω τον κώδικά μου, παρά μόνο κάνοντας απανωτές υποβολές.
Οκ, τώρα κατάλαβα. Προσωπικά είχα κάνει απανωτές υποβολές στο hellenico.

Τώρα δοκίμασα το εξής και μου δούλεψε:
1) Έφτιαξα το δικό μου αρχείο που υλοποιεί τις τρεις αυτές συναρτήσεις, και το ονόμασα hiddenlib.h
2) Έτρεξα την εντολή μεταγλώττισης, με μια μικρή τροποποίηση (υποθέτω ήταν λάθος του hellenico αυτό που προτείνουν)
g++ -std=c++98 -O2 -static hiddenlib.h hidden.cpp -o hidden

Η διαφορά είναι ότι γράφω hiddenlib.h αντί για hiddenlib.cpp

Το αρχείο μου μοιάζει κάπως έτσι:

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

#include <math.h>
#include <stdio.h>

int ans=3, N=5;

int getN() {
}

int ishidden(int x) {
}

int compare(int x, int y) {
}
Αλλάζοντας τις τιμές της ans και της N στην ουσία δημιουργείς νέο αρχείο ελέγχου.

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

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

#include <math.h>
#include <stdio.h>

int ans=3, N=5;

int getN() {
  return N;
}

int ishidden(int x) {
  if(x==ans) {
    printf("To brikes\n");
    return 1;
  }
  printf("Apotixia\n");
  return 0;
}

int compare(int x, int y) {
  if(abs(x-ans) < abs(y-ans)) return 1;
  else if (abs(x-ans) > abs(y-ans)) return -1;
  return 0;
}
Ευχαριστώ πολύ, αυτό εννοούσα! Κρίμα που δεν υπάρχει κάπου έτοιμη αυτή η βιβλιοθήκη, θα ήταν πιο εύκολο για όλους μας.
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

Τον κώδικα των συναρτήσεων μπορείς να τον βάλεις στο hiddenlib.h όπως πρότεινε ο Βαγγέλης ή να τον μοιράσεις σε δυο αρχεία:

hiddenlib.h (αρχείο με τα declarations των συναρτήσεων - χωρίς τον κώδικα τους)
Spoiler: show

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

int getN() ;

int ishidden(int x);

int compare(int x, int y);
hiddenlib.cpp (αρχείο με τα definitions των συναρτήσεων - ο κώδικας τους)
Spoiler: show

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

#include <math.h>
#include <stdio.h>

static int ans=520321, N=1000000;

int getN() {
  return N;
}

int ishidden(int x) {
  if(x==ans) {
    printf("To brikes\n");
    return 1;
  }
  printf("Apotixia\n");
  return 0;
}

int compare(int x, int y) {
  if(abs(x-ans) < abs(y-ans)) return 1;
  else if (abs(x-ans) > abs(y-ans)) return -1;
  return 0;
}

Και τα 3 αρχεία (ο κώδικας σου με τη main, το hiddenlib.h και το hiddenlib.cpp) πρέπει να υπάρχουν στον φάκελο εργασίας σου από τον οποίο κάνεις compile με τις εντολές που προτείνει το hellenico.

Ποιο το πλεονέκτημα του σπασίματος του hiddenlib σε hiddenlib.h και hiddenlib.cpp?
Στην περίπτωση μας, κανένα. Σε μεγαλύτερα project που το hiddenlib.h θα ήθελα να γίνει #include σε περισσότερα από ένα .cpp αρχεία με κώδικα, το hiddenlib.cpp (που έχει τον κώδικα των συναρτήσεων μέσα του) θα μεταγλωτιστεί μια μόνο φορά και ο linker θα είναι χαρούμενος. Αν ο κώδικας βρισκόταν στο hiddenlib.h, ο linker θα έβρισκε πολλές φορές τον κώδικα των συναρτήσεων και θα ήταν γκρινιάρης γιατί δεν θα ήξερε ποιόν κώδικα να κρατήσει.
Απάντηση