CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Prośba o poradę

Prośba o poradę

dział ogólny

Re: Prośba o poradę

Nowy postprzez polymorphism » czwartek, 7 kwietnia 2011, 10:31

Jeśli dostajesz wyjątek mówiący o przepełnieniu stosu, to vectory nie maja tu nic do rzeczy.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Prośba o poradę

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 11:12

Corvis napisał(a):Kiedyś coś baron pisał o wektorach w rekurencji i przekazywaniu ich przez referencję.


Rekurencja występuje wtedy gdy funkcja odwołuje się sama do siebie. O tym w którym momencie to robi sam decydujesz, w zależności od tego jak głęboko funkcja ma wejść sama w siebie.

Post o którym wspominasz http://programowanie.cal.pl/forum/viewtopic.php?f=2&t=1236&p=8742&hilit=#p8742

Rekurencja nie zawsze jest wydajniejsza od innych metod...



Stawiaj nawiasy tak by było widać co jest czym, czyli zamiast:

KOD cpp:     UKRYJ  
void __fastcall ObliczFunkcje(int Adres) {
        switch(Wykresy[Adres].TypWykresu) {


zrób tak:

KOD cpp:     UKRYJ  
void __fastcall ObliczFunkcje(int Adres)
{
        switch(Wykresy[Adres].TypWykresu)
        {


Kod od razu staje się bardziej przejrzysty. Miejsca w edytorze chyba nie musisz, aż tak oszczędzać? :)



KOD cpp:     UKRYJ  
void __fastcall ObliczFunkcje(int Adres)
{
        switch(Wykresy[Adres].TypWykresu)
        {
                case Typ1:

                        ObliczFunkcje(2);
W wywołaniu rekurencyjnym przekazujesz cały czas tą samą wartość więc Adres zawsze będzie równy 2 i rekurencja będzie działać w nieskończoność, czyli program się zawiesi.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Prośba o poradę

Nowy postprzez Corvis » czwartek, 7 kwietnia 2011, 16:54

Baronie, jeżeli widzisz inną koncepcje rozwiązania tego problemu. Chętnie ją poznam.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Prośba o poradę

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 17:02

Ja nie wiem co ty robisz i nie chce mi się tego analizować. Możesz zamiast rekurencji użyć pętli, na jedno wyjdzie, ale pętla może mieć mniejszą wydajność.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Prośba o poradę

Nowy postprzez Corvis » poniedziałek, 11 kwietnia 2011, 18:12

Dobra wracając do podstaw. Niech mi ktoś powie, doradzi jak rozwiązać taki problem. Mam w edytorze swoim taki zapis

KOD text:     UKRYJ  
F1 = A(100);
F2 = B(F6);
F3 = C(F2);
F4 = D(100)
F5 = E(F2);
F6 = if(F4>F5);
Cały czas się zapętlam w miejscu i nie wiem jak iść dalej. F1 do F6 to kolejne funkcje już nie ważne jakie chodzi o problem. A,B,C,D,E,If to inne funkcje które jako parametry przyjmują albo stałe albo inne funkcje.

Tutaj nawet mi ciężko kolejność obliczenia znaleźć, wychodzi, że niektóre funkcje trzeba po 2 razy liczyć ??

F1
teraz musze obliczyć F6 a F6 odwołuje sie do F4 i F5 gdzie F5 odwołuje sie do F2 a F2 do F6. I wychodzi poplątanie z zapętleniem. Nie mam pojęcia jak do tego podejść wogóle.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Prośba o poradę

Nowy postprzez polymorphism » poniedziałek, 11 kwietnia 2011, 18:29

Jeśli w trakcie obliczania F2 wyjdzie Ci, że znowu musisz obliczyć F2, czyli dojdzie do zapętlenia, wtedy taki kod (czy co tam) nie da się wyliczyć - to oczywiste. W takim przypadku dajesz użytkownikowi info, żeby poprawił "to coś", i tyle.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 0 gości