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: printf( "wpisz ciąg n liczb całkowitych" ); scanf( % d, & liczby );
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ę. |
|
mokrowski |
» 2017-01-04 18:17:52 Naiwne i szkolne, ale mniemam że takiego potrzebujesz ... #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; }
|
|
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: #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: 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 |
|
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" #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 ) { }
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; }
|
|
« 1 » |