Maksymalne elementy w kazdym wierszu macierzy

0

Mam problem z przypisaniem kolumny do elementu i nie wiem czemu ale max wychodzi ciagle zero. Czy bylby ktos w stanie mi to wyjasnic i pomoc troszke.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
double mac[5][5],max_w_w[5],max_w_k[5];
int i,j,k,m_w_w,m_w_k,pp;

srand((unsigned int)time(NULL));
for (i=0;i<9;i++)
{
    for (j=0;j<6;j++)
    {
        mac[i][j]=100.+900.*rand()/(RAND_MAX);
    }
}
printf("Macierz:\n");

for (i=0;i<5;i++)
{
    for (j=0;j<5;j++)
    {
        printf("%6.f\t",mac[i][j]);
    }
printf("\n");
}
 for (i=0;i<5;i++)
{
    max_w_w[i]=mac[i][0];
}
for (i=0;i<5;i++)
{
    for(j=0;j<5;j++)
    {

        if (max_w_w[i]<mac[i][j])max_w_w[i]=mac[i][j];
        m_w_w=i;
        m_w_k=j;


    }printf("max elemant[%i][%i]= %6.f\n",m_w_w,m_w_k,max_w_w);
}

return 0;
}

2

1 Masz zadeklarowaną macierz na 5x5 elementów, a w pętli masz 9 oraz 6

double mac[5][5] // 
//...
for (i=0;i<9;i++)
{
   for (j=0;j<6;j++)
   {
       mac[i][j] = //...

2 W printfie, ostatni element przekazujesz jako wskaźnik na całą tablicę, zamiast na pojedynczy element :

max_w_w[5] // tablica
printf("max elemant[%i][%i]= %6.f\n",m_w_w,m_w_k,max_w_w); //chcesz wyswietlic tablice czy element?

0

Nie wiem czy tak, ale trochę to poprawiłem i maksima wierszy i kolumn są w odpowiednich tablicach:

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

double mac[5][5],max_w_w[5],max_w_k[5];
double max_row = 0, max_col = 0;
int main()
{
    srand((unsigned int)time(NULL));
    for (int i=0;i<9;i++)
    {
        for (int j=0;j<6;j++)
        {
            mac[i][j]=100.+900.*rand()/(RAND_MAX);
        }
    }
    printf("Macierz:\n");
    for (int i=0;i<5;i++)
    {
        for (int j=0;j<5;j++)
        {
            printf("%f\t", mac[i][j]);
        }
    printf("\n");
    }
    for (int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            if (max_w_w[i]<mac[i][j]){
                max_row = mac[i][j];
        }
        max_w_w[i]=max_row;
        }
    }
    printf("max of rows: \n");
    for (int i = 0; i < 5; ++i)
        printf("%f \t", max_w_w[i]);
    printf("\n");
    for (int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            if (max_w_k[i]<mac[j][i]){
                max_col = mac[j][i];
            }
        max_w_k[i]=max_col;
        }
    }
    printf("max of cols: \n");
    for (int i = 0; i < 5; ++i)
        printf("%f \t", max_w_k[i]);    
    printf("\n");
    return 0;
}

0

a wieszk jak zrobic zeby wipisywalo ich miejsce np max elem[1][4]=145 i tak dalej idac wierszami

Nie bardzo rozumiem, Opisz, co Chcesz mieć na wyjściu.

1

@ktoscoszjadl nie wiem czy dobrze zrozumiałem. Może coś takiego?

    double max;
    int max_index;
//...
    for(i=0;i<5;max=mac[++i][(max_index=0)]){
        for(j=0;j<5;++j)
            if(max<mac[i][j])
                max=mac[i][j],max_index=j;
        printf("max elemant[%i][%i]= %6.f\n",i,max_index,max);
    }
1

element w wierszu [1]: elem[1][3]=324 max element w wierszu [2]: elem[2][1]=123 i tak dalej dla kazdego wiersza maksymalny element z dobrze dobrana kolumna czyli elem[wiersz][kolumna]

To sobie Zrób strukturkę do przechowywania tych danych:

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

struct maxRows { // stores max row elements of an 5x5 array and their positions
    double max [5];
    unsigned row_pos [5];
    unsigned col_pos [5];
};

void printMaxRows(struct maxRows e) {
    for (int i = 0; i < 5; ++i) {
        printf("max: %f\t row: %i\t col: %i\n", e.max[i], e.row_pos[i], e.col_pos[i]);
    }
}

double mac[5][5],max_w_w[5],max_w_k[5];
double max_row = 0, max_col = 0;
struct maxRows m;
int k = 0, l = 0;
int main()
{
    srand((unsigned int)time(NULL));
    for (int i=0;i<9;i++)
    {
        for (int j=0;j<6;j++)
        {
            mac[i][j]=100.+900.*rand()/(RAND_MAX);
        }
    }
    printf("Macierz:\n");
    for (int i=0;i<5;i++)
    {
        for (int j=0;j<5;j++)
        {
            printf("%f\t", mac[i][j]);
        }
    printf("\n");
    }
    for (int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            if (m.max[i]<mac[i][j]){
                max_row = mac[i][j];
                m.max[i]=max_row;
                m.row_pos[k] = i;
                m.col_pos[l] = j;
            }
        }
    ++k;
    ++l;
    }
    printf("\n");
    printMaxRows(m); // ->
    /*
    Macierz:
290.062126  349.383242  514.225300  589.758575  911.814707  
378.527403  477.792303  663.820934  920.592803  794.253047  
381.325260  439.523919  638.476569  524.272289  833.623381  
107.553652  833.129998  646.040795  907.516555  582.509299  
949.533284  872.459458  979.750493  721.088913  634.856624  

max: 911.814707  row: 0  col: 4
max: 920.592803  row: 1  col: 3
max: 833.623381  row: 2  col: 4
max: 907.516555  row: 3  col: 3
max: 979.750493  row: 4  col: 2
*/

    return 0;
}

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