georgemarios Δημοσ. 28 Μαρτίου 2006 Δημοσ. 28 Μαρτίου 2006 οκ, τι βοηθεια θες, εχεις καταλαβει το παιχνιδι πως παιζεται; Σου λεει πως θα αναπαραστησεις το πινακα του παιχνιδιου (προφανως με int array[9][9], πχ αν array[2][5]==4, θα σημαινει οτι στην 3η γραμμη και 5η στηλη ειναι ο αριθμος 4. Για τις θεσεις που δεν εχει μπει ακομα αριθμος μπορεις να βαλεις πχ -1 ή κατι άλλο εκτος 0..9 ) Σου λεει πως θα οριζει κινησεις ο χρηστης, θα γραφει εντολες της μορφης (γραμμη, στηλη)=αριθμος. Αυτο μεσα στο προγραμμα θα μεταφραζεται ως array[γραμμη-1][στηλη-1] = αριθμος επειδη η αριθμηση των γραμμων και των στηλων στη C ξεκινα απο το 0 ενω ο χρηστης θα δίνει 1 για την πρωτη, 2 για την 2η κτλ. Πριν βαλεις τον αριθμο πρεπει να τσεκαρεις: 1) η θεση να ειναι αδεια δηλ array[γραμμη-1][στηλη-1]==-1 2) ολες οι θεσεις στην ιδια γραμμη να μην εχουν ηδη τον αριθμο που πας να βαλεις, αρα κανεις ενα λουπ για καθε μια απο τις θεσεις array[γραμμη-1][0..9] να ειναι != αριθμος 3) το ιδιο με το 2 αλλα για την ιδια στηλη, δηλ για τις array[0..9][στηλη-1] να ειναι != αριθμος 4)λιγο πιο ζορικο τωρα, ελεγχος για το υποτετραγωνο στο οποιο ανηκει η θεση. Πρεπει να βρεις σε ποιο υποτετραγωνο βρισκεται, πχ για το array[2][5] πρεπει να τσεκαρεις τις θεσεις που βρισκονται στις 3 πρωτες γραμμες και μεταξυ της 4ης και 6ης στηλης Εεε, χονδρικα αυτα, αν θες να ρωτησεις κατι συγκεκριμενο, εδω ειμαστε
spiner Δημοσ. 28 Μαρτίου 2006 Μέλος Δημοσ. 28 Μαρτίου 2006 ksereis ti ithela na rotiso, pos tha kano ton elegxo gia to oti o xristis prepei na dinei se poia tetragona kai poion arithmo na valei me aftin tin morfi: (x,y)=z; Efxaristo gia tin voithia sou
georgemarios Δημοσ. 28 Μαρτίου 2006 Δημοσ. 28 Μαρτίου 2006 για δες εδω, η get_user_input διαβαζει απο τη κονσολα χαρακτηρα-χαρακτηρα και ελεγχει αν το ινπουτ πληρει τις προΥποθεσεις. Αν ναι τοτε καταχωρει τις τιμες στο row, col και value ( o χρηστης βαζει input της μορφης (row,col)=value > bool get_user_input(int* row,int *col,int *value) { int c,pos=0; while((c=getchar())!=EOF) { switch(pos++) { case 0: if(c!='(') return false; break; case 1: if( c>='0'&& c<='9' ) *row = c-48; else return false; break; case 2: if(c!=',') return false; break; case 3: if( c>='0'&& c<='9' ) *col = c-48; else return false; break; case 4: if(c!=')') return false; break; case 5: if(c!='=') return false; break; break; case 6: if( c>='0'&& c<='9' ) *value = c-48; else return false; break; case 7: return true; } } return true; } για να την χρησιμοποιησεις: > int main(int argc, char* argv[]) { int row,col,val; if ( get_user_input( &row, &col, &val) ) printf("row=%d, col=%d, val=%d\n",row,col,val); else printf( "usage: (col,row)=val\n" ); return 0; }
spiner Δημοσ. 28 Μαρτίου 2006 Μέλος Δημοσ. 28 Μαρτίου 2006 sto else tha valo afto pou egrapses? afou prepei na ektiponei wrong input
georgemarios Δημοσ. 28 Μαρτίου 2006 Δημοσ. 28 Μαρτίου 2006 θα βαλεις οτι θες, ενα απλο παραδειγμα σου εβαλα.....
Sta Δημοσ. 28 Μαρτίου 2006 Δημοσ. 28 Μαρτίου 2006 Η προηγούμενη έκδοση ελαφρώς βελτιωμένη: > #include <stdio.h> #include <stdlib.h> /* flush to end of line return EOF upon EOF, 0 upon end-of-line*/ int flushln(int c) { int ch; if (c=='\n') return 0; while ('\n' != (ch = getchar()) && (EOF != ch)); return ch==EOF?EOF:0; } int get_user_input(int* row,int *col,int *value) { int c,pos=0; while((c=getchar())!=EOF) { switch(pos++) { case 0: if(c!='(') return flushln(c); break; case 1: if( c>='0'&& c<='9' ) *row = c-'0'; else return flushln(c); break; case 2: if(c!=',') return flushln(c); break; case 3: if( c>='0'&& c<='9' ) *col = c-'0'; else return flushln(c); break; case 4: if(c!=')') return flushln(c); break; case 5: if(c!='=') return flushln(c); break; case 6: if( c>='0'&& c<='9' ) *value = c-'0'; else return flushln(c); break; case 7: if (c!='\n') return flushln(c); return 1; } } return EOF; } int main(void) { int i,row,col,value; while ( (i=get_user_input(&row,&col,&value))!=1) { if (i==EOF) { printf("Exiting, found EOF\n"); exit(EXIT_SUCCESS); } else printf("Wrong input, try again\n"); } printf("You entered (%d,%d)=%d\n",row,col,value); getchar(); return 0; }
spiner Δημοσ. 29 Μαρτίου 2006 Μέλος Δημοσ. 29 Μαρτίου 2006 Η προηγούμενη έκδοση ελαφρώς βελτιωμένη: > #include <stdio.h> #include <stdlib.h> /* flush to end of line return EOF upon EOF, 0 upon end-of-line*/ int flushln(int c) { int ch; if (c=='\n') return 0; while ('\n' != (ch = getchar()) && (EOF != ch)); return ch==EOF?EOF:0; } int get_user_input(int* row,int *col,int *value) { int c,pos=0; while((c=getchar())!=EOF) { switch(pos++) { case 0: if(c!='(') return flushln(c); break; case 1: if( c>='0'&& c<='9' ) *row = c-'0'; else return flushln(c); break; case 2: if(c!=',') return flushln(c); break; case 3: if( c>='0'&& c<='9' ) *col = c-'0'; else return flushln(c); break; case 4: if(c!=')') return flushln(c); break; case 5: if(c!='=') return flushln(c); break; case 6: if( c>='0'&& c<='9' ) *value = c-'0'; else return flushln(c); break; case 7: if (c!='\n') return flushln(c); return 1; } } return EOF; } int main(void) { int i,row,col,value; while ( (i=get_user_input(&row,&col,&value))!=1) { if (i==EOF) { printf("Exiting, found EOF\n"); exit(EXIT_SUCCESS); } else printf("Wrong input, try again\n"); } printf("You entered (%d,%d)=%d\n",row,col,value); getchar(); return 0; } Se efxaristo polli gia tin voithia sou. Des mono ti provlima iparxei: An patiso (3,5)=2 to kataxorei An ksanapatiso (3,5)=6 stamataei.
georgemarios Δημοσ. 29 Μαρτίου 2006 Δημοσ. 29 Μαρτίου 2006 προφανως σταματαει, κοιταξες τον κωδικα να δεις τι κανει; Απλα σου δειχνουμε ενα παραδειγμα για το πως θα παιρνει το ινπουτ. Εσυ πρεπει να το τροποποιησεις ωστε να μπει στο παιχνιδι σου. Προσπαθησε να καταλαβεις τι κανει ο κωδικας και μη ζητας να σου δωσουμε την ασκηση ετοιμη. Κανε μια προσπαθεια, δειξε μας τι εκανες και να σε βοηθησουμε.
spiner Δημοσ. 29 Μαρτίου 2006 Μέλος Δημοσ. 29 Μαρτίου 2006 προφανως σταματαει' date=' κοιταξες τον κωδικα να δεις τι κανει;Απλα σου δειχνουμε ενα παραδειγμα για το πως θα παιρνει το ινπουτ. Εσυ πρεπει να το τροποποιησεις ωστε να μπει στο παιχνιδι σου. Προσπαθησε να καταλαβεις τι κανει ο κωδικας και μη ζητας να σου δωσουμε την ασκηση ετοιμη. Κανε μια προσπαθεια, δειξε μας τι εκανες και να σε βοηθησουμε.[/quote'] Oxi re pedia ego den zitisa na mou dosete tin askisi etoimi. Apla ego eipa oti afto den doulevei stin periptosi mou. Entaksei den peirazei tha to ftiakso.... Efxaristo polli pantos kai tous 2 sas...
Legionnaire Δημοσ. 29 Μαρτίου 2006 Δημοσ. 29 Μαρτίου 2006 Pedia gia sas..... Mipos mporei kaneis na me voithisei me mia askisi pou prepei na kano? Einai stin c. Opoios thelei kai mporei na me voithisei....http://147.52.126.35:1025/jetspeed/uploaded_files/CS150B/hw3.pdf Einai i 2 askisi(me to sudoku) Efxaristo ek ton proteron... Θα έπρεπε να ντρέπεσαι για αυτό που κάνεις. Είσαι και CSD... Άμα είσαι άσχετος πήγαινε σπίτι σου!
georgemarios Δημοσ. 29 Μαρτίου 2006 Δημοσ. 29 Μαρτίου 2006 Θα έπρεπε να ντρέπεσαι για αυτό που κάνεις. Είσαι και CSD... Άμα είσαι άσχετος πήγαινε σπίτι σου! μη το παμε εκει' date=' οκ η εργασια του δεν ειναι ευκολη για αρχαριο. Απλα προσπαθησα να του εξηγησω οτι δε γινεται να του κανουμε εμεις τη δουλεια. Πρεπει να κανει κατι αυτος, και οπου κολλαει να τον ξεκολλαμε. @Spinner λες ας πουμε οτι αυτο που σου γραψαμε δε κανει για σενα. Προσεξε τωρα. Αυτο που σου δωσαμε ειναι η get_user_input και οχι η main. H main ηταν απλα ενα παραδειγμα για το πως να χρησιμοποιησεις την get_user_input. Αν ηθελες πχ να βαζεις συνεχεια ινπουτ (α,β)=γ και το προγραμμα να ελεγχει συνεχεια μεχρι να βρει EOF τοτε θα εγραφες while ( (i=get_user_input(&row,&col,&value))!=EOF) { if (i==0) { printf("Wrong input, try again\n"); } else { printf("You entered (%d,%d)=%d\n",row,col,value); printf("That's a nice input, please enter another one\n"); } } printf("Exiting, found EOF\n"); ειναι για την get_user_input του Sta, ετσι; Δες τι δαφορα εχει το ενα while που ειχε στο main του o Sta απο αυτο που βαζω εδω... ΠΡΕΠΕΙ να καταλαβεις για να προχωρησουμε.
Sta Δημοσ. 29 Μαρτίου 2006 Δημοσ. 29 Μαρτίου 2006 Se efxaristo polli gia tin voithia sou. Des mono ti provlima iparxei: An patiso (3' date='5)=2 to kataxorei An ksanapatiso (3,5)=6 stamataei.[/quote'] Ο κορμός του προγράμματος είναι του georgemarios, οπότε σε αυτόν ανήκουν οι ευχαριστίες κυρίως. Πρέπει να κάνεις μια προσπάθεια να καταλάβεις τι κάνει ο κώδικας μόνος σου. Το πρόγραμμα που σου έδωσα εγώ περιμένει να του δώσεις μία έγκυρη είσοδο, αφού το κάνεις την επιβεβαιώνει αλλιώς σου λέει να ξαναπροσπαθήσεις. Αφού δώσεις έγκυρη είσοδο, καλείται η συνάρτηση getchar() που περιμένει απλώς να πατήσεις <Enter>, αυτό το κάνω γιατί χρησιμοποιώ το Dev-C++ για να μην κλείνει η κονσόλα του Dos απότομα (Αν το χρησιμοποιείς θα καταλάβεις τι εννοώ). Πρέπει να διαιρέσεις την εργασία που πρέπει να κάνεις σε υποπροβλήματα και για κάθε υποπρόβλημα να γράψεις και μία αντίστοιχη συνάρτηση. Αφού βεβαιωθείς ότι κάθε συνάρτηση συμπεριφέρεται σωστά, τις συνενώνεις και παίρνεις το τελικό πρόγραμμα.
georgemarios Δημοσ. 29 Μαρτίου 2006 Δημοσ. 29 Μαρτίου 2006 τι ωραια που ειναι οταν απανταμε ολοι μαζι
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.