logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tablica 1000x1000x1000. Jak napisać program w C++?

szok21 05 Kwi 2007 20:35 2130 10
REKLAMA
  • #1 3756644
    szok21
    Poziom 11  
    Posty: 8
    Proszę o pomoc w napisaniu programu w C++Builder 6 lub o napisanie programu

    Program ma za zadanie obliczyć i wyświetlić wszystkie kombinacje zmiennych podstawionych do funkcji.
    Obliczyć maksimum oraz minimum funkcji i zapisać je to do pliku .txt dla jakich wartości zmiennych funkcja je uzyskuje.
    Załączniki:
    • Tablica 1000x1000x1000. Jak napisać program w C++? funkcja.JPG (65.69 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 3757817
    radekr
    Poziom 16  
    Posty: 122
    Pomógł: 11
    Ocena: 5
    Ale w czym kolega ma konkretnie problem?
    Napisz co do tej pory zrobiłeś i czego nie wiesz?
    Bo tak jak to teraz napisałeś, to wygląda jak byś dostał prace domową i liczył że ktoś na forum odrobi ją za Ciebie.
  • #3 3759193
    szok21
    Poziom 11  
    Posty: 8
    Po cześci masz racje wiem ze potrzeba mi 3 pentel for ale nie wiem jak to zdefiniowac :(
  • REKLAMA
  • Pomocny post
    #4 3760047
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Taka tablica to kilka giga bajtów
    (i choćbyś nie wiem jak się wytężył,
    to nie podźwigniesz
    taki to ciężar :-)
    ale na szczęście jest zbędna.Kolejne wyniki możesz zapisywać w trakcie obliczeń (ale po co komu MILIARD linijek z cyferkami)
    float f(float f1, f2, f3); // to sam sobie napisz :-)
    
    int f1, f2, f3;
    float t,min, max, f1min, f2min, f3min, f1max, f2max, f3max;
    
    min=1e38;    //magiczne liczby
    max=-1e38;
    
    for (f1=0; f1<1000; ++f1)
      for (f2=0; f2<1000; ++f2)
         for (f3=0; f3<1000; ++f3) {
           t=f(fi*0.005+0.005, f2*0.005+0.005, f3*0.01+0.01);
           if (t<min) {
             f1min=f1*0.005+0.005;
             f2min=f2*0.005+0.005;
             f3min=f3*0.01+0.01;
             min=t;
           else if (t>max) {
             f1max=f1*0.005+0.005;
             f2max=f2*0.005+0.005;
             f3max=f3*0.01+0.01;
             max=t;
           }
         }
    
    [/code]
  • #5 3760388
    szok21
    Poziom 11  
    Posty: 8
    :) własnie ze mi jest potrzebne te miliard linijek :D
    bo chce to porównac ten programik z szybkością wyliczenia tego samego wzoru ale przez algorytm genetyczny
  • REKLAMA
  • #6 3760464
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    miliard linijek, w każdej 4 liczby po ileś znaków + CR/LF, masz spory dysk.
    czy to ma służyć testowaniu szybkości zapisu plików na dysk?
    Jak wielki masz dysk w porównaniu z taaakim rozmiarem? maleńki prawda?

    W ten sposób uzyskasz optymalną odpowiedź (z dokładnością do wielkości kroku).
    Ciekawe co wyhodujesz (i w jakim czasie)?



    ...
    Lecz choćby przyszło tysiąc atletów
    I każdy zjadłby tysiąc kotletów,
    I każdy nie wiem jak się natężał,
    To nie udźwigną - taki to ciężar!
    ...
    
  • #7 3760481
    szok21
    Poziom 11  
    Posty: 8
    dysk mam 80 giga no chyba zeby zmienic krok do 100

    Dodano po 55 [sekundy]:

    powinno to mielic jakies 15 minut
  • Pomocny post
    #8 3760502
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    a to w takim razie co jest ciekawe, pojemność dysku czy magiczna sprawność genetyki?
    ja bym zrobił tak:
    klasycznie, znaczy pętelkowo poszukał ekstremów (można to robić też klasycznie ale dowcipniej - OPTYMALIZACJA), zainteresował się czasem uzyskania odpowiedzi, liczbą wywołań f(1,2,3), i to samo powierzył genetyce :-).
    Porównał wyniki, a wtedy dopiero (ewentualnie) zastanawiał się co dalej
    Po kiego grzyba mi fura pośrednich (wiadomo z góry, że złych) wyników?
  • REKLAMA
  • #9 3760517
    szok21
    Poziom 11  
    Posty: 8
    masz w sumie racje moze lepiej i szybciej definitywnie jesli program wyszuka maximum oraz wyswietli te zmiennych dla ktorych to uzyskał

    Dodano po 2 [minuty]:

    Bawiłes sie kiedys tymi algorytmami genetycznymi bo ostatnio dostałem programik i naprawde to piekna sprawa
  • Pomocny post
    #10 3760577
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    A wiesz, bawiłem się w pewien sposób, bo mam dzieci :-)
  • #11 3760590
    szok21
    Poziom 11  
    Posty: 8
    To kazdy z nas :) sie tak bawi ale konkretnie to mi chodzi w zabawe w C++ bo to bez konsekwencji

    Dodano po 22 [minuty]:

    Prosze cie napisz mi ten programik dla funkcji zeby było prosciej Y= F1 + F2 + F3

Podsumowanie tematu

✨ Dyskusja dotyczy napisania programu w C++Builder 6, który obliczy i wyświetli wszystkie kombinacje zmiennych podstawionych do funkcji trójwymiarowej, a także znajdzie i zapisze do pliku .txt wartości maksimum i minimum funkcji wraz z odpowiadającymi im argumentami. Poruszono problem ogromnej pamięci potrzebnej do przechowywania tablicy 1000x1000x1000 elementów, co jest niepraktyczne ze względu na wielkość danych (kilka gigabajtów). Zaproponowano rozwiązanie iteracyjne z trzema zagnieżdżonymi pętlami for, które na bieżąco obliczają wartości funkcji i aktualizują maksimum oraz minimum bez konieczności przechowywania całej tablicy. Dyskutowano również o alternatywnym podejściu z użyciem algorytmów genetycznych do optymalizacji, które może być szybsze i bardziej efektywne, zwłaszcza gdy celem jest znalezienie ekstremów funkcji. Autor wyraził zainteresowanie porównaniem klasycznego podejścia pętlowego z algorytmami genetycznymi oraz prosił o przykładowy program dla uproszczonej funkcji Y = F1 + F2 + F3. Wskazano, że generowanie i zapisywanie miliarda wyników jest możliwe, ale wymaga dużej przestrzeni dyskowej i czasu, co może być niepraktyczne. Zalecane jest skupienie się na znalezieniu ekstremów i ich argumentów oraz porównaniu efektywności obu metod.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA