Odwrócenie kolumn w tablicy dwuwymiarowej

0

Mam takie zadanie:

Napisz podprogram, który dostaje jako argumenty dwuwymiarową tablicę tablic
o elementach typu int oraz jej wymiary i odwraca kolejność elementów we
wszystkich kolumnach tablicy (przyjmujemy, że dwa elementy tablicy leżą
w tej samej kolumnie jeżeli mają taką samą pierwszą współrzędną).

void prog(int **tab, int n, int m)
{
    int i, j;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
        {
        }
}

najgorsze jest to, że nie wiem, jak zamienić, odwrócić te kolumny :/

0

n i m to są liczby kolumn i wierszy?

spróbuj tak:

void prog(int **tab, int n, int m)
{
    int i, j;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
        {
                int tmp=tab[i][j];
                tab[i][j]=tab[i][m-j-1];
                tab[i][j-m-1]=tmp;
        }
}
0

Chyba nie, bo Twój program daje mi seg fault, wklejam całość:

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

void pokaz(int n, int m, int tab[][m])
{
    int i,j;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
            printf("%d ", tab[i][j]);
        printf("\n");
    }
}

void prog(int **tab, int n, int m)
{
    int i, j;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
        {
                int tmp=tab[i][j];
                tab[i][j]=tab[i][m-j-1];
                tab[i][j-m-1]=tmp;
        }
}

int main()
{
    int tab[3][4] = {{1,2,3,4}, {5,6,7,8}, {6, 0, 9, 1}};
    pokaz(3, 4, tab);
    prog(tab, 3, 4);
    pokaz(3, 4, tab);
    return 0;
}
1

Nie czytałam dokładnie polecenia, ale może tak:
http://ideone.com/W4CPCu
Przekazuj do funkcji tablice statyczne tym sposobem

void pokaz(int n, int m, int tab[][m])

. Żeby przekazać (int **array) trzeba użyć malloc, ale tutaj nie warto.

0

Dzięki, ale Twój kod działa tylko dla tablicy statycznej, jak zrobiłem to samo, ale z dynamiczną, to się wywala :/

void prog(unsigned rows, unsigned cols, int **array)
{
    unsigned i,j;
	int tmp;
	for(j=0;j<cols;j++) {
		for(i=0;i<rows/2;i++) {
			tmp=array[i][j];
			array[i][j] = array[rows-1-i][j];
			array[rows-1-i][j]=tmp;
		}
	}
}

i nie ważne wtedy, czy przekazuję do funkcji **array czy array[][] :(

0

Ok, nadal nie działa i nie wiem, co jest źle:

http://ideone.com/Zxgobl

a niby to działa:

http://ideone.com/Zxgobl

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