DarknowE Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Καλημέρα Φτιάχνω ένα πρόγραμμα για μια εργασία και έχω κολλήσει σε κάτι λάθη που μου βγάζει ο compiler :\ Το πρόγραμμα είναι: >#include <stdio.h> #include <stdlib.h> #include <time.h> char pinakasx[3][3],choice ; int pinakasa[3][3],i,j; int calc_freq(char pinakas[3][3], char my_choice), apot, ak; int my_conv(char ch); int pinakasconv[3][3]; int metr=0; int main() { /* arxikopoihsh pinaka*/ srand ((int)time(NULL)); for(i=0;i<3;i++) {for(j=0;j<3;j++) {pinakasa[i][j] = rand()/RAND_MAX ;} /*o xarakthras pou 8a brw*/ printf("plhktrologise enan xarakthra"); scanf("%c",& choice); /*ektupwsh tou pinaka twn xarakthrwn*/ for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%c", pinakasx[i][j]);}} /*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/ apot = calc_freq(pinakasx,choice); printf("%c","character",choice); printf("%d","located",apot,"times"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%d",pinakasa[i][j]); }} /*gurnane oi akeraioi gia na ftia3w ton pinaka*/ for(i=0;i<3;i++) {for(j=0;j<3;j++) {pinakasconv[i][j] = my_conv(pinakasx[i][j]); }} return 0;} [b]/*prwth sunarthsh*/[/b] int calc_freq (char pinakas[3][3], char my_choice) {int i; j; ([u][b]46)[/b][/u] for(i=0;i<3;i++) {for(j=0;j<3;j++) {if (pinakasx[i][j]== my_choice) {metr=metr+1;}}} return metr;} [b]/*deuterh sunarthsh*/[/b] int my_conv(char ch) {int ak; ak= 'ch'; return ak;} [b][u](57)[/u][/b] Το πρόβλημα είναι στην πρώτη και στην δεύτερη συνάρτηση που μου βγάζει 46 a function-definition is not allowed here before '{' token 46 expected `,' or `;' before '{' token 57 expected declaration before '}' token ευχαριστώ εκ τον προτέρων
georgemarios Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Στη γραμμή 18 βάλε ακόμα ένα } Δηλαδή >{pinakasa[i][j] = rand()/RAND_MAX ;}}
Candlemass Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Επίσης, θα σου πρότεινα στις εμφωλεύσεις να αφήνεις τις αγκύλες μόνες τους στη γραμμή και τον υπόλοιπο κώδικα από κάτω. Έτσι δεν θα ξεχνάς να τις κλείνεις, π.χ. : > for(i=0;i<3;i++) { for(j=0;j<3;j++) { pinakasa[i][j] = rand()/RAND_MAX; } }
georgemarios Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 'Η και ακόμα καλύτερα, αν χρησιμοποιείς IDE της προκοπής όπως το Netbeans που έχουν λειτουργία για code formatting, πάτα ένα Alt-Shift-F και θα σου "σιδερώσει" το κώδικα αυτόματα. Θα νοιώσεις άρχοντας μετά .
Candlemass Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 ^ Όντως, ακόμα καλύτερο αυτό, αλλά επειδή νομίζω ότι πρόκειται για άσκηση σε κάποια σχολή, όταν έρθει η ώρα να τα γράψει σε χαρτί τι γίνεται;
DarknowE Δημοσ. 29 Ιανουαρίου 2012 Μέλος Δημοσ. 29 Ιανουαρίου 2012 κοίτα τι σου κάνει μια αγκύλη.. διόρθωσα το τμήμα του κώδικα αλλά μου τρέχει μέχρι εκεί που πληκτρολογώ τα στοιχεία του πίνακα... καμιά ιδέα? >#include <stdio.h> #include <stdlib.h> #include <time.h> char pinakasx[3][3],choice ; int pinakasa[3][3],i,j; int calc_freq(char pinakas[3][3], char my_choice), apot, ak; int my_conv(char ch); int pinakasconv[3][3]; int metr=0; int main() { /* arxikopoihsh pinaka*/ printf("plhktrologise ta stoixeiea tou pinaka"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {scanf("%c\n", &pinakasx[i][j]) ;}} /*o xarakthras pou 8a brw*/ printf("plhktrologise enan xarakthra"); scanf("%c",& choice); /*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/ apot = calc_freq(pinakasx,choice); printf("%c\n","character",choice); printf("%d\n","located",apot,"times"); for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%d",pinakasa[i][j]); }} /*ektupwsh tou pinaka twn xarakthrwn*/ for(i=0;i<3;i++) {for(j=0;j<3;j++) {printf("%c\n", pinakasx[i][j]);}} /*gurnane oi akeraioi gia na ftia3w ton pinaka*/ for(i=0;i<3;i++) {for(j=0;j<3;j++) {pinakasconv[i][j] = my_conv(pinakasx[i][j]); }} return 0;} /*prwth sunarthsh*/ int calc_freq (char pinakas[3][3], char my_choice) {int i; j; for(i=0;i<3;i++) {for(j=0;j<3;j++) {if (pinakasx[i][j]== my_choice) {metr=metr+1;}}} return metr;} /*deuterh sunarthsh*/ int my_conv(char ch) {int ak; ak= 'ch'; return ak;}
Candlemass Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Έχεις αφήσει κενό στο "& choice", βγάλτο...
DarknowE Δημοσ. 29 Ιανουαρίου 2012 Μέλος Δημοσ. 29 Ιανουαρίου 2012 Ναι είναι εργασία για κάποια σχολή απλά μετράω πόσες ανοίγω και πόσες κλείνω..ο αριθμός πρέπει να είναι προφανώς ο ίδιος.. παρ'όλα αυτά μάλλον πάλι θα την παραδώσω χωρίς να τρέχει...δεν ξέρω τι έχει :\ διόρθωσα το λάθος με choice αλλά από κει και πέρα..
Star_Light Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Τι εννοεις σου τρεχει μεχρι εκει που πληκτρολογεις τα στοιχεια? παιζει να σου εμφανιζει το αποτελεσμα δηλαδη αλλα να κλεινει χωρις να προλαβαινεις να το δεις ?
DarknowE Δημοσ. 29 Ιανουαρίου 2012 Μέλος Δημοσ. 29 Ιανουαρίου 2012 Αρχικά ο χρήστης πληκτρολογεί τα στοιχεία του πίνακα..μετά πρέπει να πληκτρολογήσει και την επιλογή ενός στοιχείου αλλά δεν φτάνει μέχρι εκεί κλείνει..
Star_Light Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Αρχικά ο χρήστης πληκτρολογεί τα στοιχεία του πίνακα..μετά πρέπει να πληκτρολογήσει και την επιλογή ενός στοιχείου αλλά δεν φτάνει μέχρι εκεί κλείνει.. Το χεις τιγκάρει στις αγκύλες το πρόγραμμα Όταν στο σώμα της for χρησιμοποιείς μονο μια εντολή δεν χρειάζεσαι αγκύλες. > for(i=0; i<1; i++) printf("Hello"); > for(i=0; i<1; i++) for(j=0; j<2; j++) printf("Hello"); οχι πως ειναι αυτο το προβλημα... αλλα τουλαχιστον θα τον "καθαρισεις " λιγο μπας και δεις πιο ευκολα αν σε καποιο σημειο υπάρχει σκαλωμα.
migf1 Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Το 1ο πράγμα που πρέπει να μάθει κανείς σε οποιαδήποτε γλώσσα προγραμματισμού είναι να γράφει ευανάγνωστο κώδικα. Απορώ πως βγάζεις άκρη κι εσύ ο ίδιος εκεί μέσα! Αυτό δεν είναι C, αυτό είναι ορνιθοσκαλίσματα Κινέζικου νηπίου... χωρίς στοίχιση, χωρίς σχόλια, με ακαταλαβίστικα ονόματα μεταβλητών, με, με, με ... Πέρα από αυτό, ο κώδικάς σου έχει πάρα πολλά λάθη μέσα, τόσο σε επίπεδο δομής όσο και σε επίπεδο διαχείρισης και χρήσης των στάνταρτ χαρακτηριστικών της γλώσσας. Δυο πρόχειρα παραδείγματα είναι όλη η συνάρτηση: my_conv() και το γεγονός πως στη συνάρτηση calc_freq() άλλον πίνακα περνάς σαν όρισμα κι άλλον διαχειρίζεσαι στο σώμα της συνάρτησης. Επίσης, σε γενικές γραμμές οι καθολικές μεταβλητές σχεδόν "απαγορεύονται στη C, κλπ Με τέτοιο στυλ γραφής θα σε πάρει ως και τον 10πλάσιο χρόνο να βρεις που είναι τα προβλήματα. Θα σου γλιτώσω λίγο χρόνο, αραιώνοντας & στοιχίζοντας σωστά τον κώδικά σου, και βάζοντας ονομασίες στους πίνακες που να βοηθούν στον γρήγορο εντοπισμό τους κατά την ανάγνωση του κώδικα. Αλλά η υλοποίηση αυτή, είτε είναι σωστά στοιχισμένη είτε όχι δύσκολα βαθμολογείται πάνω από τη μονάδα! > #include <stdio.h> #include <stdlib.h> #include <time.h> /* katholikes metablites ΒΑΛΤΕΣ ΟΛΕΣ ΣΤΗΝ MAIN() & ΑΛΛΑΞΕ ΑΝΛΑΟΓΑ ΤΟΝ ΥΠΟΛΟΙΠΟ ΚΩΔΙΚΑ */ char xpin[3][3], choice; /* γραψε τι είναι ο πίνακας xpin[][] */ int apin[3][3], i, j; /* γραψε τι είναι ο πίνακας apin[][] */ int convpin[3][3]; /* γραψε τι είναι ο πίνακας convpin[][] */ int metr = 0, apot, ak; /* γράψε τι είναι αυτες οι μεταβήτές */ /* protypa synarthsewn */ int calc_freq( char pinakas[3][3], char my_choice ); int my_conv( char ch ); /* ---------------------------------------------------------- * * ---------------------------------------------------------- */ int main( void ) { /* arxikopoihsh pinaka*/ printf( "plhktrologise ta stoixeia tou pinaka\n" ); for (i=0; i < 3; i++) for (j=0; j<3; j++) scanf( "%c\n", &xpin[i][j] ); /*o xarakthras pou 8a brw */ printf( "plhktrologise enan xarakthra" ); scanf( "%c", &choice ); /*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/ apot = calc_freq(xpin,choice); printf( "%c\n","character", choice ); printf( "%d\n", "located", apot, "times"); for (i=0; i < 3; i++) for (j=0; j < 3; j++) printf("%d", apin[i][j] ); /*ektupwsh tou pinaka twn xarakthrwn*/ for (i=0; i < 3; i++) for(j=0;j<3;j++) printf( "%c\n", xpin[i][j] ); /*gurnane oi akeraioi gia na ftia3w ton pinaka*/ for (i=0; i < 3; i++) for (j=0; j < 3; j++) convpin[i][j] = my_conv( xpin[i][j] ); return 0; } /* ---------------------------------------------------------- * prwth sunarthsh * ΑΥΤΟ ΔΕΝ ΛΕΕΙ ΤΙΠΟΤΑ! ΓΡΑΨΕ ΜΕ 2 ΛΟΓΙΑ ΤΙ ΚΑΝΕΙ Η ΣΥΝΑΡΤΗΣΗ & ΤΙ ΕΠΙΣΤΡΕΦΕΙ * ---------------------------------------------------------- */ int calc_freq( char pinakas[3][3], char my_choice ) { int i; j; for (i=0; i < 3; i++) for (j=0; j < 3; j++) if (xpin[i][j] == my_choice) metr = metr + 1; return metr; } /* ---------------------------------------------------------- * deuterh sunarthsh * ΑΥΤΟ ΔΕΝ ΛΕΕΙ ΤΙΠΟΤΑ! ΓΡΑΨΕ ΜΕ 2 ΛΟΓΙΑ ΤΙ ΚΑΝΕΙ Η ΣΥΝΑΡΤΗΣΗ & ΤΙ ΕΠΙΣΤΡΕΦΕΙ * ---------------------------------------------------------- */ int my_conv( char ch ) { int ak; ak = 'ch'; return ak; }
Star_Light Δημοσ. 29 Ιανουαρίου 2012 Δημοσ. 29 Ιανουαρίου 2012 Βασικα ολα αυτα που ειπε ο migf1 Για ονομασιες μεταβλητων εγω θα προτεινα επισης καποιος να σκεφτεται και τα ονοματα στα αγγλικα. Πχ έχεις μια μεταβλητη την οποια εχεις ονομασει apot ναι οκ εγω που ειμαι Ελληνας καταλαβαινω πως αυτο θα σημαινει αποτελεσμα αλλα αμα χρειαστει να μιλησεις και με ξενους προγραμματιστες τι γινεται? Εξαρχης λοιπον αντι για apot ονομασε την reslt με ενα /result διπλα ή και χωρις αυτο και εισαι οκ.
DarknowE Δημοσ. 29 Ιανουαρίου 2012 Μέλος Δημοσ. 29 Ιανουαρίου 2012 Ωραία θα προσπαθήσω να κάνω κάποιες αλλαγές από αυτές...μπας και βοηθήσουν
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα