Zadanie: Na prośbę programu użytkownik podaje rozmiar tablicy liczb całkowitych. Następnie
program tworzy tę tablicę dynamicznie i wypełnia ją liczbami naturalnymi, tak że
komórka o indeksie i zawiera liczbę i. Następnie w nowej linii program wyświetla
zawartość tablicy. Potem program pyta o to, co zrobić:
- Zmienić rozmiar tablicy? Jeśli tak – program dodaje do końca tablicy odpowiednią
liczbę nowych komórek zawierających numery ich indeksów (przy zwiększeniu rozmiaru
tablicy) lub usuwa z końca tablicy odpowiednią liczbę komórek.
Wymagania: Obszar tablicy ma być przydzielany i zwalniany dynamicznie. Realizacja czynności 1—4
ma być wykonywana przez osobne funkcje, a ich wybór przez instrukcję wyboru.
#include <iostream>
using namespace std;
int* zwieksz(int *tab, int &nrozmiar, int rozmiar);
int main()
{
int rozmiar, wybor = 5;
cout << "Podaj rozmiar tablicy: ";
cin >> rozmiar;
int *tab = new int[rozmiar]; //Tworze glowna tablice
for (int i = 0; i < rozmiar; i++) //Wypelniam
{
tab[i] = i;
}
cout << endl;
while (wybor != 0) //Petla wykonujaca sie dopoki nie bedzie wpisane 0
{
for (int i = 0; i < rozmiar; i++)
{
cout << "Komorka "<<i<<" wynosi " << tab[i] << ", " << endl; //wyswietlenie elemtow tablicy
}
cout << endl << "Co teraz?\n0-Wyjdz z programu\n1-Zmien rozmiar tablicy\n2-Dolacz do konca tablicy jedna komorke podana przez uzytkownika\n" <<
"3-Wstaw komorke z podana przez uzytkownika liczba w miejsce przed wybrana komorka\n4-Usun wybrana komorke\n"; //menu
cin >> wybor;
switch (wybor)
{
case 1: //Zmiana rozmiaru
cout << "Podaj rozmiar nowej tablicy: ";
int *nrozmiar = new int;
cin >> *nrozmiar;
if (*nrozmiar >= rozmiar)
{
tab = zwieksz(tab, *nrozmiar, rozmiar);
}
else cout << "\npozniej";
}
}
getchar();
getchar();
return 0;
}
int* zwieksz(int *tab, int &nrozmiar, int rozmiar)
{
int *ttab = new int[nrozmiar];
for (int i = 0; i < rozmiar; i++)
{
ttab[i] = tab[i];
}
for (int i = rozmiar; i < nrozmiar; i++)
ttab[i] = i;
delete[]tab;
return ttab;
}
Problemem jest to, że program caly czas wyswietla pierwsza tablice zamiast tej ze zwiekszonym rozmiarem. Do tego pytanie jak zmiejszyc tablice (i usunac jej elementy)? Reszte opcji z menu mam zamiar oczywiscie równiez zrobic jednak na razie chce sie uporac z pierwsza :)