Wątek zablokowany 2013-10-26 12:12 przez madmike.

Wyświetlenie tabliczki mnożenia do 10 w konsoli

0

A więc mam coś takiego:

#include <stdio.h>
#include <conio.h>


int main()
{
   int i,j;
  for(i=1;i<=10;i++)
	{
				
    for(j=1;j<=10;j++)
    {
       printf("%d \t",(i*j));
    }
  	printf("\n");
  }
  
  
    getch();
    return 0;
	
}

Pytanie brzmi co zrobić,aby program wyświetlał się w układzie takim jak jest tabliczka mnożenia:

   1  2  3  4  5  6  7  8  9  10
1
2
3
4
5
6
7
8
9
10

dodanie znacznika <code> dla outputu - fp

1
#include <stdio.h>
 
int main()
  {
   int y,x;
   for(y=0;y<=10;++y,printf("\n")) for(x=0;x<=10;++x) if(y||x) printf("%4d",y*x); else printf("%4s","");
   getchar();
   return 0;
  }

http://ideone.com/IegiKP

0

Dzięki,ale nie o to mi chodziło,chodzi mi o coś takiego:

   1  2  3  4  5  6  7  8  9  10
1  1  2  3  4  5  6  7  8  9  10
2  2  4  6  8  10 12 14 16 18 20
3  3  6  9  12 15 18 21 24 27 30

itd. do 10...
nie wyszło równo,ale wiadomo o co chodzi ; )

dodanie znaczników <code> dla outputu, aby wyszło równo :) - fp

0

Dzięki wielkie,jakby ktoś mógł mi to objaśnić tak w skrócie chociaż to byłbym wdzięczny o co kaman z tym 4d,4s np. jakie to ma znaczenie w ustawieniu?i o co kaman z tym (y>0?y:1)*(x>01)?

1

Przed wypisaniem kolejnej linii wyświetl jeszcze indeks głównej pętli.

#include <stdio.h>

void main()
{
    int i, j;
    int range = 5;

    printf("\t");
    for (i = 1; i <= range; i++)
        printf("%d\t", i);

    for (i = 1; i <= range; i++)
    {
        printf("\n%d\t", i);
        for (j = 1; j <= range; j++)
        {
            printf("%d\t", j*i);
        }
    }
}

Tu jest sporo zabawy ze stylistyką; takiego babrania się i oczywiście można to zrobić na wiele lepszych sposobów.
Ten wydaje mi się w miarę czytelny.

0

Dzięki gabr,ale na twój sposób działają tylko liczby do 9,ale i tak dzięki za odpowiedzi,spróbuje rozkminić ten trudniejszy sposób albo z tym pokombinować.A co znaczników

-będę pamiętał.Wiecie ja jeszcze nieobeznany z forum jestem ; )
0

Wybacz,że tak dopytuję,ale nie wiem gdzie mam dodać te spacje. Dodawałem i nadal nie uzyskałem pożądanego efektu,chyba,że coś poknociłem.....

5

Pożyczając kod @gabr (właściwie zamiast \t i spacji wstawiona 'szerokość pola'):

#include <stdio.h>

int main()
{
    int i, j;
    int range = 10;

    printf("%5c",' ');
    for (i = 1; i <= range; i++)
        printf("%5d", i);

    for (i = 1; i <= range; i++)
    {
        printf("\n%5d", i);
        for (j = 1; j <= range; j++)
        {
            printf("%5d", j*i);
        }
    }
}

Co do %4d, %4s to są to modyfikatory szerokości obszaru na którym ma zostać wypisana wartość danej zmiennej. Jeśli szerokość wartości zmiennej jest krótsza niż szerokość podana przez ciebie (w tym wypadku 4, lub 5 w kodzie) to zostaną wstawione tam spacje. Przyjmijmy dla przykładu że _ oznacza spacje, dla %4d i wartości zmiennej 10 wypisanie zostanie __10.
Masz to szerzej opisane tutaj (ang) http://www.cplusplus.com/reference/cstdio/printf/?kw=printf .

Co do (y>0?y:1) to tzw. ternary operator (wybacz, nie mam pojęcia jak się nazywa po polsku). Jego działanie polega na sprawdzeniu warunku znajdującym się przed ? (w tym wypadku y>0) i zwróceniu pierwszego wyrażenia jeśli warunek zwróci prawdę, lub drugiego jeśli warunek zwróci fałsz. Biorąc ten przykład i tłumacząc na polski to: Jeśli y będzie większy od 0 to zwróć y, w przeciwnym wypadku zwróć 1.

2

@Andrews - użycie znaku tabulatora jest w tym wygodne, bo "wyręcza" Cię od sprawdzania długości w znakach każdej wyświetlanej liczby aby określić ile znaków spacji dodać; Jeśli chcesz ten znak zamienić na ustaloną ilość spacji - musisz sprawdzać ile ich dodać przed każdą liczbą, albo krócej i wygodniej - skorzystać z dobrodziejstwa funkcji printf ustalając szerokość pola (w tym przypadku liczby i odstępu) i jego wyrównanie;

Po taką wiedzę odsyłam do dokumentacji, a na szybko możesz zajrzeć tutaj: http://pl.wikibooks.org/wiki/C/printf

0

OK dzięki wszystkim : ) Wiem,że to się wydaje proste,ale z językiem C mam styczność w sumie od niedawna.Np.znałem operator ? : ,lecz nie wpadłbym,że posłuży on do takiego wyświetlenia tabelki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1