Προς το περιεχόμενο

Άσκηση σε γλωσσά c


mike2012

Προτεινόμενες αναρτήσεις

Βασικά αυτό που μας ζητάει η άσκηση είναι να βρούμε πόσες φορές εμφανίζετε μια λέξη ..... και όχι αν ένας πινάκας είναι γεμάτος

 

Και η δική μου απάντηση για να βρεις πόσες φορές εμφανίζεται μια λέξη ήταν. Το να βρεις αν ένας πίνακας είναι γεμάτος είναι safety measure κατά τη διάρκεια της διαδικασίας κατά την οποία ψάχνεις να βρεις πόσες φορές εμφανίζεται μια λέξη.

 

Από αυτό που γράφεις καταλαβαίνω πως δεν έχεις καταλάβει σχεδόν τίποτα από την αρχική μου απάντηση. Κυρίως το τι, πως και γιατί χρησιμοποιούμε ιστογράμματα όταν θέλουμε να μετρήσουμε συχνότητες εμφάνισης.

 

Είναι όμως ο πλέον διαδεδομένος τρόπος, και κατά την γνώμη μου είναι θεμελιώδης η κατανόησή του, προκειμένου να μπορέσεις να λύσεις την άσκηση.

 

αυτό που κάνω εγώ είναι ότι δημιουργώ ένα πινάκα κ[1000][1000] και αποθηκευω μια λέξη σα κάθε γραμμή και μετά με την strcmp ελέγχω αν είναι αυτές οι δυο ίδιες αλλά αυτή ελενχει έναν έναν χαρακτήρα και μου αυξάνει τον μετρητή και εγώ θέλω να των αυξήσει μονο μια φορά

...

 

Το ότι δεσμεύεις έναν πίνακα 1000x1000 χαρακτήρων όχι μόνο δεν ενδείκνυται για την συγκεκριμένη άσκηση, αλλά είναι κι εσφαλμένο. Π.χ. τι θα κάνεις αν το Ν που θα σου δώσει ο χρήστης είναι ας πούμε 1001? Οι πίνακές σου θα πρέπει να οριστούν με N στοιχεία στην 1η τους διάσταση (αν είναι 2Δ) ή στην μόνη τους διάσταση (αν είναι 1Δ). Όσα στοιχεία δηλαδή σου δώσει ο χρήστης (όπως λέει η εκφώνηση)... που στην πράξη εν πολλοίς σημαίνει: dynamic (allocated) array. Οτιδήποτε άλλο είναι αχρείαστα inefficient ή/και πολύπλοκο.

 

Επίσης, το να αποθηκεύεις αδιακρίτως όλες τις λέξεις που διαβάζεις μέσα σε έναν πίνακα (επιτρέποντας δηλαδή ίδιες λέξεις σε διαφορετικές θέσεις) και περιπλέκει αχρείαστα τον κώδικα (πολύ περισσότερο από αυτά που σου έχουμε προτείνει στο νήμα) και τον κάνει πάρα πολύ in-efficient (ειδικά αν σκέφτεσαι να τον ταξινομήσεις κιόλας τον πίνακα).

 

Πες ότι τις πέρασες τις λέξεις στον πίνακα, διπλο-τριπλο-περασμένες σε διαφορετικές θέσεις. Κατόπιν πως σκοπεύεις να μετρήσεις ποια εμφανίζεται περισσότερες φορές;

 

Με άλλα λόγια, προσπάθησε να καταλάβεις τι είναι, πως και γιατί χρησιμοποιούμε ιστογράμματα για αυτές τις δουλειές. Είτε από την αρχική μου απάντηση, είτε από τα βιβλία σας, είτε από το Google, είτε από οπουδήποτε αλλού. Αν δεν σε καλύπτει η αρχική μου απάντηση, ευχαρίστως να σου διευκρινήσω τα σημεία που θα μου υποδείξεις.

 

