Zamiana wierszy w tablicy dwuwymiarowej

Odpowiedz Nowy wątek
2017-03-20 21:58
0

czemu nie działa? requeired as left opernad of assingment

#include <stdio.h>
#define K 4
#define W 4
 
int change( int (*m)[K], int W1, int W2)
{
    int i,j, temp;
    for(j = 0; j < K; ++j)
      {
          (*m + W1) + i = temp;  // ogólnie taki wzór *(m + 0 ) + 0 ,  *(m + 0) + 1.....
          (*m + W1) + i = *(*m + W2) + i;
          (*m + W2) + i = temp;
      }
        return 0;
}
 
int main(void){
 
int m[W][K]={{3,5,1,4},{0,0,0,0},{9,9,1,9},{0,0,0,0}};
int i,j;
change(m,0,2);  //zamień wiersz 0 z 2
 for(i = 0; i < W; ++i)
    for(j = 0; j < K; ++j)
        printf("%3d", m[i]);
 
return 0;
}
 

To forum jest bez humoru :)
edytowany 2x, ostatnio: furious programming, 2017-03-20 22:02

Pozostało 580 znaków

2017-03-21 20:17
0

a coś tak rozbił tą tablicę, i czy nie mogła ona być statyczna

 int *m[W]

To forum jest bez humoru :)

Pozostało 580 znaków

2017-03-21 21:25
0

Ze względu na bełkotliwy opis zadania w Kolegi wykonaniu tak zrobiłem.

Pozostało 580 znaków

2017-03-22 14:32
0

int *m[W], co to jest za zapis i co on oznacza wargumencie funkcji


To forum jest bez humoru :)

Pozostało 580 znaków

2017-03-22 20:34
0

tablica pointerów.

W sumie powinno się napisać int **tab bo to i tak zdecayuje ( nie znam polskiego słowa a angielskie chyba też źle pisze ).

Pozostało 580 znaków

2017-03-23 21:21
0

poczytałem, i już wiele więcej wiem, wiem oprócz jednego błedu pisze w kodzie

#include <stdio.h>
#define K 4
#define W 3
 
void swap(int* m[W], const int w1, const int w2)
{
 
    int* temp = *(m + w1);
    *(m + w1) = *(m + w2);
    *(m + w2) = temp;
}
 
int main(void)
{
 
    int n[][K] = { { 3, 5, 1, 4 }, { 0, 0, 0, 0 }, { 9, 2, 4, 8 } };
    int* m[W];
    int j, i;
    for (i = 0; i < 3; ++i)
      *( m + i) = *(n + i);  //dlaczego musze tutaj dać gwiazdkę w *(n + i) , jeśli nie dam to pisze że brakuje operatora
  //*( m + i) = (n + i);   - >requaired operand ale przecież adres 2 wiersza to n+2 a nie *(n+2)
 
    swap(m, 1, 2);
 
    int* p;                      //to jest do ćwiczeń
    p = n + 1;               // a tutaj sobie wpisałem n+1 jako 2 wiersz i działa
    for (i = 0; i < K; i++)
        printf("%3d", p[i]);
 
    printf("\n\n");
    for (i = 0; i < W; i++)
        for (j = 0; j < K; j++)
            printf("%3d", m[i][j]);
 
    return 0;
}

To forum jest bez humoru :)

Pozostało 580 znaków

2017-03-23 22:50
0

wróć, spoczko, już działa, nie wiem dlaczego wtedy nie działało


To forum jest bez humoru :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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