Σελίδα 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 :D
Δεν το είχα υποψιαστεί νωρίτερα γιατί τα testcases που έδινα στο πρόγραμμά μου και δούλευε κανονικά ήταν με μικρές τιμές και δεν υπήρχε διαφορά.

Re: Hellenico

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

Άρα, όσοι δουλεύετε pascal ( :twisted: ), ξεχάστε τους 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 θα έβρισκε πολλές φορές τον κώδικα των συναρτήσεων και θα ήταν γκρινιάρης γιατί δεν θα ήξερε ποιόν κώδικα να κρατήσει.