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

Program losujący liczby i sortujący je.

Ostatnio zmodyfikowano 2017-01-04 17:51
Autor Wiadomość
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.
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int t[ 1 ][ 100 ];

int schowek, zamiana;
void Sortowanie( int, int ); //deklaracja funkcji.


int main( void )
{
    srand( time( NULL ) );
    int t[ 1 ][ 100 ];
    int j;
    for( int i = 0; i < 1; ++i ) //niby nie potrzebne, a jednak po usunięciu losowało mi 3 liczby i crashował się program.
    {
       
        for( int j = 0; j < 100; ++j ) {
            t[ i ][ j ] = rand() % 1001;
           
        }
        /////////
        for( int j = 0; j < 100; ++j ) {
            printf( "%d ", t[ i ][ j ] ); //Tu chyba powinienem skorzystać z funkcji. Jednak printf("%d ", sortowanie(i,j)) nie działa i się nie dziwię...
        }
        printf( "\n" );
    }
   
   
   
    return 0;
}




void Sortowanie( int i, int j )
{
    int t[ 1 ][ 100 ]; //kazało mi zadeklarować tablice. Może powinienem ją zadeklarować na górze globalnie? int *t[1][100] powinno być?
    for( int i = 0; i < 1; i++ ) //jak to usuwałem to czasem działy się dziwne rzeczy... Dlatego zostawiłem.
    {
        for( int j = 0; j < 100; j++ ) // tablica ma 100 elementów więc chyba tak powinno być.
        {
            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?
P-155950
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".
C/C++
#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 );
   
    // Jeśli pozwalają użyć qsort()
    printf( "Przed sortowaniem tablica zawiera:\n" );
    show_table( table );
    // Sortowanie qsort()
    qsort( table, TABLE_SIZE, sizeof( int ), compare );
    printf( "Po sortowaniu tablica zawiera:\n" );
    show_table( table );
   
    return EXIT_SUCCESS;
}
 
P-155953
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 ;/
P-155955
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 :-)
C/C++
#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;
}
P-155957
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.
P-155958
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:

C/C++
#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
P-155964
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 :-)
P-155969
« 1 »
  Strona 1 z 1