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 napisać program w Delphi bazując na źródle z Tpascala?

Maryush 06 Sty 2005 22:12 2565 8
REKLAMA
  • #1 1116144
    Maryush
    Poziom 22  
    Posty: 884
    Pomógł: 2
    Ocena: 90
    Witam wszystkich!
    Mam taki problem, poniżej zamieszczam źródło programu pod TurboPascala i chodzi o to, aby ten programik napisać w Delphi. W tym miejscu prosiłbym o pomoc. Jestem początkującym użytkownikiem Delphi i nie wiem jak się do tego zabrać.
    :roll: Oto ten program:

    PROGRAM Kombinacja_n_po_k;
    USES
    Crt;
    CONST
    Max_el = 100;
    TYPE
    Tablica = ARRAY [1 .. Max_el] OF INTEGER;
    VAR
    n : INTEGER;
    k : INTEGER;
    Tab : Tablica;

    (-----------------------------------------------------------)

    PROCEDURE Wyswietlanie(k :INTEGER);
    VAR
    Nr_elementu :INTEGER;
    BEGIN

    FOR Nr_elementu := 1 TO k DO
    Write(Tab[Nr_elementu] : 4);
    Writeln;

    END;
    (-----------------------------------------------------------)

    PROCEDURE Kombinacja(a, b : INTEGER);
    VAR
    Element : INTEGER; (* dla Kombinacja *)
    BEGIN
    FOR Element := b to n - k + a DO
    BEGIN
    Tab[a] := Element;
    IF a < k THEN
    Kombinacja(a +1, Element+1)
    ELSE
    Wyswietlanie(k)
    END
    END;

    (--------------------------------------------------------)
    BEGIN
    WHILE n<=k DO
    BEGIN
    ClrScr;
    Writeln(' Wyznaczenie wszystkich kombinacji n po k');
    Writeln;
    Write(' Podaj ilosc elementow zbioru n........ : ');
    ReadLn(n);
    Write(' Podaj ilosc elementow podzbioru k .... : ');
    ReadLn(k);
    END;
    Writeln;
    IF n >= k THEN
    Kombinacja(1,1);
    Writeln;
    REPEAT UNTIL KeyPressed;
    END.

    Jak się domyślacie wyznacza on wszystkie k-elementowe kombinacje bez powtórzeń ze zbioru n-elementowego dla 0=<k=<n.
    Czekam na Wasze wskazówki i sugestie, a być może nawet na gotowe źródło. :) Z góry dzięki :!:
  • REKLAMA
  • Pomocny post
    #2 1117240
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 3335828
    virgo
    Poziom 11  
    Posty: 11
    Ocena: 2
    Witam.Jak do tego programu zrobić algorytm?Jestem całkowicie zielona i będę wdzięczna za pomoc.
  • #4 3343446
    eco123
    Poziom 14  
    Posty: 99
    Pomógł: 3
    Ocena: 1
    Algorytm to już jest, tylko interfejs użytkownika zamienić z DOS konsola na Windows GUI.

    Do tego wystarczy na delphi formularzu, przez kliknięcie myszką wprowadzić dwa elementy edycyjne z palety komponentów GUI, oraz dla wyniku funkcji etykiety Label.

    wtedy


    Edit1.Text:= IntToStr(n); // readln(n)
    oraz
    n:= StrRoInt(Edit1.Text);

    wtedy
    Edit2.Text:= IntToStr(k); // readln(k)
    oraz
    k:= StrRoInt(Edit2.Text);

    wynik dla pojedynczej kombinacji

    resultat:= funkcja(n,k);

    Label1.Caption:= "Wynik";
    Label2.Caption(IntToStr(resultat));

    dla większej ilości to należy wybrać z palety komponentów
    komponent typu objekt memo lub grid string.

    PROCEDURE Wyswietlanie(k :INTEGER);
    VAR
    Nr_elementu :INTEGER;
    BEGIN

    FOR Nr_elementu := 1 TO k DO
    Memo1.Lines.AddStrings(IntToStr(Tab[Nr_elementu] ));
    //Write(Tab[Nr_elementu] : 4);
    //Writeln;

    END;
  • #5 3346689
    virgo
    Poziom 11  
    Posty: 11
    Ocena: 2
    No tak (chyba proste) ale ja potrzebuję w Pascalu a algorytm za pomocą schematu blokowego.Ale i tak wielkie dzięki za odzew.Pozdrawiam.

    P.S Jak do tej pory to zrobiłam tylko tyle i utknęłam.(Dołączam screena).Algorytm blokowy ma być do programu z Pascala obliczającego k-elementowe kombinacje bez powtórzeń ze zbioru n-elementowego 0<=K<=n
    Załączniki:
    • algorytm.JPG (79.47 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #6 3351576
    eco123
    Poziom 14  
    Posty: 99
    Pomógł: 3
    Ocena: 1
    Może jeszcze z łaski swojej sprecyzujesz w jakim Pascalu?

    Delphi to rozszerzony Pascal o typ objektowy. Teraz jest do ściągnięcia w wersji personalnej pod nazwą rynkową Turbo Delphi. W końcu ty powinnaść
    wiedzieć w jakim trybie komunikacji programu z użytkownikiem wymaga się lub na jakim sprzęcie i systemie operacyjnym ma być uruchamiany.

    W trybie konsoli czy GUI Microsoftu?, lub inne interfejsy ... .
  • REKLAMA
  • #7 3353518
    virgo
    Poziom 11  
    Posty: 11
    Ocena: 2
    W Turbo Pascalu oczywiście.Ale nie denerwuj się tak z powodu mojej niewiedzy.Zachciało mi się uczyć a po medyku skończonym dość dawno to nie mam zbyt dobrego przygotowania matematycznego a co dopiero informatycznego.Wy młodzi to teraz nawet w podstawówce macie informatykę.Interesuję się tym, ale z programowania jestem i chyba zostanę noga-nie kapuje z tego ani trochę.Pozdrawiam.
  • #8 3354610
    eco123
    Poziom 14  
    Posty: 99
    Pomógł: 3
    Ocena: 1
    Nie denerwuje się , tylko proszę o własciwe sformułownaie problemu tj. przedastawinie diagramu z algorytmem albo algorytmu ze źródłem-kodem-Wirtha? Tak nazywał się szwajcarski twórca pierwszej składni języka Pascal.
  • #9 3393072
    x_LeNDo_x
    Poziom 13  
    Posty: 114
    Pomógł: 5
    Ocena: 4
    eco123 napisał:
    przedastawinie diagramu z algorytmem albo algorytmu ze źródłem-kodem-Wirtha? Tak nazywał się szwajcarski twórca pierwszej składni języka Pascal.


    Nie zebym sie czepial moze i jestes wyksztalcony ale pytanie brzmialo jak ma wygladac kod w delphi a nie szwajcarski tworca pierwszej skladni jezyka..:|:|:|
    w trybie konsolowym to wyglada tak (zreszta nie widze potrzeby robienia tego programu w innym trybie tymbardziej jesli dopiero zaczynasz):

    program Project2;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils;
    
    CONST
    Max_el = 100;
    TYPE
    Tablica = ARRAY [1 .. Max_el] OF INTEGER;
    VAR
    n : INTEGER;
    k : INTEGER;
    Tab : Tablica;
    
    
    
    PROCEDURE Wyswietlanie(k :INTEGER);
    VAR
    Nr_elementu :INTEGER;
    BEGIN
    
    FOR Nr_elementu := 1 TO k DO
    Write(Tab[Nr_elementu] : 4);
    Writeln;
    
    END;
    
    
    PROCEDURE Kombinacja(a, b : INTEGER);
    VAR
    Element : INTEGER; (* dla Kombinacja *)
    BEGIN
    FOR Element := b to n - k + a DO
    BEGIN
    Tab[a] := Element;
    IF a < k THEN
    Kombinacja(a +1, Element+1)
    ELSE
    Wyswietlanie(k)
    END
    END;
    
    
    BEGIN
    WHILE n<=k DO
    BEGIN
    Writeln(' Wyznaczenie wszystkich kombinacji n po k');
    Writeln;
    Write(' Podaj ilosc elementow zbioru n........ : ');
    ReadLn(n);
    Write(' Podaj ilosc elementow podzbioru k .... : ');
    ReadLn(k);
    END;
    Writeln;
    IF n >= k THEN
    Kombinacja(1,1);
    Writeln;
    readln;
    END.


    wyrzucilem tylko clrscr i repeat until keypressed zamienilem na readln... tyle :)

