Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie przekątnej w tabeli dwuwymiarowej

Ostatnio zmodyfikowano 2015-03-18 21:37
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
Sortowanie przekątnej w tabeli dwuwymiarowej
» 2015-03-18 20:03:47
Po raz drugi dzisiaj proszę Was o pomoc :)

Tym razem mam zadanie, w którym mam stworzyć tablicę 10x10 , i wypełnić ją losowymi danymi. Następnie mam ją wypisać na ekran -> do tego momentu jest w porządku :) Na koniec mam posortować przekątną tablicy niemalejąco. I tutaj mam coś źle... Do pewnego momentu druga tablica jest z posortowanymi wartościami, natomiast w pewnym momencie coś się wysypuje. Oto kod. Co jest nie tak ? Najprawdopodobniej w funkcji "void sort()"...

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
#include <cstdio>


using namespace std;

void dane( int A[][ 10 ], int n );
void pisz_tab( int A[][ 10 ], int n );
void sort( int A[][ 10 ], int n );


int main()
{
   
    srand( time( NULL ) );
    int tablica[ 10 ][ 10 ];
   
    dane( tablica, 10 );
    pisz_tab( tablica, 10 );
    sort( tablica, 10 );
   
    printf( "\n" );
   
    pisz_tab( tablica, 10 );
   
    getch();
    return 0;
   
}


void dane( int A[][ 10 ], int n )
{
    int a, b;
    int i, j;
   
    printf( "Wypisujemy tabele. Prosze podaj przedzial, z ktorego zostanie wylosowana 100 elementowa tablica \n" );
    printf( "Dolny przedzial, a = " );
    cin >> a;
    printf( "\nGorny przedzial, b = " );
    cin >> b;
   
    for( j = 1; j <= n; j++ )
    {
        for( i = 1; i <= n; i++ )
        {
            A[ j ][ i ] =( rand() %( b - a + 1 ) ) + a;
        }
    }
}

void pisz_tab( int A[][ 10 ], int n )
{
    printf( "Tablica: \n" );
   
   
   
    int i, j;
    for( j = 1; j <= n; j++ ) {
        for( i = 1; i <= n; i++ ) {
            if( A[ j ][ i ] < 100 && A[ j ][ i ] >= 10 )
            {
                printf( "  " );
            }
            else
            {
                printf( "   " );
            }
            printf( "%d", A[ j ][ i ] );
            if( i == 10 )
            {
                printf( "\n" );
            }
        }
    }
}

void sort( int A[][ 10 ], int n )
{
    int i, j, temp;
   
    for( j = 1; j <= n; j++ )
    {
        for( i = 0; i < n - j; i++ )
        {
            if( A[ j ][ i ] > A[ j + 1 ][ i + 1 ] )
            {
                temp = A[ j ][ i ];
                A[ j ][ i ] = A[ j + 1 ][ i + 1 ];
                A[ j + 1 ][ i + 1 ] = temp;
            }
        }
    }
}

Proszę o pomoc :)
P-128735
pekfos
» 2015-03-18 20:11:09
Jak masz posortować przekątną, to tablicy używaj jak jednowymiarowej. tab[i][i].
P-128736
Anim
Temat założony przez niniejszego użytkownika
» 2015-03-18 21:37:35
Poradziłem sobie :) Dodałem dodatkową pętlę for usuwającą kolumny po każdym sortowaniu :)
P-128746
« 1 »
  Strona 1 z 1