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

Funkcje, wskaźniki, tablice

Ostatnio zmodyfikowano 2017-12-10 00:29
Autor Wiadomość
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.
C/C++
#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 ] );
   
}
P-167747
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
P-167750
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'
P-167751
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 ) );



P-167752
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:
C/C++
#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 ] );
}
P-167753
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);
P-167754
Bercik97
Temat założony przez niniejszego użytkownika
» 2017-12-09 17:00:05
Dalej wywala błąd.
C/C++
void funkcja( int tab[ 5 ] )
printf( "Najwieksza liczba z podanych to: %d", tab[ n - 1 ] );
edit: dobra zle zrozumialem, działa dzieki :)
P-167755
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
C/C++
#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 ); //zamiast tego napiszesz sobie to co w komentarzu ponizej
    /*
        printf("Najwieksza liczba to: ");
        printf("%d", funkcja( tab ) );
    */
   
    return 0;
}
int funkcja( int tab[ 5 ] )
{
    int i;
   
    for( i = 0; i < 5; i++ )
    {
        printf( "%d, ", tab[ i ] ); //tutaj akurat wyswietlam dla sprawdzenia, potem zakomentować
        //...tutaj robisz swoje sprawdzenia która liczba największa i wysyłasz wynik return'em...
       
    }
   
   
    return i;
}
 i jeszcze jedno
w funkcji masz za dużo zmiennych
wystarczy
C/C++
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 konstrukcja
C/C++
int i, wt; //wt- wielkosc tablicy
printf( "Podaj wielkosc tablicy : " );
scanf( "%d", & wt );
int tab[ wt ];
a do funkcji przesyłasz dwa parametry tablice i jej wielkośc
C/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,
P-167756
« 1 » 2
  Strona 1 z 2 Następna strona