Prosty program - wskaznik na tablice

0

Napisać funkcję, która przyjmuje jako argument tablicę liczb całkowitych i zwraca wskaźnik do tablicy zawierającej wyłącznie liczby dodatnie z tablicy przekazanej jako argument.

Byłbym bardzo wdzieczny.

3

Posprzątać mój pokój.

Z góry dziękuję.

0

Oczekujesz pomocy czy rozwiązania za Ciebie?

  1. Jeśli pomocy: pokaż kod, staraj się zastosować do Dlaczego nikt nie odpowiada w moim wątku?
  2. Jeśli wykonania za Ciebie: http://4programmers.net/Forum/Og%C5%82oszenia_drobne (jestem w stanie wykonać zadanie za zaledwie 250zł)
0
int FUNKCJA (int *A[])
{
    int rozmiar = 3;
    A = (int*) malloc(rozmiar * sizeof(*A));
    for ()
}
int main()
{
    int A[] = {-3, -2, -1, 2, 5, 8};
    int i;
    for (i=0; i < 5; i++)
    {
        printf ("Index: %d  Liczba: %d \n" , i, A[i]);
    }
}

Póki co mam tyle :)

1

Na początek parę uwag:

int FUNKCJA (int *A[]) 

// 1) nie nazywaj funkcji wielkimi literami - zazwyczaj konwencja jest taka,
// że pierwsze słowo jest z małej, a kolejne z dużej, np. sortArray()
// 2) int *A[] oznacza tablicę wskaźników (wskazujących na wartość typu int)
// także tutaj powinno być po prostu int *A albo int A[]

{
    int rozmiar = 3; // czemu z góry założenie, że tych elementów będzie równo 3?
    A = (int*) malloc(rozmiar * sizeof(*A)); // nie lepiej sizeof(int)? no ale bez znaczenia w gruncie rzeczy
    for ()
}

int main()
{
    int A[] = {-3, -2, -1, 2, 5, 8};
    int i;
    for (i=0; i < 5; i++)   // zaraz ktoś się przyczepi, że to nie jest ++i :D
    {
        printf ("Index: %d  Liczba: %d \n" , i, A[i]);
    }
// skoro main jest typu int, to coś zwraca - brak return 0
}

Można to zadanie zrobić np. tak:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

int *copyPositive(const int *, size_t, size_t);
size_t countPositive(const int *, size_t);

int main()
{
    int tab1[] = {-3, -2, -1, 2, 5, 8};
    size_t size1 = sizeof(tab1) / sizeof(tab1[0]); // ustal ile jest elemnentow w tab1
    size_t positive = countPositive(tab1, size1);  // ustal, ile jest elementow dodatnich w tab1
    
    for (int i = 0; i < size1; ++i)
        printf ("Indeks: %d  Liczba: %d \n" , i, tab1[i]);
    
    int *tab2 = copyPositive(tab1, size1, positive); // skopiuj liczby wieksze od 0 z tab1 do tab2

    printf("\n");
    for(int i = 0; i < positive; ++i)
        printf ("Indeks: %d  Liczba: %d \n" , i, tab2[i]);

    free(tab2);
    return 0;
}

int *copyPositive(const int *tab1, size_t size1, size_t positive)
{
    int *tab2, j = 0;

    // zaalokuj pamiec dla tab2
    tab2 = (int *)malloc(positive * sizeof(int));
    
    //skopiuj dodatnie z tab1 do tab2
    for(size_t i = 0; i < size1; ++i)
        if(tab1[i] > 0)
            tab2[j++] = tab1[i];
    
    return tab2;
}

size_t countPositive(const int *tab, size_t size)
{
    size_t counter = 0;
    for(size_t i = 0; i < size; ++i)
        if(tab[i] > 0)
            ++counter;
    return counter;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1