wdrożenie funkcji

0

Witam
Czy mógłby mi ktoś wytłumaczyć jak należy przerobić program z tablicą na program z funkcją ? Mam taki kod programu:
[code]#include<iostream>
using namespace std;
int main()
{
int i,tab[50];
for (i=0;i<50;i++)
tab[i]=0;

for (i=0;i<50;i++)
{
cin >>tab[i]; if ((tab[i] == tab[i-1]) && (tab[i-1] == tab[i-2])) break;
}

return 0;
}[/code]
i chciałbym tutaj wdrożyć funkcję. Dla kogoś z doświadczeniem jest to pewnie kilka minut pracy. Czułbym się zobowiązany.
Pozdrawiam

0

Jaką funkcję? Co ma ta funkcja robić?

BTW: w tym if'ie wychodzisz poza zakres tablicy - to się może źle skończyć.

0

W tym programie podajemy liczby i jeśli podamy 3 te same pod rząd to program przerywa. A ja chciałbym by to wszystko było w funkcji napisanej przeze mnie, tylko nie wiem jak potem odnieść się do tablicy bo funkcja zwraca jedną wartość. Jak należy to wykonać - tego nie wiem.

0

Funkcja może zwrócić tablicę, np.
int* Funkcja()
{
int tablica [244];
return tablica;
}

0

Nie wiem czy dobrze zrozumiałem. Napisałem coś takiego:
#include<iostream>
using namespace std;
const int n=10;
int i, tabela[n];
int* Funkcja();

int main()
{
for (i=0;i<n;i++)
cout <<funkcja(tabela[i])<<endl; //jeśli tam samo tabela[i] bez "funkcja" to wszędzie pokaże zera czyli nie działa poprawnie.
return 0;
}
int* Funkcja()
{
for (i=0;i<n;i++)
tabela[i]=i;
return tabela;
}
Wie ktoś jak odczytać dane z tablicy w programie głównym ?

0

Zrób 3 rzeczy:
Mozesz u góry skasować deklarację tabela, i wrzucić ją do funkcji przed for.
W Funkcji daj int przed i=0 w forze.
Raczej cout << Funkcja()[i] << endl; //Używamy funkcji jak tablicy

0

Zmieniłem tak:
#include<iostream>
using namespace std;
const int n=10;
int i, tabela[n];
int* Funkcja();

int main()
{
for (i=0;i<n;i++)
cout <<Funkcja()<<endl;
for (i=0;i<n;i++)
cout <<tabela[i]<<endl;
return 0;
}
int* Funkcja()
{
for (i=0;i<n;i++)
tabela[i]=i;
return tabela;
}
Tylko żeby wypisał mi wartości z tablicy to najpierw musi być wywołanie cout <<funkcja() bo inaczej wyświetla zera. Dałem jeszcze taki zapis: cout <<Funkcja()[i]<<endl; ale nie działał poprawnie, tylko wyświetlał raz jeden 0 pomimo że pętla miała się wykonywać kilka razy...

0
#include <iostream>
using namespace std;
const int n=10;
int i;
int* Funkcja();

int main()
{
    for (i=0; i<n; i++)
        cout <<Funkcja()[i]<<endl; //Tak należy tą funkcję dać
    system("pause");
    return 0;
}
int* Funkcja()
{
    int tabela[10];
    for (int i=0; i<n; i++)
        tabela[i]=i;
    return tabela;
}

 
0

U mnie ta deklaracja nie chciała z początku działać. Ale ogółem bardzo mi pomogłeś. Dziękuję. Mam tylko jedno pytanie,
int* Funkcja(); oznacza wskazanie na adres ?

0

int* Funkcja();

    • oznacza wskaźnik(wskazuje na miejsce w pamięci, pozwala też na tworzenie tablic o zmiennych rozmiarach), lub też tablicę(w końcu tablica to wskaźnik na pierwszy element)
      -a w cout Funkcja zwraca tablicę, w której mozesz(chwilowo) używać np. przypisać itp.
      PS. W końcu po to są użytkownicy forum, aby odpowiadać na pytania ;)
      PS 2. Nie używaj zmiennych globalnych!
0

Oki dzięki :)
Pozdrawiam

0

@Macron robisz okropny błąd i jeszcze przez to zwodzisz janemba... Zrobienie czegoś takiego:

int* Funkcja()
{
    int tablica [244];
    return tablica;
}

to najkrótsza droga do segfault'a... po wyjściu z funkcji tablica już NIE ISTNIEJE

Ja proponuję to tak (odnoszę się do oryginalnego pytania):

int MyFunction(int *pArray, const unsigned int uiElementsCount)
{
    int i;

    //jeżeli do funkcji zamiast adresu tablicy został przekazany null
    //lub ilość elementów jest mniejsza od 1 to zakończ funkcję
    if(pArray == NULL || uiElementsCount < 1) return; 
                                                                           

    for(i = 0; i < uiElementsCount; i++)
        pArray[i] = 0;

    for(i = 0; i < uiElementsCount; i++)
    {
        cin >> pArray[i];
        //zauważ, że sprawdzenie czy element się 3-krotnie powtarza odbywa się dopiero,
        //gdy są już conajmniej 3 elementy w tablicy, żeby nie wyjść poza jej zakres np. dla i = 1 (i - 2 = -1)!!
        if((i > 1) && (pArray[i] == pArray[i-1]) && (pArray[i-1] == pArray[i-2])) break;
    }

    return i; //zwrócenie ilości pobranych liczb od użytkownika
}

W main:

const int n = 50;
int tablica[n], ile;

ile = MyFunction(tablica, n);
for(int i = 0; i < ile; i++)
cout << tablica[i] << endl;

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