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

Program, który wczyta ciąg liczb i wpisze je do tablicy.

Ostatnio zmodyfikowano 2017-01-04 20:57
Autor Wiadomość
nowawieza
Temat założony przez niniejszego użytkownika
Program, który wczyta ciąg liczb i wpisze je do tablicy.
» 2017-01-04 17:12:41
Witam,

mam do napisania program który wczyta ciąg liczb i wpisze je do tablicy. Następnie mają one zostać posortowane metodą karcianą.

Funkcję do sortowania gdzieś znajdę ale nie wiem jak wczytać ciąg liczb i wpisać go do tablicy.

Ja to rozumiem tak:

C/C++
printf( "wpisz ciąg n liczb całkowitych" );
scanf( % d, & liczby );

//następnie wpisuję to do tablicy jako:

int tab[ 5 ] = { 1, 3...i tak dalej };

Jak z jednego scanf rozdzielić każdą liczbę na poszczególną cyfrę?

No chyba, że poprzez "ciąg liczb całkowitych" mam rozumieć, że użytkownik wpisze np. 11 102 104 i tak dalej. No ale to i tak bym musiał jakoś rozdzielić. Chyba, że bym zrobił scanf(%d%d%d%d,&liczby,liczby2,liczby3,liczby4); i tak dalej. Ale to by musiała być ciekawa pętla.
Nie jestem kreatywny ;/

A może spytać użytkownika ile liczb zamierza wpisać? Zrobić tablicę o takim wymiarze, a potem martwić się rozdzielaniem liczb z tego ciągu?

Wybaczcie mój brak rozgarnięcia ale nadal się uczę tego myślenia i programowania... To przyjdzie z czasem mam nadzieję.
P-155967
mokrowski
» 2017-01-04 18:17:52
Naiwne i szkolne, ale mniemam że takiego potrzebujesz ...
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TABLE_SIZE 10

size_t read_values( int table[], size_t counter ) {
    printf( "Podaj maksymalnie %zu liczb."
    "Zakończ w nowej linii <ctrl+d> lub <ctr+z> (dla Windows): ", counter );
    size_t index = 0;
    do {
        if( scanf( " %d", &( table[ index ] ) ) == EOF ) {
            break;
        }
        ++index;
    } while( index < counter );
   
    return index;
}

void show_table( int table[], size_t counter ) {
    printf( "Dane w tablicy:\n" );
    for( size_t i = 0; i < counter; ++i ) {
        printf( "%d|", table[ i ] );
    }
    putchar( '\n' );
}

int main( void ) {
    int table[ TABLE_SIZE ] = { 0 };
    size_t counter;
   
    counter = read_values( table, TABLE_SIZE );
    printf( "Wprowadziłeś %zu wartości.\n", counter );
    show_table( table, TABLE_SIZE );
   
    return EXIT_SUCCESS;
}
P-155970
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-01-04 19:19:34
Ehh, odpisałem, a się nie wysłało i nie mogę tego odzyskać ;/

A zatem:

Przerobiłem kod tak żeby tworzyła się tablica na ilość wyrazów jaką użytkownik wpisze.
2 razy napisałeś %du. Nie wiem co to miało oznaczać ale poprawiłem to na %d.

Potrzebuję teraz jeszcze wstawić ograniczenie wpisywania do tablicy. Tak żeby użytkownik nie wyszedł poza tablicę. Chce podać 15 liczb w ciągu to niech wpisze 15, nie mniej i nie więcej. Tylko nie wiem gdzie takie coś dodać.
Kod programu po poprawkach:

C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



size_t read_values( int table[], size_t counter ) {
   
   
    printf( "Podaj maksymalnie %d liczb."
    "Zakończ w nowej linii <ctrl+d> lub <ctr+z> (dla Windows): ", counter );
    size_t index = 0;
    do {
        if( scanf( " %d", &( table[ index ] ) ) == EOF ) {
            break;
        }
        ++index;
    } while( index < counter );
   
    return index;
}

void show_table( int table[], size_t counter ) {
    printf( "Dane w tablicy:\n" );
    for( size_t i = 0; i < counter; ++i ) {
        printf( "%d|", table[ i ] );
    }
    putchar( '\n' );
}

int main( void ) {
    int TABLE_SIZE = 0;
    printf( "Podaj ilosc liczb w ciagu: " );
    scanf( "%d", & TABLE_SIZE );
    int table[ TABLE_SIZE ] = { 0 };
    size_t counter;
   
    counter = read_values( table, TABLE_SIZE );
    printf( "Wprowadziłeś %du wartości.\n", counter );
    show_table( table, TABLE_SIZE );
   
    return EXIT_SUCCESS;
}

I jeszcze sortowanie.

Znalazłem takie:
C/C++
void Sortowanie( int tab[], int size )
{
    int temp, j;
   
    for( int i = 1; i < size; i++ )
    {
        temp = tab[ i ];
       
        for( j = i - 1; j >= 0 && tab[ j ] > temp; j-- )
             tab[ j + 1 ] = tab[ j ];
       
        tab[ j + 1 ] = temp;
    }
}
Postaram się go przerobić jakoś ale nie wiem czy ogarnę :D
P-155974
mokrowski
» 2017-01-04 20:57:08
1. Wiesz co, na początek proponuję byś nie poprawiał jeśli się nie kompiluje.
2. Dodaj do kompilatora przełączniki ostrzeżeń to będziesz wiedział dlaczego było %zu .
3. Co do wartości 15, zwróć uwagę na #define TABLE_SIZE       To tego szukasz.
4. Należy przerobić funkcję wczytującą dane. Podpowiem że tam będzie zwykły for.

Masz tu "kadłubek"
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TABLE_SIZE 15

void read_values( int table[], size_t table_length ) {
    printf( "Podaj %zu liczb: ", table_length );
    for( size_t i = 0; i < table_length; ++i ) {
        scanf( " %d", &( table[ i ] ) );
    }
}

void show_table( int table[], size_t table_length ) {
    printf( "Dane w tablicy:\n" );
    for( size_t i = 0; i < table_length; ++i ) {
        printf( "%d|", table[ i ] );
    }
    putchar( '\n' );
}

void insertion_sort( int table[], size_t table_length ) {
    // Tu zaimplementuj algorytm sortowania...
}

int main( void ) {
    int table[ TABLE_SIZE ] = { 0 };
   
    read_values( table, TABLE_SIZE );
    printf( "Tablica przed sortowaniem:\n" );
    show_table( table, TABLE_SIZE );
   
    insertion_sort( table, TABLE_SIZE );
    printf( "Tablica po posortowaniu:\n" );
    show_table( table, TABLE_SIZE );
   
    return EXIT_SUCCESS;
}
P-155981
« 1 »
  Strona 1 z 1