IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @963
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Schudla som 15kg za 4 týždne

Zisti tajomstvo perfektnej postavy! Prečítaj si môj príbeh a zisti ako. www.janinblog.com

Zablokovali sa Vám dvere?

Poistite Váš dom u nás a UNIQA Assistance ich vždy otvorí za Vás. www.uniqa.sk

Súvisí kvalitný sex s

veľkosťou penisu? Stále sa hovorí o tom, že dobrý sex závisí od veľkosti feminity.zoznam.sk

Plánujete zmeniť zamestnanie?

Ponúkame Vám možnosť pracovať z domu denne 4 až 8 hod. a zarábať 800€/mes. www.pracujefektivne.sk

ARDOX SK s.r.o.

Reklamná agentúra tlačoviny rekl. plochy interiérová a exteriérová reklama www.ardox.sk

problem s pamatou? v C++

Zaslať odpoveď
AutorSpráva
apatka
Užívateľ
Užívateľ

Založený: 06.01.2007
Príspevky: 16

PríspevokZaslal: Ne 18.12.11 20:33Odpovedať s citátomNávrat hore

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
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;
}
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ne 18.12.11 21:05Odpovedať s citátomNávrat hore

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
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
BX
Užívateľ
Užívateľ

Založený: 17.07.2011
Príspevky: 94

PríspevokZaslal: Ne 18.12.11 21:10Odpovedať s citátomNávrat hore

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

Každopádne, povedal by som, že 40000 je proste veľa. Buď to alokuj dynamicky, alebo tam nedávaj tak veľké polia.
Zobraziť informácie o autoroviOdoslať súkromnú správuZobraziť autorove WWW stránky
apatka
Užívateľ
Užívateľ

Založený: 06.01.2007
Príspevky: 16

PríspevokZaslal: Ne 18.12.11 21:36Odpovedať s citátomNávrat hore

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 ...
za tie dve hodky v php sa mi to dostalo do stavu zhruba ako v cecku za pol minutu ")
Zobraziť informácie o autoroviOdoslať súkromnú správu
BX
Užívateľ
Užívateľ

Založený: 17.07.2011
Príspevky: 94

PríspevokZaslal: Ne 18.12.11 21:42Odpovedať s citátomNávrat hore

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()
Zobraziť informácie o autoroviOdoslať súkromnú správuZobraziť autorove WWW stránky
apatka
Užívateľ
Užívateľ

Založený: 06.01.2007
Príspevky: 16

PríspevokZaslal: Ne 18.12.11 21:50Odpovedať s citátomNávrat hore

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
Zobraziť informácie o autoroviOdoslať súkromnú správu
BX
Užívateľ
Užívateľ

Založený: 17.07.2011
Príspevky: 94

PríspevokZaslal: Ne 18.12.11 22:24Odpovedať s citátomNávrat hore

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...)
Zobraziť informácie o autoroviOdoslať súkromnú správuZobraziť autorove WWW stránky
apatka
Užívateľ
Užívateľ

Založený: 06.01.2007
Príspevky: 16

PríspevokZaslal: Ut 20.12.11 0:41Odpovedať s citátomNávrat hore

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
vsetkych preliati ratalo ale snad aj na milardy

kazdopadne vdaka za pomoc ... mas u mna male bezvyznamne plus
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd