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

sortowanie przez wstawienie

Ostatnio zmodyfikowano 2014-03-29 20:52
Autor Wiadomość
winio94
Temat założony przez niniejszego użytkownika
sortowanie przez wstawienie
» 2014-03-29 16:31:51
Witam mam takie zadanie: Odsortować elementy wierszy od maksymalnego do minimalnego
dokładniej to mam macierz w pliku i nie wiem dlaczego po pierwsze:
1/ wyskakuje mi błąd przy kompilacji:  "C:\Users\winio\Documents\sortowanie.cpp [Error] 'tab1' was not declared in this scope"
2/ gdy już zadeklaruje tablice w funkcji main(chociaż są zadeklarowane w osobnej funkcji :O ) to program się kompiluje ale sortowanie źle działa.

Oto mój fragment kodu:
C/C++
int sortowanie( int tab1[ 100 ], int tab[ 10 ][ 10 ] )
{
   
    ofstream plik;
    plik.open( "macierz.txt", ios_base::app );
    int b = 0; //zmienna do tablicy tab1/
   
    for( int i = 0; i <= 9; i++ )
    {
        for( int j = 0; j <= 9; j++ )
        {
            tab1[ b ] = tab[ i ][ j ];
            b++;
        }
    }
    int k, l; //zmienne do sortowania
    for( k = 98; k >= 0; k-- )
    {
        l = tab1[ k ]; //l=tab1[k+1]
        b = k + 1; //opuscic
        while(( b < 100 ) &&( l < tab1[ b ] ) ) //b<=tab1[k+1]
        {
            tab1[ b - 1 ] = tab1[ b ];
            b++;
        }
        tab1[ b - 1 ] = l;
    }
    int c = 0;
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            tab[ i ][ j ] = tab1[ c ];
            c++;
        }
    }
    cout << "Zawartosc pliku po sortowaniu:\n\n";
    plik << "Zawartosc pliku po sortowaniu:\n\n";
    for( int i = 0; i < 10; i++ )
    {
       
        for( int j = 0; j < 10; j++ )
        {
            cout << setw( 4 ) << tab[ i ][ j ];
            plik << setw( 5 ) << tab[ i ][ j ];
        }
        plik << endl;
        cout << endl;
        cout << endl;
       
    }
    plik << endl;
    plik.close();
   
}




int main()
{
    wypisywanie();
    sortowanie( tab1, tab );
    return 0;
}
Z góry dzięki i pozdrawiam
P-107413
ArgonZapan
» 2014-03-29 19:15:31
int sortowanie( int *tab1, int tab[ 10 ][ 10 ] )

spróbuj przekazać tab1 przez wskaźnik


P-107427
Monika90
» 2014-03-29 20:24:12
spróbuj przekazać tab1 przez wskaźnik

int sortowanie( int tab1[ 100 ], int tab[ 10 ][ 10 ] )

przecież to jest przekazywanie prez wskażnik
P-107442
winio94
Temat założony przez niniejszego użytkownika
» 2014-03-29 20:42:48
Problem rozwiązany! Ja głupi nie stworzyłem drugiego pliku txt a był konieczny. A po drugie wystarczyło przenieść deklaracje tablic pod "using namespace std" i działa. Natomiast mam drugi problem. Mianowicie mam wypisać maksymalne elementy każdej kolumny pod diagonalą dodatkową macierzy:

97   95   91   91   89   87   85   78   76   75

   73   73   71   70   68   65   64   63   62   60

   59   58   54   53   50   49   44   43   41   41

   38   38   30   28   27   27   27   23   19   16

   15   15   13   13   13   12   11   11    9    6

    4    2   -3   -3  -10  -15  -18  -19  -20  -23

  -26  -26  -28  -34  -35  -36  -38  -38  -46  -54

  -55  -55  -57  -57  -58  -63  -63  -65  -65  -66

  -66  -66  -67  -67  -69  -69  -70  -73  -74  -75

  -75  -76  -82  -84  -85  -89  -94  -97  -98 -100

Najpierw chciałbym wypisać wszystkie elementy pod diagonalą dodatkową i wymyśliłem(z dużą pomocą kolegi) taki kod:
przesyłam jednak cały żeby było wiadomo o co chodzi. Chodzi o funkcję diagonala:

C/C++
#include <iostream>
#include <fstream>
#include<conio.h>
#include <iomanip>
#include <cstdlib>
using namespace std;
int tab1[ 100 ];
int tab[ 10 ][ 10 ];
void wypisywanie()
{
    ifstream plik( "macierz.txt", ios_base::app );
    cout << "przed sortowaniem:" << endl;
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            plik >> tab[ i ][ j ];
        }
    }
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            cout << setw( 4 ) << tab[ i ][ j ];
        }
        cout << endl;
        cout << endl;
    }
    plik.close();
}

int sortowanie( int tab1[ 100 ], int tab[ 10 ][ 10 ] )
{
   
    ofstream plik;
    plik.open( "macierz2.txt", ios_base::app );
    cout << endl << endl;
    cout << "Po sortowaniu" << endl; plik << endl;
    int b = 0; //zmienna do tablicy tab1/
   
    for( int i = 0; i <= 9; i++ )
    {
        for( int j = 0; j <= 9; j++ )
        {
            tab1[ b ] = tab[ i ][ j ];
            b++;
        }
    }
    int k, l; //zmienne do sortowania
    for( k = 98; k >= 0; k-- )
    {
        l = tab1[ k ]; //l=tab1[k+1]
        b = k + 1; //opuscic
        while(( b < 100 ) &&( l < tab1[ b ] ) ) //b<=tab1[k+1]
        {
            tab1[ b - 1 ] = tab1[ b ];
            b++;
        }
        tab1[ b - 1 ] = l;
    }
    int c = 0;
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 10; j++ )
        {
            tab[ i ][ j ] = tab1[ c ];
            c++;
        }
    }
    for( int i = 0; i < 10; i++ )
    {
       
        for( int j = 0; j < 10; j++ )
        {
            cout << setw( 4 ) << tab[ i ][ j ];
            plik << setw( 5 ) << tab[ i ][ j ];
        }
        cout << endl;
       
        cout << endl; plik << endl; plik << endl;
       
    }
   
    plik.close();
    plik.clear();
}
void diagonala( int tab[ 10 ][ 10 ] )
{
   
    ofstream plik;
    plik.open( "macierz2.txt", ios_base::app );
    cout << endl << endl;
    cout << "elementy pod diagonala dodatkowa" << endl;
    int d = 0;
    for( int j = 0; j <= 9; j++ )
    {
        for( int i = 0; i <= 9; i++ )
        {
            if( i + j >= 11 )
            {
               
                d = d + tab[ j ][ i ];
            }
        }
       
    }
    cout << d;
   
   
}

int main()
{
    wypisywanie();
    sortowanie( tab1, tab );
    diagonala( tab );
    return 0;
}
P-107445
winio94
Temat założony przez niniejszego użytkownika
» 2014-03-29 20:52:04
edit problem rozwiązany musiałem zamienić tylko ten kod:
C/C++
if( i + j >= 11 )
{
   
    d = d + tab[ j ][ i ];
}
}

}
cout << d;

na taki:
C/C++
int d = 0;
for( int j = 0; j <= 9; j++ )
{
    for( int i = 0; i <= 9; i++ )
    {
        if( i + j >= 10 )
        {
            cout << tab[ i ][ j ];
        }
    }
   
}

Teraz proszę Was bardzo abyście pomogli mi wydumać jak wypisyać największe elementy każdej kolumny pod ww diagonalą dodatkową.
P-107446
« 1 »
  Strona 1 z 1