Προς το περιεχόμενο

ΑΣΚΗΣΗ ΣΕ C!!!


lady_v

Προτεινόμενες αναρτήσεις

Δημοσ.

γεια σας!! Μήπως μπορεί κάποιος να μου δώσει καμιά ιδέα για την παρακάτω άσκηση σε 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::shifty::shifty::shifty:

Δημοσ.

Ο ποιό καθαρός τρόπος που μούρχεται στις 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 }

 

Αν και όσο το κοιτάω δεν καταλαβαίνω, Αυτό που δείχνεις δεν είναι πίνακας προπαίδειας; όπως και να 'χει, δικό σου πρόβλημα

Δημοσ.

Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ

1

2

3

4....κτλ

Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!!

Όπως και να 'χει σας ευχαριστώ πολύ!!

  • Moderators
Δημοσ.
Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ

1

2

3

4....κτλ

Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!!

Όπως και να 'χει σας ευχαριστώ πολύ!!

 

Στο σημείο αυτό θα ήταν χρήσιμο να δώσεις τον κώδικα σου για να καταλάβουμε δυο πράγματα παραπάνω για το τι ακριβώς κάνεις. Αυτό που δίνει ο ippo00 αλλάζει γραμμή κάθε 12 αριθμούς, άρα δεν κάνεις αυτό.

Επίσης για τη στοίχιση στα δεξιά σε κάθε στήλη θα πρέπει στο %d να ορίσεις και το πλάτος πεδίου για τον αριθμό (ένα %3d λογικά θα είναι αρκετό)

Δημοσ.
Αυτό κάνω κι εγώ αλλά μου αλλάζει γραμμή σε κάθε αποτέλεσμα, δηλ δε μου βγάζει τα γινόμενα το ένα δίπλα στο άλλο αλλά το ένα κάτω από το άλλο:π.χ

1

2

3

4....κτλ

Αν πάλι δε βάλω αλλαγή γραμμής μου τα βγάζει όλα στην ίδια σειρά και δεν αλλάζει σειρά εκεί που πρέπει!!!

 

Μόνο αν έχεις βάλει την αλλαγή γραμμής στην εσωτερική for αντί της εξωτερικής δικαιολογείται κάτι τέτοιο...

Δημοσ.

Λοιπόν, 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); δε μου βγαίνει..

Σας ευχαριστώ όλους για τη βοήθεια!

Δημοσ.

Αν θέλεις να εμφανίζονται εδώ στο φόρουμ στοιχισμένοι οι χαρακτήρες της επιθυμητής εξόδου (π.χ. το τελευταίο τμήμα του από πάνω 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;
}

Δημοσ.

οκ, για την ακρίβεια θέλω αυτό:

>
     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
Δημοσ.

τι πρέπει να αλλάξω;

Χρειάζεσαι πριν το 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;
}

Δημοσ.
Χρειάζεσαι πριν το 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;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...