DoukiMan Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 καλησπερα παιδια θα ηθελα την βοηθεια σας για μια ασκηση στην C. Η εκφωνηση λεει Σε ένα πίνακα με 100 θέσεις να αποθηκεύονται τυχαίοι αριθμοί που αντιπροσωπεύουν ρίψεις ζαριού. Να εμφανίζονται τα στοιχεία του πίνακα (20 σε κάθε γραμμή της οθόνης) και να εμφανίζονται οι συχνότητες (το ποσοστό) εμφάνισης κάθε αποτελέσματος του ζαριού . #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int ar,i,j,pin[20][5],plithos,sin[6]; //dilwsi disdiastatou pinaka .wste stin emfanisi na vgainoun 5 seires kai 20 stiles apo zaries srand ( time(0) ); for(i=0;i<20;i++) { for(j=0;j<5;j++) { pin[i][j]=rand()%6+1; //tixaioi arithmoi-zaries apo to 1 ws to 6 topothetountai ston disdiastato pinaka printf("%4d",pin[i][j]); //to ena zitoumeno tis askisis na emfanizontai ta stoixeia tou pinaka-20 se kathe grammi } } for(ar=1;ar<=6;ar++){ for(i=0;i<20;i++){ for(j=0;j<5;j++){ if (pin[i][j]==ar){ sin[ar]++;} } } printf("o arithmos %d exei pososto emfanishs %d tis ekato\n",ar,sin[ar]); } printf("\n\n"); system("PAUSE"); return 0; } ολα ωραι ολα καλα.αλλα στο τελος...... οταν εμφανιζει τα ποσοστα τα 2 και 5 λειτουργουν σωστα ενω ολα τα αλλα λαθος.μπορειτε να βοηθησετε? Εχω και αλλη μια που λεει Να γραφεί πρόγραμμα με το οποίο να ζητείται από τον χρήστη να εισάγει ένας ακέραιος αριθμός Κ που είναι μεγαλύτερος του 20. Aν ο αριθμός που εισάγει ο χρήστης δεν είναι μεγαλύτερος του 20 να εμφανίζεται κατάλληλο μήνυμα και ο χρήστης να εισάγει πάλι νέο αριθμό. Κατόπιν ανάλογα με την επιλογή του χρήστη να εκτελούνται τα παρακάτω. · Αν εισαχθεί ο χαρακτήρας a ή Α να εμφανίζεται το άθροισμα των αριθμών από το 1 έως το Κ · Αν εισαχθεί ο χαρακτήρας b ή B να εμφανίζεται οι ζυγοί αριθμοί από το 1 έως το Κ · Αν εισαχθεί ο χαρακτήρας t ή T να τελειώνει το πρόγραμμα. · Αν εισαχθεί οποιοσδήποτε άλλος χαρακτήρας να εμφανίζεται μήνυμα προειδοποίησης για το ποιοι χαρακτήρες είναι αποδεκτοί και να επαναλαμβάνεται πάλι η διαδικασία. Να γίνει χρήση της εντολής switch που θα αλλάζει την ροή του προγράμματος σύμφωνα με την επιλογή του χρήστη #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) {int k,j,x; char gr; printf("Dwse enan akeraio arithmo K megalitero tou 20\n"); scanf("%d",&k); fflush(stdin); while (k<=20) { printf("O arithmos k pou dwsate einai mikroteros i isos tou 20.parakalw eisagete enan neo arithmo megalitero tou 20\n"); scanf("%d",&k); fflush(stdin); } printf("Dwse ena gramma\n"); scanf("%c",&gr) ; switch(gr) { case'a'||'A': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; case 'b'||'B': j=1; while(j<=k) { x=k-(k-j); if (x%2=0){ printf("%d",x); } j++; } break; case 't'||'T': break; default: printf("O xaraktiras pou eisagate den einai apodektos.Oi apodektoi xarakthres einai oi a/A,b/B kai oi t/T\n"); } system("PAUSE"); return 0; } εχω δοκιμασει τα παντα αλλα αυτη η ρημαδα η switch κατι παθενει και δεν δουλευει και κρασαρει το προγραμμα.
nucleus Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 εχω δοκιμασει τα παντα αλλα αυτη η ρημαδα η switch κατι παθενει και δεν δουλευει και κρασαρει το προγραμμα. H switch μέσα στα case δεν κάνει έλεγχο με AND ή ΟR όπως η if οπότε το case'a'||'A': είναι λάθος.Πρέπει να έχεις ξεχωριστά case για κάθε δυνατή περίπτωση έτσι το παραπάνω πρέπει να γίνει case 'a': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; case 'A': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break;
imitheos Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 for(ar=1;ar<=6;ar++){ for(i=0;i<20;i++){ for(j=0;j<5;j++){ if (pin[i][j]==ar){ sin[ar]++;} } } printf("o arithmos %d exei pososto emfanishs %d tis ekato\n",ar,sin[ar]); } ολα ωραι ολα καλα.αλλα στο τελος......οταν εμφανιζει τα ποσοστα τα 2 και 5 λειτουργουν σωστα ενω ολα τα αλλα λαθος.μπορειτε να βοηθησετε? Γιατί η συχνότητα δεν αυξάνεται στο πρώτο loop που υπολογίζεται ο τυχαίος και χρειάζονται άλλοι 3 βρόχοι ? Άσχετο όμως αυτό. Κάθε φορά που βρίσκεις μια ζαριά αυξάνεις την τάδε θέση του sin. Μηδένισες όμως τον sin ? Όταν τρέχεις το πρόγραμμα μπορεί το sin[5] να έχει τιμή 47305 και μετά να προστεθούν οι 21 εμφανίσεις της ζαριάς. Ίσως η θέση του 2 και 5 στη μνήμη να είχε μηδενική τιμή αρχικά (ή κάπου κοντά στο μηδέν) οπότε και σου φαίνεται σωστό.
DoukiMan Δημοσ. 3 Ιουνίου 2013 Μέλος Δημοσ. 3 Ιουνίου 2013 H switch μέσα στα case δεν κάνει έλεγχο με AND ή ΟR όπως η if οπότε το case'a'||'A': είναι λάθος.Πρέπει να έχεις ξεχωριστά case για κάθε δυνατή περίπτωση έτσι το παραπάνω πρέπει να γίνει case 'a': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; case 'A': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; ευχαριστω για την απαντηση. μηπως ξερετε πως μπορει να γινει το if (x%2=0) ?? Γιατί η συχνότητα δεν αυξάνεται στο πρώτο loop που υπολογίζεται ο τυχαίος και χρειάζονται άλλοι 3 βρόχοι ? Άσχετο όμως αυτό. Κάθε φορά που βρίσκεις μια ζαριά αυξάνεις την τάδε θέση του sin. Μηδένισες όμως τον sin ? Όταν τρέχεις το πρόγραμμα μπορεί το sin[5] να έχει τιμή 47305 και μετά να προστεθούν οι 21 εμφανίσεις της ζαριάς. Ίσως η θέση του 2 και 5 στη μνήμη να είχε μηδενική τιμή αρχικά (ή κάπου κοντά στο μηδέν) οπότε και σου φαίνεται σωστό. χιλια ευχαριστω.πραγματικα εχω φαει πολλες ωρες μου εχουν σπασει τα νευρα.χιλια ευχαριστω και παλι.. η πρωτη ασκηση λύθηκε τωρα αν μπορειτε να βοηθησετε και στην αλλη
nucleus Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 ευχαριστω για την απαντηση. μηπως ξερετε πως μπορει να γινει το if (x%2=0) ?? χιλια ευχαριστω.πραγματικα εχω φαει πολλες ωρες μου εχουν σπασει τα νευρα.χιλια ευχαριστω και παλι.. η πρωτη ασκηση λύθηκε τωρα αν μπορειτε να βοηθησετε και στην αλλη To % είναι ο τελεστής modulo σωστά?Υπάρχουν 2 τρόποι Τρόπος 1:Προσωρινή μεταβλητή int j = x % 2 if j = 0 Τρόπος 2:Ο απευθείας που προσπάθησες να κάνεις χρησιμοποιώντας τον τελεστή ανάθεσης = και όχι τον τελεστή ελέγχου ισότητας == if (x%2 == 0)
DoukiMan Δημοσ. 3 Ιουνίου 2013 Μέλος Δημοσ. 3 Ιουνίου 2013 To % είναι ο τελεστής modulo σωστά?Υπάρχουν 2 τρόποι Τρόπος 1:Προσωρινή μεταβλητή int j = x % 2 if j = 0 Τρόπος 2:Ο απευθείας που προσπάθησες να κάνεις χρησιμοποιώντας τον τελεστή ανάθεσης = και όχι τον τελεστή ελέγχου ισότητας == if (x%2 == 0) εισαι τεραστιος. παει και οι δευτερη χιλια ευχαριστω με εχεις σωσει πραγματικα.ξερεις μηπως οταν παταω b βγαζει τα 24681012 κολλητα πως μπορω να αυξησω το κενο μεταξυ τους?
nucleus Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 εισαι τεραστιος. παει και οι δευτερη χιλια ευχαριστω με εχεις σωσει πραγματικα.ξερεις μηπως οταν παταω b βγαζει τα 24681012 κολλητα πως μπορω να αυξησω το κενο μεταξυ τους? Όταν πατάς το b εκτελείται ο παρακάτω κώδικας j=1; while(j<=k) { x=k-(k-j); if (x%2=0){ printf("%d",x); } j++; } Στον παραπάνω κώδικα ποια γραμμή εμφανίζει την έξοδο σου?Μήπως να δεις λίγο τα ορίσματα της? είναι η printf?Ποιό όρισμα στην printf καθορίζει πως θα είναι η έξοδος της?
DoukiMan Δημοσ. 3 Ιουνίου 2013 Μέλος Δημοσ. 3 Ιουνίου 2013 Όταν πατάς το b εκτελείται ο παρακάτω κώδικας j=1; while(j<=k) { x=k-(k-j); if (x%2=0){ printf("%d",x); } j++; } Στον παραπάνω κώδικα ποια γραμμή εμφανίζει την έξοδο σου?Μήπως να δεις λίγο τα ορίσματα της? είναι η printf?Ποιό όρισμα στην printf καθορίζει πως θα είναι η έξοδος της? ακυρη ερωτηση η προηγουμενη το εφτιαξα. ευχαριστω παρα πολυ για την βοηθεια 1
albNik Δημοσ. 3 Ιουνίου 2013 Δημοσ. 3 Ιουνίου 2013 case 'a': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; case 'A': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; Για μην τα γράφεις διπλά αυτό γράφεται case 'a': case 'A': j=1; while(j<=k) { x=k-(k-j); printf("%d+",j); j++; } break; 1
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Για μην τα γράφεις διπλά αυτό γράφεται case 'a': case 'A': [offtopic] Ώρες ώρες ρε παιδί μου λες και κολάει το μυαλό. Όταν είδα τον κώδικα το πρώτο που σκέφτηκα ήταν η tolower. Ούτε καν πήγε το μυαλό μου σε αυτό που έγραψες και φυσικά είναι το πιο απλό/σωστό. [/offtopic] συγγνωμη για την ενοχληση μηπως θα μπορουσες να με βοηθησεις με μια ασκηση στην C. Η εκφωνηση ειναι α γραφεί πρόγραμμα που να κάνει απαλοιφή του πρώτου και του τελευταίου ψηφίου ενός ακέραιου αριθμού Μ. Ο αριθμός Μ εισάγεται από το πληκτρολόγιο και πρέπει να είναι τουλάχιστον 6 ψήφιος. Αν ο αριθμός είναι αρνητικός να μετατρέπεται στον αντίστοιχο θετικό. Για την εισαγωγή του κατάλληλου αριθμού M να γίνει χρήση της εντολής while. Κατόπιν να εμφανίζεται ο αριθμός χωρίς το πρώτο και τελευταίο ψηφίο του. (Να γίνει χρήση των τελεστών διαίρεσης και υπολοίπου (%) ή οποιασδήποτε άλλης κατάλληλης διαδικασίας). #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); while(M) { M=M/10; metra++; } printf("To sinolo twn psifiwn einai:\n%d\n",metra); system("PAUSE"); return 0; } εχω φτασει μεχρι αυτο το σημειο οπου μετραει τα ψηφια του αριθμου Μ.ομως δεν μπορω να βγαλω με τιποτα αν ειναι κατω απο 6 ψηφια πρεπει να κανει παλι την επαναληψη Γιατί είναι δύσκολο να ελέγξεις αν είναι τουλάχιστον εξαψήφιος ? Ποιος είναι ο μικρότερος εξαψήφιος αριθμός ? Ή αν σε βολεύει διαφορετικά ποιος είναι ο μεγαλύτερος πενταψήφιος ? Βάλε ένα if που να ελέγχει για αυτή τη συνθήκη. Επίσης που ελέγχεις αν είναι αρνητικός και τον κάνεις θετικό ? Ένας τρόπος που απλοποιεί τέτοιες ασκήσεις είναι να μετατρέπεται ο αριθμός σε αλφαριθμητικό οπότε μετά μπορείς πολύ εύκολα να κόβεις και να ράβεις.
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 παιδια αν μπορειτε να με βοηθησετε σε ακομα μια. η εκφωνηση ειναι Να γραφεί πρόγραμμα που να κάνει απαλοιφή του πρώτου και του τελευταίου ψηφίου ενός ακέραιου αριθμού Μ. Ο αριθμός Μ εισάγεται από το πληκτρολόγιο και πρέπει να είναι τουλάχιστον 6 ψήφιος. Αν ο αριθμός είναι αρνητικός να μετατρέπεται στον αντίστοιχο θετικό. Για την εισαγωγή του κατάλληλου αριθμού M να γίνει χρήση της εντολής while. Κατόπιν να εμφανίζεται ο αριθμός χωρίς το πρώτο και τελευταίο ψηφίο του. (Να γίνει χρήση των τελεστών διαίρεσης και υπολοίπου (%) ή οποιασδήποτε άλλης κατάλληλης διαδικασίας). #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if(M<0) M*=-1; while(M) { M=M/10; metra++; } printf("To sinolo twn psifiwn tou arithmou M einai:\n%d\n",metra); system("PAUSE"); return 0; } την εχω φτασει μεχρι εδω οπου βρισκει τον αριθμο των ψηφιων ενος αριθμου και αν ειναι αρνητικος τον κανει θετικο(πιστευω ειναι σωστο).αλλα δεν μου βγαινει αν ειναι λιγοτερο απο 6 ψηφια να ξαναζηταει αριθμο
bird Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Βάλε το κομάτι printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if(M<0) M*=-1; while(M) { M=M/10; metra++; } σε ένα άλλο while ή do-while με την κατάλληλη συνθήκη να τρέχει για όσο το metra που θα βρεις είναι μικρότερο του 6.
παπι Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Για τον αριθμο των ψηφιων μπορεις να παιξεις με τα μαθηματικα. πχ if ( (int)floor(log10(abs(input))) + 1 == 6) { ///todo }
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Βάλε το κομάτι printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if(M<0) M*=-1; while(M) { M=M/10; metra++; } σε ένα άλλο while ή do-while με την κατάλληλη συνθήκη να τρέχει για όσο το metra που θα βρεις είναι μικρότερο του 6 . δεν βγαινει ουτε ετσι τιποτα.εχω τρελαθει δεν βγαινει με τιποτα. το μονο που βρηκα ειναι οτι για να απαληψεις το πρωτο ψηφιο του Μ κανεις Μ%10^1 και για να απαληψεις το τελευταιο ειναι Μ/10^1 αλλα δεν μπορω να βρω αυτο με τον αριθμο ψηφιων <6 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if (M<0) M*=-1; while(M) { M=M/10; metra++; } printf("To sinolo twn psifiwn einai:\n%d\n",metra); system("PAUSE"); return 0; }
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Βάλε το κομάτι σε ένα άλλο while ή do-while με την κατάλληλη συνθήκη να τρέχει για όσο το metra που θα βρεις είναι μικρότερο του 6 δεν βγαινει ουτε ετσι τιποτα.εχω τρελαθει δεν βγαινει με τιποτα Ιδέα μου είναι ή αυτός ο κώδικας είναι ολόιδιος με αυτόν που έδωσες στην αρχή ? Αυτό που κάνεις είναι απλά να βρίσκεις και να τυπώνεις τον αριθμό των ψηφίων. Σε ποιο σημείο ενσωμάτωσες την πρόταση του bird να ελέγχει αν είναι μικρότερο του 6 και να ξανατρέχει όλο το κομμάτι ?
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα