• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zwracanie tablicy z funkcji

VPS Starter Arubacloud
0 głosów
3,677 wizyt
pytanie zadane 17 listopada 2016 w C i C++ przez intensick Początkujący (420 p.)
Cześć.

Mam do zrobienia program w C, który ma rezerwować dowolną ilość liczb w tablicy, a potem przez 2 oddzielne funkcje 1)obliczyć sumę podanych liczb w tablicy i 2) odwrócić kolejność podanych liczb. Z pierwszym podpunktem sobie poradziłem, ale w drugim mam problem, który wynika (domyślam się) z tego, że tablicy nie można zwracać z funkcji w taki sposób, w jaki ja próbowałem to zrobić. Byłbym wdzięczny, gdyby ktoś rzucił okiem na moje wypociny, które wklejam w linku poniżej i spróbował mi wyjaśnić w czym tkwi problem. Na marginesie - wiem, że przy użyciu wskaźników mógłbym to zrobić w lepszy sposób, ale nie miałem ich jeszcze na zajęciach i nie chce póki co mieszać tematów. Pozdrawiam!

http://wklej.org/id/2958232/
1
komentarz 18 listopada 2016 przez NaviFox Dyskutant (8,950 p.)
http://wklej.org/id/2958538/

Nic nie będzie Ci się mieszać ponieważ argumenty int tab[] (int *tab) w obydwu funkcjach to wskaźniki do tablic, których już powinniście się uczyć. W funkcji int odwr_kolej(int n, int tab[]) nie możesz zwrócić tablicy ponieważ tablica jest wskaźnikiem i żeby ją zwrócić musisz zwrócić wskaźnik do tej tablicy czyli

int *odwr_kolej(int n, int tab[]) ale w twoim programie wskaźnik, który jest argumentem operuje na oryginalnej tablicy z funkcji main więc nie musisz jej zwracać, po prostu algorytm zamiany jest niepoprawny. Case 2 powinien wyświetlać tablicę a nie jeden jej element. Na koniec, po co Ci <stdlib.h>? http://www.cplusplus.com/reference/cstdlib/
komentarz 18 listopada 2016 przez intensick Początkujący (420 p.)
Dzięki za poświęcenie czasu, wszystko już rozumiem. <stdlib.h> miałem dołączone, bo jest dołączane automatycznie. Zapewne nie jest potrzebne w tym wypadku?
komentarz 18 listopada 2016 przez intensick Początkujący (420 p.)
Aj, już widzę. Nie zauważyłem linka na samym dole. Dzięki jeszcze raz ;)

2 odpowiedzi

+1 głos
odpowiedź 17 listopada 2016 przez niezalogowany
wybrane 19 listopada 2016
 
Najlepsza

Nie chcę Cię zagłębiać zbytnio w techniki C++... Zrób tak i dopracuj algorytm odwracania:
 

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

int x, n, i;

int obl_sumy(int n, int tab[])
{
    int i, suma=0;
    for(i=0; i<n; i++)
    {
        suma+=tab[i];
    }
    return suma;
}

void odwr_kolej(int n, int tab[])
{
    int i;

    for(i=0; i<=n/2; i++)
    {
        tab[i++]=tab[n--];
    }
}

int main()
{

    do
    {
    printf("MENU\n*********************************************\n");
    printf("1. Obliczanie sumy podanych liczb\n");
    printf("2. Zapis liczb w odwrotnej kolejnosci\n");
    printf("Wybierz opcje: "); scanf("%d", &x);
    printf("Podaj ilosc liczb: "); scanf("%d", &n);

    int tab[n];

    for(i=0; i<n; i++)
    {
        printf("Podaj liczbe: "); scanf("%d", &tab[n]);
        tab[i]= tab[n];
    }

    switch(x)
    {
        case 1: printf("Suma = %d\n\n", obl_sumy(n, tab)); break;
        case 2: printf("Odwrotna kolejnosc: %d \n\n", tab[n]); break;
    }
    }while(x!=0);
    return 0;
}

Nie możesz zwracać tablicy dlatego, że zadeklarowałeś, że funkcja zwraca int. Tylko jeden int. Tablica to np kilka intów.

Zastanów się też czy w mainie na pewno dobrze wypisujesz elementy tablicy.

komentarz 17 listopada 2016 przez niezalogowany

Albo powiem Ci:
 

case 2: printf("Odwrotna kolejnosc: %d \n\n", tab[n]); break;

Tu wypisujesz tylko jedną liczbę double. Pętlą powinieneś wypisać wszystkie

komentarz 18 listopada 2016 przez intensick Początkujący (420 p.)
Dzięki za pomoc ;)
komentarz 19 listopada 2016 przez efiku Szeryf (75,160 p.)
edycja 19 listopada 2016 przez efiku

    int tab[n];

Jakim cudem to będzie działać?

Tylko w śmieciowym devc++ dało się takie dziwne triki robić . Jak się człowiek przesiadał na prawdziwe IDE to było kuku 

+1 głos
odpowiedź 18 listopada 2016 przez morele123 Gaduła (4,790 p.)
Nie łatwiej stosu użyć?
komentarz 18 listopada 2016 przez intensick Początkujący (420 p.)
Pewnie tak, ale póki co nie wiem jak się tego używa. Najpierw chce w pełni zrozumieć tablice i wskaźniki, w teorii wiem mniej więcej jak wszystko działa, ale w praktyce różnie to wychodzi.

Podobne pytania

0 głosów
1 odpowiedź 1,736 wizyt
pytanie zadane 26 listopada 2020 w C i C++ przez mik53r Nowicjusz (150 p.)
0 głosów
1 odpowiedź 559 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez Anahan89 Obywatel (1,270 p.)
0 głosów
1 odpowiedź 572 wizyt
pytanie zadane 2 czerwca 2017 w C i C++ przez mibdbz Gaduła (4,300 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...