[ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.01.07
Prihlásený: 18.12.11
Príspevky: 16
Témy: 5 | 5
NapísalOffline : 18.12.2011 19:33 | problem s pamatou? v C++

mam takyto naky programik ... problem mam v tom ze ked za x dosadim vacsie cislo ako nakych 40tis tak mi program padne hned na zaciatku .. asi nieco s alokaciou pamati :lol:
co mam spravit aby mi to zobralo aj viac

nie som programator tak poprosim budte zhovievavy, moje znalosti cecka su limitovane :)

Kód:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int x=40000;
int max[8]={0,10,10,10,10,7,7,7};
int end[8]={0,9,5,5,0,5,5,5};
int stav[8][x];
int riadok[x];
int index[x];
int nad1[x];
int nad2[x];
stav[1][0]=10;
stav[2][0]=10;
stav[3][0]=0;
stav[4][0]=0;
stav[5][0]=0;
stav[6][0]=7;
stav[7][0]=7;
riadok[0]=0;
index[0]=-1;
nad1[0]=0;
nad2[0]=0;

printf ("0  -  START  %d %d %d %d %d\n\n", stav[1][0], stav[2][0], stav[3][0], stav[4][0], stav[5][0], stav[6][0], stav[7][0]);

int c,prelej,in,n,m,k,j=1;

for(in=1;in<=1000000;in++){
    for(n=7;n>=1;n--){
        for(m=1;m<=7;m++){
            if (n==m){
                continue;
            }
            if ((stav[m][in-1]<max[m]) and (stav[n][in-1]!=0)){
                prelej = stav[n][in-1]+stav[m][in-1];
                stav[1][j]=stav[1][in-1];
                stav[2][j]=stav[2][in-1];
                stav[3][j]=stav[3][in-1];
                stav[4][j]=stav[4][in-1];
                stav[5][j]=stav[5][in-1];
                stav[6][j]=stav[6][in-1];
                stav[7][j]=stav[7][in-1];
                if (prelej <= max[m]){
                    stav[m][j]=prelej;
                    stav[n][j]=0;
                }
                else {
                    stav[m][j]=max[m];
                    stav[n][j]=prelej-max[m];
                }
                   for(k=1;k<j;k++){
                    if ((stav[1][j]==stav[1][k]) and (stav[2][j]==stav[2][k]) and (stav[3][j]==stav[3][k]) and (stav[4][j]==stav[4][k]) and (stav[5][j]==stav[5][k]) and (stav[6][j]==stav[6][k]) and (stav[7][j]==stav[7][k])){
                        goto end;
                    }
                }
                riadok[j]=j;
                index[j]=in-1;
                nad1[j]=n;
                nad2[j]=m;
                printf ("%d  %d   %d->%d   ", riadok[j], index[j], nad1[j], nad2[j]);
                printf ("%d %d %d %d %d %d %d\n", stav[1][j], stav[2][j], stav[3][j], stav[4][j], stav[5][j], stav[6][j], stav[7][j]);
                if ((stav[1][j]==end[1]) and (stav[2][j]==end[2]) and (stav[3][j]==end[3]) and (stav[4][j]==end[4]) and (stav[5][j]==end[5]) and (stav[6][j]==end[6]) and (stav[7][j]==end[7])){
                    goto quit;
                }
                j++;               
            }
            end:
            c++;         
        }
    }
}
quit:
     
printf ("\n----------------------------------------------\n\n");
while (j!=0){
    printf ("%d  %d   %d->%d   ", riadok[j], index[j], nad1[j], nad2[j]);
    printf ("%d %d %d %d %d\n", stav[1][j], stav[2][j], stav[3][j], stav[4][j], stav[5][j], stav[6][j], stav[7][j]);
    j=index[j];
}

    system("PAUSE");
    return EXIT_SUCCESS;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
problem s pamatou? v C++

Registrovaný: 11.01.09
Prihlásený: 06.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 18.12.2011 20:05 | problem s pamatou? v C++

Mne to na linuxe nepada, takze napis, aku chybu ti to hodi, pripadne ak ziadnu, spust program v debuggeri ( ak nevies ako, napis, ake prostredie pouzivas ) a povedz, na akom riadku ti to stopne. Plus daj nejake blizsie info, aky OS, co to ma robit, atd.
Neviem, ci to mas do skoly, alebo len tak, ale nie je velmi dobre ( minimalne na pohlad ), ked sa mixuje C a C++. Tym chcem naznacit, ze nieco ako printf by v C++ nemalo co robit. A navestia uz vobec nie, to patri tak do assembleru, maximalne do C. Takisto nejaky pokus o vytvorenie objektov by nezaskodil ( napr v takej jave to je nutnost ). Ale to len tak na okraj, pre buducnost, ak sa tomu hodlas venovat. Som zhovievavy :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 18.12.2011 20:10 | problem s pamatou? v C++

To mi ani neprejde prekladom. Obávam sa, že toto nie je ani C, ani C++ :P

Každopádne, povedal by som, že 40000 je proste veľa. Buď to alokuj dynamicky, alebo tam nedávaj tak veľké polia.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.01.07
Prihlásený: 18.12.11
Príspevky: 16
Témy: 5 | 5
Napísal autor témyOffline : 18.12.2011 20:36 | problem s pamatou? v C++

ano nepada to pokial mas x=40tis ... daj si to 50tis a tak vyskusaj
mam iba nake free c++ ... myslel som si aj ze to je v tom ale skusal som to v troch roznych a vzdy to dopadlo rovnako (DEv-C++, CodeLite a este cosi, uz som to vymazal)
vyhlasuje mi to nejaku "chybu segmentacie"

a je to program na prelievanie medzi nadobami :) ... mas definovane velkost nadoby max[], pozadovany konecny stav end[] a zaciatocny stav stav[][]
postupne ti to prelieva az kym sa nedostanes k rieseniu a to ti potom este prekne vypise

// pridané po 19 minútach od posledného príspevku

alokovat dynamicky ... hmmmm :) ... vravim ze moje zalosti su limitovane
ak to takto nejde riesit tak ok ... kludne napiste a nieco vymyslim ine ... som myslel ze mozno na to bude naka jednoduca finta

povodne som to spravil v phpcku, v ktorom mi to ide trocha lepsie ... ale cim viac mate nadob tak to trva dlhsie ... toto konkretne mi pocitalo asi dve hodiny kym som sa na to vykaslal a uznal ze to skor nakodim v cecku ako mi to dorata :D ...
za tie dve hodky v php sa mi to dostalo do stavu zhruba ako v cecku za pol minutu ")


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 18.12.2011 20:42 | problem s pamatou? v C++

A som si istý, že by sa to dalo zraziť až na niekoľko milisekúnd :) (40000 za pol minúty? To je moc)

Dynamické alokovanie nie je sranda. Treba byť doma v pointrovej aritmetike, čo je pre php-čkara problém.
Ak ti ale naozaj ide o veľké vstupy, tak si pekne naštuduj funkciu malloc()


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.01.07
Prihlásený: 18.12.11
Príspevky: 16
Témy: 5 | 5
Napísal autor témyOffline : 18.12.2011 20:50 | problem s pamatou? v C++

40000 je len pocet zapisanych preliati ... po kazdom kontrolujem ci uz som rovnaky stav nemal predtym, resp. ci sa stav zmenil (napr. ak prelievas do plnej nadoby nic sa nezmeni)
skutocne vykonanych preliati je niekolkonasobne viac
naviac ked vypisujem kazdy riadok na obrazovku tak mozno aj to pridava na case ... ci nie? ... kazdopadne cas nie je problem .. pokial sa nebavime o hodinach a viac :)

