Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Pascal] Dwie tablice, wyszukiwanie minimum i sortowanie "kopiowaniem"

giedymin33 09 Mar 2018 10:34 399 8
  • #1 09 Mar 2018 10:34
    giedymin33
    Poziom 3  

    Witam, otóż posiadam dwie tablice liczb całkowitych.
    Potrzebuję jakieś nakierowanie, gdyż do jednej losuję z pewnego zakresu liczby, znajduję minimum...

    Teraz potrzebuję te minimum wpisać do drugiej tablicy(wskaźników) tyle razy(bez powtarzania sie wartosci), aby ona była posortowana od najmniejszego do największego.

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Znalezienie minimum w pierwszej, to nie problem.
    Mam zapamiętać wskaźnik najmniejszej w 1 toku wykonania pętli i wpisać go do tablicy wskaźników. Tak do uzyskania posortowanej drugiej tablicy według wartości ewentualnie adresu zmiennej.

    Czyli :
    tablica z elementami [5,2,3,1,4]
    tablica wskaźników po wykonaniu petli [1,2,3,4,5];
    Najmniejszy element ma być wpisany na pierwszą pozycję w tablicy, potem analogicznie wszystko uporządkowane

    0 8
  • Pomocny post
    #2 09 Mar 2018 10:56
    viayner
    Poziom 34  

    Witam,
    nie bardzo nadazam za twoim rozumowaniem:
    - masz tablice z praypadkowymi wartosciami
    - znajdujesz minimum w tej tablicy i co ? ->"Teraz potrzebuję te minimum wpisać do drugiej tablicy(wskaźników) tyle razy(bez powtarzania sie wartosci), aby ona była posortowana od najmniejszego do największego." - co chcesz z tym zrobic ?
    Czy minimum to najmniejsza wartos ? ale minimum to chyba jedno ? czy szukasz ewentualnie wielu wystapien tej samej minimalnej wartosci ?
    - Jezeli ten przyklad na koncu jest poprawny to czemu nie zrobisz tak:
    - tablica wskaznikow to poprostu posortowana tablica danych
    - jezeli musisz wiedziec ile razy dana wartosc minimalna wystapila to poprostu policz pierwsze identyczne elementy w tablicy wynikow.
    Pozdrawiam

    0
  • #3 09 Mar 2018 11:03
    giedymin33
    Poziom 3  

    Chodzi o to, że do pierwszej tablicy losuję dane przykładowo z zakresu <0;100>.
    Przeszukuję tę tablicę po to aby znaleźć w niej wartość najmniejszą >> min.
    Zapamiętuję jej wskaźnik i umieszczam go na pierwszej pozycji w drugiej tablicy.
    Potem znów szukam najmniejszej w pierwszej tablicy wykluczając znalezioną wcześniejszą "najmniejszą" >> zapamiętuję jej wskaźnik i to już jest druga pozycja w tabeli wskaźników.
    Tak do przepisania wszystkich wartości do tablicy wskaźników, gdzie już dane będą uporządkowane.

    0
  • #4 09 Mar 2018 11:51
    viayner
    Poziom 34  

    Witam,
    Juz lepiej ale nie do konca:
    - wskazniki to tablica z posortowanymi danymi z pierwszej tablicy czy wskazniki=pozycje wystapienia od najmniejszej wartosci ?
    czyli: dane(4,1,7,3,2) tu wkazniki maja wygladac tak: wskazniki(1,2,3,4,7) - posortowana tablica dane
    czy raczej: dane(4,1,7,3,2) tu wkazniki maja wygladac tak: wskazniki(2,5,4,1,3) - pozycje wystapienia elementow od najmniejszego
    Moze daj przyklad na konkretnych danych co gdzie ma byc.
    Pozdrawiam

    0
  • #5 09 Mar 2018 11:55
    giedymin33
    Poziom 3  

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Dodaję cały kod i treść zadania:

    Cytat:
    Jedna to tablica liczb całkowitych, druga to
    tablica wskaźników na liczby całkowite. Napisz funkcje, która ustala wartości losowe pierwszej
    tablicy. Przeprowadź
    proste przeszukiwanie tablicy liczb w celu odszukania najmniejszej i zapamiętaj
    jej wskaźnik w tablicy wskaźników. Potem poszukaj kolejnej, i ponownie zapamię
    taj jej wskaźnik na
    następnym miejscu w tablicy
    wskaźników. W ten sposób utwórz tablicę
    wskaźników do swoich
    pierwotnych danych, ale wskazujących w taki sposób, aby dane zostały odczytane za ich
    pomocą w uporządkowany sposób.


    Chcę to zrobić w miarę sam, jeszcze nie jestem pewny czy dobrze te wskaźniki ustalam...[/code]

    0
  • #6 09 Mar 2018 12:53
    viayner
    Poziom 34  

    Witam,
    no to juz jasne tak jak myslalem, dane() to dane przypadkowe a wskazniki() ich polozenia ale w wersji posortowanej od najmniejszej.
    Wykozystaj dowolna metode sortowania ale nie zmieniasz polozenia elementu w oryginalnej tablicy dane() tylko miejsce wystapienia wpisujesz do tablicy wskazniki() i gotowe. Dla ulatwienia mozesz uzyc tablicy dodatkowej gdzie przechowujesz zmodyfikowane dane - np. usuwasz znaleziony element abys go nie liczyl ponownie, to moze nie eleganckie ale proste podejscie.
    Pozdrawiam

    0
  • #7 09 Mar 2018 13:19
    giedymin33
    Poziom 3  

    No właśnie nie wiem, czy prowadzącemu chodzi sortowanie ich już w tablicy :/

    0
  • #8 09 Mar 2018 13:29
    viayner
    Poziom 34  

    Witam,
    z tego co ja widze nie, masz tablice dane() z danymi a tablica wskazniki() to pozycje ich wystapienia posortowane od najmniejszej wartosci czyli cos w stylu:
    DANE(4,1,7,3,8) wiec wskazniki maja wygladac tak (2,4,1,3,5) czyli pozycje gdzie wystepuje najmniejsza wartosc dalej kolejna najmniejsza itd.
    Pozdrawiam

    0
  • #9 12 Mar 2018 09:44
    kinggustav
    Poziom 20  

    1. Po co dwa razy deklarujesz dokładnie taki sam typ danych? To niepotrzebne, a w pewnych sytuacjach może powodować błędy.
    2. Z treści zadania wynika, że w drugiej tablicy masz mieć nie integer a wskaźniki do integer. Więc dwie deklaracje tablic są potrzebne, ale jednak nieco inne.
    3. Po co to New i Dispose. Miała być tablica wskaźników, nigdzie nie napisane, że dynamiczna. Dyskusyjne jest stosowanie ^integer, ale nie ty to wymyśliłeś.
    4. Nie możesz raz używać tablicy wskaznik jako dynamicznej (New), a potem jako zwykłej. Pascal wymaga konsekwencji.
    5. Nie możesz zmieniać wartości w 1 tablicy, jeżeli nie masz kopii w 2, bo stracisz dane. Wskaźnik to nie kopia.
    5. Drukowanie wskaźników (zakładam, że tam jednak będą wskaźniki) nie jest dobrym pomysłem, poznasz tylko kilka nic nie mówiących adresów.

    0