nowawieza Temat założony przez niniejszego użytkownika |
Program losujący liczby i sortujący je. » 2017-01-04 14:27:19 Witam, mam do napisania program, który losuje liczby, wpisuje je do tablicy 1 x 100 i później sortuje te liczby. Próbowałem to napisać jednak ciągle bawię się z błędami i nie wiem co zrobić. Aktualnie doszedłem do momentu gdzie błędu nie ma ale nie wiem jak użyć funkcji, która posortuje liczby. Losowanie jest zrobione. Tablicowanie chyba też chociaż nie ogarniam tego do końca. Funkcja jest napisana ale mogą być w niej błędy. #include <stdio.h> #include <stdlib.h> #include <time.h>
int t[ 1 ][ 100 ];
int schowek, zamiana; void Sortowanie( int, int );
int main( void ) { srand( time( NULL ) ); int t[ 1 ][ 100 ]; int j; for( int i = 0; i < 1; ++i ) { for( int j = 0; j < 100; ++j ) { t[ i ][ j ] = rand() % 1001; } for( int j = 0; j < 100; ++j ) { printf( "%d ", t[ i ][ j ] ); } printf( "\n" ); } return 0; }
void Sortowanie( int i, int j ) { int t[ 1 ][ 100 ]; for( int i = 0; i < 1; i++ ) { for( int j = 0; j < 100; j++ ) { if( t[ i ][ j ] > t[ i ][ j + 1 ] ) schowek = t[ i ][ j ]; t[ i ][ j ] = t[ i ][ j + 1 ]; t[ i ][ j + 1 ] = schowek; } } }
Powiedzcie proszę co robię nie tak i jak skorzystać z tej funkcji jeśli ona korzysta z tablicy? |
|
mokrowski |
» 2017-01-04 14:48:07 Masz bardzo dużo błędów w tym kodzie. Jesteś pewien że nie chodziło o tablicę z 100 elementami. Twoja ma teraz 2 wiersze na 100. Powiedz co jest niejasne najpierw w tym kodzie bo odnoszę wrażenie że na razie programujesz "po omacku". #include <stdio.h> #include <time.h> #include <stdlib.h>
#define TABLE_SIZE 10
void seed_table( int table[], unsigned mod_value ) { for( size_t i = 0; i < TABLE_SIZE; ++i ) { table[ i ] = rand() % mod_value; } }
void show_table( int table[] ) { putchar( '|' ); for( size_t i = 0; i < TABLE_SIZE; ++i ) { printf( "%d|", table[ i ] ); } putchar( '\n' ); }
int compare( const void * a, const void * b ) { return( *(( int * ) a ) - *(( int * ) b ) ); }
int main( void ) { int table[ TABLE_SIZE ]; srand( time( NULL ) ); seed_table( table, 1001 ); printf( "Przed sortowaniem tablica zawiera:\n" ); show_table( table ); qsort( table, TABLE_SIZE, sizeof( int ), compare ); printf( "Po sortowaniu tablica zawiera:\n" ); show_table( table ); return EXIT_SUCCESS; }
|
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-01-04 15:10:38 Znaczy pierwsza rzecz, która mi się ciśnie na usta to to, że nie napisałbym tego w ten sposób. Jestem na takim etapie, że czytać kod potrafię ale sam pisać średnio ;)
Mam tutaj mieć tablicę 1x100 więc masz rację, że jest błąd. Zapomniałem, że wiersze i kolumny w tablicy liczy się od 0.
Sortowanie ma być metodą bąbelkową czyli mniej więcej tak jak zapisałem w funkcji.
Musi być to zrobione w C, a nie w C++ więc jakieś funkcje compare itd. odpadają + nawet jak da się tego użyć to mnie tego nie uczyli :P
Powiem tak. Trzeba przerobić mój kod jakoś żeby to działało. Myślę, że właśnie w taki sposób mieliśmy napisać ten program ;/ |
|
mokrowski |
» 2017-01-04 15:20:59 Hmm.. to jest właśnie napisane w C a nie w C++. Załączam algorytm sortowania bubblesort (także w C). Na postawie tych 2 programów jesteś w stanie złożyć rozwiązanie swojego problemu :-) #include <stdio.h> #include <stdlib.h>
void bubblesort( int table[], size_t size ) { for( size_t i = 0; i < size - 1; ++i ) { for( size_t j = 0; j < size - 1 - i; ++j ) { if( table[ j ] > table[ j + 1 ] ) { int temp; temp = table[ j ]; table[ j ] = table[ j + 1 ]; table[ j + 1 ] = temp; } } } }
int main() { int table[] = { 12, 30, 44, 31, 5, 4 }; bubblesort( table, 6 ); for( size_t i = 0; i < 6; ++i ) { printf( "%d ", table[ i ] ); } putchar( '\n' ); return EXIT_SUCCESS; }
|
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-01-04 15:24:16 Hmmm ok postaram się to połączyć (po wykładach ~2h). O i jestem ci mega wdzięczny za to, że uświadomiłeś mi, że jest to tablica jedno wierszowa ;D Wszystko stało się prostsze. |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-01-04 16:42:18 Ok, ominąłem wykład ale udało mi się to połączyć. Kod wygląda tak: #include <stdio.h> #include <stdlib.h> #include <time.h>
void bubblesort( int table[], size_t size ) { for( size_t i = 0; i < size - 1; ++i ) { for( size_t j = 0; j < size - 1 - i; ++j ) { if( table[ j ] > table[ j + 1 ] ) { int temp; temp = table[ j ]; table[ j ] = table[ j + 1 ]; table[ j + 1 ] = temp; } } } }
int main() { srand( time( NULL ) ); int table[ 100 ]; int j, i = 0; for( int j = 0; j < 100; ++j ) { table[ j ] = rand() % 1001; } bubblesort( table, 100 ); for( size_t i = 0; i < 100; ++i ) { printf( "%d ", table[ i ] ); } putchar( '\n' ); return EXIT_SUCCESS; }
Teraz jeszcze muszę się tego nauczyć żebym następnym razem sam takie coś napisał. Dzięki za pomoc! Ps: for( size_t i = 0; i < size - 1; ++i ) ta pętla chyba nie jest tu potrzebna. Ale zostawię na przyszłość żebym miał funkcję na sortowanie bąbelkowe :D Ciekaw jestem skąd tak szybko wytrzasnąłeś mi tą funkcję ;D |
|
mokrowski |
» 2017-01-04 17:51:25 Sortowanie bubblesort oraz binary search, to "oklepane" zadania rekrutacyjne dla świeżych programistów. Szczególnie przy tym 2'gim się wykładają na niedokładności implementacji także ... zapoznaj się :-) A co do pętli.. oj.. zastanów się.. chyba jest potrzebna :-) |
|
« 1 » |