Podsumowanie tematu

✨ Dyskusja dotyczy konwersji programu napisanego w Turbo Pascalu, obliczającego kombinacje k-elementowe ze zbioru n-elementowego, na język Delphi. Poruszono kwestie różnic między środowiskami Turbo Pascal i Delphi, zwłaszcza w zakresie obsługi konsoli i GUI. Zasugerowano użycie dyrektywy {$APPTYPE CONSOLE} w Delphi dla aplikacji konsolowych oraz zamianę modułu Crt na WinCrt, choć z zastrzeżeniem możliwych ograniczeń funkcji takich jak clrscr i keypressed. Wskazano, że program można przekształcić na aplikację z interfejsem graficznym, wykorzystując komponenty GUI Delphi, takie jak TEdit do wprowadzania danych oraz TLabel i TMemo do wyświetlania wyników. Podano przykłady konwersji odczytu i zapisu danych z konsoli na obsługę komponentów GUI (np. Edit1.Text, Label1.Caption). Wskazano również na potrzebę precyzyjnego określenia środowiska uruchomieniowego (konsola vs GUI) oraz wersji Pascala. Przedstawiono fragmenty kodu Delphi w trybie konsolowym, odpowiadające oryginalnemu programowi Turbo Pascal, z zachowaniem struktury procedur wyświetlania i generowania kombinacji. Poruszono także temat algorytmu i schematu blokowego dla programu, podkreślając, że algorytm jest już zaimplementowany, a głównym wyzwaniem jest adaptacja do Delphi i ewentualne stworzenie interfejsu użytkownika.
Wygenerowane przez model językowy.
REKLAMA