Tablice, funkcje, wskaźniki

0

Witam.
Czy w języku C jest możliwość napisania funkcji, która tworzy tablicę, a później przesyła ją do funkcji main?

Muszę napisać program, który:
Za pomocą argumentów main() zadaje rozmiar tablicy i zakres losowanych liczb, którymi wypełnię tablicę.
Później mam
-zrobić dynamiczną alokację pamięci ze sprawdzeniem czy jest tyle dostępnej pamięci,
-utworzyć tablicę i wypełnić liczbami z danego przedziału,
-posortować i znormalizować tablicę tak, by suma elementów wynosiła 1.

Co znaczy ta normalizacja?

Tu mój kod, a właściwie jakiś jego zalążek.

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

void tablica(int n, int max)
{
int i, tab[];
srand(time(0));
for(i=0;i<n;i++)
tab[i]=rand()%max;
}

void wypisz(int tab[], int n)
{
int i;
for(i=0;i<n;i++)
printf("%d ", tab[i]);
printf("\n");
}

int main(int argc, char *argv[])

{
{
int * wsk;
int max, i;
wsk = (int *) mallock(argc * sizeof(int));
if (wsk==NULL)
{
   puts("Za malo pamieci.");
   exit(EXIT_FAILURE);
}
else
{
tablica(argc, max);//funkcja tworzaca tablice
wypisz(tab, argc); //wypisanie tablicy
}

}

 
0

miałeś z parametrów odczytać rozmiar i zakres a w tej chwili tworzysz tablicę z tyloma elementami ile parametrów podasz do programu
normalizacja znaczy generalnie przeskalowanie

masz to zrobić tak, by suma elementów wynosiła 1, czyli po prostu każdy element masz podzielić przez sumę elementów

0
Qkartka napisał(a)

Czy w języku C jest możliwość napisania funkcji, która tworzy tablicę, a później przesyła ją do funkcji main?

Oczywiście, chociaż zamiast "przesyła" użyłbym tutaj słowa "zwraca", gdyż żaden transfer danych nie zachodzi.
Musisz zaalokować tablicę dynamicznie w funkcji przy użyciu malloc() lub calloc(). Możesz ją potem zwrócić:

int  *make_table(int  nelem)
{
    int     *dest;
    
    
    if ( (dest = (int*)malloc(nelem * sizeof(int))) == NULL )
        return NULL;
        
    /* ... */
    return dest;
}



int  main(void)
{
    int     *table;
    
    
    /* ... */
    if ( (table = make_table(10)) == NULL )
        perror("make_table()");
    /* ... */
    
    free(table);
}

lub zapisać pod wskaźnikiem przekazanym z main():

int  make_table(int  **dest, int  nelem)
{
    if ( (*dest = (int*)malloc(nelem * sizeof(int))) == NULL )
        return -1;
        
    /* ... */
    return 1;
}



int  main(void)
{
    int     *table;
    
    
    /* ... */
    if ( make_table(&table, 10) == -1 )
        perror("make_table()");
    /* ... */
    
    free(table);
}

Ponieważ nie zadałeś sobie trudu żeby poprawnie sformatować swój kod, ja nie zadałem sobie trudu aby go przeanalizować, więc się na jego temat nie wypowiem.

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