Uzyskuję błędne wartości - dlaczego?

0

Nie zajmuję się programowaniem, ale postanowiłem coś napisać, bo pojawiła mi się taka potrzeba. Ostatecznie uzyskuję błędne wartości. Proszę o pomoc.

#include <iostream>

using namespace std;
int tab1[]{1,2,3,4,5,6,7,8,9};
int tab2[]{1,1,1,3,4,5,7,8,8,0,3,3};
int *wsktabl;
int *porownanie(int tab[], int tab1[])
    {
    int tab2[100];
    int *wsk = tab2;
    int wielkosc1 = sizeof(tab);
    int wielkosc2 = sizeof(tab1);
    int i,y;
    for (i=0; i<wielkosc1; i++)
    {
        for (y=0; y<wielkosc2; y++)
        {
            if (tab[i] == tab1[y])
            {
            tab2[i]=tab[i];
            tab1[y]=20;
            break;
            }
        }
    }
    return wsk;
    }
int main()
{
    wsktabl = porownanie(tab1,tab2);
    for (int i=0; i<10; i++)
    {
        cout << wsktabl[i]<<"\n";
    }
    return 0;
}
4

Zwracasz wskaźnik do lokalnej zmiennej. Tak nie wolno robić.

3

Niepotrzebnie używasz zmienne globalne. Jest naprawdę ** bardzo ** mało przypadków, w których jest to uzasadnione.

1
static int tab2[100];

i jakoś tam ruszy.
Ale wg mnie podszedłeś od doopy strony, może powiedz co chcesz osiągnąć?

0
Dyletant napisał(a):

Nie zajmuję się programowaniem

I niech już tak lepiej pozostanie.

0

Dziękuję wszystkim za chęć pomocy. Kolego maly lew, jak nie chcesz, to nie pomagaj, ale też nie zniechęcaj. Pogrzebałem trochę i poprawiłem swój kod. Funkcja była mi zbędna, więc wywaliłem. Sizeof dawał mi zły wynik, bo tablica była liczbowa. Tak dla formalności wstawię to, co napisałem. Jest to tylko baza, która będzie dalej modyfikowana - miała po prostu ruszyć :) Jeszcze raz dzięki pomagającym!

#include <iostream>

using namespace std;

int main()
{
    int tab1[]{1,2,3,4,5,6,7,8,9};
    int tab2[]{1,1,1,3,4,5,7,8,8,0,3,3};
    int tab3[100];
    int i,y;
    for (i=0; i<9; i++)
    {
        for (y=0; y<12; y++)
        {
            if (tab1[i] == tab2[y])
            {
            tab3[i]=tab1[i];
            tab2[y]=11;
            break;
            }
            else tab3[i]=111;
        }
    }

    for (int i=0; i<9; i++)
    {
        cout << tab3[i]<<"\n";
    }
}
0

Spójrz na to:

#include <iostream>
using namespace std;
 
int main()
{
    int tab1[]{1,2,3,4,5,6,7,8,9};
    int tab2[]{1,1,1,3,4,5,7,8,8,0,3,3};
    int tab3[10]={0};
    for(int i=0;i<sizeof(tab2)/sizeof(*tab2);++i) ++tab3[tab2[i]];
    for(int i=0;i<sizeof(tab1)/sizeof(*tab1);++i)
    {
        if(tab3[tab1[i]]) cout<<tab1[i]<<endl;
        else cout<<111<<endl;
    }
    return 0;
}

Daje to samo w czasie liniowym zamiast kwadratowego.

0

Heh, _13th_Dragon Twój kod jest dla mnie niezrozumiały, ale spełnia swoje zadanie :) Jeszcze raz wielkie dzięki za zainteresowanie i pomoc!

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