Zliczanie sumy przekątnej w macierzy

0

Dlaczego nie zlicza mi prawidłowo sumy liczb przekątnej w macierzy ?:

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

float przekatna(float tablica[3][3]);
int main()
{
    float tablica[3][3];
    int i,j;
    srand(time(NULL));
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3;j++)
        {
            tablica[i][j] = rand() % 10;
        }
    }
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3;j++)
        {
            printf("%2.0f",tablica[i][j]);
        }
        printf("\n");
    }
   przekatna(tablica);
}
float przekatna(float tablica[3][3])
{
    int i,j;
    float przekatna;
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            if(i == j)
            {
                przekatna += tablica[i][j];
            }
        }
    }
    printf("%f",przekatna);
}


 
1

Ponieważ:

  1. Funkcja przekatna nie zwróciła wartości
  2. Nie odebrałeś zwróconej wartości
  3. Nie wyświetliłeś tej nieodebranej wartości.
  4. W funkcji nie wyzerowałeś zmiennej.
0

A da się może jakoś teraz to lepiej zapisać ? Bo tak dziwnie w printfcie pisać wywołanie funkcji aby wypisało zwracaną wartość. A w funkcji tez nie bardzo printfa pisać.

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

float przekatna(float tablica[3][3]);
int main()
{
    float tablica[3][3];
    int i,j;
    srand(time(NULL));
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3;j++)
        {
            tablica[i][j] = rand() % 10;
        }
    }
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3;j++)
        {
            printf("%2.0f",tablica[i][j]);
        }
        printf("\n");
    }
   printf("%1.0f",przekatna(tablica));
}
float przekatna(float tablica[3][3])
{
    int i,j;
    float przekatna = 0;
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            if(i == j)
            {
                przekatna += tablica[i][j];
            }
        }
    }
    return przekatna;
}
 
1

Właśnie bardzo dobrze, w printf'ie możesz nawet bardziej skomplikowane wyrażenia pisać.
Jak na razie masz dwa problemy:

  1. Nigdy nie używaj i++ tam gdzie możesz użyć ++i, bo to się zemści.
  2. Nie rób kolizji nazw jak przekatna zmienna i funkcja, to też się zemści.
  3. Zdecydowanie przekombinowałeś, wystarczy:
float przekatna(float tablica[3][3])
  {
   int i;
   float ret=0;
   for(i=0;i<3;++i) ret+=tablica[i][i];
   return ret;
  }
0
_13th_Dragon napisał(a):

Nigdy nie używaj i++ tam gdzie możesz użyć ++i, bo to się zemści.

jak używanie i++ może się zemścić :S

0

Mógłby ktoś podpowiedzieć jak ten program przerobić na wskaźniki. Bo wiem, że jak jest tablica dwuwymiarowa to jest wskaźnik do wskaźnika.

0

?

0

Masz trzy opcje:

  1. Przeczytać jakiś kurs po czym przerobić to samodzielnie, tym bardziej że z jednym programem już pomoc użyskałeś
  2. Wynająć fachowca który szybko i sprawnie (ale plując się w brodę bo zadanie debilne) zrobi to za ciebie - 50 zł styknie.
  3. Zmienić kierunek studiów na np dziennikarstwo, po forach smarować już umiesz czyli fach masz już w ręku.

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