Hellraiser1964 Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 Η τελευταία προσθήκη στο πρόγραμμα είναι ο έλεγχος παρουσίας συγκεκριμένου χα-ρακτήρα στη συμβολοσειρά που διαβάσατε. Για το σκοπό αυτό, ορίστε κατ’ αρχήνμια τοπική μεταβλητή τύπου χαρακτήρα μέσα στη main(), έστω x. Εισάγετε μετά μιαεντολή εκτύπωσης, η οποία να ζητάει από το χρήστη να πληκτρολογήσει το χαρακτή-ρα που θέλετε να ελέγξετε, και στη συνέχεια γράψτε την εντολή ανάγνωσης από τοπληκτρολόγιο αυτού του χαρακτήρα. Χρησιμοποιήστε μια ακόμα συνάρτηση εισό-δου, την getchar(), η οποία καλείται χωρίς όρισμα και επιστρέφει ένα χαρακτήρα απότο πληκτρολόγιο, ως εξής:x = getchar(); Προσθέστε μια εντολή εκτύπωσης, για να εκτυπώσετε έναν χαρακτήρα αλλαγήςγραμμής, μια που η συνάρτηση getchar() δεν θα το κάνει για εσάς, και επ’ ευκαιρίανα εκτυπώνετε ως επιβεβαίωση και τον χαρακτήρα που διαβάστηκε με κατάλληλομήνυμα. Τώρα γράψτε τον κώδικα, ο οποίος να ελέγχει έναν-έναν χαρακτήρα του πίνακα strγια όλο το μήκος της συμβολοσειράς που περιέχει, συγκρίνοντας με το χαρακτήραελέγχου με τη βοήθεια του τελεστή ‘==’. Αν βρεθεί ο χαρακτήρας, να εκτυπώνετεκατάλληλο μήνυμα και να επιστρέφετε από την main(), τερματίζοντας την εκτέλεση.3ιαφορετικά, και όταν εξαντλήσετε όλους τους χαρακτήρες μέχρι το χαρακτήρα τερ-μαυισμού, να εκτυπώνετε άλλο μήνυμα και να επιστρέφετε. Ξαναμεταφράστε και ε-κτελέστε το πρόγραμμά σας.
Hellraiser1964 Δημοσ. 12 Νοεμβρίου 2013 Μέλος Δημοσ. 12 Νοεμβρίου 2013 Sorry παιδια το έγραψα βιαστικά.Πως γίνεται θέλω να μάθω αν μπορείτε.
ZAKKWYLDE Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 Προφανώς δεν έχεις ιδέα πως να κάνεις οτιδήποτε απο τα απλούστατα πράγματα που γράφει εκεί. Δηλαδή αν δεν καταλαβαίνεις το "ορίστε κατ’ αρχήν μια τοπική μεταβλητή τύπου χαρακτήρα μέσα στη main(), έστω x." και το " Εισάγετε μετά μια εντολή εκτύπωσης, η οποία να ζητάει από το χρήστη να πληκτρολογήσει το χαρακτή- ρα που θέλετε να ελέγξετε " καλυτερα άλλαξε σχολή... Η άσκηση σου λέει αναλυτικότατα βήμα βήμα τι να κάνεις, αν εξαιρέσεις τη ελληνική εκφώνηση η οποία σε μπερδεύει αν δεν την έχεις συνηθίσει. Γράψε ότι καταλαβαίνεις και αν κολλήσεις κάπου εδώ είμαστε. 1
Hellraiser1964 Δημοσ. 12 Νοεμβρίου 2013 Μέλος Δημοσ. 12 Νοεμβρίου 2013 Προφανώς δεν έχεις ιδέα πως να κάνεις οτιδήποτε απο τα απλούστατα πράγματα που γράφει εκεί. Δηλαδή αν δεν καταλαβαίνεις το "ορίστε κατ’ αρχήν μια τοπική μεταβλητή τύπου χαρακτήρα μέσα στη main(), έστω x." και το " Εισάγετε μετά μια εντολή εκτύπωσης, η οποία να ζητάει από το χρήστη να πληκτρολογήσει το χαρακτή- ρα που θέλετε να ελέγξετε " καλυτερα άλλαξε σχολή... Η άσκηση σου λέει αναλυτικότατα βήμα βήμα τι να κάνεις, αν εξαιρέσεις τη ελληνική εκφώνηση η οποία σε μπερδεύει αν δεν την έχεις συνηθίσει. Γράψε ότι καταλαβαίνεις και αν κολλήσεις κάπου εδώ είμαστε. Προφανώς και είναι κάτι απλό αλλά αν δεν το έχεις ξαναδεί και όλοι θεωρούν ότι το έχεις δεί,δεν προκειταί να γίνει κάτι...Και το θέμα είναι να μάθω κάτι νέο σε μία σχολή,όχι να θεωρούνται όλα γνωστά(αλλά πάει αλλού η κουβέντα)... Την μεταβλητή την έχω ορίσει και την εντολή εκτύπωσης.Μετά σκάλωσα.Είναι το τελευταίο καμματάκι από μία άσκηση αυτό,τον υπόλοιπο τον έχω γραψει. Κάθε βοήθεια δεκτή και προκαταβολικές ευχεριστίες σε όσους ασχολούντι-ασχοληθούν.
Star_Light Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 Προφανώς και είναι κάτι απλό αλλά αν δεν το έχεις ξαναδεί και όλοι θεωρούν ότι το έχεις δεί,δεν προκειταί να γίνει κάτι... Την μεταβλητή την έχω ορίσει.Μετά σκάλωσα.Είναι το τελευταίο καμματάκι από μία άσκηση αυτό,τον υπόλοιπο τον έχω γραψει. Κάθε βοήθεια δεκτή και προκαταβολικές ευχεριστίες σε όσους ασχολούντι-ασχοληθούν. Έχεις να γραψεις μια συνάρτηση η οποια θα παίρνει το string που θα δινει ο χρηστης και θα ελεγχει χαρακτηρα - χαρακτηρα αν καποιος ταιριαζει με τον χαρακτηρα ελεγχου. Αν βρεθει ισοδυναμια η συνάρτηση επιστρέφει και λεει οτι ο χαρακτήρας βρέθηκε. Βάλε εναν δεικτη να δειχνει στην αρχη του string και με ένα for ξεκινα να διατρέχεις το string ο δεικτης καθε φορά θα αυξάνει για να δειχνει στο επομενο στοιχειο του πίνακα και κάνε επισης τον έλεγχο : bool sentinel = false; if( *p == 'c' ) { printf("Ο xaraktiras vrethike stin thesi arr[%d] kai einai o : %c " , i , *p); sentinel = true; return; } if( !sentinel ) { printf("There is no %c character in the string" , control_ch); return; }
imitheos Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 Παραβλέποντας την πρόταση του καθηγητή για "μεταβλητή τύπου χαρακτήρα" για την χρήση με την getchar, μπορείς να γράψεις σε παρακαλώ μέσα σε ετικέτες [ code ] [ / code ] (χωρίς τα κενά) τον κώδικα που έχεις κάνει μέχρι τώρα ? Εξήγησε μας το σκεπτικό που σε έκανε να τον γράψεις έτσι και να σε βοηθήσουμε σε αυτό που κόλλησες.
Hellraiser1964 Δημοσ. 12 Νοεμβρίου 2013 Μέλος Δημοσ. 12 Νοεμβρίου 2013 Παραβλέποντας την πρόταση του καθηγητή για "μεταβλητή τύπου χαρακτήρα" για την χρήση με την getchar, μπορείς να γράψεις σε παρακαλώ μέσα σε ετικέτες[ code ] [ / code ] (χωρίς τα κενά) τον κώδικα που έχεις κάνει μέχρι τώρα ? Εξήγησε μας το σκεπτικό που σε έκανε να τον γράψεις έτσι και να σε βοηθήσουμε σε αυτό που κόλλησες. [ code ] #include <stdio.h> #include <stdlib.h> #include <string.h> char str[31]; int main() { int x; printf("Please type\n"); gets(str); str[30]='\0'; printf("You typed \"%s\".\n", str); printf("The lenght is %d\n", strlen(str)); printf("The first character is %c\n",str[0]); printf("The last character is %c\n",str[strlen(str)-1]); printf("%c",str[strlen(str)-1]); printf("%c",str[strlen(str)-2]); printf("%c",str[strlen(str)-3]); printf("%c",str[strlen(str)-4]); printf("%c",str[strlen(str)-5]); printf("%c",str[strlen(str)-6]); printf("%c",str[strlen(str)-7]); printf("%c",str[strlen(str)-8]); printf("%c",str[strlen(str)-9]); printf("%c",str[strlen(str)-10]); printf("%c",str[strlen(str)-11]); printf("%c",str[strlen(str)-12]); printf("%c",str[strlen(str)-13]); printf("%c",str[strlen(str)-14]); printf("%c",str[strlen(str)-15]); printf("%c",str[strlen(str)-16]); printf("%c",str[strlen(str)-17]); printf("%c",str[strlen(str)-18]); printf("%c",str[strlen(str)-19]); printf("%c",str[strlen(str)-20]); printf("%c",str[strlen(str)-21]); printf("%c",str[strlen(str)-22]); printf("%c",str[strlen(str)-23]); printf("%c",str[strlen(str)-24]); printf("%c",str[strlen(str)-25]); printf("%c",str[strlen(str)-26]); printf("%c",str[strlen(str)-27]); printf("%c",str[strlen(str)-28]); printf("%c\n",str[strlen(str)-29]); printf("Choose the character you want to search\n"); scanf("%d",&x); x = getchar(); printf("The character is %d\n",x); return 0; } [ / code ] 1
imitheos Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 char str[31]; int main() Με ποιο σκεπτικό δήλωσες εδώ την str ? Η δήλωση της main είναι λίγο καλύτερη από αυτήν που βλέπουμε συχνά αλλά και πάλι δεν είναι σωστή (πολύ πιθανώς εδώ να φταίει ο καθηγητής σου). Εδώ βλέπεις μια "παλιά" και μια "conforming" έκδοση της δήλωσης. Καλό είναι να χρησιμοποιείς την δεύτερη "int main(void)". gets(str); Η gets δεν πρέπει να χρησιμοποιείται αλλά στο πλαίσιο τώρα του προγράμματος δεν πειράζει. printf("You typed \"%s\".\n", str); printf("The lenght is %d\n", strlen(str)); printf("The first character is %c\n",str[0]); printf("The last character is %c\n",str[strlen(str)-1]); printf("%c",str[strlen(str)-1]); ...... printf("%c\n",str[strlen(str)-29]); Αφού τυπώνεις πρώτα ολόκληρη την είσοδο μετά γιατί τυπώνεις ένα ένα τους χαρακτήρες ? Επίσης ανακυκλώσεις δεν έχετε μάθει ? Αν το str είχε μέγεθος 230 θα είχες γράψει 230 φορές printf ? Η strlen βρίσκει το μέγεθος διατρέχοντας όλη τη περιοχή μέχρι να βρει τον χαρακτήρα '\0' οπότε για μια είσοδο Ν χαρακτήρων την τρέχεις Ν φορές και κάθε φορά διατρέχει Ν χαρακτήρες. Τρέξε την μια φορά και αποθήκευσε το αποτέλεσμα σε μια μεταβλητή που θα χρησιμοποιείς από εκεί και πέρα. Το πρόγραμμα βέβαια έχει χειρότερα "κακά" από τη χρήση της strlen απλά το αναφέρω και αυτό. printf("Choose the character you want to search\n"); scanf("%d",&x); x = getchar(); Ζητάς από το χρήστη μια ακέραια τιμή και μετά λες στην getchar να γράψει πάνω στην x σβήνοντας ό,τι είχε πριν. Γιατί το κάνεις αυτό ? Τουλάχιστον δεν ακολούθησες τη πρόταση του δασκάλου και δεν δήλωσες ως char το x αλλά από τύχη το δήλωσες σωστά σαν int Ο καθηγητής πρότεινε να χρησιμοποιήσεις την getchar για να λάβεις τον χαρακτήρα αλλά εσύ έχεις την scanf για αυτή τη δουλειά (με λάθος format). Οπότε διάλεξε μία από τις δύο. Από εκεί και πέρα θέλεις μια ανακύκλωση που να διατρέχει όλους τους χαρακτήρες του str και να ελέγχει με τον == όπως σου λέει για τον χαρακτήρα προς αναζήτηση που έδωσε τώρα ο χρήστης. Αν τον βρίσκει θα εμφανίζει ένα μήνυμα και θα σταματάει. Μια ιδέα για τον κώδικα μπορείς να πάρεις από αυτό που έγραψε ο star_light. Δεν χρειάζεσαι "sentinel" και λογικά θα σε βολέψει καλύτερα την ανακύκλωση να την κάνεις με array indexing αντί για pointer όπως δείχνει το παραπάνω. 1
Star_Light Δημοσ. 12 Νοεμβρίου 2013 Δημοσ. 12 Νοεμβρίου 2013 Ναι έχει δικιο ο imitheos sorry. Δεν χρειάζεται το sentinel γιατι αμα βρεθει ο χαρακτήρας η συνάρτηση επιστρέφει : #include<stdio.h> #include<ctype.h> // Για getchar αν θυμαμαι καλα. #define LEN ... // ΣΤΙς ΤΕΛΙτσες βαζεις οτι αριθμό θες καθε φορά σαν μηκος πινακα int main(void) { char arr[LEN]={'\0'}; /* εντολες εδω για το γεμισμα του πινακα και ζητας απο τον χρηστη να δωσει τον χαρακτηρα ελέγχου αν δεν τον δινει η εκφωνηση. Αν τον δινει βαζεις αυτον στην θέση του 'c' μεσα στο loop της συνάρτησης. */ // κληση συνάρτησης και επιστροφη return 0; } void character_searching( char *arr) /* Ονομα συνάρτησης που δηλώνει την λειτουργια της. */ { for( int i = 0; i < LEN; i++) // int i μεσα στο for σε C99. if( arr[i] == 'c' ) { printf("Ο xaraktiras vrethike stin thesi arr[%d] kai einai o : %c " , i , arr[i]); return; } printf("There is no %c character in the string" , control_ch); return; } Το return επιστρεφει τον ελεγχο του προγραμματος στην main. Αρα δεν χρειάζεται το sentinel. Εγραψα χαζομάρα. Υπάρχει βεβαια και το εξης ζητημα αμα ο χρηστης δωσει λιγοτερους απο LEN χαρακτηρες το προγραμμα κάνει ασκοπη αναζητηση εντος οριων μεν ασκοπη δε.
aikat90 Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 παιδια βρισκομαι στο ιδιο τμημα απλα δεν θελει να χρησιμοποισουμε επαναληψη για να καταλαβουμε ποσο αναγαικα ειναι??
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα