Witam mam problem z tablica jednowymiarową ponieważ jej zakres jest bardzo ograniczony do 1000000 a ja potrzebuje dużo więcej
I tu moje pytanie jak zwiększyć zakres tablicy
Z góry bardzo dziękuje
Dynamiczne tablice,
int* tablica=new int[1000000000000];
na koniec zwalniasz pamiec
delete []tablica;
Poczytaj o wskaźnikach, o new i delete żebyś nie narobil wycieków pamięci itd.
Pozdro
Dzięki wielkie ale to mi nie pomogło
Teraz mój program dla dużych liczb nie oblicza nic
Wrzucam mój program który ma obliczać ile samochodów wyminęło się 0-samochod jedzie w prawo 1-samochod jedzie w lewo i dla dużych liczb program nie działa
int n,k=0,d=0,f=0,w;
cin>>n;
int* tablica=new int[n];
for (int i=0;i<n;i++)
cin>>tablica[i];
do
{ w=tablica[k];
if (w==0)
d=d+1;
else
f=f+d;
k=k+1;
}while (k<n);
cout<<f;
@Edit
Zakres jest do liczb 12 cyfrowych
upss double post sorry
Zdajesz sobie sprawę, że int tablica[1000000];
zajmuje ok. 4GB pamięci?
ravi35 napisał(a)
Zakres jest do liczb 12 cyfrowych
Zdajesz sobie sprawę, że int tablica[100000000000];
zajmuje ok. 93GiBstrasznie dużo pamięci?
w takim razie co mam zrobić ?
ravi35 napisał(a)
@Edit
Zakres jest do liczb 12 cyfrowych
a w int pomieścisz liczby do (2^32) - 1
wowow napisał(a)
ravi35 napisał(a)
@Edit
Zakres jest do liczb 12 cyfrowycha w int pomieścisz liczby do (2^32) - 1
sorry błąd (2^16) - 1 (dodatnie), druga połowa to ujemne.
wowow napisał(a)
wowow napisał(a)
ravi35 napisał(a)
@Edit
Zakres jest do liczb 12 cyfrowycha w int pomieścisz liczby do (2^32) - 1
sorry błąd (2^16) - 1 (dodatnie), druga połowa to ujemne.
to też zależy od architektury.
Co wy mieliście z matematyki? o_O
int który ma 4 bajty pomieści 232 różnych wartości. Wolę nie myśleć skąd wzieliście to 216 bo 232 / 2 = 231 a nie 2^16...
W wesji unsigned to będzie po prostu od 0 do 232 -1 a w wersji signed od -231 do 2^31
W takim razie co proponujecie?
Na prawdę masz dane o wielkości setek gigabajtów? Wydaje mi się, że masz po prostu dla każdego samochodu ciąg znaków (max 12) w postaci np. 01000110001, który określa trasę. Po prostu wtedy wczytujesz do stringa i patrzysz na kolejne pozycje.
Tutaj jest link do tego zadania i jak wysyłam do sprawdzenia do wyskakuje błąd dla dużych liczb
http://main.edu.pl/pl/archive/ilocamp/2011/sam
Zadeklaruj f jako long long (64 bity), powinno działać.
@up Dzięki podziałało ale teraz mam problem bo przekraczam limit pamięci
Ok temat do zamknięcia już zrobiłem
Wielkie dzięki za pomoc
ile punktów?
Witam!
Sorka za "podczepienie się" do tematu, ale mam podobny problem. Otóż, za zadanie mam przybliżyć całkę oznaczoną za pomocą dowolnej kwadratury Newtona-Cotesa, następnie zmodyfikować wyniki za pomocą metody Romberga i porównać błędy tych metod. Do kwadratury potrzebuję dużej ilości pod przedziałów (nawet 410) a do metody tablicy dwuwymiarowej (dokładniej trójkątnej) o wymiarach równych liczbie przedziałów. Tablicę tworzę dynamicznie,
long int n = pow(4,potega);
double **tab = new double*[n+1];
for (long int i=0;i<n+1;i++)
{
tab[i]= new double[n+1];
}
niestety po przekroczeniu 7 potęgi (tablica o wymiarach 16384+1x16384+1) program się wywala. Co robię źle? Co powinienem zrobić lub poprawić?
Właśnie przekraczasz limit alokowalnej pamięci dla procesu 32bitowego. Double
u Ciebie zajmuje zapewne 8 bajtów, stąd
8*(4^7+1)^2 = 2 147 745 800
, co jest więcej niż 2GB.
Jesteś pewien że taki byczy ochłap pamięci jest Ci potrzebny? Jeśli koniecznie musisz operować na takiej potędze, to zastąp double float'em.
Dałeś mi właśnie do myślenia, muszę w takim razie porozmawiać na ten temat z doktorem który będzie oceniał ten projekt. On nie przyjmuje float'ów gdyż dla niego mają zbyt krótkie rozwinięcie po przecinku, no a niestety aby otrzymać względnie dokładne wyniki, potrzebuję double, dużej ilości przedziałów co równa się utworzeniu ogromnej tablicy :/ Dzięki za szybką odpowiedź :)
No i się dowiedziałem :D Źle zrozumiałem sformułowanie zdania :/ Doktor napisał mi, że tworząc tablicę, wrzucam do niej nie kolejne wyniki poszczególnych pod przedziałów tylko ogólny wynik dla konkretnych gęstości, czyli w pierwszą kolumnę poszczególnych wierszy wrzucam tylko kolejno wyniki dla 40, 41, 42 itd. działam na nich metodą Romberga, po czym porównuję wyniki dla konkretnych gęstości czyli np pierwszą i ostatnią kolumnę w 8 wierszu (dla 47)Także mój problem został rozwiązany, w sobotę usiądę i bd miał po projekcie. Dzięki za pomoc ;)