Zapis do pliku z procedury rekurencyjnej

0
uses crt;
const max = 100;
  path = 'C:\permut.txt';
type vector = array[1..max] of integer;

function b(m, i : integer) : integer;
begin
  if (m mod 2 = 0) and (m > 2) then
    if i < m - 1 then b := i
    else b := m - 2
  else b := m - 1;
end;

procedure perm(var p : vector; n, m : integer);
var i, pom : integer;
  f : text;
begin
  assign(f, path);
{$I-}
  reset(f);
{$I+}
  if ioresult = 0 then append(f)
  else rewrite(f);
  if m = 1 then
  begin
    for i := 1 to n do
      write(f, p[i], ' ');
    writeln(f);
  end
  else
    for i := 1 to m do
    begin
      perm(p, n, m - 1);
      if i < m then
      begin
        pom := p[b(m, i)];
        p[b(m, i)] := p[m];
        p[m] := pom;
      end;
    end;
  close(f);
end;

var ch : char;
  i, n : integer;
  p : vector;
begin
  clrscr;
  repeat
    write('Podaj n=');
    readln(n);
    for i := 1 to n do
      p[i] := i;
    perm(p, n, n);
    ch := readkey;
  until ch = #27;
end.

No i teraz procedura tworzy pusty plik
(czyżby procedura rewrite wykonywana była
więcej razy niż potrzeba )
Jak ten kod poprawić

2

Polecam porządnie sformatować kod i porzadnie nazwac funkcje/zmienne. Bo inaczej nie bedzie sie nikomu raczej chcialo czytac tego kodu. Aha, i umiesc w poprawnych znacznikach ten kod.

0
[losowa nazwa] napisał(a)

Polecam porządnie sformatować kod i porzadnie nazwac funkcje/zmienne. Bo inaczej nie bedzie sie nikomu raczej chcialo czytac tego kodu. Aha, i umiesc w poprawnych znacznikach ten kod.

To nie Python żeby formatować kod a jak kodu nie umie przeczytać to g nie programista
Wiadomości takich spamerów jak ten powyżej powinno się usuwać
Jak nie masz nic do napisania to lepiej nie pisz
Tutaj tak jak w temacie chodzi tylko o zapis do pliku wyników z procedury rekurencyjnej
reszta kodu powinna być w porządku

1
nowy121105 napisał(a)
[losowa nazwa] napisał(a)

Polecam porządnie sformatować kod i porzadnie nazwac funkcje/zmienne. Bo inaczej nie bedzie sie nikomu raczej chcialo czytac tego kodu. Aha, i umiesc w poprawnych znacznikach ten kod.

To nie Python żeby formatować kod a jak kodu nie umie przeczytać to g nie programista
Wiadomości takich spamerów jak ten powyżej powinno się usuwać
Jak nie masz nic do napisania to lepiej nie pisz
Tutaj tak jak w temacie chodzi tylko o zapis do pliku wyników z procedury rekurencyjnej
reszta kodu powinna być w porządku

Jak jeszcze 5 osób napisze ci, że ten kod jest c**** to wreszcie uwierzysz?

0
Rev.pl napisał(a)
nowy121105 napisał(a)
[losowa nazwa] napisał(a)

Polecam porządnie sformatować kod i porzadnie nazwac funkcje/zmienne. Bo inaczej nie bedzie sie nikomu raczej chcialo czytac tego kodu. Aha, i umiesc w poprawnych znacznikach ten kod.

To nie Python żeby formatować kod a jak kodu nie umie przeczytać to g nie programista
Wiadomości takich spamerów jak ten powyżej powinno się usuwać
Jak nie masz nic do napisania to lepiej nie pisz
Tutaj tak jak w temacie chodzi tylko o zapis do pliku wyników z procedury rekurencyjnej
reszta kodu powinna być w porządku

Jak jeszcze 5 osób napisze ci, że ten kod jest c**** to wreszcie uwierzysz?

Z języków o których co nieco słyszałem i próbowałem programować to tylko w Pythonie
brak formatowania kodu było błędem (Python interpretowany skryptowy język hybrydowy
w którym możliwe jest programowanie strukturalne jak i obiektowe)
Reszta języków (w których próbowałem pisać Pascal C/C++ Java) nie wymagają formatowania kodu

A wy albo nie umiecie czytać albo jesteście lenie no bo łatwiej napisać jakieś bzdury
niż wczytać się w kod (nawet i sformatowany) i napisać co jest nie tak

Na to że nie umiecie czytać wskazuje fakt że napisałem
iż jak nie masz nic do napisania to nie pisz a tu taki jeden wyskakuje i pisze
swoje bzdury

Po co zakładać forum jak i tak nikt nie chce odpowiadać
albo jeżeli nawet odpowie to w większości wypadków jest ona niewystarczająca

0

Coraz więcej bezczelnych nowych. Bo [losowa nazwa] słusznie zwrócil Tobie uwagę, bo nikt nie spojrzy na ten kod,
no chyba, że z litości. Nie tylko w pyhtonie należy formatować kod. W każdym języku się to powinno robić, bo tak
jest czytalniej. Sam kiedyś miałem idiotyczny nawyk i wszystkie kody w Delphi poprawiałem wyrównując do lewej,
a teraz jak widzę taki kod to mnie szlag trafia. Człowiek z czasem zmienia żłe nawyki, a przynajmniej powinien :)
Jak nie potrafisz sformatować kodu lub się Tobie nie chce to użyj programu z poniższego linku, to zobaczysz
kolosalną różnicę i wtedy go wklej. Oto link: http://www.mediafire.com/file/80zkrt8absx60cv/delfor_changed_by_olesio.rar

