mnożenie wektora przez liczbę

0

Mamy jakiś tam wektor rzadki i mnożymy go przez liczbę. Oto co napisałem:

#include <iostream>
using namespace std;

struct TWezel{
	int nr;
	TWezel *nast;
};

bool dodaj(TWezel *&pocz, int k)
{
	TWezel *tmp = new TWezel();
	
	if(tmp!=NULL)
	{
		tmp->nr=k;
		tmp->nast=pocz;
		pocz=tmp;
		
		return true;
	}
	return false;
}

void wypisz(TWezel *pocz) 
{	
    TWezel *tmp=pocz; 
    cout << "[ ";
    while(tmp != NULL) 
    { 
        cout << tmp->nr << " ";
        tmp = tmp->nast; 
    } 
    cout << "]" << endl;
}

void przez_liczbe(TWezel *pocz)
{
	TWezel *tmp=pocz;
	cout << "[ ";
	while(tmp != NULL)
	{
		cout << tmp->nr*3 << " ";
        tmp = tmp->nast; 
	}
	cout << "]" << endl;
}

int main()
{
	TWezel *poczatek = NULL;	
	
	for(int i=0; i<15; i++)
	{
		
		if((i==1)||(i==9))
			dodaj(poczatek,2);
		if(i==3)
			dodaj(poczatek,9);
		if(i==14)
			dodaj(poczatek,7);
		else
			dodaj(poczatek,0);
	}
	
	wypisz(poczatek);
	przez_liczbe(poczatek);
}

Problem polega na tym, że po pomnożeniu gdzieś te wartości trzeba zapisać (nowy wektor). U mnie tylko są wyświetlane i to niepotrzebnie przez nową funkcję, bo można byłoby wykorzystać funkcję "wypisz". Należy więc stworzyć nową strukturę i nowy wektor a do niego zapisywać pomnożone wartości wektora poprzedniego? Jakby to wyglądało?

0

Zmieniłem nieco funkcję "przez liczbe()". Tylko nie wiem jak wyświetlić nową listę (wektor pomnożony przez 3). Kod:

#include <iostream>
using namespace std;


//dwie struktury - jedna dla listy (wektora) ktory uzupelniany jest dowolnie - wiekszosc zer 
struct TWezel{
	int nr;
	TWezel *nast;
};

//ta struktura posluzy do stworzenia listy bedacej wynikiem mnozenia pierwszego wektora przez liczbe 3
struct NWektor{
	int nr2;
	NWektor *nast2;
};

//funkcja dodajaca el. na poczatek pierwszej listy
bool dodaj(TWezel *&pocz, int k)
{
	TWezel *tmp = new TWezel();
	
	if(tmp!=NULL)
	{
		tmp->nr=k;
		tmp->nast=pocz;
		pocz=tmp;
		
		return true;
	}
	return false;
}

//wypisujemy zawartosc listy pierwszej, ktora uzupelnilismy wartosciami
void wypisz(TWezel *pocz) 
{	
    TWezel *tmp=pocz; 
    cout << "[ ";
    while(tmp != NULL) 
    { 
        cout << tmp->nr << " ";
        tmp = tmp->nast; 
    } 
    cout << "]" << endl;
}

//tutaj mialaby byc wypisywana druga lista ale konczy sie to niepowodzeniem, brak wyjscia z funkcji bo wciaz wyswietla zera na ekranie
void wypisz_new_wektor(NWektor *pocz2) 
{	
    NWektor *tmp2=pocz2; 
    cout << "[ ";
    while(tmp2 != NULL) 
    { 
        cout << tmp2->nr2 << " ";
        tmp2 = tmp2->nast2; 
    } 
    cout << "]" << endl;
}

//tutaj przekazujemy do funkcji poczatki dwoch list i nowa liste uzupelniamy wartosciami ze starej pomnozonymi przez 3 
void przez_liczbe(TWezel *pocz, NWektor *&pocz2, int rozmiar)
{
	TWezel *tmp=pocz;
	NWektor *tmp2 = new NWektor();
	
	int i=0;
	int *tablica = new int[rozmiar];
	
	while(tmp != NULL)
	{
		tablica[i] = tmp->nr*3;
		tmp = tmp->nast;
		i++;
	}
	
	int z=0;

	while(z<rozmiar)
	{
		tmp2->nr2=tablica[z];
		tmp2->nast2=pocz2;
		pocz2=tmp2;
		//JESLI PONIZSZA LINIE ODHASZUJE TO WYSWIETLA MI WSZYSTKIE WARTOSCI POPRAWNIE - tylko o 3 za malo nie wiem dlaczego
		//cout<< tmp2->nr2 << " ";
		z++;
	}
}

//glowna czesc programu
int main()
{
	TWezel *poczatek = NULL;	//na poczatku lista jest pusta
	NWektor *poczatek2 = NULL;
	
	int licznik=0;
	for(int i=0; i<15; i++)
	{
		
		if((i==1)||(i==9))
			dodaj(poczatek,2);
		if(i==3)
			dodaj(poczatek,9);
		if(i==14)
			dodaj(poczatek,7);
		else
			dodaj(poczatek,0);
		licznik++;
	}
	
	wypisz(poczatek);
	przez_liczbe(poczatek, poczatek2, licznik);
	//wypisz_new_wektor(poczatek2);				//TE FUNKCE GDY URUCHOMIE TO BLAD WYSTEPUJE
	

}




0

jak brzmi ten blad?
i jest to blad kompilacji, linkowania czy uruchomienia?

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