Αρκεί να μην θέλεις να σου γράψω εγώ και το υπόλοιπο 1/4 που έχει απομείνει χωρίς κώδικα σε αυτό το νήμα στη λύση της άσκησης :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και η δική μου απάντηση για να βρεις πόσες φορές εμφανίζεται μια λέξη ήταν. Το να βρεις αν ένας πίνακας είναι γεμάτος είναι safety measure κατά τη διάρκεια της διαδικασίας κατά την οποία ψάχνεις να βρεις πόσες φορές εμφανίζεται μια λέξη.

 

Από αυτό που γράφεις καταλαβαίνω πως δεν έχεις καταλάβει σχεδόν τίποτα από την αρχική μου απάντηση. Κυρίως το τι, πως και γιατί χρησιμοποιούμε ιστογράμματα όταν θέλουμε να μετρήσουμε συχνότητες εμφάνισης.

 

Είναι όμως ο πλέον διαδεδομένος τρόπος, και κατά την γνώμη μου είναι θεμελιώδης η κατανόησή του, προκειμένου να μπορέσεις να λύσεις την άσκηση.

 

 

 

Το ότι δεσμεύεις έναν πίνακα 1000x1000 χαρακτήρων όχι μόνο δεν ενδείκνυται για την συγκεκριμένη άσκηση, αλλά είναι κι εσφαλμένο. Π.χ. τι θα κάνεις αν το Ν που θα σου δώσει ο χρήστης είναι ας πούμε 1001? Οι πίνακές σου θα πρέπει να οριστούν με N στοιχεία στην 1η τους διάσταση (αν είναι 2Δ) ή στην μόνη τους διάσταση (αν είναι 1Δ). Όσα στοιχεία δηλαδή σου δώσει ο χρήστης (όπως λέει η εκφώνηση)... που στην πράξη εν πολλοίς σημαίνει: dynamic (allocated) array. Οτιδήποτε άλλο είναι αχρείαστα inefficient ή/και πολύπλοκο.

 

Επίσης, το να αποθηκεύεις αδιακρίτως όλες τις λέξεις που διαβάζεις μέσα σε έναν πίνακα (επιτρέποντας δηλαδή ίδιες λέξεις σε διαφορετικές θέσεις) και περιπλέκει αχρείαστα τον κώδικα (πολύ περισσότερο από αυτά που σου έχουμε προτείνει στο νήμα) και τον κάνει πάρα πολύ in-efficient (ειδικά αν σκέφτεσαι να τον ταξινομήσεις κιόλας τον πίνακα).

 

Πες ότι τις πέρασες τις λέξεις στον πίνακα, διπλο-τριπλο-περασμένες σε διαφορετικές θέσεις. Κατόπιν πως σκοπεύεις να μετρήσεις ποια εμφανίζεται περισσότερες φορές;

 

Με άλλα λόγια, προσπάθησε να καταλάβεις τι είναι, πως και γιατί χρησιμοποιούμε ιστογράμματα για αυτές τις δουλειές. Είτε από την αρχική μου απάντηση, είτε από τα βιβλία σας, είτε από το Google, είτε από οπουδήποτε αλλού. Αν δεν σε καλύπτει η αρχική μου απάντηση, ευχαρίστως να σου διευκρινήσω τα σημεία που θα μου υποδείξεις.

 

Αρκεί να μην θέλεις να σου γράψω εγώ και το υπόλοιπο 1/4 που έχει απομείνει χωρίς κώδικα σε αυτό το νήμα στη λύση της άσκησης :P

οκ. Ευχαριστώ αρχικά για το ενδιαφέρον σου.θα προσπαθήσω να κατανοήσω τον κώδικα και άμα είναι θα σε ενημερώσω για λεπτομεριες που ίσως δεν καταλαβαίνω .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τι πανε και τους βαζουνε...

 

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

 

Θυμάμαι τουλάχιστον 2 ακόμα νήματα που εγώ προσωπικά έχω δώσει κώδικα και για το ένα και για το άλλο, αλλά δεν θυμάμαι σε ποια.

 

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

 

@mike2012:

 

Παρακαλώ :)

 

Όποια περαιτέρω διευκρίνηση χρειάζεσαι, πόσταρέ την στο νήμα.

 

 

EDIT

 

Κάτι βρήκα μέσω google τελικά:

 

1. http://www.insomnia.gr/topic/424639-%CE%B5%CF%85%CE%BA%CE%BF%CE%BB%CE%B7-%CE%AC%CF%83%CE%BA%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/page__st__45#entry4365903

2. http://www.insomnia.gr/topic/424639-%CE%B5%CF%85%CE%BA%CE%BF%CE%BB%CE%B7-%CE%AC%CF%83%CE%BA%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/page__st__75#entry4370574

3. http://www.insomnia.gr/topic/424639-%CE%B5%CF%85%CE%BA%CE%BF%CE%BB%CE%B7-%CE%AC%CF%83%CE%BA%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/page__st__45#entry4367194

4. http://www.insomnia.gr/topic/432317-%CF%80%CF%81%CF%8C%CE%B2%CE%BB%CE%B7%CE%BC%CE%B1-%CE%BC%CE%B5-%CE%AC%CF%83%CE%BA%CE%B7%CF%83%CE%B7-%CF%83%CF%84%CE%B7%CE%BD-c/#entry4489887

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ευχαριστώ όλους σας που προσπαθήσατε να με βοηθήσετε τελικά έβγαλα την άσκηση αφού βεβαία πρώτα έκανε ο καθηγητής τούς πινάκες και τούς κατανόησα ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

Θυμάμαι τουλάχιστον 2 ακόμα νήματα που εγώ προσωπικά έχω δώσει κώδικα και για το ένα και για το άλλο, αλλά δεν θυμάμαι σε ποια.

 

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

 

 

Ελα τωρα... Ο τυπος δεν ηξερε απο πινακες αρα λογικα δεν τους τα εμαθαν. Και πανε και βαζουν ασκηση που κανει κρα οτι θελει map;;;;; Ελεος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

 

Ελα τωρα... Ο τυπος δεν ηξερε απο πινακες αρα λογικα δεν τους τα εμαθαν. Και πανε και βαζουν ασκηση που κανει κρα οτι θελει map;;;;; Ελεος.

 

Δεν ήξερα αν δεν είχε καλύψει την ύλη ο καθηγητής, ή αν την είχε κι απλώς ο φίλος ήταν αμελής και δεν τα είχε παρακολουθήσει/διαβάσει.

 

ΥΓ. Πάντως με απροσδιόριστο μήκος λέξεων, δεν θα την χαρακτηρίζαμε και "piece of cake" (ειδικά αν έπρεπε να το κάνουν κι efficiently).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

για να μην ξεκιναω καινουριο topic εχω κι εγω μια ασκηση που την εχω κανει,αλλα δεν τρεχει σωστα και μου εχει σπασει το κεφαλι..

η ασκηση δεχεται εναν αριθμο που ειναι τα ποδια και μεσω μιας συναρτησης το μετατρεπει σε μετρα και το εμφανιζει.απλα αυτο.

ο,τι τιμη και αν βαλω ομως,μου επιστρεφει 0.0000000 , γιατι γινεται αυτο??

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

double feet,meters;
double feet_to_meters(double feet);

int main() {
   printf ("\nfeet:");
   scanf("%f", &feet);
   
   printf("Meters : %f", feet_to_meters(feet));
   return 0;
}

double feet_to_meters(double feet){
   meters = feet / 3.28 ;
   return (meters);
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

...

ο,τι τιμη και αν βαλω ομως,μου επιστρεφει 0.0000000 , γιατι γινεται αυτο??

...

>
...
   scanf("%f", &feet);
...

 

Διότι η scanf θέλει %lf για να διαβάσει double (με %f αναμένει float).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Παρακαλώ :)

 

Btw, consider...

 

>
#include <stdio.h>

// --------------------------------
double feet_to_meters( double feet )
{
   return feet / 3.28 ;
}
// --------------------------------
int main( void )
{
   double feet = 0.0;

   printf ("\nfeet: ");
   scanf("%lf", &feet);

   printf("Meters: %f\n", feet_to_meters(feet));

   return 0;
}

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...