taslikos Δημοσ. 22 Μαρτίου 2017 Δημοσ. 22 Μαρτίου 2017 Καλησπέρα γραφω στην c εναν κωδικα, και εχω χαθει σε αυτο το σημειο: void max(float a[10][10]){ int i,j; float m; m=a[0][0]; for (i=0; i<=9; i++){ for (j=0; j<=19; j++){ if (a[i][j]>m){ m=a[i][j]; } } } return m; } ειναι μια συναρτιση η οποια βρισκει το max ενος πινακα a. το προβλημα ειναιι πως εγω θελω να την καλω στην main και να αποθηκευει σε μια μεταβλητη το μεγιστο του πινακα. αν βαλω αντι για return ενα printf τυπωνει κανονικα το max εγω θελω να το κρατησω σε μια μεταβλητη χ καθως θα καλεσω την συναρτιση στην main. main(){ x=max(a) ///a ειναι ο πινακας που θελω να βω το max }
Moderators Kercyn Δημοσ. 22 Μαρτίου 2017 Moderators Δημοσ. 22 Μαρτίου 2017 Άλλαξε τον τύπο επιστροφής.
taslikos Δημοσ. 22 Μαρτίου 2017 Μέλος Δημοσ. 22 Μαρτίου 2017 Τι τύπο πρέπει να βάλω; Έκανα μια αλλαγή και πλέον δουλεύει αλλά θα ήθελα να μάθω πως θα έπρεπε να γίνει με τον παραπάνω τρόπο.
Moderators Kercyn Δημοσ. 23 Μαρτίου 2017 Moderators Δημοσ. 23 Μαρτίου 2017 Μία συνάρτηση με τύπο επιστροφής void δεν επιστρέφει τίποτα. Για να επιστρέψει κάτι, ο τύπος της θα πρέπει να είναι κάτι άλλο από void. Το τι είναι αυτό το κάτι εσύ θα του πεις. Στην περίπτωσή σου θα πρέπει να είναι float, μιας και τα στοιχεία του πίνακα που περνάς (άρα και το μέγιστο στοιχείο του) είναι float. 2
taslikos Δημοσ. 23 Μαρτίου 2017 Μέλος Δημοσ. 23 Μαρτίου 2017 Οκ αυτό ήταν τελικά.. Ακόμη: Έστω ότι έχω έναν πινακα (στην c, float) ο οποίος ισχύει για μια χρονική στιγμή t=0. Και θα ήθελα να υπολογίσω τις τιμές του πινακα για μια άλλη χρονική στιγμή t=x η οποία θα εισάγεται από τον χρήστη. Αυτό που έχω είναι ένας τύπος ο οποίος βρίσκει τον αμέσως επόμενο πινακα. Δηλαδή για t=0 χρησιμοποιώ τον τύπο και βγάζω πινακα για t=1 πως θα μπορούσα να βγάζω πινακα για χρονική στιγμή, υπόψιν βέβαια ότι θα πρέπει να υπολογίζω τους προηγούμενους κάθε φορά για να φτάσω στον ζητούμενο; διότι έχω μπερδευτεί καθώς αν για t=0 έχω έναν πινακα κάνω αλλαγές και φτιάχνω για t=1 έναν άλλο. Αυτό που θέλω να βρω είναι αν υπάρχει τρόπος να βρω τον τελικό πινακα χωρίς να χρησιμοποιήσω πολλές μεταβλητές πχ αν θέλω τον πινακα για t=3 να μην χρειαστούν 4 πίνακες: ένας για t=0 κλπ...
Moderators Kercyn Δημοσ. 23 Μαρτίου 2017 Moderators Δημοσ. 23 Μαρτίου 2017 Αν δεν έχεις τρόπο να υπολογίσεις τον πίνακα για μια τυχαία χρονική στιγμή τότε αναγκαστικά πρέπει να το κάνεις σταδιακά (αναδρομικά ή αλλιώς). Βάλε αν θες το πρόβλημα ως έχει ακριβώς μήπως υπάρχει άλλος τρόπος. 1
sundance_kid Δημοσ. 24 Μαρτίου 2017 Δημοσ. 24 Μαρτίου 2017 Οκ αυτό ήταν τελικά.. Ακόμη: Έστω ότι έχω έναν πινακα (στην c, float) ο οποίος ισχύει για μια χρονική στιγμή t=0. Και θα ήθελα να υπολογίσω τις τιμές του πινακα για μια άλλη χρονική στιγμή t=x η οποία θα εισάγεται από τον χρήστη. Αυτό που έχω είναι ένας τύπος ο οποίος βρίσκει τον αμέσως επόμενο πινακα. Δηλαδή για t=0 χρησιμοποιώ τον τύπο και βγάζω πινακα για t=1 πως θα μπορούσα να βγάζω πινακα για χρονική στιγμή, υπόψιν βέβαια ότι θα πρέπει να υπολογίζω τους προηγούμενους κάθε φορά για να φτάσω στον ζητούμενο; διότι έχω μπερδευτεί καθώς αν για t=0 έχω έναν πινακα κάνω αλλαγές και φτιάχνω για t=1 έναν άλλο. Αυτό που θέλω να βρω είναι αν υπάρχει τρόπος να βρω τον τελικό πινακα χωρίς να χρησιμοποιήσω πολλές μεταβλητές πχ αν θέλω τον πινακα για t=3 να μην χρειαστούν 4 πίνακες: ένας για t=0 κλπ... Δεν είναι απαραίτητο να χρησιμοποιήσεις πολλούς πίνακες, εφ'όσον η συνάρτηση (τύπος) είναι μία θα κληθεί t φορές απλά σαν όρισμα θα παίρνει το array(t). Επίσης, επειδή λογικά θα προβληματιστείς στο να κάνεις return ένα array αυτό είναι αδύνατο στη C. Αυτό όμως που γίνεται είναι να επιστρέψεις ένα struct το οποίο μπορέι να περιέχει arrays. 1
Fortistis Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 Στις 24/3/2017 στις 5:33 ΜΜ, sundance_kid είπε return ένα array αυτό είναι αδύνατο στη C Εάν επιστρέψεις δείκτη σε κάτι, πώς αυτό είναι διαφορετικό από το να επιστρέφεις πίνακα, εφόσον και το array notation (στην ουσία) pointers είναι; Πώς λοιπόν είναι αδύνατο να επιστρέψεις array στην C;
Ilias95 Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 2 ώρες πριν, Fortistis είπε Εάν επιστρέψεις δείκτη σε κάτι, πώς αυτό είναι διαφορετικό από το να επιστρέφεις πίνακα, εφόσον και το array notation (στην ουσία) pointers είναι; Πώς λοιπόν είναι αδύνατο να επιστρέψεις array στην C; Προφανώς εννοεί ότι δεν μπορείς να επιστρέψεις ένα copy του array, όταν από την άλλη μπορείς να επιστρέψεις ένα copy ενός struct.
albNik Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 (επεξεργασμένο) Στις 23/3/2017 στις 4:53 ΜΜ, taslikos είπε Οκ αυτό ήταν τελικά.. Ακόμη: Έστω ότι έχω έναν πινακα (στην c, float) ο οποίος ισχύει για μια χρονική στιγμή t=0. Και θα ήθελα να υπολογίσω τις τιμές του πινακα για μια άλλη χρονική στιγμή t=x η οποία θα εισάγεται από τον χρήστη. Αυτό που έχω είναι ένας τύπος ο οποίος βρίσκει τον αμέσως επόμενο πινακα. Δηλαδή για t=0 χρησιμοποιώ τον τύπο και βγάζω πινακα για t=1 πως θα μπορούσα να βγάζω πινακα για χρονική στιγμή, υπόψιν βέβαια ότι θα πρέπει να υπολογίζω τους προηγούμενους κάθε φορά για να φτάσω στον ζητούμενο; διότι έχω μπερδευτεί καθώς αν για t=0 έχω έναν πινακα κάνω αλλαγές και φτιάχνω για t=1 έναν άλλο. Αυτό που θέλω να βρω είναι αν υπάρχει τρόπος να βρω τον τελικό πινακα χωρίς να χρησιμοποιήσω πολλές μεταβλητές πχ αν θέλω τον πινακα για t=3 να μην χρειαστούν 4 πίνακες: ένας για t=0 κλπ... Προσθέτεις μια διασταση στον αρχικό σου πίνακα (χρόνος). Aν είναι διδιάστατος τον κανεις τρισδιάστατο κοκ. δλδ γινεται 'πίνακας που περιέχει πίνακες' Επεξ/σία 24 Ιουλίου 2018 από albNik
Fortistis Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 8 ώρες πριν, Ilias95 είπε Προφανώς εννοεί ότι δεν μπορείς να επιστρέψεις ένα copy του array, όταν από την άλλη μπορείς να επιστρέψεις ένα copy ενός struct. α) Γιατί προφανώς, πώς το γνωρίζεις εσύ ότι είναι "προφανώς" και πώς μπορείς να το δείξεις ότι είναι "προφανώς"; β) Δεν σχολίασα τι εννοούσε, αλλά τι έγραψε.
Ilias95 Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 2 ώρες πριν, Fortistis είπε α) Γιατί προφανώς, πώς το γνωρίζεις εσύ ότι είναι "προφανώς" και πώς μπορείς να το δείξεις ότι είναι "προφανώς"; Common sense. Δεν χρειάζεται να αρπαζόμαστε όμως. Κουβέντα κάνουμε. 2 ώρες πριν, Fortistis είπε β) Δεν σχολίασα τι εννοούσε, αλλά τι έγραψε. Αυτό που έγραψε είναι σωστό. Στην C δεν μπορείς να επιστρέψεις array από συνάρτηση.
Fortistis Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 (επεξεργασμένο) 32 λεπτά πριν, Ilias95 είπε Common sense. Δεν χρειάζεται να αρπαζόμαστε όμως. Κουβέντα κάνουμε. Αυτό που έγραψε είναι σωστό. Στην C δεν μπορείς να επιστρέψεις array από συνάρτηση. Πώς ακριβώς κατάλαβες ότι αρπάχτηκα; “Common sense” και αυτό; Και ξαναρωτάω, από πού προκύπτει ότι «προφανώς», δεδομένου πως ούτε τον έβλεπες, ούτε τον ξέρεις; Τέλος, γιατί δεν μπορείς να επιστρέψεις πίνακα από συνάρτηση, χρησιμοποιώντας δείκτες; Τι διαφορά έχει ένας πίνακας από μία μεταβλητή τύπου δείκτη; Επεξ/σία 24 Ιουλίου 2018 από Fortistis
Ilias95 Δημοσ. 24 Ιουλίου 2018 Δημοσ. 24 Ιουλίου 2018 (επεξεργασμένο) 27 λεπτά πριν, Fortistis είπε Πώς ακριβώς κατάλαβες ότι αρπάχτηκα; “Common sense” και αυτό; Έτσι μου φάνηκε από το ύφος σου, αν κατάλαβα λάθος ζητώ συγγνώμη. 27 λεπτά πριν, Fortistis είπε Τέλος, γιατί δεν μπορείς να επιστρέψεις πίνακα από συνάρτηση, χρησιμοποιώντας δείκτες; Κανείς δεν είπε ότι δεν μπορείς να επιστρέψεις έναν pointer σε οποιαδήποτε virtual διεύθυνση μνήμης θες. Και κανείς δεν είπε ότι τα δεδομένα που βρίσκονται σε αυτή τη διεύθυνση μνήμης δεν μπορείς να τα κάνεις interpret σαν array ή σαν struct ή σαν οτιδήποτε άλλο θες! Αυτό που γράφτηκε παραπάνω είναι ότι δεν μπορείς να επιστρέψεις array από function. Και έτσι είναι, τι να κάνουμε; Να αλλάξουμε το specification και τους compilers; int [] foo(void); // ILLEGAL struct bar foo(void); // LEGAL Στην C μπορείς να επιστρέψεις από μια συνάρτηση ints, chars, pointers, structs και άλλα πράγματα. Arrays ΔΕΝ μπορείς να επιστρέψεις. Στην C τα arrays δεν είναι first class citizens! Στην Java που είναι first class citizens μπορείς να γράψεις: int [] foo(); // LEGAL 27 λεπτά πριν, Fortistis είπε Τι διαφορά έχει ένας πίνακας από μία μεταβλητή τύπου δείκτη; Τώρα αυτό είναι διαφορετική ερώτηση. Αν πραγματικά δεν ξέρεις τότε googlαρε. Επεξ/σία 24 Ιουλίου 2018 από Ilias95
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα