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

własne funkcje - zastosowanie tablic

Object Storage Arubacloud
0 głosów
577 wizyt
pytanie zadane 13 października 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

Witam, mój kod wygląda następująco:

#include <iostream>

using namespace std;

int wypelnienie_tablicy ();

int main()
{
    wypelnienie_tablicy();

    return 0;
}

int wypelnienie_tablicy()
{
    int ilosc_elementow;
    cout << "Podaj ilosc elementow tablicy: ";
    cin >> ilosc_elementow;
    int tablica[ilosc_elementow];
    for (int i = 0; i < ilosc_elementow; i++)
    {
        cout << "Podaj " << i+1 << " element tablicy: ";
        cin >> tablica[i];
    }
}

 

Mam tu funkcje wypelnienie_tablicy(), która pyta najpierw użytkownika o ilość elementów, a potem po kolei dodaje wpisane przez użytkownika liczby w kolejne miejsca tablicy. Do programu dodana zostanie kolejna funkcja o nazwie suma_elementow(int tablica[], int ilosc_elementow), której zadaniem będzie zsumować wszystkie elementy tablicy wpisane w funkcji wypelnienie_tablicy. I tu jest problem, w jaki sposób tego dokonać? Nie mam jak przekazać funkcji suma_elementow(int tablica[], int ilosc_elementow) nazwy tablicy i ilości elementów, ponieważ są one dostępne tylko wewnątrz funkcji wypelnienie_tablicy. Moim pomysłem było skopiowanie tablicy funkcji wypelnienie_tablicy do funkcji main ale nie wiem jak to zrobić, bo nie wiem jak się dostać do tych elementów.

komentarz 13 października 2016 przez DragonCoder Nałogowiec (36,500 p.)
Moze petla? To znaczy robisz 2. Petle w ktorej sumuja sie te liczby

1 odpowiedź

+1 głos
odpowiedź 13 października 2016 przez criss Mędrzec (172,590 p.)
wybrane 13 października 2016 przez Evelek
 
Najlepsza
Rozwiazaniem jest przekazywanie - do funkcji wypelniajacej - tablicy i rozmiaru w taki sam sposób w jaki masz zamiar przekazywac do suma_elementow. Nie bardzo wiem po co robisz to tak jak teraz. Tablice tworzysz wewn funkcji wiec przestaje istnieć po wyjściu z funkcji i juz nic z nią nie zrobisz. Trochę bez sensu.
komentarz 13 października 2016 przez criss Mędrzec (172,590 p.)
Prosze bardzo :)
komentarz 17 października 2016 przez Evelek Nałogowiec (28,960 p.)

Kilka dni nauki i znalazłem odpowiednie rozwiązanie. Może słyszałeś o referencji.

Najpierw kod wyglądał tak:

#include <iostream>

using namespace std;

void wypelnienie_tablicy (int tab[], int ilosc);

int main()
{
    int ilosc_elementow = 5;
    int tablica[ilosc_elementow];

    wypelnienie_tablicy(tablica, ilosc_elementow);

    for(int i = 0; i < ilosc_elementow; i++)
    cout << tablica[i] << endl;

    return 0;
}

void wypelnienie_tablicy(int tab[], int ilosc)
{
    cout << "Podaj ilosc elementow tablicy: ";
    cin >> ilosc;
    for (int i = 0; i < ilosc; i++)
    {
        cout << "Podaj " << i+1 << " element tablicy: ";
        cin >> tab[i];
    }
}

I mówiłeś, że nie da się zrobić tak, aby zmienna z funkcji wypelnienie_tablicy ustawiła nam zmienną ilosc_elementow. A tu się okazuje, że się da. Wystarczy dopisać & w deklaracjach funkcji przed nazwą zmienną. Cały kod po dopisaniu dwóch ampersandów:

#include <iostream>

using namespace std;

void wypelnienie_tablicy (int tab[], int &ilosc);

int main()
{
    int ilosc_elementow = 5;
    int tablica[ilosc_elementow];

    wypelnienie_tablicy(tablica, ilosc_elementow);

    for(int i = 0; i < ilosc_elementow; i++)
    cout << tablica[i] << endl;

    return 0;
}

void wypelnienie_tablicy(int tab[], int &ilosc)
{
    cout << "Podaj ilosc elementow tablicy: ";
    cin >> ilosc;
    for (int i = 0; i < ilosc; i++)
    {
        cout << "Podaj " << i+1 << " element tablicy: ";
        cin >> tab[i];
    }
}

A tu dorzucę prostszy przykład. Sytuacja w której wartość zmiennej nie ulega zmianie:

#include <iostream>
using namespace std;

int funkcja (int liczba);

int main()
{
    int wartosc = 10;
    funkcja(wartosc);
    cout << wartosc << endl;
    return 0;
}

int funkcja (int liczba)
{
    cin >> liczba;
}

I teraz dopisujemy ampersandy i to co ustawimy w funkcji funkcja przekażemy do funkcji głównej main:

#include <iostream>
using namespace std;

int funkcja (int &liczba);

int main()
{
    int wartosc = 10;
    funkcja(wartosc);
    cout << wartosc << endl;
    return 0;
}

int funkcja (int &liczba)
{
    cin >> liczba;
}

 

komentarz 17 października 2016 przez criss Mędrzec (172,590 p.)

Mówiłem, że nie da się dostać do wartości zmiennej lokalnej (bo po prostu nie istnieje po wykonaniu funkcji). Tutaj cin >> używasz na zmiennej zadeklarowanej w mainie przekazanej jako oryginał do funkcji dzięki referencji. To zupełnie co innego.

komentarz 18 października 2016 przez Evelek Nałogowiec (28,960 p.)

No to właśnie o tą zależność mi chodziło. I tu się nauczyłem już, że można to osiągnąć poprzez referencję lub wskaźniki. Znasz te metody Criss tylko się do końca nie zrozumieliśmy na to wychodzi, co chciałem osiągnąć w swoim programie. smiley

komentarz 18 października 2016 przez criss Mędrzec (172,590 p.)
No najwyraźniej :P Cóż, trudno, najwięcej się uczymy samodzielnie

Podobne pytania

0 głosów
1 odpowiedź 196 wizyt
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 23 kwietnia 2020 w JavaScript przez maslokeeper01 Użytkownik (620 p.)
+1 głos
5 odpowiedzi 691 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...