Błąd przy tworzeniu funkcji

0

Witam. Mam zamiar napisać dzielenie na tablicach, coś ala dzielenie pisemne. Najpierw natomiast chcę napisać sobie dodawanie. Pojawił się problem w napisaniu tej o to funkcji, nie wiem czym spowodowany. O to kod:

#include <iostream>

using namespace std;

void wypisz(int arg[], int length)
{
     for (int i = 1; i<= length; i++)
    {
        cout<<arg[i];
    }
}

void wczytaj (int length, int arg[])
{
    for (int i=1; i<=length; i++)
    {
        cout << "Podaj kolejna cyfre: ";
        cin >> arg[i];
    }
}

void dodaj (int length1, int length2, int arg1[], int arg2[])
{
    int diff = length1 - length2;
    if (length1 > length2)
    {
        int temp[length1];

        //wyrownanie ilosci cyfr zerami
        for (int i=1; i<=diff; i++)
        {
            temp[i] = 0;
        }

        for (int i=1; i<=length2; i++)
        {
            temp[i+diff] = length2[i]; //tutaj wyrzuca błąd
        }
        wypisz(temp, length1);

    }
}

int main()
{
    int maxw1, maxw2;

    cout << "Cyfry wprowadzaj od najwiekszych az do cyfr jednosci."<<endl;
    cout << "Wprowadz dzielna: "<<endl;
    cout << "Ilosc cyfr: ";
    cin >> maxw1;
    int tab1[maxw1];
    wczytaj(maxw1, tab1);

    cout << "Wprowadz dzielnik: " << endl;
    cout << "Ilosc cyfr: ";
    cin >> maxw2;
    int tab2[maxw2];
    wczytaj(maxw2, tab2);

    cout<<"Dzielna: " << endl;
    wypisz(tab1, maxw1);

    cout<< endl << "Dzielnik: " << endl;
    wypisz(tab2, maxw2);

    dodaj(maxw1, maxw2, tab1, tab2);
    return 0;
}

Tutaj jest treść błędu. Proszę Was o pomoc.

D:\Projekty C++\Hello World\Dzielenie\main.cpp||In function 'void dodaj(int, int, int, int)':|
D:\Projekty C++\Hello World\Dzielenie\main.cpp|37|error: invalid types 'int[int]' for array subscript|
||=== Build finished: 1 errors, 0 warnings ===|

0
int temp[length1];

Tak bedzie mozna deklarowac tablice w c++ 0X, a poki co zrob to za pomoca new i delete.

0

Ok spróbuję. Mam jeszcze coś:

W jaki sposób przekazać tablice poprzez referencję? Gdy robię to tak:

 void dodaj (int length1, int length2, int &arg1[], int &arg2[])

Otrzymuję taki błąd:

D:\Projekty C++\Hello World\Dzielenie\main.cpp|22|error: declaration of 'arg1' as array of references|
D:\Projekty C++\Hello World\Dzielenie\main.cpp|22|error: expected ')' before ',' token|
D:\Projekty C++\Hello World\Dzielenie\main.cpp|22|error: expected unqualified-id before 'int'|
||=== Build finished: 3 errors, 0 warnings ===|

Dodam jeszcze że jestem dosyć początkujący jeśli chodzi o cpp dlatego proszę o wyrozumiałość.

@EDIT
Poprawiłem i dalej wyskakuje ten sam błąd w tym samym miejscu. Domyślam się, że jest to błąd w samej deklaracji funkcji.

void dodaj (int length1, int length2, int arg1[], int arg2[])
{
    int diff = length1 - length2;
    if (length1 > length2)
    {
        int *temp = new int[length1];

        //wyrownanie ilosci cyfr zerami
        for (int i=1; i<=diff; i++)
        {
            temp[i] = 0;
        }

        for (int i=1; i<=length2; i++)
        {
            temp[i+diff] = length2[i];
        }
        wypisz(temp, length1);

    }
}
0

Endrju Ci napisał "length2[i] to nie jest tablica"

0

W programie głównym tablice tab1 i tab2 utwórz dokładnie tak samo jak zrobiłeś z tablicą temp. Za pomocą wskaźnika i operatora new. Następnie przekazuj do funkcji wskaźniki do tablic, zamiast referencji do tablić jak próbujesz robić. Kolejną rzeczą jest nieprawidłowe indeksowanie tablic. Liczymy od zera... Tak więc zamiast pisać:
for (i = 1; i <= dlugosc; i++)
pisz:
for(i = 0; i < dlugosc; i++)

0

Co do indeksowania tablic, tak wiem o tym. Mam przyzwyczajenie z innego języka programowania, gdzie indeksowało się od 1, 0 było zarezerwowane dla ilości elementów w tablicy. Musze się jeszcze przyzwyczaić do tego. Co do tematu, to problem rozwiązany, również udało mi się zauważyć, że length2 to nie tablica ;]

0

@ winterfresh, być może. Nie czytałem dokumentacji, ani nie pisałem w c++11, informację wziąłem z wikipedi.

0

W ang. wersji też piszą, że takie deklaracje są dozwolone...

0

To C++11 już jest czy go nie ma?:D Dużo się o tym mówi a to pierwszy standard który wyjdzie od kiedy bawię się w programowanie i jestem ciekaw czy w jakikolwiek sposób odczuje że on jest? Jak to wygląda?
Wyjdzie któregoś dnia nowy standard.. kilka dni potem pojawią się nowe kompilatory i zaczyna się kodować w nowym standardzie ?

0
mto9 napisał(a)

To C++11 już jest czy go nie ma?:D Dużo się o tym mówi a to pierwszy standard który wyjdzie od kiedy bawię się w programowanie i jestem ciekaw czy w jakikolwiek sposób odczuje że on jest? Jak to wygląda?
Wyjdzie któregoś dnia nowy standard.. kilka dni potem pojawią się nowe kompilatory i zaczyna się kodować w nowym standardzie ?

Nowy standard jest już od sierpnia tego roku. Kompilatory (które od dłuższego czasu pozwalają na stosowanie C++0x) się powoli przystosowują do nowego standardu np. GCC http://gcc.gnu.org/projects/cxx0x.html a w CL nie wiem jak to wygląda, ale można bez jakichkolwiek przełączników stosować C++11 (a przynajmniej niektóre jego części). Nic się nie dzieje z dnia na dzień, zobacz jak to jest z HTML5, który już jest stosowany a ostateczna wersja standardu pojawi się pewnie w 2015-2020 roku.

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