lady_v Δημοσ. 7 Νοεμβρίου 2009 Δημοσ. 7 Νοεμβρίου 2009 γεια σας!! Μήπως μπορεί κάποιος να μου δώσει καμιά ιδέα για την παρακάτω άσκηση σε C? Δεν πρέπει να τη λύσω με πίνακες!!!! Το θέμα είναι ότι δε μπορώ να βάλω τα γινόμενα με τη σωστή στοίχηση!!! Τυπώστε στην οθόνη τον πίνακα της προπαίδειας, για τιμές 12*12. Φροντίστε ώστε οι αριθμοί να είναι στοιχισμένοι στα δεξιά και να υπάρχει πάντα μία κενή στήλη ανάμεσά τους. Υπενθυμίζω πως για αλλαγή γραμμής χρησιμοποιούμε το \n π.χ. 1 2 3 4 1 1 2 3 4 2 2 4 6 8 3 3 6 9 12 4 4 8 12 16 Ευχαριστώ εκ των προτέρων!!!!!!!!!!!!:shifty::shifty:
ippo00 Δημοσ. 7 Νοεμβρίου 2009 Δημοσ. 7 Νοεμβρίου 2009 Ο ποιό καθαρός τρόπος που μούρχεται στις 4 το πρωί είναι να το κάνεις απλά με tabs.. > 1 #include <stdio.h> 2 3 int main() 4 { 5 int i,j; 6 7 for(i=1;i<13;++i){ 8 for(j=1;j<13;++j) 9 printf("%d\t",i*j); 10 printf("\n"); 11 } 12 return 0; 13 } Αν και όσο το κοιτάω δεν καταλαβαίνω, Αυτό που δείχνεις δεν είναι πίνακας προπαίδειας; όπως και να 'χει, δικό σου πρόβλημα
Evgenios1 Δημοσ. 7 Νοεμβρίου 2009 Δημοσ. 7 Νοεμβρίου 2009 > #include <stdio.h> void main(){ printf("1 2 3 4\n1 1 2 3 4\n2 2 4 6 8\n3 3 6 9 12\n4 4 8 12 16"); } μπλα μπλα αλα ελληνικα
lady_v Δημοσ. 7 Νοεμβρίου 2009 Μέλος Δημοσ. 7 Νοεμβρίου 2009 Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ 1 2 3 4....κτλ Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!! Όπως και να 'χει σας ευχαριστώ πολύ!!
Moderators Praetorian Δημοσ. 7 Νοεμβρίου 2009 Moderators Δημοσ. 7 Νοεμβρίου 2009 Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ 1 2 3 4....κτλ Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!! Όπως και να 'χει σας ευχαριστώ πολύ!! Στο σημείο αυτό θα ήταν χρήσιμο να δώσεις τον κώδικα σου για να καταλάβουμε δυο πράγματα παραπάνω για το τι ακριβώς κάνεις. Αυτό που δίνει ο ippo00 αλλάζει γραμμή κάθε 12 αριθμούς, άρα δεν κάνεις αυτό. Επίσης για τη στοίχιση στα δεξιά σε κάθε στήλη θα πρέπει στο %d να ορίσεις και το πλάτος πεδίου για τον αριθμό (ένα %3d λογικά θα είναι αρκετό)
parsifal Δημοσ. 7 Νοεμβρίου 2009 Δημοσ. 7 Νοεμβρίου 2009 Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ 1 2 3 4....κτλ Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!! Μόνο αν έχεις βάλει την αλλαγή γραμμής στην εσωτερική for αντί της εξωτερικής δικαιολογείται κάτι τέτοιο...
lady_v Δημοσ. 8 Νοεμβρίου 2009 Μέλος Δημοσ. 8 Νοεμβρίου 2009 Λοιπόν, parsifal,έχεις δίκιο,έβαζα την αλλαγή γραμμής στην εσωτερική for.Ο κώδικάς μου είναι ο εξής: ># include <stdio.h> int main (int argv, char** argc){ int i=1; int j=1; for (i=1;i<=12;i++){ printf(" %d ",i); } printf("\n"); for(i=1; i<=12; i++){ for (j=1; j<=12; j++) printf("%4d",j*i); printf("\n"); } return 0; } το θέμα είναι ότι θέλω να τυπώνει και το j, δηλαδή τους αριθμούς 1-12 κάθετα και ανάμεσα τα γινόμενα, δηλ: 1 2 3 4 5 6 7 8 9 10 11 12 1 1 2 3 4 5 6 7 8 9 10 11 12 2 2 4 6 8 10 12 14 16 18 20 22 24 3 .......... 4 5 6 7 8 9 10 11 12 αν βάλω printf(" %d %4d",j,j*i); δε μου βγαίνει.. Σας ευχαριστώ όλους για τη βοήθεια!
parsifal Δημοσ. 8 Νοεμβρίου 2009 Δημοσ. 8 Νοεμβρίου 2009 Αν θέλεις να εμφανίζονται εδώ στο φόρουμ στοιχισμένοι οι χαρακτήρες της επιθυμητής εξόδου (π.χ. το τελευταίο τμήμα του από πάνω post), μπορείς να χρησιμοποιείς το CODE tag ακόμη κι αν δεν πρόκειται για κώδικα. Ο τελευταίος κώδικας που παρέθεσες δίνει την ακόλουθη έξοδο: >parsifal@vmubuntu32:/tmp$ ./test1 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 2 4 6 8 10 12 14 16 18 20 22 24 3 6 9 12 15 18 21 24 27 30 33 36 4 8 12 16 20 24 28 32 36 40 44 48 5 10 15 20 25 30 35 40 45 50 55 60 6 12 18 24 30 36 42 48 54 60 66 72 7 14 21 28 35 42 49 56 63 70 77 84 8 16 24 32 40 48 56 64 72 80 88 96 9 18 27 36 45 54 63 72 81 90 99 108 10 20 30 40 50 60 70 80 90 100 110 120 11 22 33 44 55 66 77 88 99 110 121 132 12 24 36 48 60 72 84 96 108 120 132 144 Εσύ θέλεις το παρακάτω; (με σωστή στοίχιση δηλαδή; ) >parsifal@vmubuntu32:/tmp$ ./test2 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 2 4 6 8 10 12 14 16 18 20 22 24 3 6 9 12 15 18 21 24 27 30 33 36 4 8 12 16 20 24 28 32 36 40 44 48 5 10 15 20 25 30 35 40 45 50 55 60 6 12 18 24 30 36 42 48 54 60 66 72 7 14 21 28 35 42 49 56 63 70 77 84 8 16 24 32 40 48 56 64 72 80 88 96 9 18 27 36 45 54 63 72 81 90 99 108 10 20 30 40 50 60 70 80 90 100 110 120 11 22 33 44 55 66 77 88 99 110 121 132 12 24 36 48 60 72 84 96 108 120 132 144 Αν ναι, τότε είναι ελάχιστες οι αλλαγές που πρέπει να κάνεις στον υπάρχοντα κώδικα: >#include <stdio.h> int main() { int i = 1; int j = 1; for (i = 1; i <=12; i++) printf("%4d", i); printf("\n"); for(i = 1; i <= 12; i++) { for(j = 1; j <= 12; j++) printf("%4d", j * i); printf("\n"); } return 0; }
lady_v Δημοσ. 8 Νοεμβρίου 2009 Μέλος Δημοσ. 8 Νοεμβρίου 2009 οκ, για την ακρίβεια θέλω αυτό: > 1 2 3 4 5 6 7 8 9 10 11 12 1 1 2 3 4 5 6 7 8 9 10 11 12 2 2 4 6 8 10 12 14 16 18 20 22 24 3 3 6 9 12 15......... 4 5 6 7 8 9 10 11 12 τι πρέπει να αλλάξω;
Moderators Praetorian Δημοσ. 8 Νοεμβρίου 2009 Moderators Δημοσ. 8 Νοεμβρίου 2009 τι πρέπει να αλλάξω; Χρειάζεσαι πριν το for loop να βάλεις κώδικα για να εκτυπώσει την πρώτη γραμμή που ορίζεις τις στήλες. Ουσιαστικά είναι ένα printf (" \t"); ακολουθούμενο από ένα απλό for loop που τυπώνει τις τιμές από 1 έως 12 και μετά αλλάζει γραμμή. edit: αυτό βλέπω ότι το κάνεις Επίσης στα for loop που έχεις ήδη, στο εξωτερικό και πριν μπεις στο εσωτερικό, κάνεις ένα printf ("%d\t", i); (για να δείξεις τη γραμμή) >int main() { int i = 1; int j = 1; printf(" \t"); for (i = 1; i <=12; i++) printf("%4d", i); printf("\n"); for(i = 1; i <= 12; i++) { printf("%d\t",i); for(j = 1; j <= 12; j++) printf("%4d", j * i); printf("\n"); } return 0; }
virxen75 Δημοσ. 8 Νοεμβρίου 2009 Δημοσ. 8 Νοεμβρίου 2009 Χρειάζεσαι πριν το for loop να βάλεις κώδικα για να εκτυπώσει την πρώτη γραμμή που ορίζεις τις στήλες. Ουσιαστικά είναι ένα printf (" \t"); ακολουθούμενο από ένα απλό for loop που τυπώνει τις τιμές από 1 έως 12 και μετά αλλάζει γραμμή. edit: αυτό βλέπω ότι το κάνειςΕπίσης στα for loop που έχεις ήδη, στο εξωτερικό και πριν μπεις στο εσωτερικό, κάνεις ένα printf ("%d\t", i); (για να δείξεις τη γραμμή) >int main() { int i = 1; int j = 1; printf(" \t"); for (i = 1; i <=12; i++) printf("%4d", i); printf("\n"); for(i = 1; i <= 12; i++) { printf("%d\t",i); for(j = 1; j <= 12; j++) printf("%4d", j * i); printf("\n"); } return 0; } και χωρίς χρήση των tabs το παραπάνω μπορεί να γραφεί > #include <stdio.h> #include <stdlib.h> int main() { int i = 1; int j = 1; printf("\n "); for (i = 1; i <=12; i++) printf("%4d", i); printf("\n"); for(i = 1; i <= 12; i++) { printf("%4d",i); for(j = 1; j <= 12; j++) printf("%4d", j * i); printf("\n"); } system("pause"); return 0; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.