tu sa inak natiska otazka aj hned, ci mi vobec dynamicke alokovanie pomoze kedze si pamatam vsetky mozne predchadzajuce stavy a nemozem uvolnit nic z pamate?? ... cize tych 40000 (a viac) bude mat alokovanych tak ci tak


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 18.12.2011 21:24 | problem s pamatou? v C++

No dobre, daj sem presné znenie úlohy a skúsime vymyslieť niečo normálnejšie.

(a áno, printf zožerie veľa času)

// Inak, malo by stačiť, keď si tie polia zadeklaruješ pred funkciou main. Data sektor je veľký, takže veľké vstupy zoberie
(prečo ma to nenapadlo skôr...)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.01.07
Prihlásený: 18.12.11
Príspevky: 16
Témy: 5 | 5
Napísal autor témyOffline : 19.12.2011 23:41 | problem s pamatou? v C++

supeeer ... dik ... presne takuto naku fintu som hladal :)
sice mi to bezalo snad aj hodinu ale nakonec sa doratal k rieseniu
stacilo na to len nieco malo nad 260tis riadkov :D
vsetkych preliati ratalo ale snad aj na milardy

kazdopadne vdaka za pomoc ... mas u mna male bezvyznamne plus :)


 [ Príspevkov: 8 ] 


problem s pamatou? v C++



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

problém s pamäťou

v Pamäte

6

528

17.02.2009 12:21

Luks

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s pamäťou

v Pevné disky a radiče

13

438

10.12.2014 21:15

Mandy

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s corsair pamatou

v Pamäte

6

580

14.03.2011 19:47

tomando1

V tomto fóre nie sú ďalšie neprečítané témy.

problém s virtuálnou pamäťou

v Operačné systémy Microsoft

19

1522

15.07.2009 8:01

psichac

V tomto fóre nie sú ďalšie neprečítané témy.

problem s pamatou v apachi

v Ostatné

0

442

26.10.2009 15:23

colorado

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s pamätou po sťahovaní

v Ostatné programy

1

389

13.08.2010 22:53

jaro100

V tomto fóre nie sú ďalšie neprečítané témy.

HP ProBook 450 problém s pamäťou

v Notebooky a netbooky

10

611

09.02.2014 20:01

SKRiPT

V tomto fóre nie sú ďalšie neprečítané témy.

ASUS EAH3870X2 problem s pamatou...pls help

v ATI/AMD grafické karty

5

630

15.12.2008 5:06

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Problém s pamäťou ram / biosom / doskou - MSI Z170 Tomahawk

v Intel čipové sady

9

770

27.03.2017 20:11

Actain

V tomto fóre nie sú ďalšie neprečítané témy.

USB - problém s pamäťou, údajne je plné a pri tom je skoro prázdne

v Ostatné zariadenia

3

694

15.10.2015 16:33

4040

V tomto fóre nie sú ďalšie neprečítané témy.

C/C++ problém so súbormi a hodnotami

v Assembler, C, C++, Pascal, Java

2

311

09.12.2012 10:43

nBXXL

V tomto fóre nie sú ďalšie neprečítané témy.

C&C: Rengade-problem

v Počítačové hry

0

531

21.04.2009 15:39

GothicMan

V tomto fóre nie sú ďalšie neprečítané témy.

Problem C&C Generals

v Počítačové hry

20

1240

12.10.2007 21:09

Matokoko

V tomto fóre nie sú ďalšie neprečítané témy.

C&C Generals problem

v Počítačové hry

2

647

16.01.2011 12:35

Luks

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s teplotou? Speedfan Core- 4°C a Core 96°C

v AMD - Advanced Micro Devices

18

1221

08.05.2011 15:57

slavix

V tomto fóre nie sú ďalšie neprečítané témy.

pomoc s pamatou

v Pamäte

1

250

07.03.2013 19:05

jtbs



© 2005 - 2024 PCforum, edited by JanoF