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

tablice dwu wymiarowe c++

Object Storage Arubacloud
0 głosów
555 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 (155,460 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,280 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,331 wizyt
0 głosów
2 odpowiedzi 791 wizyt
0 głosów
1 odpowiedź 859 wizyt
pytanie zadane 14 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...