zapisywanie tablicy do tablicy

Odpowiedz Nowy wątek
2016-11-11 23:54

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

Witam mam zadanie w którym muszę skopiować wartość jednej tablicy do 2 tablicy i chciałbym to zrobić na funkcjach. Skorzystałem z funkcji którą wcześniej napisałem do innego zadania żeby mi generowała listę losowych liczb w podanym przedziale(to działa).Nie wiem jak użyć zwróconej tablicy w funkcji main.Próbowałem ją przypisać do innej tablicy lokalnej w mainie ale jakoś mi to nie wychodzi.Pewnie to jakiś banał ale meczę się z tym już kilka godzin... Oczywiście uczę się C od kilku tygodni więc proszę o wyrozumiałość

#include <stdio.h>
#include <stdlib.h>
#define RMAX 2
#include <time.h>
#include <math.h>

int N=RMAX;

int generowanie_tablicy(int A,int B){

    int tab[RMAX];
    int i,zarodek;
    int calosc = 0;

    time_t tt;
    zarodek = time(&tt);
    srand(zarodek);   // za zarodek wstawiamy pobrany czas w sekundach

    puts("Wczytaj A i B\n");
    scanf("%d%d",&A,&B);

    for (i = 0; i < N; i++){
        tab[i] = A+(B+1-A)*rand()/RAND_MAX; // [a,b]
        printf("\n%d\n",tab[i]);
        calosc+=tab[i];
    }
    return tab;
}

int kopiowanie_tablicy(int tab1[],int tab2[])
{
    int i;
    for (i = 0 ; i < N ; i++){
        tab2[i] = tab1[i];
    }
}

int main()
{
    int tab[RMAX];
    int tab2[RMAX];
    int A,B;

    tab[RMAX]=generowanie_tablicy(A,B);
    printf("%d\n",tab);

    kopiowanie_tablicy(tab,tab2);
    printf("%d\n",tab2);

}
edytowany 1x, ostatnio: cichy767, 2016-11-12 00:04

Pozostało 580 znaków

2016-11-12 01:21

Rejestracja: 6 lat temu

Ostatnio: 2 tygodnie temu

1

Spójrz na return:

int generowanie_tablicy(int A,int B){

    int tab[RMAX];
    int i,zarodek;
    int calosc = 0;

    time_t tt;
    zarodek = time(&tt);
    srand(zarodek);   // za zarodek wstawiamy pobrany czas w sekundach

    puts("Wczytaj A i B\n");
    scanf("%d%d",&A,&B);

    for (i = 0; i < N; i++){
        tab[i] = A+(B+1-A)*rand()/RAND_MAX; // [a,b]
        printf("\n%d\n",tab[i]);
        calosc+=tab[i];
    }
    return tab; //zwracasz adres tablicy
}

A teraz tutaj do elementu numer RMAX w tablicy tab chcesz wpisać całą tablicę adres tablicy... Czyli do int chcesz wsadzić int[] czy tam int* - no nie da się:

tab[RMAX]=generowanie_tablicy(A,B);

Ja zrobiłbym raczej:

int* tab = generowanie_tablicy(A,B);
edytowany 1x, ostatnio: xfin, 2016-11-12 01:23

Pozostało 580 znaków

2016-11-12 11:09

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

zmieniłem to w mainie jak napisales ale program dalej nie dziala ;/ chyba nie ogarniam tych wskaznikow

Pozostało 580 znaków

2016-11-12 11:59

Rejestracja: 6 lat temu

Ostatnio: 2 tygodnie temu

1

Nie działa - w sensie nie wyświetla się? ;)
Przegapiłem jedną rzecz:

int generowanie_tablicy(int A,int B) //tu zwracasz int - czyli jeden element bo tab i tab[0] są równoważne
//
int* generowanie_tablicy(int A,int B) //tutaj zwracasz wskaźnik

I idziemy dalej - w C nie zwracasz tablicy, tylko wskaźnik na nią. Tym samym nie możesz zwrócić czegoś zadeklarowanego tak:

int tab[RMAX];

Bo zwracasz dane lokalne, która zaraz są niszczone. Rozwiązaniem jest:

int* tab = new int[RMAX];
//lub
int* tab = calloc(RMAX, sizeof(int));

Dodatkowo zobacz jak wyświetlasz tablicę - printf wypisuje tylko jeden element. Powinieneś użyć fora:

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

Pozostało 580 znaków

2016-11-12 12:36

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0
#include <stdio.h>
#include <stdlib.h>
#define RMAX 2
#include <time.h>
#include <math.h>

int N=RMAX;

int* generowanie_tablicy(int A,int B){

    int tab[RMAX];
    int i,zarodek;
    int calosc = 0;

    time_t tt;
    zarodek = time(&tt);
    srand(zarodek);   // za zarodek wstawiamy pobrany czas w sekundach

    puts("Wczytaj A i B\n");
    scanf("%d%d",&A,&B);

    for (i = 0; i < N; i++){
        tab[i] = A+(B+1-A)*rand()/RAND_MAX; // [a,b]
        printf("\n%d\n",tab[i]);
        calosc+=tab[i];
    }
    return tab;
}

int kopiowanie_tablicy(int tab1[],int tab2[])
{
    int i;
    for (i = 0 ; i < N ; i++){
        tab2[i] = tab1[i];
    }
}

int main()
{
    int tab2[RMAX];
    int A,B;

    int* tab = new int[RMAX];

    tab = generowanie_tablicy(A,B);

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

    kopiowanie_tablicy(tab,tab2);
}

Moj kod wyglada teraz tak... Teraz program wywala bledy tutaj screen http://wstaw.org/m/2016/11/12/bledy.png

Pozostało 580 znaków

2016-11-12 12:46

Rejestracja: 6 lat temu

Ostatnio: 2 tygodnie temu

1

No i dobrze wywala ;)

  1. kopiowanie tablicy zadeklarowałeś, że zwraca int. Zrób void, bo nic nie zwracasz.
  2. Czyste C. Zamiast new użyj calloc - masz przykład w moim poprzednim poście.
  3. Znów czyste C. int i; poza pętlę. Pętla for(i =0; i < RMAX; ++i);
  4. Nadal masz int tab[RMAX]; w generowaniu. Zrób alokację calloc.
  5. Main - dopisać return 0;

A przy okazji - to wszystko jest napisane w logu :P

Pozostało 580 znaków

2016-11-12 13:22

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

Ja piernicze dziala :D Wstawiam jakby ktoś kiedyś potrzebował. Dzieki za pomoc

#include <stdio.h>
#include <stdlib.h>
#define RMAX 2
#include <time.h>
#include <math.h>

int N=RMAX;

int* generowanie_tablicy(int A,int B){

    int* tab = calloc(RMAX, sizeof(int));
    int i,zarodek;
    int calosc = 0;

    time_t tt;
    zarodek = time(&tt);
    srand(zarodek);   // za zarodek wstawiamy pobrany czas w sekundach

    puts("Wczytaj A i B\n");
    scanf("%d%d",&A,&B);

    for (i = 0; i < N; i++){
        tab[i] = A+(B+1-A)*rand()/RAND_MAX; // [a,b]
        printf("\n%d\n",tab[i]);
        calosc+=tab[i];
    }
    return tab;
}

void kopiowanie_tablicy(int tab1[],int tab2[])
{
    int i;
    for (i = 0 ; i < N ; i++){
        tab2[i] = tab1[i];
    }
}

int main()
{
    int tab2[RMAX];
    int A,B;
    int i;

    int* tab = calloc(RMAX, sizeof(int));

    tab = generowanie_tablicy(A,B);

        for(i =0; i < RMAX; ++i){
           printf("tab1 wyraz %d %d\n",i,tab[i]);
        }

    kopiowanie_tablicy(tab,tab2);
        for(i =0; i < RMAX; ++i){
           printf("tab2 wyraz %d %d\n",i,tab2[i]);
        }
    return 0;
}

Pozostało 580 znaków

Odpowiedz

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