Σελίδα 15 από 15
Re: Hellenico
Δημοσιεύτηκε: Παρ Ιαν 21, 2022 4:29 pm
από Prod55
Κηπουρίδης έγραψε: ↑Παρ Ιαν 21, 2022 4:20 pm
Ωχ, δίκιο έχεις, με συγχωρείς για το λάθος!
Δεν βλέπω τότε τι μπορεί να πάει λάθος, και δυστυχώς δεν έγραψα και ποτέ μου Πασκάλ. Αν το βρεις πριν από εμάς, ενημέρωσε σε παρακαλώ να μας φύγει η περιέργεια!!
Έγινε, θα προσπαθήσω να το εντοπίσω.
Υ.γ επειδή από όσα έχω δει γενικά μέχρι τώρα οι περισσότεροι γράφουν σε C,C++ ενώ η Pascal δεν πολυ-χρησιμοποιείται και μιας και δεν έχω δει καθόλου από C/C++, ήθελα να ρωτήσω,υπάρχει κάποια ουσιαστική διαφορά στις δυνατότητες και την απόδοση? Δηλαδή υπάρχει π.χ κάτι που μπορείς να το κάνεις εύκολα σε C/C++ ενώ σε pascal όχι, ή και καθόλου;
Re: Hellenico
Δημοσιεύτηκε: Παρ Ιαν 21, 2022 4:32 pm
από Κηπουρίδης
Δεν υπάρχει διαφορά στην απόδοση που να αξίζει τον κόπο να αναφερθεί.
Αλλά η C++ έχει μια πολύ μεγάλη βιβλιοθήκη με χρήσιμους αλγορίθμους και δομές δεδομένων. Για παράδειγμα ταξινόμηση αριθμών. Μετά από λίγο καιρό όλοι ξέρουν να την γράφουν, αλλά δεν υπάρχει λόγος κάθε φορά να ξοδεύεις τον χρόνο σου και να κινδυνεύεις να υπάρχει κάποιο λαθάκι.
Αδιαμφισβήτητα σου προτείνουμε όλοι να το γυρίσεις σε C++ όταν βρεις χρόνο.
Re: Hellenico
Δημοσιεύτηκε: Παρ Ιαν 21, 2022 4:35 pm
από Prod55
Κηπουρίδης έγραψε: ↑Παρ Ιαν 21, 2022 4:32 pm
Δεν υπάρχει διαφορά στην απόδοση που να αξίζει τον κόπο να αναφερθεί.
Αλλά η C++ έχει μια πολύ μεγάλη βιβλιοθήκη με χρήσιμους αλγορίθμους και δομές δεδομένων. Για παράδειγμα ταξινόμηση αριθμών. Μετά από λίγο καιρό όλοι ξέρουν να την γράφουν, αλλά δεν υπάρχει λόγος κάθε φορά να ξοδεύεις τον χρόνο σου και να κινδυνεύεις να υπάρχει κάποιο λαθάκι.
Αδιαμφισβήτητα σου προτείνουμε όλοι να το γυρίσεις σε C++ όταν βρεις χρόνο.
Σας ευχαριστώ πολύ για την συμβουλή, εγώ ξεκίνησα με πασκάλ γιατί με βόλεψε πολύ η δομή της, είναι πολύ "φυσική" να το πω έτσι. Αφού όμως σκοπεύω να ασχοληθώ περαιτέρω με το θέμα θα ξεκινήσω να μελετώ C++.
Re: Hellenico
Δημοσιεύτηκε: Παρ Ιαν 21, 2022 4:41 pm
από Prod55
Το βρήκα, η μόνη αλλαγή που ήθελε ήταν οι μεταβλητές N,i,A,B,R να οριστούν ως longint
Δεν το είχα υποψιαστεί νωρίτερα γιατί τα testcases που έδινα στο πρόγραμμά μου και δούλευε κανονικά ήταν με μικρές τιμές και δεν υπήρχε διαφορά.
Re: Hellenico
Δημοσιεύτηκε: Σάβ Ιαν 22, 2022 12:00 am
από switch
Μπράβο που το βρήκες. Είχα δει τα longint που είχες στους πίνακες και δεν έδωσα σημασία στους αθροιστές σου που ήταν integer. Βέβαια δεν περίμενα για λόγους συμβατότητας η free pascal να χρησιμοποιεί ακόμα 2byte integers [-32768,+32767].
Είχα την εντύπωση ότι αυτά πέθαναν μαζί με τα Z80,68000,Amiga512,80286 κλπ προϊστορικά μηχανάκια
Άρα, όσοι δουλεύετε pascal (
), ξεχάστε τους integer ακόμα και για τα loop!
Re: Hellenico
Δημοσιεύτηκε: Κυρ Σεπ 24, 2023 2:23 pm
από _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++.
Ευχαριστώ εκ των προτέρων.
Re: Hellenico
Δημοσιεύτηκε: Δευ Σεπ 25, 2023 3:35 pm
από Κηπουρίδης
_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);
}
}
Re: Hellenico
Δημοσιεύτηκε: Τετ Σεπ 27, 2023 10:26 am
από _Dimitris_
Ευχαριστώ πολύ για την απάντηση!
Όμως, έχω καταλάβει το πώς θα πρέπει να μοιάζει ο κώδικας. Αυτό που δεν έχω καταλάβει, είναι πώς θα μπορούσα να τρέξω τον κώδικα στον υπολογιστή μου. Είδα τις οδηγίες για να βάλω κάποια εντολή στον compiler, όμως δεν υπάρχει κάπου η βιβλιοθήκη, κι έτσι δεν μπορώ να τεστάρω τον κώδικά μου, παρά μόνο κάνοντας απανωτές υποβολές.
Re: Hellenico
Δημοσιεύτηκε: Τετ Σεπ 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;
}
Re: Hellenico
Δημοσιεύτηκε: Πέμ Σεπ 28, 2023 9:05 am
από _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;
}
Ευχαριστώ πολύ, αυτό εννοούσα! Κρίμα που δεν υπάρχει κάπου έτοιμη αυτή η βιβλιοθήκη, θα ήταν πιο εύκολο για όλους μας.
Re: Hellenico
Δημοσιεύτηκε: Σάβ Σεπ 30, 2023 4:18 am
από 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 θα έβρισκε πολλές φορές τον κώδικα των συναρτήσεων και θα ήταν γκρινιάρης γιατί δεν θα ήξερε ποιόν κώδικα να κρατήσει.