• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablice dwu wymiarowe c++

0 głosów
882 wizyt
pytanie zadane 2 listopada 2017 w C i C++ przez Dordonmegazordon Początkujący (350 p.)

Program zamiast wyswietlać  kwadrat i sześcian liczby 1,2,3 

1.000000  1.000000  1.000000
2.000000  4.000000  8.000000
3.000000  9.000000  27.000000

wyświetla coś takiego nie potrafię znaleźć błędu proszę o pomoc.

1.000000  1.000000  1.000000
2.000000  2.000000  2.000000
3.000000  3.000000  3.000000

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double TAB[3][3];
double pow(double x, double y);

int main()
{
    int i,j;
    double x=0;

    for(i=0; i<3; i++)
    {
        x++;
        for(j=0; j<3; j++)
        {
            double y=1;
            TAB[i][j]=pow(x,y);
            y++;
        }
    }
    
    
    int h,w;
    for(h=0; h<3; h++)
    {
        for(w=0; w<3; w++)
        {
            printf("%lf ",TAB[h][w]);
        }
        printf("\n");
    }
    return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 2 listopada 2017 przez mokrowski Mędrzec (158,960 p.)
wybrane 2 listopada 2017 przez Dordonmegazordon
 
Najlepsza

1. Nie stosuj zmiennych globalnych (u Ciebie TAB)

2. Funkcja main ma jedną z sygnatur w C poprawną taką:   int main(void). Sygnatura którą podałeś jest nieprawidłowa.

3. Zmienne x i y są Ci do niczego nie potrzebne jeśli zauważysz że można wykorzystać indeksy i oraz j dodając do nich 1.

4. Deklaracje zmiennych staraj się używać najbliżej ich wykorzystania i w niezbędnym zasięgu. Polepsza to czytelność programu i ułatwia jego zrozumienie.

5. Do indeksowania służy typ size_t a nie int.

6. Jeśli wprowadzisz pkt 4, to zmienne indeksowe nie będą dostępne poza for. Możesz nazw ponownie użyć.

7. Jeśli wyprowadzasz 1 znak (tu '\n'), printf(...) jest "ciężki". Wystarczy putchar(...).

8. Jeśli masz już <stdlib.h>, użyj do zwrócenia z main(..) EXIT_SUCCESS.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
    double TAB[3][3];

    for(size_t i = 0; i < 3; ++i)
    {
        for(size_t j = 0; j < 3; ++j)
        {
            TAB[i][j] = pow(i + 1, j + 1);
        }
    }

    for(size_t i = 0; i < 3; ++i)
    {
        for(size_t j = 0; j < 3; ++j)
        {
            printf("%lf ", TAB[i][j]);
        }
        putchar('\n');
    }

    return EXIT_SUCCESS;
}

 

+1 głos
odpowiedź 2 listopada 2017 przez obl Maniak (51,300 p.)

Twoja zmienna y jest tworzona w pętli, więc nie zapamiętujesz jej wartości. Raczej tak powinno to być:

    int i,j;
    double x=0;
    double y = 1; // tutaj tworzysz zmienną pomocniczą do potęgowania
 
    for(i=0; i<3; i++)
    {
        x++;
        for(j=0; j<3; j++)
        {
            TAB[i][j]=pow(x,y);
            y++;
        }
    }

 

komentarz 2 listopada 2017 przez Dordonmegazordon Początkujący (350 p.)
teraz faktycznie działa potęgowanie ale otrzymuję liczby 1.000000 1.000000 1.000000 16.000000 32.000000 64.000000 2187.000000 6561.000000 19683.000000
0 głosów
odpowiedź 2 listopada 2017 przez BlackyWolfie Użytkownik (520 p.)
A ja zrobiłam to w ten sposób:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double TAB[4][4];
double pow(double x, double y);

int main()
{
    int i,j;

    for(i=1; i<4; i++)
    {

        for(j=1; j<4; j++)
        {
            TAB[i][j]=pow(i,j);
        }
    }

    int h,w;
    for(h=1; h<4; h++)
    {
        for(w=1; w<4; w++)
        {
            printf("%lf ",TAB[h][w]);
        }
        printf("\n");
    }
    return 0;
}
 

ponieważ 0 do potęgi jakiejkolwiek jest zerem, więc trzeba zacząć liczyć od jedynki a gdy do i i j doda się jeden zostawiając TAB[3][3] to wyświetlą się dwie potęgi liczby, a nie trzy więc dlatego zrobiłam TAB[4][4]. Nie wiem czy to dobry sposób jest, bo sama się dopiero uczę wszystkiego więc mogą być lepsze sposoby na rozwiązanie wszystkiego, ale jak to rozwiązanie jest złe czy nienajlepsze to powiedzcie dlaczego:).
komentarz 2 listopada 2017 przez Dordonmegazordon Początkujący (350 p.)
Przeczytaj najlepszą odpowiedź :)

Podobne pytania

0 głosów
1 odpowiedź 1,890 wizyt
0 głosów
2 odpowiedzi 974 wizyt
0 głosów
1 odpowiedź 1,146 wizyt
pytanie zadane 14 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,322 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...