[c++] n-elementowa tablica i losowanie wartości.
Ostatnio zmodyfikowano 2012-11-14 15:20
aimq Temat założony przez niniejszego użytkownika |
[c++] n-elementowa tablica i losowanie wartości. » 2012-11-11 16:54:18 mam problem z czymś takim: Napisz program definiujący N-elementową tablicę liczb całkowitych a następnie inicjujący jej zawartość losowymi liczbami z przedziału od 30 do 50. Nie wiem jak zrobić aby z programu wczytać ile elementów ma mieć tablica. mam cos takiego: #include <iostream> #include <cstdlib> #include <time.h> using namespace std;
int main() { int random; int liczba[ 10 ]; int licznik = 0; srand( time( NULL ) ); do { random = rand() % 21 + 30; liczba[ licznik ] = random; cout << liczba[ licznik ] << endl; licznik++; } while( licznik < 10 ); system( "pause" ); }
próbowałe tak: #include <iostream> #include <cstdlib> #include <time.h> using namespace std;
int main() { int random; int n; cin >> n; int liczba[ n ]; int licznik = 0; srand( time( NULL ) ); do { random = rand() % 21 + 30; liczba[ licznik ] = random; cout << liczba[ licznik ] << endl; licznik++; } while( licznik < n ); system( "pause" ); }
ale to nie działa. |
|
crash |
» 2012-11-12 18:20:20 int n; cin >> n; int liczba[ n ];
Pazomnij. Poczytaj o dynamicznym przydzielaniu pamięci, powyżej używasz nieprawidłowo statycznego. |
|
aimq Temat założony przez niniejszego użytkownika |
» 2012-11-14 13:10:30 tamten problem już rozwiązałem, teraz nie umiem posortować tablicy dwuwymiarowej, sortuje tylko pierwszy wiersz - nie umiem tego poprawić. Kod #include <iostream> #include <cstdlib> #include <time.h> #include <cstdio> #include <algorithm> using namespace std; #define N 5 int main() { int random; int T[ N ][ N ]; srand( time( NULL ) ); for( int i = 0; i < N; i++ ) { for( int j = 0; j < N; j++ ) { random = rand() % 100; T[ i ][ j ] = random; cout << T[ i ][ j ] << "\t"; } cout << endl; } int n = N; for( int i = 0; i < N; i++ ) { do { for( int j = 0; j < n - 1; j++ ) { if( T[ i ][ j ] > T[ i ][ j + 1 ] ) { swap( T[ i ][ j ], T[ i ][ j + 1 ] ); } } n = n - 1; } while( n > 1 ); } cout << endl; for( int i = 0; i < N; i++ ) { for( int j = 0; j < N; j++ ) { cout << T[ i ][ j ] << "\t"; } cout << endl; } system( "pause" ); return 0; }
|
|
crash |
» 2012-11-14 13:46:06 A jak chcesz posorcić te dane? w każdym wierszu rosnąco, ale początkowe wartości każdego wiersza nieposortowane względem siebie, czy może tak, że tab[0,0] to najmniejsza wartość, a tab[n,n] to max? |
|
aimq Temat założony przez niniejszego użytkownika |
» 2012-11-14 14:35:44 wyżej była próba posortowania każdego wiersza osobno - rosnąco. jak juz to bede mial mozna pomyslec nad innymi sortowaniami. |
|
aimq Temat założony przez niniejszego użytkownika |
» 2012-11-14 15:10:36 wymyśliłem, gdy n kończyło mi petlę dla pioerwzego wiersza sprawiało że petla sortujaca nie zaczynala sie dla kolejnych wierszy, wystarczyło dodać na koniec n=N; int n = N;
for( int i = 0; i < N; i++ ) { do { for( int j = 0; j < n - 1; j++ ) { if( T[ i ][ j ] > T[ i ][ j + 1 ] ) { swap( T[ i ][ j ], T[ i ][ j + 1 ] ); } } n = n - 1; } while( n > 1 ); n = N; }
pozniej pomysle nad drugim sortowaniem i jak bede mial problem napisze tutaj. |
|
crash |
» 2012-11-14 15:17:59 for( int i = 0; i < N; i++ ) for( int a = 0; a < N; ++a ) for( int b = a; b < N; ++b ) if( T[ i ][ b ] > T[ i ][ a ] ) swap( T[ i ][ b ], T[ i ][ a ] );
ups formatowanie się popsuło się Żeby teraz wiersze posortować, trzeba tylko początkowe elementy wierszy porównywać. W razie porównania, pętla for swapująca kolejne elementy dwóch porównanych wierszy. edit2: Po co Ci tyle klamerków ;p |
|
flrone |
» 2012-11-14 15:20:17 Poczytaj o sortowaniu bąbelkowym, ja jestem w klasie informatycznej i trzeci rok już nie mogę zapamietać jak się sortuje i zawsze patrze do zeszytu :P pzdr. |
|
« 1 » |