JdCZT Δημοσιεύτηκε Νοέμβριος 22, 2009 #1 Δημοσιεύτηκε Νοέμβριος 22, 2009 Παιδες φαινομενικα ειναι ΠΟΛΥ απλο αλλα μετα απο τοσες ωρες ασκησεων λαλησα και δεν μπορω πλεον να σκεφτω...Με λιγα λογια το προγραμμα υποτειθεται οτι πρεπει να δεχεται χαρακτηρες συνεχεια μεχρι το πρωτο '*' απο το οποιο και μετα θα μετραει το πληθος των επομενων χαρακτηρων μεχρι να βρει το δευτερο '*'...οπου και θα εκτυπωνει αυτοματα το πληθος που προηγουμενως μετρησε...(χωρις να παταει ο χρηστης Enter....δλδ με το που θα βλεπει το δευτερο'*'----->Θανατος.) #include<stdio.h> int main (void) { int a,g; char x; printf("dwse sunexeia xaraktires:"); a=0; do { scanf("%c",&x); if(x='*') { g=0; do { scanf("%c",&x); g++; }while(x!='*'); a++; } } while(a!=2); printf("mesolavisan : %d grammata", g); return 0; } Στο παραπανω κομματι κωδικα γινονται ολα καλα αλλα μετα το δευτερο '*' πρεπει ο χρηστης να πατησει Enter για να του δωσει το αποτελεσμα...Ετσι οπως το σκεφτομαι μαλλον για καποιο λογο δεν "βλεπει" τον περιορισμο της εξωτερικης do-while....Οσοι πιστοι προσελθετε... Ευχαριστω προκαταβολικα παιδες... dokimi_3ask.rar
apostglen46 Νοέμβριος 22, 2009 #2 Νοέμβριος 22, 2009 με την getc θα πρεπει να το κανεις μου φενεται για να μην θελει enter........
JdCZT Νοέμβριος 23, 2009 Author #3 Νοέμβριος 23, 2009 με την getc θα πρεπει να το κανεις μου φενεται για να μην θελει enter........Με gets , getche και getchar.... oλα θελουν enter. :drool: Τι μπορει να φταιει...
tragikos Νοέμβριος 23, 2009 #5 Νοέμβριος 23, 2009 Με μια πρόχειρη ματιά θα έλεγα ότι το if(x='*') είναι ανάθεση τιμής στο x και έπρεπε να είναι if(x == '*'). Επίσης, το a πρέπει να το αυξήσεις 2 φορές για να βγει από την πρώτη do while ενώ η λογική σου θέλει μόνο μία. Κατά τ' άλλα αν γίνεται να χρησιμοποιείς το code tag για να μας δείχνεις τον κώδικα ώστε να είναι πιο ευανάγνωστος. edit: Κάπως έτσι θα πρότεινα να το γράψεις (αν θες φυσικά) και εξηγώ γιατί: Οι μεταβλητές σου καλό είναι να έχουν λογικά ονόματα, ώστε να μπορεί να το καταλάβει ο καθένας οποιοδήποτε μέρος του κώδικα και να διαβάζει. (βλ characters για το πλήθος χαρακτήρων) Όταν θέλεις μία λογική συνθήκη και όχι πλήθος βημάτων για να βγεις από μια while καλό είναι να χρησιμοποιείς boolean μεταβλητές των οποίων την τιμή θα αλλάζεις όταν θέλεις να βγεις (βλ endProgram) Με την δεύτερη do while που χρησιμοποιούσες, ουσιαστικά αν ο χρήστης μετά το πρώτο * πατούσε καπάκι και το δεύτερο, εσύ θα μετρούσες 1 χαρακτήρα αφού θα την εκτελούσες τουλάχιστον μία φορά, ενώ δεν το θέλεις αυτό. Νομίζω ότι ο παρακάτω κώδικας θα παίξει, αλλά δεν τον έχω δοκιμάσει, καθώς έχω καιρό να γράψω σε c και δεν έχω και κάποιον compiler εδω. #include<stdio.h>int main (void) { int characters = 0; char input; bool endProgram = false; printf("dwse sunexeia xaraktires:"); do { scanf("%c", &input); if(input == '*') { scanf("%c", &input); while(input != '*') { characters++; scanf("%c", &input); } endProgram = true; //finished what the program should do after the second *, can now exit do while } } while(!endProgram); printf("mesolavisan : %d grammata", characters); return 0;}
JdCZT Νοέμβριος 23, 2009 Author #6 Νοέμβριος 23, 2009 Eυχαριστω παιδες για το ενδιαφερον....Σωστες οι παρατηρησεις θα φροντισω σε επομενα προγραμματα να γραφω ποιο κατανοητες μεταβλητες.Ετρεξα το κομματι κωδικα που εδωσες αλλα και παλι μετα το δευτερο '*' δεν πηγαινει στην printf,αλλα συνεχιζει να δεχεται χαρακτηρες μεχρι να πατησει ο χρηστης ENTER οπου και τερματιζει τελειως το cmd...κατι τετοια κουλα μου κανει με οποιο τροπο γραφω το κωδικα... που θα μ παει...Αν σκεφτειτε τιποτε αλλο καλοδεχουμενο....
apostglen46 Νοέμβριος 23, 2009 #7 Νοέμβριος 23, 2009 μα δεν χρεισιμοποιεις την getche ή getch.........
JdCZT Νοέμβριος 24, 2009 Author #8 Νοέμβριος 24, 2009 μα δεν χρεισιμοποιεις την getche ή getch......... Οντως με getche() δουλεψε...Ειμαι σιγουρος οτι την ειχα δοκιμασει αλλα πανω στη κουλαμαρα μου κατι δεν μου εβγαζε σωστα και την εγκατελειψα...Ευχαριστω παιδες για τη βοηθεια...θα επανερθω δρυμητερος...
stergi Νοέμβριος 24, 2009 #9 Νοέμβριος 24, 2009 Αν καταλαβα καλα σου κλεινει το cmd αποτομα.Δοκιμασε να βαλεις στο τελος της main() ή πριν απο το return 0; αυτη την εντολη: system("pause"); και κανε και #include <stdlib.h>
JdCZT Νοέμβριος 24, 2009 Author #10 Νοέμβριος 24, 2009 Αν καταλαβα καλα σου κλεινει το cmd αποτομα.Δοκιμασε να βαλεις στο τελος της main() ή πριν απο το return 0; αυτη την εντολη: system("pause"); και κανε και #include <stdlib.h>Καλα καταλαβες....Ειναι ενα θεμα που εχω καιρο τωρα και δεν καταλαβαινω το λογο...θα το δοκιμασω αν και εγω για να αποφυγω αυτο το αποτομο κλεισιμο εβαζα μια scanf και στην ουσια επρεπε να πατησεις ενα οποιοδηποτε πληκτρο και μετα Enter για να τερματισει το προγραμμα.
anthis Νοέμβριος 24, 2009 #11 Νοέμβριος 24, 2009 Αν κανεις compile και console run σε windows τοτε εφοσον χρησιμοποιησεις την getchar μπορεις λογικα να το τερματισεις με EOF δηλαδη Ctrl+Z (για linux ειναι Ctrl+D) Θα στο τερματιζει ετσι χωρις να φευγει το παραθυρο.. Πρεπει να βαλεις συνθηκη βεβαια εφοσον λαβει εντολη EOF να μην συνεχισει.. (αν πολυλογω και τα εχεις δοκιμασει ηδη αυτα ή δεν ειναι χρησιμα, τα γραφω απλα να υπαρχουν στο forum )
JdCZT Νοέμβριος 28, 2009 Author #12 Νοέμβριος 28, 2009 Share the knowledge...Οχι δεν το ηξερα Λοιπον παιδες καινουριο ποιο ευκολο απο το προηγουμενο.Ενα προγραμμα που υπολογιζει το επομενο υψος βαση του προηγουμενου.Το προηγουμενο ειναι h0 και το επομενο h1 με αρχικη τιμη h0=0.96;Eπισης εχω μια μεταβλητη c1 και τι διαφορα χρονου DT οπου τα εισαγει ο χρηστης.Aκομα εχω μια μεταβλητη x την οποια χρησιμοποιω για να υπολογιζω το πληθος των επαναληψεων που ειναι υποπολλαπλασια του 300 ετσι ωστε για παραδειγμα ο ελεγχος να γινεται παντα σε ενα βαθος χρονου 300 δευτερολεπτων.πχ αν DT=2 x=300/2=150.... 150 επαναληψεις με διαφορα χρονου 2 δευτερολεπτων....συνολο μετρησης 300 δευτερολεπτα. Το προβλημα: Δουλευει μονο με αρνητικες τιμες στο c1...Αμα του δωσω θετικες--->Κινεζικα Μηπως χανω κατι στην printf;;; Μηπως υπαρχει καποιος περιορισμος σε double μεταβλητες >0 που μου διαφευγει Μηπως εχω μπερδεψει τις βουρτσες με τις....μεταβλητες και δεν ξερω τι γραφω...οποια βοηθεια δεκτη...Και παλι ευχαριστω προκαταβολικα #include<stdio.h>#include<math.h>int main (void){ int i,x; double h0=0.96,h1,c1,DT; printf("Dwse ti stathera C1 kai ti diafora xronou DT:\n"); scanf("%lf",&c1); scanf("%lf",&DT); x=300/(int)DT; printf("Gia c1 : %0.2lf kai DT : %0.2lf , to ypsos einai h: \n",c1,DT); for(i=1;i<=x;i++) { h1=-c1*sqrt(h0)*DT+h0; printf("%0.2f %d \n",h1,i); h0=h1; } printf("Press any key and ENTER to exit."); scanf("%lf",&c1);return 0;} Ypologismos_ypsous_me_metavlito_vima.rar
Jaco Δεκέμβριος 1, 2009 #13 Δεκέμβριος 1, 2009 Δουλευει μονο με αρνητικες τιμες στο c1...Αμα του δωσω θετικες--->ΚινεζικαΜηπως χανω κατι στην printf;;; #include<stdio.h>#include<math.h>int main (void){ int i,x; double h0=0.96,h1,c1,DT; printf("Dwse ti stathera C1 kai ti diafora xronou DT:\n"); scanf("%lf",&c1); scanf("%lf",&DT); x=300/(int)DT; printf("Gia c1 : %0.2lf kai DT : %0.2lf , to ypsos einai h: \n",c1,DT); for(i=1;i<=x;i++) { h1=-c1*sqrt(h0)*DT+h0; [COLOR=Red][B]^[/B][/COLOR] printf("%0.2f %d \n",h1,i); h0=h1; } printf("Press any key and ENTER to exit."); scanf("%lf",&c1);return 0;}Βγάλε το μείον...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.