sortowanie przez wstawienie
Ostatnio zmodyfikowano 2014-03-29 20:52
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: int sortowanie( int tab1[ 100 ], int tab[ 10 ][ 10 ] ) { ofstream plik; plik.open( "macierz.txt", ios_base::app ); int b = 0; for( int i = 0; i <= 9; i++ ) { for( int j = 0; j <= 9; j++ ) { tab1[ b ] = tab[ i ][ j ]; b++; } } int k, l; for( k = 98; k >= 0; k-- ) { l = tab1[ k ]; b = k + 1; while(( b < 100 ) &&( l < tab1[ b ] ) ) { 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 |
|
ArgonZapan |
» 2014-03-29 19:15:31 int sortowanie( int *tab1, int tab[ 10 ][ 10 ] )
spróbuj przekazać tab1 przez wskaźnik
|
|
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 |
|
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: #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; for( int i = 0; i <= 9; i++ ) { for( int j = 0; j <= 9; j++ ) { tab1[ b ] = tab[ i ][ j ]; b++; } } int k, l; for( k = 98; k >= 0; k-- ) { l = tab1[ k ]; b = k + 1; while(( b < 100 ) &&( l < tab1[ b ] ) ) { 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; } |
|
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: if( i + j >= 11 ) { d = d + tab[ j ][ i ]; } }
} cout << d; na taki: 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ą. |
|
« 1 » |