Bercik97 Temat założony przez niniejszego użytkownika |
Funkcje, wskaźniki, tablice » 2017-12-09 15:46:06 Witam, co jest nie tak w tym kodzie? Podaje liczbę ile liczb całkowitych chce w tablicy a nast. chce podać je, tylko że program mi się zawiesza po wpisaniu pierwszej wartości. Pomoże ktoś? Jestem trochę zielony w wskaźnikach i tablicach. #include <stdio.h> #include <stdlib.h>
void funkcja( int, int[] );
int main() { int n, tab[] = { }; printf( "Ile liczb calkowitych: " ); while(( scanf( "%d", & n ) ) == 1 ) { funkcja( n, tab[ n ] ); } return 0; } void funkcja( int n, int tab[ n ] ) { int i; for( i = 0; i < n; i++ ) scanf( "%d", & tab[ i ] ); }
|
|
nanoant20 |
» 2017-12-09 16:20:45 do funkcji void przekazujesz tablice a Ty w niej pobierasz elementy scanf( "%d", & tab[ i ] ); zamaist wypisywać Jeżeli to ma być tablica dynamiczna to trzeba ją stworzyć przy pomocy malloc |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-09 16:25:32 Chce utworzyć tablicę o rozmiarze podanym przez użytkownika, potem wywołać funkcje która pobiera np te 5 elementów jakie mają być w tablicy a potem wypisać je edit: Może inaczej bo komplikuje sobie sprawę chyba, tablic dynamicznych jeszcze nie miałem, nawet nie wiem co to. Mam do napisania funkcje która zwraca największą wartość przechowywaną w tablicy. Tylko, że ja chciałem to urozmaicić tym, że użytkownik podaje rozmiar tablicy i liczby wpisywane do niej. I pytanie czy da się to zrobić bez pomocy funkcji 'malloc' |
|
nanoant20 |
» 2017-12-09 16:39:42 albo na sztywno rozmiar tablicy deklaracja tablicy typu caġkowitego int tab[ 10 ]; albo funckja malloc alokacja bloku pamięci tab =( int * ) malloc( n * sizeof( int ) ); |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-09 16:44:28 Okej, nie wiedziałem o tym. W takim razie mam jeszcze jeden problem, napisałem już tą całą funkcje tylko, że jak podaje te np te 5 liczb to program wyznacza mi która jest największa ale wywala błąd na koniec programu. Oto cały kod: #include <stdio.h> #include <stdlib.h>
int funkcja( int[] );
int main() { int tab[ 5 ] = { }; printf( "Podaj 5 liczb calkowitych:\n" ); funkcja( tab[ 5 ] ); return 0; } int funkcja( int tab[ 5 ] ) { int i, j, z, k, n = 5; for( i = 0; i < n; i++ ) scanf( "%d", & tab[ i ] ); for( i = 1; i < n; i++ ) { for( j = n - 1; j >= 1; j-- ) { if( tab[ j ] < tab[ j - 1 ] ) { z = tab[ j - 1 ]; tab[ j - 1 ] = tab[ j ]; tab[ j ] = z; } } } return printf( "Najwieksza liczba z podanych to: %d", tab[ n - 1 ] ); } |
|
nanoant20 |
» 2017-12-09 16:50:37 masz funkcję int więc return'em zwracasz wynik a nie printf EDIT Mam do napisania funkcje która zwraca największą wartość przechowywaną w tablicy. |
do funkcji trzeba przekazać tablice ale tą tablicę tworzysz w mein a nie w funkcji i dopiero wtedy przekazujesz ją do funkcji typu int funkcja(int *tab); |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-09 17:00:05 Dalej wywala błąd. void funkcja( int tab[ 5 ] ) printf( "Najwieksza liczba z podanych to: %d", tab[ n - 1 ] );
edit: dobra zle zrozumialem, działa dzieki :) |
|
nanoant20 |
» 2017-12-09 17:11:08 napisałem Ci poniżej taki wzór na szybko. Przypatrz się i przerób sobie, tylko return'em nie wysyłasz "i" tylko wynik #include <stdio.h> #include <stdlib.h>
int funkcja( int tab[] );
int main() { int tab[ 5 ] = { }; printf( "Podaj 5 liczb calkowitych:\n" ); int i; for( i = 0; i < 5; i++ ) { scanf( "%d", & tab[ i ] ); } funkcja( tab ); return 0; } int funkcja( int tab[ 5 ] ) { int i; for( i = 0; i < 5; i++ ) { printf( "%d, ", tab[ i ] ); } return i; }
i jeszcze jedno w funkcji masz za dużo zmiennych wystarczy int i, max; ..petelka z if 'em (warunkiem) return max;
i to wszystko @EDIT Chce utworzyć tablicę o rozmiarze podanym przez użytkownika |
można by to zrobić tak, choć lepiej używać funkcji malloc jak wyżej pisałem Niebezpieczna konstrukcjaint i, wt; printf( "Podaj wielkosc tablicy : " ); scanf( "%d", & wt ); int tab[ wt ];
a do funkcji przesyłasz dwa parametry tablice i jej wielkośc int funkcja( int tab[], int wt );
@EDIT P.S. Zalecam korzystać z funkcji malloc. Dlaczego? Ponieważ, funkcja ta rezerwuje określony rozmiar pamięci i masz pewność, że nie będzie tam przypadkowych wartości. Nie pamiętam w której książce to czytałem, ale autor zwizualizował to tak. Jeżeli używasz funkcji malloc lub operatora new to tak jakbyś budował na swojej działce, w przeciwnym wypadku budujesz gdzie popadnie, np. troche na swojej działce a część na działce sąsiada. Więc jak widzisz, jeżeli robić cokolwiek to trzeba zrobić to dobrze od samego początku, niż potem spędzić dużo czasu na szukaniu błędu logicznego (niebezpiecznej konstrukcji), co może być bardzo trudne do ustalenia, |
|
« 1 » 2 |