0

Programik może się przydać ale jak
taki losowy nie chce pomóc tylko chce wypisywać bzdury
to zawsze może się do czegoś przyczepić

Teraz wygląda tak jak w waszym ulubionym Pythonie
To że kod jest czytelniejszy to wiadomo
(Brak formatowania kodu jest błędem tylko w językach takich jak Python
jednak formatowanie kodu przydaje się głównie przy większych projektach)
Twój programik przydałby się do formatowania kodu w C/C++
a zwłaszcza w Pythonie gdzie formatowanie kodu jest szczególnie ważne

Mnie chodzi o to że łatwiej się przyczepić do mało istotnych szczegółów
niż wczytać się w kod i rozwiązać istotę problemu

1

Wrzuciłem twój kod do FP i dostaję exitcode 5, czyli brak dostępu. Wniosek ? Plik jest otwarty jednak chcesz go otworzyć jeszcze raz. Proponuję otworzyć go tylko raz i później tylko dopisywać dane w tej funkcji perm lub otwierać go tylko w ów czas gdy tego potrzebujesz, po czym po zapisie zamknąć.

if m = 1 then
  begin
    assign(f, path);
    //{$I-}
    reset(f);
    //{$I+}
    if ioresult = 0 then append(f)
      else rewrite(f);
    for i := 1 to n do
      write(f, p[i],' ');
    writeln(f);
    close(f);
  end 
0

NMono jak to zrealizować żeby tylko raz otwierał skoro to procedura rekurencyjna
Operacje otwarcia i zamknięcia pliku zrealizować w programie głównym ?

NMono nawet jeśli ustawisz zgodność z TP to i tak nie możesz używać dyrektyw kompilatora ?

Na razie przetestowałem wielokrotne otwieranie i zamykanie pliku i działa

2

Heh... co za człowiek. No tak, to że nie chciało mi się analizować kodu-śmietnika znaczy, że jestem programistą do d*... Genialne wnioskowanie. Gratuluje i życzę powodzenia.

Na przyszłość - jednak formatuj kod, to otrzymasz pomoc bez tracenia czasu na dyskutowaniu o formatowaniu kodu.

edit:
Lol, zostałem zaminusowany :D

1

Sprawa jest dosyć prosta. Jak sam powiedziałeś, jest to procedura rekurencyjna, więc będzie wywoływana może i tysiące razy, tymczasem robisz reset pliku tekstowego przy każdym jej wywołaniu. Taki reset powoduje przesunięcie wskaźnika pozycji pliku na początek więc to, co wypisuje procedura, nadpisuje dopiero co wpisane dane. Przesuń reset poza tą procedurę, prawdopodobnie wystarczy wywołać ją raz na początku programu.

Natomiast poziom kultury wypowiedzi tutaj jest bardzo niski w porównaniu z forami zagranicznymi, głównie z USA. Tam nigdy takiej niegrzecznej odpowiedzi się nie dostanie podczas gdy w Polsce (a szczególnie na tym forum) szansa na to wynosi kilkadziesiąt procent. Prawdopodobnie wynika to z niskiego standardu życia w Polsce i większość osób tu piszących nigdy nie zarobiła na swoich programach, więc po prostu wyżywają swoje frustracje.

0

nie ma potrzeby ciągłego zamykania i otwierania pliku; przekazuj do tej swojej funkcji uchwyt do pliku, a plik twórz przed i zamykaj po jej wywołaniu, tj. w głównym bloku programu.

złe formatowanie kodu jednoznacznie świadczy o słabych umiejętnościach. brak formatowania kodu nie jest błędem tylko w kontekście kompilacji, bo jeśli ktokolwiek spojrzy na twoje wypociny (włącznie z tobą za kilka lat) to się załamie: kod źle sformatowany jest nieczytelny, a przez to niepotrzebnie marnujący czas i "błędogenny".
a to, że jeszcze innym zarzucasz czepianie się dupereli, jest z twojej strony bezczelne. chcesz naszej pomocy, to stosuj się do naszych warunków, gwarantuję, że nie są wzięte z sufitu.

0
ŁF napisał(a)

nie ma potrzeby ciągłego zamykania i otwierania pliku; przekazuj do tej swojej funkcji uchwyt do pliku, a plik twórz przed i zamykaj po jej wywołaniu, tj. w głównym bloku programu.

złe formatowanie kodu jednoznacznie świadczy o słabych umiejętnościach. brak formatowania kodu nie jest błędem tylko w kontekście kompilacji, bo jeśli ktokolwiek spojrzy na twoje wypociny (włącznie z tobą za kilka lat) to się załamie: kod źle sformatowany jest nieczytelny, a przez to niepotrzebnie marnujący czas i "błędogenny".
a to, że jeszcze innym zarzucasz czepianie się dupereli, jest z twojej strony bezczelne. chcesz naszej pomocy, to stosuj się do naszych warunków, gwarantuję, że nie są wzięte z sufitu.

Jak popatrzyłem na wcześniejsze kody to tak właśnie pisałem
(otwarcie i zamknięcie pliku poza procedurą , zmienna plikowa przekazywana jako parametr a nie jako zmienna lokalna)
(wystarczyło przejrzeć wcześniejsze kody)
Co do wcięć to jedynie optycznie czynią kod czytelny
Jeżeli chce się wiedzieć co dany fragment kodu "robi"
nawet po kilku latach to więcej dają komentarze aniżeli wcięcia
Co do kultury to Mariusz ma rację co do polskojęzycznych forów
Tylko moim zdaniem trochę idealizuje fora amerykańskie

1 użytkowników online, w tym zalogowanych: 0, gości: 1