Przepisywanie wartości z jednej tablicy dynamicznej do drugiej [C++]

0

Witam! Tak jak w temacie. Pisze sobie program który ma za zadanie:

  • utworzyć dynamiczną tablicę 12 elementową
  • zapełnić ją liczbami losowymi
  • rozszerzyć do 24 elementów tak, że elementy podzielne przez 2 mają zostać powiększone o 2, podzielne przez 5 - pomniejszone o 3, a reszta ma zostać pomniejszona o 1 tak, żeby każdemu elementowi n odpowiadał element n+12
  • posortować malejąco
  • wypisać wszystkie 3 tablice

I jestem teraz na etapie mniej wiecej podpunktu 3:P

// program 24.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int n = 12; // tablica o 12 elementach 
	int *tab = new int[n];

	srand ( time(NULL) );

	cout << "Wypelniamy tablice!" << endl;
	for(int i=0; i<n; i++)
	{
		tab[i] = rand() % 100; // funkcja losujaca liczby
	}
	cout << endl << endl;
	cout << "Wyswietlamy tablice!" << endl;
	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab[i];
	}
	cout << endl << endl;
	
	
	delete[] tab; // usuwamy stara tablice tab o starym rozmiarze
	
	n = 24; // zmieniamy rozmiar tablicy z 12 na 24 elementy
	int *tab2=new int[n]; // tworzymy nowa tablice dynamiczna o nowym rozmiarze


	for(int i=0; i<n; i++)
	{
		tab2[i] = rand() % 100;  // losujemy nowe liczby
	}
	cout << endl << endl;
	cout << endl << "Druga tablica! " << endl;
	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab2[i]; // wyswietlamy nowa , wieksza tablice
	}
	cout << endl << endl;
	cout << endl << "Tablica ktorej elementy podzielne % 2 sa zwiekszone o 2 a % 5 zmniejszone o 3 a reszta zwiekszona o 1";
	for(int i=0; i<n; i++)
	{
		
		if(tab2[i] % 2 == 0 && tab2[i] != 0)
		{
			tab2[i] = tab2[i] + 2; // elementy podzielne przez 2 zwieksza o 2
		}
		if(tab2[i] % 5 ==0 && tab2[i] != 0)
		{
			tab2[i] = tab2[i] - 3; // elementy podzielne przez 5 zmniejsza o 3
		}
		else
		{
			tab2[i] = tab2[i] + 1;
		}
	}
	cout << endl << endl;

	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab2[i]; // wyswietlamy nowa , wieksza tablice
	}
	cout << endl << endl;

	delete[] tab2; // usuwamy druga tablice

	system("pause");
	return 0;
}

 

Zrobilem tak, że usuwam stara tablice o rozmiarze 12 elementow i tworze nowa o rozmiarze 24 elementow ale nie tak to ma być bo musze przepisac te wartosci ze starej tablicy do tej nowej. Jak to zrobic?

PS. W jezyku C jest realloc ale chce to w C++ napisac

Pozdrawiam i prosze o pomoc

0

realloc jako element biblioteki standardowej C jest dostępny w C++ w cstdlib. Jeżeli nie chcesz/nie możesz użyć tej funkcji przepisz po prostu te 12 elementów za pomocą for i potem usuń. Możesz też użyć memcpy.

0

A jak tak po prostu przepisac te 12 elementow na forze?

0

To chyba dość oczywiste?

for (int i = 0; i < 12; ++i) {
  tab2[i] = tab[i];
}

delete [] tab;

Albo memcpy:

memcpy(tab2, tab, 12*sizeof(int));

delete [] tab;
0

Yay:)!!! dzieki :) wlaśnie nie było to dla mnie oczywiste temu tu czasem zaglądam ;d dziękuję

Zrobilem tak jak mówiłeś i dziala :)

// program 24.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int n = 12; // tablica o 12 elementach 
	int *tab = new int[n];

	srand ( time(NULL) );

	cout << "Wypelniamy tablice!" << endl;
	for(int i=0; i<n; i++)
	{
		tab[i] = rand() % 100; // funkcja losujaca liczby
	}
	cout << endl << endl;
	cout << "Wyswietlamy tablice!" << endl;
	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab[i];
	}
	cout << endl << endl;
	
	
	
	n = 24; // zmieniamy rozmiar tablicy z 12 na 24 elementy
	int *tab2=new int[n]; // tworzymy nowa tablice dynamiczna o nowym rozmiarze

	
	for(int i=0; i<n; i++)
	{
		tab2[i] = rand() % 100;  // losujemy nowe liczby
	}
	cout << endl << endl;

	for (int i = 0; i < 12; ++i) 
	{
		tab2[i] = tab[i];
	}
 
	delete[] tab; // usuwamy stara tablice tab o starym rozmiarze


	cout << endl << "Druga tablica! " << endl;
	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab2[i]; // wyswietlamy nowa , wieksza tablice
	}
	cout << endl << endl;
	cout << endl << "Tablica ktorej elementy podzielne % 2 sa zwiekszone o 2 a % 5 zmniejszone o 3 a reszta zwiekszona o 1";
	for(int i=0; i<n; i++)
	{
		
		if(tab2[i] % 2 == 0 && tab2[i] != 0)
		{
			tab2[i] = tab2[i] + 2; // elementy podzielne przez 2 zwieksza o 2
		}
		if(tab2[i] % 5 ==0 && tab2[i] != 0)
		{
			tab2[i] = tab2[i] - 3; // elementy podzielne przez 5 zmniejsza o 3
		}
		else
		{
			tab2[i] = tab2[i] + 1;
		}
	}
	cout << endl << endl;

	for(int i=0; i<n; i++)
	{
		cout << setw(4) << tab2[i]; // wyswietlamy nowa , wieksza tablice
	}
	cout << endl << endl;

	delete[] tab2; // usuwamy druga tablice

	system("pause");
	return 0;
}

 
0

Heh jeszcze mam 1 problem (coś mam nafulane w tych warunkach które jesli liczba jest podzielna przez 2 to ma być zwiekszona o 2, jesli podzielona przez 5 to zmniejszona o 3 a reszta ma byc zmniejszona o 1)

I np jak jest 94 (to jest to liczba podzielna przez 2) lecz zwieksza sie ona o 1 a nie o 2. Co jest grane?

http://imageshack.us/f/708/56143378.jpg/

0

Zwiększa się o 3, a nie o 1.

http://ideone.com/5ulVh

Zapomniałeś o else w linii 65.

0

O dzieki :) Nie zwróciłem uwagi na to. Temat juz chyba mozna zamknąć. Pozdrawiam

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