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

Jak zapisać i odczytać wyniki do pliku w Delphi dla metody Gaussa?

maciekm7 24 Mar 2012 16:17 4898 10
REKLAMA
  • #1 10714388
    maciekm7
    Poziom 11  
    Posty: 27
    Witam
    potrzebuje dopisać do programu służącego do obliczania równań tetodą gaussa procedure służącą do odczytu/zapisu wyników do pliku. Narazie skupiłem się na zapisie do pliku lecz i to mi wychodzi z marnym skutkiem. Prosze o pomoc i ewentualne wskazanie błędów. To jest kod programu:
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 10714606
    Dżyszla
    Poziom 42  
    Posty: 7074
    Pomógł: 1095
    Ocena: 224
    Jeśli chcesz zapisać to dlaczego używasz funkcji czytaj (=read) ?

    Generalnie posługiwanie się starymi metodami dostępu do pliku nie jest czymś złym, ale jest kilka innych, nowoczesnych metod.

    Możesz np zapisać sobie wszystko w strukturze TStringList a potem użyć metody SaveToFile.

    Tak w zasadzie - jak chcesz zapisywać wyniki i na czym ma polegać odczyt?

    Na marginesie: jeśli problem ogranicza się do zapisu/odczytu to zamieszczaj tylko fragmenty kodu odpowiedzialne za to.
  • REKLAMA
  • #3 10714913
    maciekm7
    Poziom 11  
    Posty: 27
    udało mi się zrobić zapis/odczyt taki o jaki mi chodziło ale niestety po dokonaniu odczytu program wraca do wypełniania nowej macierzy. Nie wiem co z tym teraz można zrobić. Oto zmieniony kod:
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod
  • #4 10715592
    Dżyszla
    Poziom 42  
    Posty: 7074
    Pomógł: 1095
    Ocena: 224
    No zastanawiam się, czy to żart, czy późna pora tylko? Przecież jak odczytujesz to nie wypełniasz... czyli jeśli if jest spełniony to odczytujesz, a w przeciwnym wypadku (else) wykonujesz blok odpowiedzialny za wypełnienie.

    Ponadto przed odczytem warto byłoby ustalić rozmiar albo pobrać go z pliku również. Mam wrażenie, że wstawiłeś kod gdzie pasowało, jakbyś nie wiedział, gdzie do tej pory dokonywałeś wypełniania.
  • REKLAMA
  • #5 10755438
    maciekm7
    Poziom 11  
    Posty: 27
    Dzięki Dżyszla miałeś racje. Komenda else rozwiązała mój problem.
    A czy może mi ktoś podpowiedzieć jak przerobić ten program na VCL ?
  • REKLAMA
  • #7 10778557
    maciekm7
    Poziom 11  
    Posty: 27
    Witam ponownie
    Postanowiłem przerobić program aby możliwe było zapisanie/odczytanie macierzy podanej z klawiatury (przed dokonanymi obliczneniami). Niestety zapis do pliku działa lecz z odczytem mam problem. Wyswietla mi się runtime error 106 (z tego co udało mi się doczytać niezgodność pliku tekstowego z liczbami). W jaki sposób można to poprawić?? Oto kod zapisu/odczytu:
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod
  • #8 10778708
    blue_17
    Poziom 32  
    Posty: 2414
    Pomógł: 172
    Ocena: 471
    Nie wiem jakie masz liczby całkowite czy tez nie ale spróbuj

    StrToInt() funkcja konwertuje ze stringa do inta :)

    Nigdzie nie widzę żebyś robił coś takiego

    w załączniku program liczący robiący podobnie jak u Ciebie tylko tam juz mam dynamiczne tablice

    zauważ

    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    w programie jeszcze masz pokazane jak zrobić zaokrąglenia oraz z powrotem konwersje do stringa żeby zapisać do pliku

    zwróć uwagę na wykaz modułów w sekcji uses

    Pozdrawiam
    Załączniki:
    • unit1.rar (1.86 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #9 10780453
    maciekm7
    Poziom 11  
    Posty: 27
    A mógłby ktoś wytłumaczyć w jaki sposób zastosować w moim programie tą funkcje
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod
    ??
    Aha i mam jeszcze jedno pytanie: Dlaczego gdy z pliku czytałem tylko jedną macierz oznaczoną jako q[i,i] bedącą wynikiem przekształceń wszystko działało a teraz gdy usiłuje zczytac macierze oznaczone jako a[i,j] i x[i,i] to program nie potrafi tego zrobić??
  • #10 10780743
    blue_17
    Poziom 32  
    Posty: 2414
    Pomógł: 172
    Ocena: 471
    maciekm7 napisał:
    A mógłby ktoś wytłumaczyć w jaki sposób zastosować w moim programie tą funkcje
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod
    ??
    Aha i mam jeszcze jedno pytanie: Dlaczego gdy z pliku czytałem tylko jedną macierz oznaczoną jako q[i,i] bedącą wynikiem przekształceń wszystko działało a teraz gdy usiłuje zczytac macierze oznaczone jako a[i,j] i x[i,i] to program nie potrafi tego zrobić??


    1. Przekonwertuj przy odczycie z pliku
    2. Prawdopodobnie albo źle masz coś z iterowanymi zmiennymi lub źle poruszasz się po pliku

    Nie pokazujesz nawet struktury pliku z wartościami macierzy

    Ja proponował bym Ci coś takiego

    Jak zapisać i odczytać wyniki do pliku w Delphi dla metody Gaussa?

    rozwiązanie dostałeś ode mnie już na tacy :)

    Taki program w tej chwili program skrobnął konsolowo w C, ale to chyba dlatego że tam jest prostsza obsługa plików wejścia ale jak kto woli :)
  • #11 10820034
    maciekm7
    Poziom 11  
    Posty: 27
    Witam
    Udało mi się stworzyc program w vcl, lecz niestety nie potrafie przetwożyć wartości liczbowych odczytanych z dwóch stringgridów.Wartości te po dokonaniu obliczeń chcialbym umieścić w stringgrid3. Oto kod odpowiedzialny za to :
    Kod: Delphi
    Zaloguj się, aby zobaczyć kod


    po odpaleniu programu i wywołaniu procedury która powinna obliczyć równanie wyskakuje błąd :Project project1.exe raised exception class EAccessViolation with message 'Access violaton at Address 0047FD5 in module Project1.exe. Read at address 00000004. Process stopped. Use step or run to continue. W jaki sposób moge zlikwidować ten błąd??

Podsumowanie tematu

✨ Użytkownik poszukiwał pomocy w zakresie zapisu i odczytu wyników do pliku w Delphi w kontekście obliczeń metodą Gaussa. Początkowo miał trudności z implementacją funkcji zapisu, jednak po wskazówkach dotyczących użycia TStringList oraz poprawnego zarządzania odczytem i zapisem danych, udało mu się rozwiązać część problemów. W trakcie dyskusji poruszono kwestie konwersji danych z pliku, błędów runtime oraz przekształcania programu do VCL. Użytkownik zidentyfikował problemy z odczytem macierzy, co prowadziło do błędów związanych z niezgodnością typów danych. Ostatecznie, po wprowadzeniu poprawek, użytkownik zdołał zrealizować zapis i odczyt macierzy, jednak nadal borykał się z problemami przy przetwarzaniu danych z interfejsu graficznego.
Wygenerowane przez model językowy.
REKLAMA