Σελ. 1 από 2 12 ΤελευταίαΤελευταία
Εμφάνιση 1-15 από 24
  1. #1
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Γεια σε ολους!
    Εχω αρχισει προγραμματισμο εδω και ενα μήνα, στη γλωσσα C. Εχω αρκετά μεγάλες δυσκολίες να καταλάβω μερικές φορές των κώδικα, και ακόμη πως να σκεφτώ για την λύση ενός αλγόριθμου.
    Θα ήθελα να θέσω μια ερώτηση σχετικά με μια άσκηση:
    "Γράψτε ένα πρόγραμμα που λαμβάνει ένα επταψήφιο αριθμό τηλεφώνου και μάθετε ποιες λέξεις μπορεί να συσταθουν από τον αριθμό αυτό και ταυτόχρονα να περιλαμβάνονται στο αρχείο lexeis.txt."
    Δηλαδή εγω γράφω ενα επταψήφιο αριθμό και το προγραμμα ελεγχει ποιες λέξεις ταιριαζουν απο το αρχειο "lexeis.txt" και τις τυπωνει στην οθονη.
    Η αναλογία αριθμών - ψηφίων ειναι ετσι:

    http://img843.imageshack.us/i/thl.png/
    Σκέφτηκα να εχω δυο arrays που το ενα να ελεγχει τους αριθμους και το αλλο τα γραμματα, αλλά πως θα τα τα ενώσω, και πως θα αποθηκεύσω αυτο που ελεγχει?

    Ευχαριστώ εκ των προτέρων.
    Attached Thumbnails Attached Thumbnails Tilefono.jpg  

    Τελευταία επεξεργασία από το μέλος Nicke : 07-10-10 στις 21:34.

  2. #2
    Εγγραφή
    14-09-2004
    Μηνύματα
    387
    Downloads
    0
    Uploads
    0
    Αν εχω καταλάβει καλά σου ζητάει κατι σαν το Τ9 των κινητών.
    Καθε ψηφίο του επταψήφιου υποδηλώνει 2-3 γράμματα τα οποία ελεγχεις αν βρίσκονται στην συγκεκριμένη θέση. πχ για τριψηφιο 564 ψαχνεις να βρείς λέξεις που το πρώτο γράμμα να είναι (K ή L) to 2o (M ή Ν ή Ο) και το 3ο (H ή I ή J)

  3. #3
    Εγγραφή
    05-02-2009
    Περιοχή
    In the Stargate Universe...
    Μηνύματα
    1.101
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    16699/985
    ISP
    OTEnet
    Router
    Huawei EchoLife 520c
    SNR / Attn
    4.1(dB) / 20.0(dB)
    Path Level
    Fastpath
    Βασική προϋπόθεση είναι να καταλαβαίνεις τι θέλεις να φτάξεις και πως θα δουλέψει, ο κώδικας θα έρθει μετά.

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

    Ένα απλό παράδειγμα με δύο πλήκτρα, έστω το ένα και το δύο.
    Οι συνδυασμό που προκύπτουν απο το 1-2 είναι:
    A-C
    A-D
    A-E
    B-C
    B-D
    B-E

    Αυτούς τους συνδυασμούς θα τους αποθηκεύσεις κάπου (υποθέτω ένα array είναι πιο πρακτικό και πιο απλό απο ένα αρχείο η μια db που θα ήταν όμως σωστότερο) και θα συγκρίνεις τον κάθε έναν με κάθε καταχώριση του αρχείου lexeis.txt

    Disclaimer: αυτό είναι το δικό μου σκεπτικό, δεν ισχυρίζομαι οτι δουλεύει σωστά, ούτε καν οτι δουλεύει και ξέρω σίγουρα οτι δεν είναι η καλύτερη λύση αλλά μάλλον είναι μια λύση.
    >> James Randi <<--- A man to admire, a man to respect

    Linux4Coffee
    You'll never know what you're missing until you try Arch

    "Next time you want to buy a computer, consider buying a mac (and installing Windows/Linux on it). Even after five years, when it's cheap chinese hardware is obsolete there will be someone ignorant enough to buy it for ten times the price."

  4. #4
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Ναι περιπου ετσι.

    Γραφω παντα ενα επταψηφιο αριθμο. Ο καθε αριθμος υποδηλωνει καποια γραμματα, πχ το 1 υποδηλωνει ΑΒ. Ο επταψηφιος αριθμος θα μετατραπει σε μία η περισσοτερες λεξεις που βρισκονται στο αρχειο που ειδη εχω, το αρχειο lexeis.txt. Δηλαδη ο επταψηφιος αριθμος μπορει να τυπωσει στην οθονη μια λεξη, αλλα μπορει και να τυπωσει και δυο και τρεις λεξεις αν ταιριαζει ο αριθμος με τις λεξεις που βρισκονται μεσα στο αρχειο lexeis.

    Γραφω παντα ενα επταψηφιο αριθμο, οχι μικροτερο απο επτα ψηφια. Ολες οι λεξεις μεσα στο αρχειο ειναι επταψηφιες.

  5. #5
    Εγγραφή
    19-03-2009
    Περιοχή
    ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
    Ηλικία
    48
    Μηνύματα
    288
    Downloads
    0
    Uploads
    0
    το ανάποδο δηλαδή να ελέγχει αν μία λέξη(αυτή που διαβάζεις από το αρχείο π.χ.) σχηματίστηκε από γνωστό αριθμό(τον αριθμο που δίνει ο χρήστης)
    γίνεται έτσι
    Κώδικας:
    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char  a[8]="AGKLMNO";
        char b[8]="       ";
        char c[8];
        for (int i=0;i<7;i++){
            switch (a[i]){
            case 'A':
            case 'B':    
                b[i]='1';
                break;
            case 'C':
            case 'D':
            case 'E':    
                b[i]='2';
                break;
            case 'F':
            case 'G':           
                b[i]='3';
                break;
            case 'H':
            case 'I':
            case 'J':            
                b[i]='4';
                break;
            case 'K':
            case 'L':    
                b[i]='5';
                break;
            case 'M':
            case 'N':
            case 'O':            
                b[i]='6';
                break;
            case 'P':
            case 'Q':
            case 'R':            
                b[i]='7';
                break;
            case 'S':
            case 'T':
                b[i]='8';
                break;
           case 'U':
           case 'V':
                b[i]='9';
                break;
           case 'X':
           case 'Y':
           case 'Z':
                b[i]='0';
                break;                        
            }
        }
        printf("\n dose ton kodiko:");
        scanf("%s",&c);getchar();
        printf("\n string=%s",b);
        if (strcmp(b,c)==0) 
            printf("\n i leksi %s dimioyrgi8ike apo ton ari8mo %s",a,c);
        else 
            printf("\n i leksi %s den dimioyrgi8ike apo ton ari8mo %s",a,c);
        getchar();
    return 0;
    }

  6. #6
    Εγγραφή
    17-05-2005
    Περιοχή
    Κυψέλη
    Ηλικία
    55
    Μηνύματα
    642
    Downloads
    3
    Uploads
    0
    Ταχύτητα
    10240/1024
    ISP
    Forthnet
    Router
    Speedtouch 780(i)WL
    SNR / Attn
    11(dB) / 33(dB)
    Χτίζοντας πάνω στη λογική του DreamAxe:

    Πρέπει οπωσδήποτε να διαβάσεις όλες τις λέξεις του text αρχείου που έχεις, δεν τη γλυτώνεις!

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


    Παράθεση Αρχικό μήνυμα από DreamAxe Εμφάνιση μηνυμάτων
    Βασική προϋπόθεση είναι να καταλαβαίνεις τι θέλεις να φτάξεις και πως θα δουλέψει, ο κώδικας θα έρθει μετά.

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

    Ένα απλό παράδειγμα με δύο πλήκτρα, έστω το ένα και το δύο.
    Οι συνδυασμό που προκύπτουν απο το 1-2 είναι:
    A-C
    A-D
    A-E
    B-C
    B-D
    B-E

    Αυτούς τους συνδυασμούς θα τους αποθηκεύσεις κάπου (υποθέτω ένα array είναι πιο πρακτικό και πιο απλό απο ένα αρχείο η μια db που θα ήταν όμως σωστότερο) και θα συγκρίνεις τον κάθε έναν με κάθε καταχώριση του αρχείου lexeis.txt

    Disclaimer: αυτό είναι το δικό μου σκεπτικό, δεν ισχυρίζομαι οτι δουλεύει σωστά, ούτε καν οτι δουλεύει και ξέρω σίγουρα οτι δεν είναι η καλύτερη λύση αλλά μάλλον είναι μια λύση.

  7. #7
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Το αρχειο που εχω lexeis.txt εχει μεσα 6290 λεξεις. Στο προγραμμα του virxen γραφει στην πρωτη σειρα του main προγραμματος "char a[8]="AGKLMNO";". Αλλα γιατι γραφουμε αυτον τον συνδιασμο?
    Υποθετω οτι εφοσων εχω το αρχειο με 6290 λεξεις, θα γραψω "char a[6291]=lexeis.txt". ??

  8. #8
    Εγγραφή
    14-09-2004
    Μηνύματα
    387
    Downloads
    0
    Uploads
    0
    Παράθεση Αρχικό μήνυμα από Nicke Εμφάνιση μηνυμάτων
    Το αρχειο που εχω lexeis.txt εχει μεσα 6290 λεξεις. Στο προγραμμα του virxen γραφει στην πρωτη σειρα του main προγραμματος "char a[8]="AGKLMNO";". Αλλα γιατι γραφουμε αυτον τον συνδιασμο?
    Υποθετω οτι εφοσων εχω το αρχειο με 6290 λεξεις, θα γραψω "char a[6291]=lexeis.txt". ??
    char a[6291] σημαίνει πίνακας 6291 χαρακτήρων, οχι λέξεων και επίσης δεν έχει νοημα να του δώσεις το όνομα του αρχείου σου.
    Ο virxen σου έδωσε μια γενική ιδέα και όχι ακριβώς αυτό που πρέπει να κάνεις.
    Τα βήματα χοντρικα που πρέπει να κάνεις είναι :

    1.Εισαγωγή απο το χρήστη του αριθμού
    2. Ανοιγμα του αρχείου
    3. Διαβασμα επόμενης λέξης
    4. ελεγχος αν ταιριαζει με τον αριθμό (εδω βοηθάει ο κωδικας του Virxen πιστευω όμως οτι μόλις βρείς εστω και ένα ψηφίο που δεν ταιριάζει πρέπει να σταματας να ελέγχεις τα υπόλοιπα)
    5. Αν η λέξη ταιριάζει την τυπώνεις στην οθόνη (εδω το ερωτημά σου ειναι λίγο ασφές , δεν λέει τι κανουμε με τις λεξεις που ταιριάζουν.
    6.Πας πάλι στο 3 μέχρι να τελείωσει το αρχείο.
    7 κλεινεις το αρχειο.

    Δεν χρειάζεται να βάλεις όλες τις λέξεις του αρχείου σε ένα πίνακα. Τις ελέγχεις μια μια όπως τις διαβάζεις

  9. #9
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Το ερωτημα μου ειναι πως αποθηκευω, και που αν μια ή περισσοτερες λεξεις ταιριαζουν για να τυπωθουν στη οθονη?
    "Δεν χρειάζεται να βάλεις όλες τις λέξεις του αρχείου σε ένα πίνακα. Τις ελέγχεις μια μια όπως τις διαβάζεις" : πως τις ελεγχω οπως τις διαβαζω??

  10. #10
    Εγγραφή
    19-03-2009
    Περιοχή
    ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
    Ηλικία
    48
    Μηνύματα
    288
    Downloads
    0
    Uploads
    0
    Παράθεση Αρχικό μήνυμα από Nicke Εμφάνιση μηνυμάτων
    Το αρχειο που εχω lexeis.txt εχει μεσα 6290 λεξεις. Στο προγραμμα του virxen γραφει στην πρωτη σειρα του main προγραμματος "char a[8]="AGKLMNO";". Αλλα γιατι γραφουμε αυτον τον συνδιασμο?
    Υποθετω οτι εφοσων εχω το αρχειο με 6290 λεξεις, θα γραψω "char a[6291]=lexeis.txt". ??
    ο κώδικας που έστειλα είναι για μία τυχαία λέξη την "AGKLMNO" που είναι αποθηκευμένη
    στην μεταβλητή a (char a[8])

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

    Παράθεση Αρχικό μήνυμα από pt3 Εμφάνιση μηνυμάτων
    (εδω βοηθάει ο κωδικας του Virxen πιστευω όμως οτι μόλις βρείς εστω και ένα ψηφίο που δεν ταιριάζει πρέπει να σταματας να ελέγχεις τα υπόλοιπα)
    ναι έχεις δίκιο.

    Επίσης μπορεί να γίνει όλο αυτό μία συνάρτηση ελέγχου


    και πιο ολοκληρωμένα
    =====================
    Κώδικας:
    #include <stdio.h>
    #include <string.h>
    
    int isValidWord(int,char []);
    int main(){
        int number=0;
        while (number<1000000 || number>9999999){
            printf("dose ton kodiko:");
            scanf("%d",&number);getchar();
            if (number<1000000 || number>9999999) printf("prepei o ari8mos na einai 7psifios!!\n");
        }
        FILE *fr=fopen ("lekseis.txt", "rt");
        char a[10];
        while(fgets(a, 10, fr) != NULL){
            a[8]='\0';
            if (isValidWord(number,a)==1) 
                printf("\n i leksi %s dimioyrgi8ike apo ton ari8mo %d",a,number);
            else 
                printf("\n i leksi %s den dimioyrgi8ike apo ton ari8mo %d",a,number);
        }
        fclose(fr);
        getchar();
        return 0;
    }
    
    
    int isValidWord(int number ,char a[]){
        char numberString[8];
        char b;
        sprintf(numberString,"%d",number);
        int valid=1;
        for (int i=0;i<7;i++){
            switch (a[i]){
            case 'A':
            case 'B':    
                b='1';
                break;
            case 'C':
            case 'D':
            case 'E':    
                b='2';
                break;
            case 'F':
            case 'G':           
                b='3';
                break;
            case 'H':
            case 'I':
            case 'J':            
                b='4';
                break;
            case 'K':
            case 'L':    
                b='5';
                break;
            case 'M':
            case 'N':
            case 'O':            
                b='6';
                break;
            case 'P':
            case 'Q':
            case 'R':            
                b='7';
                break;
            case 'S':
            case 'T':
                b='8';
                break;
           case 'U':
           case 'V':
                b='9';
                break;
           case 'X':
           case 'Y':
           case 'Z':
                b='0';
                break;
           default:
                b='x';                        
            }
            if (b=='x' || numberString[i]!=b) return -1;
            
        }
        return valid;
    }
    Τελευταία επεξεργασία από το μέλος virxen : 11-10-10 στις 16:18.

  11. #11
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Ο τελευταιος κωδικας του virxen δουλευει σωστα, αλλα τυπωνει στην οθονη τις λεξεις που δεν δημιουργηθηκαν απο τον αριθμο που εγω δινω. Εγω ομως θελω να τυπωσω στην οθονη τις λεξεις που δημιουργηθηκαν απο τον αριθμο, οχι τις λεξεις που δεν δημιουργηθηκαν.
    Μονο τις λεξεις που ταιριαζουν!

  12. #12
    Εγγραφή
    13-12-2009
    Μηνύματα
    294
    Downloads
    0
    Uploads
    0
    Αυτη η ασκηση ειναι στα πλαισια καποιου μαθηματος σε καποιο πανεπιστημιο και υποτιθεται οτι πρεπει να την κανεις μονος σου;; Ή απο μονος σου ψαχνεσαι με τον προγραμματισμο;

  13. #13
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Θα αρχισω να διαβαζω προγραμματισμο στη γλωσσα C σε πανεπιστημιο συντομα, και αυτη η ασκηση ειναι μια περσινη ασκηση απο το ιδιο μαθημα. Αυτη η ασκηση επρεπε να λυθει μετα απο 5 εβδομαδες εκμαθησης προγραμματισμου.
    Εγω ηδη διαβαζω προγραμματισμο εδω και 6 εβδομαδες αλλα δεν μπορω να καταλαβω αυτην την ασκηση. Οποτε οταν εγω θα αρχισω την C στο πανεπιστημιο θελω να μπορω να λυσω τετοιου ειδους ασκησεις, και πανω απ'ολα να μπορω κα καταλαβω τετοιες ασκησεις.

  14. #14
    Εγγραφή
    19-03-2009
    Περιοχή
    ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
    Ηλικία
    48
    Μηνύματα
    288
    Downloads
    0
    Uploads
    0
    Παράθεση Αρχικό μήνυμα από Nicke Εμφάνιση μηνυμάτων
    Ο τελευταιος κωδικας του virxen δουλευει σωστα, αλλα τυπωνει στην οθονη τις λεξεις που δεν δημιουργηθηκαν απο τον αριθμο που εγω δινω. Εγω ομως θελω να τυπωσω στην οθονη τις λεξεις που δημιουργηθηκαν απο τον αριθμο, οχι τις λεξεις που δεν δημιουργηθηκαν.
    Μονο τις λεξεις που ταιριαζουν!
    Κώδικας:
    ............
    //else 
                //printf("\n i leksi %s den dimioyrgi8ike apo ton ari8mo %d",a,number);
    ...........
    αν δεν ξέρεις να φτιάξεις αυτό κρίμα το διάβασμα ...

  15. #15
    Εγγραφή
    07-10-2010
    Ηλικία
    48
    Μηνύματα
    8
    Downloads
    0
    Uploads
    0
    Το εχω ηδη κανει αλλα τοτε δεν τυπωνει τιποτα στη οθονη!

Σελ. 1 από 2 12 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Βοήθεια σε άσκηση C++
    Από lamoyo13 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 10
    Τελευταίο Μήνυμα: 23-05-12, 10:00
  2. άσκηση Ηλεκτροτεχνίας
    Από dimpallas στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 21
    Τελευταίο Μήνυμα: 24-12-08, 00:00
  3. Άσκηση σε C
    Από killbilll στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 5
    Τελευταίο Μήνυμα: 13-12-07, 03:18
  4. Ασκηση!!!
    Από funkyjohny στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 7
    Τελευταίο Μήνυμα: 08-12-07, 17:41
  5. ασκηση C
    Από kasadi στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 12
    Τελευταίο Μήνυμα: 09-09-07, 11:48

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας