Tablice, funkcje, wskaźniki

Tablice, funkcje, wskaźniki
QK
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
#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
}

}

 
unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
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

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 166
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ć:

Kopiuj
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():

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.