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

question-closed C++ operator new tablice dynamiczne funkcje

Object Storage Arubacloud
0 głosów
194 wizyt
pytanie zadane 24 lutego 2021 w C i C++ przez MrChick888 Obywatel (1,020 p.)
zamknięte 24 lutego 2021 przez MrChick888

Witam mam takie zadanie:

treść

Napisz program, w którym w funkcji main zostaną stworzone (operatorem new) trzy tablice typu double o identycznych rozmiarach (co najmniej 20 elementów). Elementy pierwszych dwóch tablic załaduj jakimiś wartościami. W programie powinna być funkcja, która przyjmie wysłane do niej te trzy tablice. Funkcja ta ma na elementach tych tablic wykonać operację mnożenia – taką, że i-ty element tablicy pierwszej zostanie pomnożony przez i-ty element tablicy drugiej. Rezultat ma zostać wpisany do i-tego elementu tablicy trzeciej. W funkcji main wypisz na ekranie zawartość poszczególnych elementów tablicy pierwszej, drugiej i trzeciej, a następnie skasuj te tablice.

Napisałem taki program: (bardzo chce to zrobić przekazując do funkcji wskaźniki)

#include <iostream> 

using namespace std;

void mnoznie(const double* w1, const double* w2, double* w3);
void wypisz(const double* w);
constexpr int rozmiar{ 20 };

int main()
{
	double* wsk_1 = new double[rozmiar]{ 1,2,3,4,5,6,7,8,9,10,11 };
	double* wsk_2 = new double[rozmiar]{ 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 };
	double* wsk_3 = new double[rozmiar];
	mnoznie(wsk_1, wsk_2, wsk_3);
	wypisz(wsk_1);
	cout << endl;
	wypisz(wsk_2);
	cout << endl;
	wypisz(wsk_3);
	delete[] wsk_1;
	delete[] wsk_2;
	delete[] wsk_3;
	system("PAUSE");
}
void mnoznie(const double* w1, const double* w2, double* w3)
{
	for (int i = 0; i < rozmiar; i++,w1++,w2++,w3++)
	{
		*w3 = (*w1) * (*w2);
	}
}
void wypisz(const double* w)
{
	for (int i = 0; i < rozmiar; i++)
	{
		cout << *w << " ";
	}
}

lecz wyniki to w pierwszej tablicy same 1
w drugiej same 2
w trzeciej same 2
nie wiem gdzie jest bład ktoś umie mi go wskazać

////////

Tak wiem ze moze to rozwiazać poprzez przekazywanie tablic do funkcji jestem ciekawy czy da się tak jak ja chcaiłem zrobić

na pewno dobry sposób

#include <iostream>
using namespace std;
void funkcja( double t1[ ], double t2[ ], double t3[ ], int rozmiar)
{
	for(int i = 0 ; i < rozmiar ; ++i)
	{ t3[i] = t1[i] * t2[i]; }
}
int main(){
	int rozmiar = 25 ;
	auto *tab1 = new double[rozmiar];
	auto *tab2 = new double[25];
	auto *tab3 = new double[25];
	for(int i = 0 ; i < rozmiar; ++i) {
		tab1[i] = i;
		tab2[i] = 2;
	}
	funkcja(tab1, tab2, tab3, rozmiar);
	for(int i = 0 ; i < rozmiar ; ++i)
		cout << "tab3[ " << i << "] = " << tab3[i] <<  endl;
	delete [] tab1;
	delete [] tab2;
	delete [] tab3;
}  	

 

komentarz zamknięcia: rozwiązane

1 odpowiedź

+1 głos
odpowiedź 24 lutego 2021 przez tangarr Mędrzec (154,840 p.)
wybrane 24 lutego 2021 przez MrChick888
 
Najlepsza

Spójrz spokojnie na funkcję wypisz.
Czy zmienna w jest w jakiś sposób powiązana ze zmienną i? Nie. W każdej iteracji pętli używasz pierwszego elementu tablicy.
Aby dostać się do n-tego elementu tablicy musisz przesunąć wskaźnik o n miejsc.

cout << *(w+n);

lub jeszcze lepiej (bardziej czytelnie): użyj operatora indeksowania

cout << w[n];

Analogicznie dla funkcji mnożenie.

komentarz 24 lutego 2021 przez MrChick888 Obywatel (1,020 p.)
Dziękuje kompletnie nie zauważyłem ze w funkcji wypisz w pętli for nie zapisałem po i++, "w++". Szukałem błędu głównie w funkcji mnożenie. Dzięki za pomoc.

Podobne pytania

0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 5 lutego 2020 w C i C++ przez niezalogowany
0 głosów
3 odpowiedzi 2,430 wizyt
pytanie zadane 21 września 2017 w C i C++ przez Ziom Początkujący (430 p.)
0 głosów
3 odpowiedzi 423 wizyt
pytanie zadane 4 sierpnia 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 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!

...